From b78162d24cb9cdb23887fa50e62c6d9396dcecf3 Mon Sep 17 00:00:00 2001 From: Paul Dix Date: Sun, 19 Jan 2025 18:07:40 -0500 Subject: [PATCH 01/22] Add plugin documentation for Core and Enterprise --- .ci/remark-lint/yarn.lock | 698 +++++++++++------------ api-docs/yarn.lock | 4 +- content/influxdb3/core/plugins.md | 14 + content/influxdb3/enterprise/plugins.md | 14 + content/shared/v3-core-plugins/_index.md | 297 ++++++++++ yarn.lock | 626 ++++++++++---------- 6 files changed, 980 insertions(+), 673 deletions(-) create mode 100644 content/influxdb3/core/plugins.md create mode 100644 content/influxdb3/enterprise/plugins.md create mode 100644 content/shared/v3-core-plugins/_index.md diff --git a/.ci/remark-lint/yarn.lock b/.ci/remark-lint/yarn.lock index 815edb323..f9fd70bbd 100644 --- a/.ci/remark-lint/yarn.lock +++ b/.ci/remark-lint/yarn.lock @@ -4,7 +4,7 @@ "@apidevtools/json-schema-ref-parser@11.1.0": version "11.1.0" - resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.1.0.tgz#0608ed1ba47c377c6732e7185f2ea06731b58fde" + resolved "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.1.0.tgz" integrity sha512-g/VW9ZQEFJAOwAyUb8JFf7MLiLy2uEB4rU270rGzDwICxnxMlPy0O11KVePSgS36K1NI29gSlK84n5INGhd4Ag== dependencies: "@jsdevtools/ono" "^7.1.3" @@ -15,7 +15,7 @@ "@babel/code-frame@^7.21.4": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: "@babel/highlight" "^7.24.7" @@ -23,12 +23,12 @@ "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/highlight@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: "@babel/helper-validator-identifier" "^7.24.7" @@ -38,7 +38,7 @@ "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -50,12 +50,12 @@ "@jsdevtools/ono@^7.1.3": version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + resolved "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== "@npmcli/config@^8.0.0": version "8.3.4" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-8.3.4.tgz#e2712c2215bb2659f39718b23bf7401f9ac1da59" + resolved "https://registry.npmjs.org/@npmcli/config/-/config-8.3.4.tgz" integrity sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw== dependencies: "@npmcli/map-workspaces" "^3.0.2" @@ -69,7 +69,7 @@ "@npmcli/git@^5.0.0": version "5.0.8" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz" integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== dependencies: "@npmcli/promise-spawn" "^7.0.0" @@ -84,7 +84,7 @@ "@npmcli/map-workspaces@^3.0.2": version "3.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz" integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== dependencies: "@npmcli/name-from-folder" "^2.0.0" @@ -94,12 +94,12 @@ "@npmcli/name-from-folder@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== "@npmcli/package-json@^5.1.1": version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz" integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== dependencies: "@npmcli/git" "^5.0.0" @@ -112,132 +112,125 @@ "@npmcli/promise-spawn@^7.0.0": version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz" integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== dependencies: which "^4.0.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@types/concat-stream@^2.0.0": version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-2.0.3.tgz#1f5c2ad26525716c181191f7ed53408f78eb758e" + resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz" integrity sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ== dependencies: "@types/node" "*" "@types/debug@^4.0.0": version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/estree-jsx@^1.0.0": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== dependencies: "@types/estree" "*" "@types/estree@*": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/hast@^3.0.0": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" "@types/is-empty@^1.0.0": version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/is-empty/-/is-empty-1.2.3.tgz#a2d55ea8a5ec57bf61e411ba2a9e5132fe4f0899" + resolved "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz" integrity sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw== "@types/json-schema@^7.0.13": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash.clonedeep@^4.5.7": version "4.5.9" - resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz#ea48276c7cc18d080e00bb56cf965bcceb3f0fc1" + resolved "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz" integrity sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q== dependencies: "@types/lodash" "*" "@types/lodash@*": version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz" integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== "@types/mdast@^4.0.0": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/ms@*": version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node@*": - version "22.0.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.2.tgz#9fb1a2b31970871e8bf696f0e8a40d2e6d2bd04e" - integrity sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ== - dependencies: - undici-types "~6.11.1" - -"@types/node@^20.0.0": +"@types/node@*", "@types/node@^20.0.0": version "20.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.13.tgz#bf4fe8959ae1c43bc284de78bd6c01730933736b" + resolved "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz" integrity sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w== dependencies: undici-types "~5.26.4" "@types/supports-color@^8.0.0": version "8.1.3" - resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.3.tgz#b769cdce1d1bb1a3fa794e35b62c62acdf93c139" + resolved "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz" integrity sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg== "@types/text-table@^0.2.0": version "0.2.5" - resolved "https://registry.yarnpkg.com/@types/text-table/-/text-table-0.2.5.tgz#f9c609b81c943e9fc8d73ef82ad2f2a78be5f53b" + resolved "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.5.tgz" integrity sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA== "@types/unist@*", "@types/unist@^3.0.0": version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz" integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== "@types/unist@^2.0.0": version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== abbrev@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== ajv-formats@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" -ajv@8.12.0: +ajv@^8.0.0, ajv@8.12.0: version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -245,48 +238,38 @@ ajv@8.12.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^8.0.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -294,51 +277,51 @@ anymatch@~3.1.2: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== bail@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== ccount@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -347,32 +330,32 @@ chalk@^2.4.2: chalk@^5.0.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== character-entities-html4@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== character-entities-legacy@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== character-entities@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== character-reference-invalid@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== chokidar@^3.0.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -387,46 +370,46 @@ chokidar@^3.0.0: ci-info@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz" integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== collapse-white-space@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" + resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + comma-separated-tokens@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -436,7 +419,7 @@ concat-stream@^2.0.0: cross-spawn@^7.0.0: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -445,104 +428,99 @@ cross-spawn@^7.0.0: debug@^4.0.0: version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz" integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" decode-named-character-reference@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== dependencies: character-entities "^2.0.0" dequal@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== devlop@^1.0.0, devlop@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: dequal "^2.0.0" eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== emoji-regex@^10.2.1: version "10.3.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz" integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== extend@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== - fault@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== dependencies: format "^0.2.0" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up@6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" @@ -550,7 +528,7 @@ find-up@6.3.0: foreground-child@^3.1.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz" integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" @@ -558,24 +536,24 @@ foreground-child@^3.1.0: format@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^10.0.0, glob@^10.2.2: version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -587,44 +565,44 @@ glob@^10.0.0, glob@^10.2.2: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== hosted-git-info@^7.0.0: version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz" integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" ignore@^5.0.0: version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-meta-resolve@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz" integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== inherits@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^4.1.2, ini@^4.1.3: version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz" integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== is-alphabetical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== is-alphanumerical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== dependencies: is-alphabetical "^2.0.0" @@ -632,76 +610,76 @@ is-alphanumerical@^2.0.0: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^2.0.0: version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== is-decimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== is-empty@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" + resolved "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz" integrity sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-hexadecimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isexe@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -710,39 +688,39 @@ jackspeak@^3.1.2: js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-parse-even-better-errors@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz" integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^2.0.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== lines-and-columns@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== load-plugin@^6.0.0: version "6.0.3" - resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-6.0.3.tgz#b0eb8ea2361744f0e54850ccbc4c8a2d94ffabe3" + resolved "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.3.tgz" integrity sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w== dependencies: "@npmcli/config" "^8.0.0" @@ -750,34 +728,34 @@ load-plugin@^6.0.0: locate-path@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== longest-streak@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== markdown-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" + resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== mdast-comment-marker@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz#8233f27c985ac7be53678ecb453dd9648fa1b5c5" + resolved "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz" integrity sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA== dependencies: "@types/mdast" "^4.0.0" @@ -785,7 +763,7 @@ mdast-comment-marker@^3.0.0: mdast-util-directive@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f" + resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz" integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== dependencies: "@types/mdast" "^4.0.0" @@ -799,7 +777,7 @@ mdast-util-directive@^3.0.0: mdast-util-from-markdown@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz#32a6e8f512b416e1f51eb817fc64bd867ebcd9cc" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz" integrity sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA== dependencies: "@types/mdast" "^4.0.0" @@ -817,7 +795,7 @@ mdast-util-from-markdown@^2.0.0: mdast-util-frontmatter@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== dependencies: "@types/mdast" "^4.0.0" @@ -829,14 +807,14 @@ mdast-util-frontmatter@^2.0.0: mdast-util-heading-style@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz#f1a02b2d0950e8535713f54de5ee0eea82413f51" + resolved "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz" integrity sha512-tsUfM9Kj9msjlemA/38Z3pvraQay880E3zP2NgIthMoGcpU9bcPX9oSM6QC/+eFXGGB4ba+VCB1dKAPHB7Veug== dependencies: "@types/mdast" "^4.0.0" mdast-util-mdx-expression@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz#4968b73724d320a379110d853e943a501bfd9d87" + resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz" integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== dependencies: "@types/estree-jsx" "^1.0.0" @@ -848,7 +826,7 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-mdx-jsx@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz#daae777c72f9c4a106592e3025aa50fb26068e1b" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz" integrity sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA== dependencies: "@types/estree-jsx" "^1.0.0" @@ -867,7 +845,7 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-mdx@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== dependencies: mdast-util-from-markdown "^2.0.0" @@ -878,7 +856,7 @@ mdast-util-mdx@^3.0.0: mdast-util-mdxjs-esm@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== dependencies: "@types/estree-jsx" "^1.0.0" @@ -890,7 +868,7 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-phrasing@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== dependencies: "@types/mdast" "^4.0.0" @@ -898,7 +876,7 @@ mdast-util-phrasing@^4.0.0: mdast-util-to-markdown@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4" + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== dependencies: "@types/mdast" "^4.0.0" @@ -912,14 +890,14 @@ mdast-util-to-markdown@^2.0.0: mdast-util-to-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== dependencies: "@types/mdast" "^4.0.0" micromark-core-commonmark@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz" integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== dependencies: decode-named-character-reference "^1.0.0" @@ -941,7 +919,7 @@ micromark-core-commonmark@^2.0.0: micromark-extension-frontmatter@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== dependencies: fault "^2.0.0" @@ -951,7 +929,7 @@ micromark-extension-frontmatter@^2.0.0: micromark-factory-destination@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz" integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== dependencies: micromark-util-character "^2.0.0" @@ -960,7 +938,7 @@ micromark-factory-destination@^2.0.0: micromark-factory-label@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz" integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== dependencies: devlop "^1.0.0" @@ -970,7 +948,7 @@ micromark-factory-label@^2.0.0: micromark-factory-space@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz" integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== dependencies: micromark-util-character "^2.0.0" @@ -978,7 +956,7 @@ micromark-factory-space@^2.0.0: micromark-factory-title@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz" integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== dependencies: micromark-factory-space "^2.0.0" @@ -988,7 +966,7 @@ micromark-factory-title@^2.0.0: micromark-factory-whitespace@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz" integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== dependencies: micromark-factory-space "^2.0.0" @@ -998,7 +976,7 @@ micromark-factory-whitespace@^2.0.0: micromark-util-character@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== dependencies: micromark-util-symbol "^2.0.0" @@ -1006,14 +984,14 @@ micromark-util-character@^2.0.0: micromark-util-chunked@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz" integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz" integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== dependencies: micromark-util-character "^2.0.0" @@ -1022,7 +1000,7 @@ micromark-util-classify-character@^2.0.0: micromark-util-combine-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz" integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== dependencies: micromark-util-chunked "^2.0.0" @@ -1030,14 +1008,14 @@ micromark-util-combine-extensions@^2.0.0: micromark-util-decode-numeric-character-reference@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz" integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== dependencies: decode-named-character-reference "^1.0.0" @@ -1047,31 +1025,31 @@ micromark-util-decode-string@^2.0.0: micromark-util-encode@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz" integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== micromark-util-html-tag-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz" integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== micromark-util-normalize-identifier@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz" integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz" integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz" integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== dependencies: micromark-util-character "^2.0.0" @@ -1080,7 +1058,7 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-subtokenize@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz" integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== dependencies: devlop "^1.0.0" @@ -1090,17 +1068,17 @@ micromark-util-subtokenize@^2.0.0: micromark-util-symbol@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz" integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== micromark-util-types@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz" integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== micromark@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz" integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== dependencies: "@types/debug" "^4.0.0" @@ -1121,45 +1099,45 @@ micromark@^4.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" -minimatch@9.0.3: +minimatch@^9.0.0, minimatch@9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.4: +minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.0.0: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nopt@^7.2.1: version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz" integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: abbrev "^2.0.0" normalize-package-data@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz" integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== dependencies: hosted-git-info "^7.0.0" @@ -1168,24 +1146,24 @@ normalize-package-data@^6.0.0: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-install-checks@^6.0.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz" integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" npm-normalize-package-bin@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== npm-package-arg@^11.0.0: version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz" integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== dependencies: hosted-git-info "^7.0.0" @@ -1195,7 +1173,7 @@ npm-package-arg@^11.0.0: npm-pick-manifest@^9.0.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz" integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== dependencies: npm-install-checks "^6.0.0" @@ -1205,26 +1183,26 @@ npm-pick-manifest@^9.0.0: p-limit@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" package-json-from-dist@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== parse-entities@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz" integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== dependencies: "@types/unist" "^2.0.0" @@ -1238,7 +1216,7 @@ parse-entities@^4.0.0: parse-json@^7.0.0: version "7.1.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz" integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== dependencies: "@babel/code-frame" "^7.21.4" @@ -1249,17 +1227,17 @@ parse-json@^7.0.0: path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -1267,32 +1245,32 @@ path-scurry@^1.11.1: picocolors@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== proc-log@^4.0.0, proc-log@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz" integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -1300,17 +1278,17 @@ promise-retry@^2.0.1: punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== quotation@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/quotation/-/quotation-2.0.3.tgz#b94c05128209a63b40b4e20e0f8f1a38adea7e0b" + resolved "https://registry.npmjs.org/quotation/-/quotation-2.0.3.tgz" integrity sha512-yEc24TEgCFLXx7D4JHJJkK4JFVtatO8fziwUxY4nB/Jbea9o9CVS3gt22mA0W7rPYAGW2fWzYDSOtD94PwOyqA== read-package-json-fast@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: json-parse-even-better-errors "^3.0.0" @@ -1318,7 +1296,7 @@ read-package-json-fast@^3.0.0: readable-stream@^3.0.2: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -1327,14 +1305,14 @@ readable-stream@^3.0.2: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" remark-cli@12.0.1: version "12.0.1" - resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-12.0.1.tgz#991ede01adfdf0471177c381168105da4b93f99a" + resolved "https://registry.npmjs.org/remark-cli/-/remark-cli-12.0.1.tgz" integrity sha512-2NAEOACoTgo+e+YAaCTODqbrWyhMVmlUyjxNCkTrDRHHQvH6+NbrnqVvQaLH/Q8Ket3v90A43dgAJmXv8y5Tkw== dependencies: import-meta-resolve "^4.0.0" @@ -1344,7 +1322,7 @@ remark-cli@12.0.1: remark-frontmatter@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" + resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== dependencies: "@types/mdast" "^4.0.0" @@ -1354,7 +1332,7 @@ remark-frontmatter@5.0.0: remark-lint-blockquote-indentation@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-4.0.0.tgz#8b3860881c224d8e3f017ec516acf37dd2df1c03" + resolved "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-4.0.0.tgz" integrity sha512-hdUvn+KsJbBKpY9jLY01PmfpJ/WGhLu9GJMXQGU8ADXJc+F5DWSgKAr6GQ1IUKqvGYdEML/KZ61WomWFUuecVA== dependencies: "@types/mdast" "^4.0.0" @@ -1366,7 +1344,7 @@ remark-lint-blockquote-indentation@^4.0.0: remark-lint-checkbox-character-style@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-5.0.0.tgz#f41628a77bb3062391c3c2cdaa639e7be6719416" + resolved "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-5.0.0.tgz" integrity sha512-K0G/Nok59fb2q5KUxcemBVt+ymnhTkDVLJAatZ4PAh9At8y0DGctHdU27jWsuvO0Fs7Zy62Usk7IJE2VO89p1w== dependencies: "@types/mdast" "^4.0.0" @@ -1378,7 +1356,7 @@ remark-lint-checkbox-character-style@^5.0.0: remark-lint-code-block-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-4.0.0.tgz#cd85582e11a5182fcbca59a1591e39c6867d2bcc" + resolved "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-4.0.0.tgz" integrity sha512-LKBKMVruEO0tzDnnnqi1TfUcnwY6Mo7cVtZM4E4pKt3KMhtvgU2wD68/MxDOEJd0pmnLrEgIadv74bY0gWhZpg== dependencies: "@types/mdast" "^4.0.0" @@ -1390,7 +1368,7 @@ remark-lint-code-block-style@^4.0.0: remark-lint-definition-case@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-4.0.0.tgz#28048d2e75c890bd18e6cc6f7bb9a0e29783566b" + resolved "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-4.0.0.tgz" integrity sha512-XBmMmj8ii0KZUuJf7ZaVXDGp2+DWE02re9qn/6mV23rBpsDmpz7U1lQWRlwFQIE5q5bxIxP5pX7hDeTH0Egy9Q== dependencies: "@types/mdast" "^4.0.0" @@ -1400,7 +1378,7 @@ remark-lint-definition-case@^4.0.0: remark-lint-definition-spacing@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-4.0.0.tgz#c12a74bb079efc27d57a852337d87cc42ddc7e50" + resolved "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-4.0.0.tgz" integrity sha512-t6nP8unz6z/DLBTWeOmDFHPFbX3E2PbNgt2fTazRbVnMC6z3o25hBzg5hI6DL0MPt2ZTRX++rJsGRjb+vgh/tQ== dependencies: "@types/mdast" "^4.0.0" @@ -1412,7 +1390,7 @@ remark-lint-definition-spacing@^4.0.0: remark-lint-emphasis-marker@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-4.0.0.tgz#9d2f6515116479641ec6e602e3c8e7276a81c165" + resolved "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-4.0.0.tgz" integrity sha512-xIRiB4PFWUOyIslN/UOPL6Lh+J0VD4R11+jo+W4hpGMNsg58l+2SgtdbinlXzDeoBxmaaka9n/sYpJ7cJWEIPQ== dependencies: "@types/mdast" "^4.0.0" @@ -1423,7 +1401,7 @@ remark-lint-emphasis-marker@^4.0.0: remark-lint-fenced-code-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz#32876ea1a53958fba1109c9d8ebe1e890b26f3d9" + resolved "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz" integrity sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg== dependencies: "@types/mdast" "^4.0.0" @@ -1435,7 +1413,7 @@ remark-lint-fenced-code-flag@^4.0.0: remark-lint-fenced-code-marker@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-4.0.0.tgz#eb2587fdc7711fb890e646d5902761c54c2f88ce" + resolved "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-4.0.0.tgz" integrity sha512-WFN88Rx78m4/HSbW3Kx2XAYbVfzYns4bJd9qpwDD90DA3nc59zciYd01xi6Bk3n9vSs5gIlmG7xkwxVHHJ8KCA== dependencies: "@types/mdast" "^4.0.0" @@ -1447,7 +1425,7 @@ remark-lint-fenced-code-marker@^4.0.0: remark-lint-file-extension@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-3.0.0.tgz#2277a9f6d57ea3a824d46487e88003fcea1d20ac" + resolved "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-3.0.0.tgz" integrity sha512-wrOKiGvcl/ftB7FkeX2/l13ALvhKXV77HGR8AXo86cVY2pD+K0WdOC52DV3ldgpUXpWzE9kcgF8bbkxwzKpFFg== dependencies: "@types/mdast" "^4.0.0" @@ -1456,7 +1434,7 @@ remark-lint-file-extension@^3.0.0: remark-lint-final-definition@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-4.0.1.tgz#3cdad27cdc03491666efdad24bf03469a70f33f4" + resolved "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-4.0.1.tgz" integrity sha512-51T9oSdA7wuhjSdgGo0snO1BY39Igt9cJQi7XpgtgFsbfQk8zSSAUAc/rLabY6+YCTpcPs6qmwvLXZ4mPX6Qlg== dependencies: "@types/mdast" "^4.0.0" @@ -1470,7 +1448,7 @@ remark-lint-final-definition@^4.0.0: remark-lint-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-final-newline/-/remark-lint-final-newline-3.0.0.tgz#f436b4c228ae088b80072f7c3eac97678232e10a" + resolved "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-3.0.0.tgz" integrity sha512-NaPyn6FiOn3IV/6gIcwWfJmgraPT2IaVLjhakfPglZkKVfn/FrOfETyY8Bp+HLoSRI9967OH0yRDnK7/pPIWeQ== dependencies: "@types/mdast" "^4.0.0" @@ -1480,7 +1458,7 @@ remark-lint-final-newline@^3.0.0: remark-lint-frontmatter-schema@3.15.4: version "3.15.4" - resolved "https://registry.yarnpkg.com/remark-lint-frontmatter-schema/-/remark-lint-frontmatter-schema-3.15.4.tgz#8ec05a5fe4e08f5077ef66ba91f9639d4cc3a0bb" + resolved "https://registry.npmjs.org/remark-lint-frontmatter-schema/-/remark-lint-frontmatter-schema-3.15.4.tgz" integrity sha512-egChkbtCCG4hw1F2qoipzSxp6Ea9z4pxaVkWYa36DnCZ9fn3GhCNyOUjbFSIvdhVcWN+AqvHdqPbXC9Pp81Hmg== dependencies: "@apidevtools/json-schema-ref-parser" "11.1.0" @@ -1493,7 +1471,7 @@ remark-lint-frontmatter-schema@3.15.4: remark-lint-hard-break-spaces@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.0.0.tgz#6392f242a4188b346ed196a6e8c6834af1a31c82" + resolved "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.0.0.tgz" integrity sha512-zCTq7/xfM0ZL3bMopXse9DH2nk38wE1LrxmYwnTrqASBLnEAJWE2U2//tRGVMEBfSAnNvmIo96twz6zkLWjbGA== dependencies: "@types/mdast" "^4.0.0" @@ -1503,7 +1481,7 @@ remark-lint-hard-break-spaces@^4.0.0: remark-lint-heading-increment@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz#3dfe78334dfafc8e856e5396bc1f9f9ced36e441" + resolved "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz" integrity sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg== dependencies: "@types/mdast" "^4.0.0" @@ -1515,7 +1493,7 @@ remark-lint-heading-increment@^4.0.0: remark-lint-heading-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz#9c7b5b8fb210132ac2db8e541efc10569c2cef66" + resolved "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz" integrity sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q== dependencies: "@types/mdast" "^4.0.0" @@ -1528,7 +1506,7 @@ remark-lint-heading-style@^4.0.0: remark-lint-link-title-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-4.0.0.tgz#4f78f9ba7178e095aa15b882e5ecdf720f05942a" + resolved "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-4.0.0.tgz" integrity sha512-cihTO5dkhjMj/evYIDAvRdQHD82OQeF4fNAq8FLb81HmFKo77VlSF6CK55H1bvlZogfJG58uN/5d1tSsOdcEbg== dependencies: "@types/mdast" "^4.0.0" @@ -1539,7 +1517,7 @@ remark-lint-link-title-style@^4.0.0: remark-lint-list-item-bullet-indent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.0.tgz#1b2428c49e3220795aafec535e96da85d54d4a26" + resolved "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.0.tgz" integrity sha512-qq22QaxsDjfsL7aWGIPmP3P0N99CJBQQW1+iSrhYAMCDzqVlw6I3wPNAeR6s8mcoeHT8YlT6eQH3V8xJ0SlW6w== dependencies: "@types/mdast" "^4.0.0" @@ -1549,7 +1527,7 @@ remark-lint-list-item-bullet-indent@^5.0.0: remark-lint-list-item-content-indent@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-4.0.0.tgz#2aa75671757ad9b183eec5a334e251d50de8c527" + resolved "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-4.0.0.tgz" integrity sha512-L4GZgWQQ54qWKbnDle3dbEOtnq+qdmZJ70lpM3yMFEMHs4xejqPKsIoiYeUtIV0rYHHCWS7IlLzcgYUK9vENQw== dependencies: "@types/mdast" "^4.0.0" @@ -1562,7 +1540,7 @@ remark-lint-list-item-content-indent@^4.0.0: remark-lint-list-item-indent@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.0.tgz#d72e7ef4c7ea238987e5475e33439b7efbe46389" + resolved "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.0.tgz" integrity sha512-Yd6/g8CH9e4vlPAPNgl7F575uKhP+pTo/qwGkE61GOcgEVNJ/529hjumUhyQ4sOAX0YAPAjxvq6fJvb4AhVOOA== dependencies: "@types/mdast" "^4.0.0" @@ -1574,7 +1552,7 @@ remark-lint-list-item-indent@^4.0.0: remark-lint-list-item-spacing@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-5.0.0.tgz#a95a4b8824b3f50f5cd6d5a33f99275f63c04f4f" + resolved "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-5.0.0.tgz" integrity sha512-d6p+1tcwNE+Pp6Tu2DwiKlyC1zYY3f1igL6AlcBIH0RmROVEfZR4IDFH/LcVyTkzqh1lPMFAJXWK4bpScpcO3g== dependencies: "@types/mdast" "^4.0.0" @@ -1587,7 +1565,7 @@ remark-lint-list-item-spacing@^5.0.0: remark-lint-maximum-heading-length@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-4.0.0.tgz#29b6adcc319bde4374429e9e39487d94a476543b" + resolved "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-4.0.0.tgz" integrity sha512-UCQxUd0zZyi6RUbpoK5KsxC50ppVqVk0hSgrSPot4wB6PHRgYMALU2fDkEcAjLDc/Y2TayG3IaZEKdqe+84Cwg== dependencies: "@types/mdast" "^4.0.0" @@ -1599,7 +1577,7 @@ remark-lint-maximum-heading-length@^4.0.0: remark-lint-maximum-line-length@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-4.0.1.tgz#4c5c347b6dd15653aba7ef0cc81971f3dd08a630" + resolved "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-4.0.1.tgz" integrity sha512-hQlh8UrRfhkO4FU7z7t1Bu5ethj1y2iBncO5AOWF38RAmlHaZdB2lQxNA8IvUZITGJYpT1aThdFTEf+58lv08Q== dependencies: "@types/mdast" "^4.0.0" @@ -1611,7 +1589,7 @@ remark-lint-maximum-line-length@^4.0.0: remark-lint-no-blockquote-without-marker@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.0.tgz#cc243d86f6548492150b5a7871f99afad9653973" + resolved "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.0.tgz" integrity sha512-fBhoTpkWcl5tG4FdwPdJIyb8XLrdr6MdLk1+K2BQ6Rom3rRsIYvuox4ohxOunNrXuth8xyw8kC6wDmODR44oFw== dependencies: "@types/mdast" "^4.0.0" @@ -1626,7 +1604,7 @@ remark-lint-no-blockquote-without-marker@^6.0.0: remark-lint-no-consecutive-blank-lines@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-5.0.0.tgz#bbfbdcdc2e228b6379b7268ac489a56b6e07d1a0" + resolved "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-5.0.0.tgz" integrity sha512-HsDZbFlelBVO3mEJDXd9v4z0HLB8pqxWnsV+I4ILYFp5lKYf6NxJaLBWFtP1gAg1+95WxityGLkGtYqmicDjpg== dependencies: "@types/mdast" "^4.0.0" @@ -1640,7 +1618,7 @@ remark-lint-no-consecutive-blank-lines@^5.0.0: remark-lint-no-duplicate-definitions@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.0.tgz#ac9ff0f7dd373fd58521f57406625e03ef40ce42" + resolved "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.0.tgz" integrity sha512-21fcOACkCyhNsHkedKlpvqIywYx+5zGR507bW8e59gzdGhTbnBwQ9du4ACmN9jxPTfIBhUVMz0bWezkGrHE7Bg== dependencies: "@types/mdast" "^4.0.0" @@ -1652,7 +1630,7 @@ remark-lint-no-duplicate-definitions@^4.0.0: remark-lint-no-duplicate-headings@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-4.0.0.tgz#0b5b4150b984d68a294359781728d9cca060e2a5" + resolved "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-4.0.0.tgz" integrity sha512-FgBU/JCdR5MitHM+hnOcgBGO5ZCNV8epzuHIglFlJeb8ow23YhhNgmGvyk7RGrZrYuU5R9uQq23N4dF0g9atCA== dependencies: "@types/mdast" "^4.0.0" @@ -1665,7 +1643,7 @@ remark-lint-no-duplicate-headings@^4.0.0: remark-lint-no-emphasis-as-heading@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-4.0.0.tgz#85daf2b230ec464f6edd255e80ae36e6a20e0b37" + resolved "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-4.0.0.tgz" integrity sha512-JViGYbuO/xzZThK+qVTNjtLM0v1xMTWFTWt2OJzAkDaGS6T9ZB5ZtRVSBFEMG0SF3dvpJwxe+3ABTsuPBdlYsA== dependencies: "@types/mdast" "^4.0.0" @@ -1675,7 +1653,7 @@ remark-lint-no-emphasis-as-heading@^4.0.0: remark-lint-no-file-name-articles@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-3.0.0.tgz#3061b26a0992331a93c5082f8f2826d5f2c17a2a" + resolved "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-3.0.0.tgz" integrity sha512-il4IseupahbV2TVfFjfDVL/EQw7jBWVlMVsv4K2cgl5uPIjiCjFGQypqKnWl6pZDN0oNOs/DE8gBdyuDjldJaA== dependencies: "@types/mdast" "^4.0.0" @@ -1683,7 +1661,7 @@ remark-lint-no-file-name-articles@^3.0.0: remark-lint-no-file-name-consecutive-dashes@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-3.0.0.tgz#930d90fe2795afc6fab6b6995235d166b806c4f3" + resolved "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-3.0.0.tgz" integrity sha512-3vSI1LOQlu8NSCpWLsKELa8dS9HU+YVZE0U43/DNkdEcnZmlJLpTHQjBTMZUHQipRgoOO+TOSyXFyN/H+2lbuQ== dependencies: "@types/mdast" "^4.0.0" @@ -1691,7 +1669,7 @@ remark-lint-no-file-name-consecutive-dashes@^3.0.0: remark-lint-no-file-name-irregular-characters@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-3.0.0.tgz#8460f6924ab30200c383f8b1fb9077d3785607bd" + resolved "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-3.0.0.tgz" integrity sha512-DhGreliHNU7lLTARQujsaLAn8fUPY0V+H0LSmOUuowBZPtIRWeNdQhunSp96RvsuYdqAdERXe0WuH58i3pRqrg== dependencies: "@types/mdast" "^4.0.0" @@ -1699,7 +1677,7 @@ remark-lint-no-file-name-irregular-characters@^3.0.0: remark-lint-no-file-name-mixed-case@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-3.0.0.tgz#8b911007d0b9e1e24ec4a93527b03d83b63a6e0c" + resolved "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-3.0.0.tgz" integrity sha512-MXXNHdGB6P46itkf8gRP0kxQL85KfAj9YOOBqNtGsgI/8J5rsyM/rz1Ac20Xe+5C5oGi71+7EO/TExKu/+7dfw== dependencies: "@types/mdast" "^4.0.0" @@ -1707,7 +1685,7 @@ remark-lint-no-file-name-mixed-case@^3.0.0: remark-lint-no-file-name-outer-dashes@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-3.0.0.tgz#9bae02f4ecddb59d20e8977a62deb13ebe3ee230" + resolved "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-3.0.0.tgz" integrity sha512-3kgamCp39mdlCtqF/+JLwwS4VpSj5wvVwRythUfrpW7993I9kF67dBsaU545aEzWSK+UJZqjb40i0m2VfnBRfQ== dependencies: "@types/mdast" "^4.0.0" @@ -1715,7 +1693,7 @@ remark-lint-no-file-name-outer-dashes@^3.0.0: remark-lint-no-heading-content-indent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.0.tgz#a83956dab3675dfe032ac1a7523d874be6185121" + resolved "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.0.tgz" integrity sha512-psYSlD2BjcVkgpeXOLwPcYFBrbtJWp8E8JX1J4vSfoHPeY6aIxgYxXkf57cjGTApfRL8xawBmMDiF1FgQvpZYg== dependencies: "@types/mdast" "^4.0.0" @@ -1727,7 +1705,7 @@ remark-lint-no-heading-content-indent@^5.0.0: remark-lint-no-heading-punctuation@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-4.0.0.tgz#da19bc0fb6d76e443067429b4cc15660bc392d3e" + resolved "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-4.0.0.tgz" integrity sha512-7V23C3Q4yX9zEOLZdbv6o8wVxxeWB/F+h9by55zPyk2AwbqF2t2xevnAmN3XFmKZABDTqLwjQxtK6bCVv/S1PQ== dependencies: "@types/mdast" "^4.0.0" @@ -1738,7 +1716,7 @@ remark-lint-no-heading-punctuation@^4.0.0: remark-lint-no-literal-urls@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.0.tgz#5b2c40f8ce2c102d823959e7933ae395cd5f8018" + resolved "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.0.tgz" integrity sha512-rl/3Ai4Ax9IH/fRpOJZuXk1HgYX6oFTauhmBOilpqbq/YT2kN3FuXaneXdRfKv1bgMdHaLKxHWxGj/mDyA2n8w== dependencies: "@types/mdast" "^4.0.0" @@ -1750,7 +1728,7 @@ remark-lint-no-literal-urls@^4.0.0: remark-lint-no-multiple-toplevel-headings@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-4.0.0.tgz#7e9b0a6fdd00e938b0c2dd33744b690d9b3899f8" + resolved "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-4.0.0.tgz" integrity sha512-JW11iYxza7asDdhQuKfr8SH1u4NBOCQ4U7Ru0HrKCPcT4y/AB1C1il5uMQzbcervgYPBq69xzyQ24+AJeL0t3A== dependencies: "@types/mdast" "^4.0.0" @@ -1760,9 +1738,9 @@ remark-lint-no-multiple-toplevel-headings@^4.0.0: unist-util-visit-parents "^6.0.0" vfile-message "^4.0.0" -remark-lint-no-shell-dollars@4.0.0, remark-lint-no-shell-dollars@^4.0.0: +remark-lint-no-shell-dollars@^4.0.0, remark-lint-no-shell-dollars@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz#ddc98aaf49a01c408a7b616fe8f6e3dc8e626e15" + resolved "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz" integrity sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q== dependencies: "@types/mdast" "^4.0.0" @@ -1773,7 +1751,7 @@ remark-lint-no-shell-dollars@4.0.0, remark-lint-no-shell-dollars@^4.0.0: remark-lint-no-shortcut-reference-image@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.0.tgz#eb3aa7aec0d41c64f5a18986cbd3e7e62fa98b7f" + resolved "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.0.tgz" integrity sha512-YEiCpW5F/8/LZyxlOuVK2L/n0NJ1AB0AJK7oP39OVyEk3Xl7w+JQi6nZ3KiH6REh+PWGqKn6M0KEPL9cT/iAOw== dependencies: "@types/mdast" "^4.0.0" @@ -1782,7 +1760,7 @@ remark-lint-no-shortcut-reference-image@^4.0.0: remark-lint-no-shortcut-reference-link@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.0.tgz#44c332c3b939dbb9d6b60d9cbcd5929f72658fe7" + resolved "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.0.tgz" integrity sha512-6jka2Zz3I6G2MvDcKrwADYhTOxHMFMK854u1cfBEIH5/XnCCXROtoqiiDtbZw+NJqbmwsBKvGL4t2gnmEJUmgg== dependencies: "@types/mdast" "^4.0.0" @@ -1791,7 +1769,7 @@ remark-lint-no-shortcut-reference-link@^4.0.0: remark-lint-no-table-indentation@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-5.0.0.tgz#ce526bc4ff6407378d2b23cbcb6bb8c7f830479a" + resolved "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-5.0.0.tgz" integrity sha512-MaLmnzgirpnRiRjWwrsyOX0RmP2eG4YAv169MtsxTVa6O3CpUDwTuTzivudE9L0kVvTlyF9DXEmdyjm85LDyVA== dependencies: "@types/mdast" "^4.0.0" @@ -1805,7 +1783,7 @@ remark-lint-no-table-indentation@^5.0.0: remark-lint-no-undefined-references@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.0.tgz#2155f00a95b793ecac1921f7b45ce7c5d6087256" + resolved "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.0.tgz" integrity sha512-O0q8bHpRHK1T85oqO+uep4BkvQnZZp3y+wahDeeLLq9dCJfF56sq6Tt5OOTt1BAOZlpobS3OPQHUiJWYP6hX1w== dependencies: "@types/mdast" "^4.0.0" @@ -1819,7 +1797,7 @@ remark-lint-no-undefined-references@^5.0.0: remark-lint-no-unused-definitions@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.0.tgz#fc7f715d084283ca8b3a3c2e7b6afe87ace9765e" + resolved "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.0.tgz" integrity sha512-YCZ6k575NCTx7mnN+9ls0G6YgMsZHi0LYQqfLW8MNVHBtbpTBvfmk8I39bmsvuKWeBD98weZoXSDqIiIGg+Q/g== dependencies: "@types/mdast" "^4.0.0" @@ -1829,7 +1807,7 @@ remark-lint-no-unused-definitions@^4.0.0: remark-lint-ordered-list-marker-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz#9a6e8867484ec3edf8ec85699e5cca6a11163102" + resolved "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz" integrity sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA== dependencies: "@types/mdast" "^4.0.0" @@ -1842,7 +1820,7 @@ remark-lint-ordered-list-marker-style@^4.0.0: remark-lint-ordered-list-marker-value@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz#a0724a161b2dbcd6dd0be6088e851b3183baab0e" + resolved "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz" integrity sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA== dependencies: "@types/mdast" "^4.0.0" @@ -1856,7 +1834,7 @@ remark-lint-ordered-list-marker-value@^4.0.0: remark-lint-rule-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-4.0.0.tgz#8634deab41768b467329ff8212e982cef583c3f1" + resolved "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-4.0.0.tgz" integrity sha512-Kt7IHMB5IbLgRFKaFUmB895sV3PTD0MBgN9CvXKxr1wHFF43S6tabjFIBSoQqyJRlhH0S3rK6Lvopofa009gLg== dependencies: "@types/mdast" "^4.0.0" @@ -1868,7 +1846,7 @@ remark-lint-rule-style@^4.0.0: remark-lint-strong-marker@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-4.0.0.tgz#bbaae75846ccea9753a2f6935d1fb9a3114b9461" + resolved "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-4.0.0.tgz" integrity sha512-YcvuzakYhQWdCH+1E30sUY+wyvq+PNa77NZAMAYO/cS/pZczFB+q4Ccttw4Q+No/chX8oMfe0GYtm8dDWLei/g== dependencies: "@types/mdast" "^4.0.0" @@ -1879,7 +1857,7 @@ remark-lint-strong-marker@^4.0.0: remark-lint-table-cell-padding@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-5.0.0.tgz#652392e3b8c61153023e6c14793b30dd1fb2c6b7" + resolved "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-5.0.0.tgz" integrity sha512-LNyiHDQZBIOqcQGG1tYsZHW7g0v8OyRmRgDrD5WEsMaAYfM6EiECUokN/Q4py9h4oM/2KUSrdZbtfuZmy87/kA== dependencies: "@types/mdast" "^4.0.0" @@ -1894,7 +1872,7 @@ remark-lint-table-cell-padding@^5.0.0: remark-lint-table-pipe-alignment@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-4.0.0.tgz#2eada610d36ef7e7409f5b21e8e308c26e9620a1" + resolved "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-4.0.0.tgz" integrity sha512-nx+xpEIWQRLOcq9hIbUIvhSE1NYRmDJmCY3cMoHJ1sIW7dRXMHyWfpWTgu7mpREKwSQdE0q4qnzk8McQQSkIcg== dependencies: "@types/mdast" "^4.0.0" @@ -1908,7 +1886,7 @@ remark-lint-table-pipe-alignment@^4.0.0: remark-lint-table-pipes@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-5.0.0.tgz#d796f504cf3a2f8b5396b001830492b9eb716758" + resolved "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-5.0.0.tgz" integrity sha512-e7jzAScDrt5+eMomh099TZJBN2K9ldDxBu9iYhNu5C0YsdAvnckJkgilsuClxFpmx4LCVYaX0EGbt/hQ3LB3xg== dependencies: "@types/mdast" "^4.0.0" @@ -1920,7 +1898,7 @@ remark-lint-table-pipes@^5.0.0: remark-lint-unordered-list-marker-style@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz#91c3a31f795678cd86da8bc5997f924e64920263" + resolved "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz" integrity sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA== dependencies: "@types/mdast" "^4.0.0" @@ -1932,7 +1910,7 @@ remark-lint-unordered-list-marker-style@^4.0.0: remark-lint@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-10.0.0.tgz#161b24a18223a68ec2ed8d77e46015b5a0bd8bb5" + resolved "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz" integrity sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ== dependencies: "@types/mdast" "^4.0.0" @@ -1941,7 +1919,7 @@ remark-lint@^10.0.0: remark-message-control@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-8.0.0.tgz#1d5880f33c05a65fcd60dcf0572b8198e9935d97" + resolved "https://registry.npmjs.org/remark-message-control/-/remark-message-control-8.0.0.tgz" integrity sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ== dependencies: "@types/mdast" "^4.0.0" @@ -1951,7 +1929,7 @@ remark-message-control@^8.0.0: remark-parse@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== dependencies: "@types/mdast" "^4.0.0" @@ -1961,7 +1939,7 @@ remark-parse@^11.0.0: remark-preset-lint-consistent@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/remark-preset-lint-consistent/-/remark-preset-lint-consistent-6.0.0.tgz#8ee11b681e1d40f1fd7a5ca1cf2c832df306db56" + resolved "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-6.0.0.tgz" integrity sha512-W3fwxajdietwjnFyTH5x2le63hxWGVOXxIs7KjRqU+5wkkN6ZQyuwPeeomblmS9wQr50fkidhXNHNDyCXtqgxQ== dependencies: remark-lint "^10.0.0" @@ -1982,7 +1960,7 @@ remark-preset-lint-consistent@6.0.0: remark-preset-lint-markdown-style-guide@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-6.0.0.tgz#f6f186d94391a5e8c9752a63a0c41a7a14b2464a" + resolved "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-6.0.0.tgz" integrity sha512-izsfNTHeqrRP64VWV6OdJnSUDwKFSthMKiiDcu14ODpPV0t7YiotCQWzgc7L4eW9Ctcp4aB4nHNLSuDmwhEWrQ== dependencies: remark-lint "^10.0.0" @@ -2032,7 +2010,7 @@ remark-preset-lint-markdown-style-guide@6.0.0: remark-preset-lint-recommended@7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.0.tgz#fec4288b9a148f63fb04f3f447bc0db1049ec835" + resolved "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.0.tgz" integrity sha512-A9aPDL78OO12xG2a83DVd+M2QzdBMjn545fbXj40BFJdpt9t//MADkPAwRfpMCBkKi+iECPUTFCb3Jm8SsFG2w== dependencies: remark-lint "^10.0.0" @@ -2053,7 +2031,7 @@ remark-preset-lint-recommended@7.0.0: remark-stringify@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== dependencies: "@types/mdast" "^4.0.0" @@ -2062,7 +2040,7 @@ remark-stringify@^11.0.0: remark@^15.0.0: version "15.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-15.0.1.tgz#ac7e7563260513b66426bc47f850e7aa5862c37c" + resolved "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz" integrity sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A== dependencies: "@types/mdast" "^4.0.0" @@ -2072,49 +2050,49 @@ remark@^15.0.0: require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== semver@^7.1.1, semver@^7.3.5, semver@^7.5.3: version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== space-separated-tokens@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -2122,12 +2100,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -2135,12 +2113,19 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz" integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2149,7 +2134,7 @@ spdx-license-ids@^3.0.0: string-width@^4.1.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2158,7 +2143,7 @@ string-width@^4.1.0: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -2167,23 +2152,16 @@ string-width@^5.0.1, string-width@^5.1.2: string-width@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" + resolved "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz" integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== dependencies: eastasianwidth "^0.2.0" emoji-regex "^10.2.1" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - stringify-entities@^4.0.0: version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: character-entities-html4 "^2.0.0" @@ -2191,77 +2169,72 @@ stringify-entities@^4.0.0: "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.0, strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^9.0.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" trough@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== type-fest@^3.8.0: version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz" integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" - integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== - unified-args@^11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-11.0.1.tgz#5c82564616288b8d99feed7326c2223097d30726" + resolved "https://registry.npmjs.org/unified-args/-/unified-args-11.0.1.tgz" integrity sha512-WEQghE91+0s3xPVs0YW6a5zUduNLjmANswX7YbBfksHNDGMjHxaWCql4SR7c9q0yov/XiIEdk6r/LqfPjaYGcw== dependencies: "@types/text-table" "^0.2.0" @@ -2276,7 +2249,7 @@ unified-args@^11.0.0: unified-engine@^11.0.0: version "11.2.1" - resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-11.2.1.tgz#8f9c05b3f262930666b1cdb83108c15dd39d6cdd" + resolved "https://registry.npmjs.org/unified-engine/-/unified-engine-11.2.1.tgz" integrity sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg== dependencies: "@types/concat-stream" "^2.0.0" @@ -2301,19 +2274,9 @@ unified-engine@^11.0.0: vfile-statistics "^3.0.0" yaml "^2.0.0" -unified-lint-rule@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-2.1.2.tgz#3ca2c6199b84aa8b48b60fda0f61b8eba55807d5" - integrity sha512-JWudPtRN7TLFHVLEVZ+Rm8FUb6kCAtHxEXFgBGDxRSdNMnGyTU5zyYvduHSF/liExlFB3vdFvsAHnNVE/UjAwA== - dependencies: - "@types/unist" "^2.0.0" - trough "^2.0.0" - unified "^10.0.0" - vfile "^5.0.0" - unified-lint-rule@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz#75f8d7fbd9664e198a65f1399ab06c3950b54a70" + resolved "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz" integrity sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew== dependencies: "@types/unist" "^3.0.0" @@ -2321,9 +2284,19 @@ unified-lint-rule@^3.0.0: unified "^11.0.0" vfile "^6.0.0" +unified-lint-rule@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.2.tgz" + integrity sha512-JWudPtRN7TLFHVLEVZ+Rm8FUb6kCAtHxEXFgBGDxRSdNMnGyTU5zyYvduHSF/liExlFB3vdFvsAHnNVE/UjAwA== + dependencies: + "@types/unist" "^2.0.0" + trough "^2.0.0" + unified "^10.0.0" + vfile "^5.0.0" + unified-message-control@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-5.0.0.tgz#7268a9a5d695c2591149ebe35e37eb200b852d7e" + resolved "https://registry.npmjs.org/unified-message-control/-/unified-message-control-5.0.0.tgz" integrity sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw== dependencies: "@types/unist" "^3.0.0" @@ -2337,7 +2310,7 @@ unified-message-control@^5.0.0: unified@^10.0.0: version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + resolved "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz" integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== dependencies: "@types/unist" "^2.0.0" @@ -2350,7 +2323,7 @@ unified@^10.0.0: unified@^11.0.0: version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: "@types/unist" "^3.0.0" @@ -2363,28 +2336,28 @@ unified@^11.0.0: unist-util-inspect@^8.0.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz#ff2729b543c483041b3c29cbe04c5460a406ee25" + resolved "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz" integrity sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ== dependencies: "@types/unist" "^3.0.0" unist-util-is@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== dependencies: "@types/unist" "^3.0.0" unist-util-position@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== dependencies: "@types/unist" "^3.0.0" unist-util-remove-position@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz" integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== dependencies: "@types/unist" "^3.0.0" @@ -2392,21 +2365,21 @@ unist-util-remove-position@^5.0.0: unist-util-stringify-position@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz" integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: "@types/unist" "^3.0.0" unist-util-visit-parents@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== dependencies: "@types/unist" "^3.0.0" @@ -2414,7 +2387,7 @@ unist-util-visit-parents@^6.0.0: unist-util-visit@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== dependencies: "@types/unist" "^3.0.0" @@ -2423,19 +2396,19 @@ unist-util-visit@^5.0.0: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -2443,12 +2416,12 @@ validate-npm-package-license@^3.0.4: validate-npm-package-name@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz" integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== vfile-location@^5.0.0: version "5.0.3" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz" integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== dependencies: "@types/unist" "^3.0.0" @@ -2456,7 +2429,7 @@ vfile-location@^5.0.0: vfile-message@^3.0.0: version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz" integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== dependencies: "@types/unist" "^2.0.0" @@ -2464,7 +2437,7 @@ vfile-message@^3.0.0: vfile-message@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== dependencies: "@types/unist" "^3.0.0" @@ -2472,7 +2445,7 @@ vfile-message@^4.0.0: vfile-reporter@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-8.1.1.tgz#ac06a5a68f1b480609c443062dffea1cfa2d11b1" + resolved "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.1.tgz" integrity sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g== dependencies: "@types/supports-color" "^8.0.0" @@ -2486,7 +2459,7 @@ vfile-reporter@^8.0.0: vfile-sort@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-4.0.0.tgz#fa1929065b62fe5311e5391c9434f745e8641703" + resolved "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz" integrity sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ== dependencies: vfile "^6.0.0" @@ -2494,7 +2467,7 @@ vfile-sort@^4.0.0: vfile-statistics@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-3.0.0.tgz#0f5cd00c611c1862b13a9b5bc5599efaf465f2cf" + resolved "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz" integrity sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w== dependencies: vfile "^6.0.0" @@ -2502,7 +2475,7 @@ vfile-statistics@^3.0.0: vfile@^5.0.0: version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz" integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== dependencies: "@types/unist" "^2.0.0" @@ -2512,7 +2485,7 @@ vfile@^5.0.0: vfile@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.2.tgz#ef49548ea3d270097a67011921411130ceae7deb" + resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz" integrity sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg== dependencies: "@types/unist" "^3.0.0" @@ -2521,26 +2494,26 @@ vfile@^6.0.0: walk-up-path@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz" integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" which@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz" integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== dependencies: isexe "^3.1.1" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -2549,29 +2522,24 @@ which@^4.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" strip-ansi "^7.0.1" -yaml@2.3.3: +yaml@^2.0.0, yaml@2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz" integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== -yaml@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" - integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== - yocto-queue@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== zwitch@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/api-docs/yarn.lock b/api-docs/yarn.lock index e79302e28..0c46add62 100644 --- a/api-docs/yarn.lock +++ b/api-docs/yarn.lock @@ -4,12 +4,12 @@ argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" diff --git a/content/influxdb3/core/plugins.md b/content/influxdb3/core/plugins.md new file mode 100644 index 000000000..ef4628caf --- /dev/null +++ b/content/influxdb3/core/plugins.md @@ -0,0 +1,14 @@ +--- +title: Python Plugins and Processing Engine +description: Instructions for using the Python processing engine in InfluxDB 3 +menu: + influxdb3_core: + name: Processing Engine and Python Plugins +weight: 2 +influxdb3/core/tags: [] +source: /shared/v3-core-plugins/_index.md +--- + + \ No newline at end of file diff --git a/content/influxdb3/enterprise/plugins.md b/content/influxdb3/enterprise/plugins.md new file mode 100644 index 000000000..5ec8f2f5d --- /dev/null +++ b/content/influxdb3/enterprise/plugins.md @@ -0,0 +1,14 @@ +--- +title: Python Plugins and Processing Engine +description: Instructions for using the Python processing engine in InfluxDB 3 +menu: + influxdb3_enterprise: + name: Processing Engine and Python Plugins +weight: 2 +influxdb3/enterprise/tags: [] +source: /shared/v3-core-plugins/_index.md +--- + + \ No newline at end of file diff --git a/content/shared/v3-core-plugins/_index.md b/content/shared/v3-core-plugins/_index.md new file mode 100644 index 000000000..9cf6d4fca --- /dev/null +++ b/content/shared/v3-core-plugins/_index.md @@ -0,0 +1,297 @@ +> [!Important] +> #### Processing engine only works with Docker +> +> The Processing engine is currently supported only in Docker x86 environments. Non-Docker support is coming soon. The engine, API, and developer experience are actively evolving and may change. Join our [Discord](https://discord.gg/9zaNCW2PRT) for updates and feedback. + +InfluxDB 3 has an embedded Python VM for dynamically loading plugins that can execute code in the database. There are four types of plugins that can be triggered by the following events in the database: + +* **WAL flush**: Triggered when the write-ahead log (WAL) is flushed to object store (once a second by default) +* **Parquet persistenc (coming soon)**: Triggered when data is persisted to object store in Parquet format +* **Scheduled tasks**: Triggered by a schedule, specified in cron sytnax +* **On Request**: Bind to a specific endpoint under `/api/v3/engine` and trigger when GET or POST requests are made + +Each plugin type has a different trigger configuration, which will be described in the section on each plugin type. + +## Installing Plugins from the repo +The repository at [https://github.com/influxdata/influxdb3_plugins](https://github.com/influxdata/influxdb3_plugins) contans example plugins and contributions from the community. To install a plugin from the repository, you can using the `influxdb3` CLI. + +Just use `gh:` as the plugin name to install a plugin from the repository. For example, to install the `wal_plugin.py` from the repository, you can use the following command: + +```shell +influxdb3 create plugin -d=mydb --filename "gh:examples/shedule/system_metrics" --plugin-type=scheduled system_metrics +influxdb3 create plugin -d=mydb --filename "gh:examples/wal_plugin" --plugin-type=wal_rows wal_plugin_example +``` + +You will then need to create a trigger to activate the plugin. Details on triggers for each type of plugin are provided below. + +## Shared API + +Within any of the plugin types, a shared API is available to interact with the database. The shared API provides access to the following: +* `LineBuilder` to create Line Protocol lines that can be written to the database +* `query` to query data from any database +* `info`, `warn`, and `error` to log messages to the database log, which will be output in the server logs and captured in system tables queryable by SQL + +### Line Builder + +The `LineBuilder` is a simple API for building lines of Line Protocol to write into the database. Writes are buffered while the plugin runs and are flushed when the plugin completes. The `LineBuilder` API is available in all plugin types. Here are some examples of using the `LineBuilder` API: + +```python +line = LineBuilder("weather") + .tag("location", "us-midwest") + .float64_field("temperature", 82.5) + .time_ns(1627680000000000000) +influxdb3_local.write(line) + +# to output it as a string: "weather,location=us-midwest temperature=82.5 1627680000000000000" +line_str = line.build() + +# or build incrementally +line = LineBuilder("weather") +line.tag("location", "us-midwest") +line.float64_field("temperature", 82.5) +line.time_ns(1627680000000000000) +influxdb3_local.write(line) +``` + +Here is the Python implementation of the `LineBuilder` API: + +```python +from typing import Optional +from collections import OrderedDict + +class InfluxDBError(Exception): + """Base exception for InfluxDB-related errors""" + pass + +class InvalidMeasurementError(InfluxDBError): + """Raised when measurement name is invalid""" + pass + +class InvalidKeyError(InfluxDBError): + """Raised when a tag or field key is invalid""" + pass + +class InvalidLineError(InfluxDBError): + """Raised when a line protocol string is invalid""" + pass + +class LineBuilder: + def __init__(self, measurement: str): + if ' ' in measurement: + raise InvalidMeasurementError("Measurement name cannot contain spaces") + self.measurement = measurement + self.tags: OrderedDict[str, str] = OrderedDict() + self.fields: OrderedDict[str, str] = OrderedDict() + self._timestamp_ns: Optional[int] = None + + def _validate_key(self, key: str, key_type: str) -> None: + """Validate that a key does not contain spaces, commas, or equals signs.""" + if not key: + raise InvalidKeyError(f"{key_type} key cannot be empty") + if ' ' in key: + raise InvalidKeyError(f"{key_type} key '{key}' cannot contain spaces") + if ',' in key: + raise InvalidKeyError(f"{key_type} key '{key}' cannot contain commas") + if '=' in key: + raise InvalidKeyError(f"{key_type} key '{key}' cannot contain equals signs") + + def tag(self, key: str, value: str) -> 'LineBuilder': + """Add a tag to the line protocol.""" + self._validate_key(key, "tag") + self.tags[key] = str(value) + return self + + def uint64_field(self, key: str, value: int) -> 'LineBuilder': + """Add an unsigned integer field to the line protocol.""" + self._validate_key(key, "field") + if value < 0: + raise ValueError(f"uint64 field '{key}' cannot be negative") + self.fields[key] = f"{value}u" + return self + + def int64_field(self, key: str, value: int) -> 'LineBuilder': + """Add an integer field to the line protocol.""" + self._validate_key(key, "field") + self.fields[key] = f"{value}i" + return self + + def float64_field(self, key: str, value: float) -> 'LineBuilder': + """Add a float field to the line protocol.""" + self._validate_key(key, "field") + # Check if value has no decimal component + self.fields[key] = f"{int(value)}.0" if value % 1 == 0 else str(value) + return self + + def string_field(self, key: str, value: str) -> 'LineBuilder': + """Add a string field to the line protocol.""" + self._validate_key(key, "field") + # Escape quotes and backslashes in string values + escaped_value = value.replace('"', '\\"').replace('\\', '\\\\') + self.fields[key] = f'"{escaped_value}"' + return self + + def bool_field(self, key: str, value: bool) -> 'LineBuilder': + """Add a boolean field to the line protocol.""" + self._validate_key(key, "field") + self.fields[key] = 't' if value else 'f' + return self + + def time_ns(self, timestamp_ns: int) -> 'LineBuilder': + """Set the timestamp in nanoseconds.""" + self._timestamp_ns = timestamp_ns + return self + + def build(self) -> str: + """Build the line protocol string.""" + # Start with measurement name (escape commas only) + line = self.measurement.replace(',', '\\,') + + # Add tags if present + if self.tags: + tags_str = ','.join( + f"{k}={v}" for k, v in self.tags.items() + ) + line += f",{tags_str}" + + # Add fields (required) + if not self.fields: + raise InvalidLineError(f"At least one field is required: {line}") + + fields_str = ','.join( + f"{k}={v}" for k, v in self.fields.items() + ) + line += f" {fields_str}" + + # Add timestamp if present + if self._timestamp_ns is not None: + line += f" {self._timestamp_ns}" + + return line +``` + +### Query +The `query` function on the API will execute a SQL query with optional parameters (through a parameterized query) and return the results as a `List` of `Dict[String, Any]` where the key is the column name and the value is the value for that column. The `query` function is available in all plugin types. + +Some examples: + +```python +influxdb3_local.query("SELECT * from foo where bar = 'baz' and time > now() - 'interval 1 hour'") + +# or using parameterized queries +args = {"bar": "baz"} +influxdb3_local.query("SELECT * from foo where bar = $bar and time > now() - 'interval 1 hour'", args) +``` + +### Logging +The `info`, `warn`, and `error` functions on the API will log messages to the database log, which will be output in the server logs and captured in system tables queryable by SQL. The `info`, `warn`, and `error` functions are available in all plugin types. The functions take an arbitrary number of arguments and will convert them to strings and join them into a single message separated by a space. Examples: + +```python +ifluxdb3_local.info("This is an info message") +influxdb3_local.warn("This is a warning message") +influxdb3_local.error("This is an error message") + +obj_to_log = {"hello": "world"} +influxdb3_local.info("This is an info message with an object", obj_to_log) +``` + +### Trigger arguments +Every plugin type can receive arguments from the configuration of the trigger. This is useful for passing configuration to the plugin. This can drive behavior like things to monitor for or it could be connection information to third party services that the plugin will interact with. The arguments are passed as a `Dict` of `String` to `String` where the key is the argument name and the value is the argument value. Here's an example of how to use arguments in a plugin: + +```python +def process_writes(influxdb3_local, table_batches, args=None): + if args and "threshold" in args: + threshold = int(args["threshold"]) + influxdb3_local.info(f"Threshold is {threshold}") + else: + influxdb3_local.warn("No threshold provided") +``` + +The `args` parameter is optional and can be omitted from the trigger definitions if the plugin does not need to use arguments. + +## Imports +The Python plugins run using the system Python in the Docker container. Pip is installed in the container and can be used to install any dependencies. +You will need to start up the server with the `PYTHONPATH` set to the location of your site packages for your virtual environment. For example: `PYTHONPATH=myenvl/lib/python3.13/site-packages` + +## WAL Flush Plugin +When a WAL flush plugin is triggered, the plugin will receive a list of `table_batches` that have matched the plugin trigger (either all tables in the database or a specific table). Here's an example of a simple WAL flush plugin + +```python +def process_writes(influxdb3_local, table_batches, args=None): + for table_batch in table_batches: + # Skip if table_name is write_reports + if table_batch["table_name"] == "write_reports": + continue + + row_count = len(table_batch["rows"]) + + # Double row count if table name matches args table_name + if args and "double_count_table" in args and table_batch["table_name"] == args["double_count_table"]: + row_count *= 2 + + line = LineBuilder("write_reports")\ + .tag("table_name", table_batch["table_name"])\ + .int64_field("row_count", row_count) + influxdb3_local.write(line) + + influxdb3_local.info("wal_plugin.py done") +``` + +### WAL Flush Trigger Configuration + +Every trigger is associated with a specific database. The best reference for the arguments for trigger definition can be accessed through the CLI help: + +```shell +influxdb3 create trigger help +``` + +For the WAL plugin, the `trigger-spec` can be either `all-tables` which will trigger on any write to the assoicated database or `table:` which will call the `process_writes` function only with the writes for the given table. The `args` parameter can be used to pass configuration to the plugin. + +## Schedule Plugin +Schedule plugins run on a schedule specified in cron syntax. The plugin will receive the local API, the time of the trigger, and any arguments passed in the trigger definition. Here's an example of a simple schedule plugin: + +```python +# see if a table has been written to in the last 5 minutes +def process_scheduled_call(influxdb3_local, time, args=None): + if args and "table_name" in args: + table_name = args["table_name"] + result = influxdb3_local.query(f"SELECT * FROM {table_name} WHERE time > now() - 'interval 5m'") + # write an error log if the result is empty + if not result: + influxdb3_local.error(f"No data in {table_name} in the last 5 minutes") + else: + influxdb3_local.error("No table_name provided for schedule plugin") +``` + +### Schedule Trigger Configuration +Schedule plugins are set with a `trigger-spec` of `schedule:`. The `args` parameter can be used to pass configuration to the plugin. For example, if we wanted the above plugin to run the check every minute, we would use `schedule:*/5 * * * *` as the `trigger-spec`. + +## On Request Plugin +On Request plugins are triggered by a request to a specific endpoint under `/api/v3/engine`. The plugin will receive the local API, query parameters `Dict[str, str]`, request headers `Dict[str, str]`, request body (as bytes), and any arguments passed in the trigger definition. Here's an example of a simple On Request plugin: + +```python +import json + +def process_request(influxdb3_local, query_parameters, request_headers, request_body, args=None): + for k, v in query_parameters.items(): + influxdb3_local.info(f"query_parameters: {k}={v}") + for k, v in request_headers.items(): + influxdb3_local.info(f"request_headers: {k}={v}") + + request_data = json.loads(request_body) + + influxdb3_local.info("parsed JSON request body:", request_data) + + # write the data to the database + line = LineBuilder("request_data").tag("tag1", "tag1_value").int64_field("field1", 1) + # get a string of the line to return as the body + line_str = line.build() + + influxdb3_local.write(line) + + return 200, {"Content-Type": "application/json"}, json.dumps({"status": "ok", "line": line_str}) +``` + +### On Request Trigger Configuration +On Request plugins are set with a `trigger-spec` of `request:`. The `args` parameter can be used to pass configuration to the plugin. For example, if we wanted the above plugin to run on the endpoint `/api/v3/engine/my_plugin`, we would use `request:my_plugin` as the `trigger-spec`. + +Trigger specs must be unique across all configured plugins, regardless of which database they are tied to, given the path is the same. \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7dfdcf64f..bf4664cef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@babel/code-frame@^7.0.0": version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: "@babel/helper-validator-identifier" "^7.25.9" @@ -13,17 +13,17 @@ "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== "@evilmartians/lefthook@^1.7.1": version "1.8.5" - resolved "https://registry.yarnpkg.com/@evilmartians/lefthook/-/lefthook-1.8.5.tgz#ce4805e7a67374d953946ea93a666939019123e9" + resolved "https://registry.npmjs.org/@evilmartians/lefthook/-/lefthook-1.8.5.tgz" integrity sha512-TuAL6W+bj2DqYxqm5JnFi3s7RnjpU/IUxxHFZWUHNytZ+HDQfkceogo+1DlSBFXFva2V21CSaDkeWJJHOmmECw== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -35,20 +35,20 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -56,39 +56,39 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@sindresorhus/is@^5.2.0": version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== "@sindresorhus/merge-streams@^2.1.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== "@szmarczak/http-timer@^5.0.1": version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: defer-to-connect "^2.0.1" "@types/http-cache-semantics@^4.0.2": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/normalize-package-data@^2.4.1": version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@vvago/vale@^3.4.2": version "3.9.1" - resolved "https://registry.yarnpkg.com/@vvago/vale/-/vale-3.9.1.tgz#8b34b30413ad087034fe171f6d8a21dc64a69bbe" + resolved "https://registry.npmjs.org/@vvago/vale/-/vale-3.9.1.tgz" integrity sha512-EEit9vmdArdr+YE3+dnedX/KPecPV1spcwjRlsYH5FugREVkjyvx+TCwcxVlddJ1/tWS3vQ1DYWZBUZ8Hlikpg== dependencies: axios "^1.4.0" @@ -98,29 +98,29 @@ ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -128,17 +128,17 @@ anymatch@~3.1.2: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@>=10.2.5: version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz" integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: browserslist "^4.23.3" @@ -150,7 +150,7 @@ autoprefixer@>=10.2.5: axios@^1.4.0, axios@^1.7.4: version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + resolved "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz" integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" @@ -159,27 +159,27 @@ axios@^1.4.0, axios@^1.7.4: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== big-integer@^1.6.17, big-integer@^1.6.48: version "1.6.52" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== dependencies: buffers "~0.1.1" @@ -187,7 +187,7 @@ binary@~0.3.0: bl@^1.0.0: version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" @@ -195,12 +195,12 @@ bl@^1.0.0: bluebird@~3.4.1: version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -208,21 +208,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -browserslist@^4.23.3: +browserslist@^4.23.3, "browserslist@>= 4.21.0": version "4.24.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== dependencies: caniuse-lite "^1.0.30001669" @@ -232,12 +232,12 @@ browserslist@^4.23.3: buffer-alloc-unsafe@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" @@ -245,22 +245,22 @@ buffer-alloc@^1.2.0: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-indexof-polyfill@~1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== buffer@^5.2.1: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -268,17 +268,17 @@ buffer@^5.2.1: buffers@~0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== cacheable-lookup@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== cacheable-request@^10.2.8: version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: "@types/http-cache-semantics" "^4.0.2" @@ -291,12 +291,12 @@ cacheable-request@^10.2.8: caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: version "1.0.30001686" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz#0e04b8d90de8753188e93c9989d56cb19d902670" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz" integrity sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA== careful-downloader@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/careful-downloader/-/careful-downloader-3.0.0.tgz#7e613e582078e8124e9dab4a2293cd48e6d07e6d" + resolved "https://registry.npmjs.org/careful-downloader/-/careful-downloader-3.0.0.tgz" integrity sha512-5KMIPa0Yoj+2tY6OK9ewdwcPebp+4XS0dMYvvF9/8fkFEfvnEpWmHWYs9JNcZ7RZUvY/v6oPzLpmmTzSIbroSA== dependencies: debug "^4.3.4" @@ -308,19 +308,19 @@ careful-downloader@^3.0.0: chainsaw@~0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== dependencies: traverse ">=0.3.0 <0.4" chalk@^5.0.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== chokidar@^3.3.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -335,12 +335,12 @@ chokidar@^3.3.0: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -349,41 +349,41 @@ cliui@^8.0.1: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.19.0, commander@^2.8.1: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cross-spawn@^7.0.0: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -392,28 +392,28 @@ cross-spawn@^7.0.0: crypto-random-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== dependencies: type-fest "^1.0.1" debug@^4.3.4: version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== dependencies: file-type "^5.2.0" @@ -422,7 +422,7 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: decompress-tarbz2@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== dependencies: decompress-tar "^4.1.0" @@ -433,7 +433,7 @@ decompress-tarbz2@^4.0.0: decompress-targz@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== dependencies: decompress-tar "^4.1.1" @@ -442,7 +442,7 @@ decompress-targz@^4.0.0: decompress-unzip@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== dependencies: file-type "^3.8.0" @@ -452,7 +452,7 @@ decompress-unzip@^4.0.1: decompress@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" @@ -466,73 +466,73 @@ decompress@^4.2.1: defer-to-connect@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== dependency-graph@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== discontinuous-range@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== duplexer2@~0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.41: version "1.5.71" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz#d8b5dba1e55b320f2f4e9b1ca80738f53fcfec2b" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz" integrity sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== end-of-stream@^1.0.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== fast-glob@^3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -543,43 +543,43 @@ fast-glob@^3.3.2: fastq@^1.6.0: version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" file-type@^3.8.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== file-type@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^6.1.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" @@ -587,12 +587,12 @@ find-up@^6.3.0: follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== foreground-child@^3.1.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" @@ -600,12 +600,12 @@ foreground-child@^3.1.0: form-data-encoder@^2.1.2: version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== form-data@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz" integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" @@ -614,17 +614,17 @@ form-data@^4.0.0: fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^11.0.0, fs-extra@^11.1.1: version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" @@ -633,24 +633,24 @@ fs-extra@^11.0.0, fs-extra@^11.1.1: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== fstream@^1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" @@ -660,27 +660,27 @@ fstream@^1.0.12: function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stdin@=8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - get-stdin@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== +get-stdin@=8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + get-stream@^2.2.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== dependencies: object-assign "^4.0.1" @@ -688,19 +688,19 @@ get-stream@^2.2.0: get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^10.3.7: version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -712,7 +712,7 @@ glob@^10.3.7: glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -724,7 +724,7 @@ glob@^7.1.3: globby@^14.0.0: version "14.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f" + resolved "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz" integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== dependencies: "@sindresorhus/merge-streams" "^2.1.0" @@ -736,7 +736,7 @@ globby@^14.0.0: got@^12.6.0: version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + resolved "https://registry.npmjs.org/got/-/got-12.6.1.tgz" integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== dependencies: "@sindresorhus/is" "^5.2.0" @@ -753,31 +753,31 @@ got@^12.6.0: graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http2-wrapper@^2.1.10: version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" @@ -785,7 +785,7 @@ http2-wrapper@^2.1.10: hugo-extended@>=0.101.0: version "0.139.2" - resolved "https://registry.yarnpkg.com/hugo-extended/-/hugo-extended-0.139.2.tgz#123ba6092ba8bb751c62545227238b62bbc47156" + resolved "https://registry.npmjs.org/hugo-extended/-/hugo-extended-0.139.2.tgz" integrity sha512-svbD47E2fkPVFEgNNx6zB5fPRZ0yPPgW4J/+OU0+1LS5nkSVVDpxWZe0od1g4Eekn/2TFSje1LBdojIJPeotnQ== dependencies: careful-downloader "^3.0.0" @@ -794,106 +794,106 @@ hugo-extended@>=0.101.0: ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.4: version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.0, inherits@~2.0.3: +inherits@~2.0.0, inherits@~2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-core-module@^2.5.0: version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz" integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-natural-number@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz" integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-unicode-supported@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -902,29 +902,29 @@ jackspeak@^3.1.2: js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -933,41 +933,41 @@ jsonfile@^6.0.1: jsox@^1.2.119: version "1.2.121" - resolved "https://registry.yarnpkg.com/jsox/-/jsox-1.2.121.tgz#e51c1f42188772a3493a56b805f64cbd06c39779" + resolved "https://registry.npmjs.org/jsox/-/jsox-1.2.121.tgz" integrity sha512-9Ag50tKhpTwS6r5wh3MJSAvpSof0UBr39Pto8OnzFT32Z/pAbxAsKHzyvsyMEHVslELvHyO/4/jaQELHk8wDcw== keyv@^4.5.3: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" lilconfig@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== listenercount@~1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== locate-path@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" log-symbols@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== dependencies: chalk "^5.0.0" @@ -975,36 +975,36 @@ log-symbols@^5.1.0: lowercase-keys@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" merge2@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -1012,100 +1012,100 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== mimic-response@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^3.0.0: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minizlib@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + "mkdirp@>=0.5 0": version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - moo@^0.5.0: version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz" integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@^3.3.7: version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz" integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== nearley@^2.20.1: version "2.20.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + resolved "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== dependencies: commander "^2.19.0" @@ -1115,19 +1115,19 @@ nearley@^2.20.1: node-releases@^2.0.18: version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== node-sql-parser@^4.12.0: version "4.18.0" - resolved "https://registry.yarnpkg.com/node-sql-parser/-/node-sql-parser-4.18.0.tgz#516b6e633c55c5abbba1ca588ab372db81ae9318" + resolved "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.18.0.tgz" integrity sha512-2YEOR5qlI1zUFbGMLKNfsrR5JUvFg9LxIRVE+xJe962pfVLH0rnItqLzv96XVs1Y1UIR8FxsXAuvX/lYAWZ2BQ== dependencies: big-integer "^1.6.48" normalize-package-data@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -1137,58 +1137,58 @@ normalize-package-data@^3.0.2: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^8.0.0: version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz" integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== object-assign@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" p-cancelable@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-limit@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -1198,22 +1198,22 @@ parse-json@^5.2.0: path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -1221,49 +1221,49 @@ path-scurry@^1.11.1: path-type@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + resolved "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz" integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== pend@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== postcss-cli@>=9.1.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-11.0.0.tgz#649f4b9af447501feb6cbca7f7505a132f90442b" + resolved "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz" integrity sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA== dependencies: chokidar "^3.3.0" @@ -1281,7 +1281,7 @@ postcss-cli@>=9.1.0: postcss-load-config@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-5.1.0.tgz#4ded23410da973e05edae9d41fa99bb5c1d5477f" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz" integrity sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA== dependencies: lilconfig "^3.1.1" @@ -1289,7 +1289,7 @@ postcss-load-config@^5.0.0: postcss-reporter@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.1.0.tgz#5ec476d224e2fe25a054e3c66d9b2901d4fab422" + resolved "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz" integrity sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA== dependencies: picocolors "^1.0.0" @@ -1297,12 +1297,12 @@ postcss-reporter@^7.0.0: postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@>=8.4.31: +postcss@^8.0.0, postcss@^8.1.0, postcss@>=8.0.9, postcss@>=8.4.31: version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz" integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" @@ -1311,7 +1311,7 @@ postcss@>=8.4.31: prettier-plugin-sql@^0.18.0: version "0.18.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-sql/-/prettier-plugin-sql-0.18.1.tgz#037c6a55ee6c78f80df42041f8f53340651fc7d8" + resolved "https://registry.npmjs.org/prettier-plugin-sql/-/prettier-plugin-sql-0.18.1.tgz" integrity sha512-2+Nob2sg7hzLAKJoE6sfgtkhBZCqOzrWHZPvE4Kee/e80oOyI4qwy9vypeltqNBJwTtq3uiKPrCxlT03bBpOaw== dependencies: jsox "^1.2.119" @@ -1319,44 +1319,44 @@ prettier-plugin-sql@^0.18.0: sql-formatter "^15.0.2" tslib "^2.6.2" -prettier@^3.2.5: +prettier@^3.0.3, prettier@^3.2.5: version "3.4.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== pretty-hrtime@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== railroad-diagrams@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== randexp@0.4.6: version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + resolved "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== dependencies: discontinuous-range "1.0.0" @@ -1364,14 +1364,14 @@ randexp@0.4.6: read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" read-pkg-up@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz" integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== dependencies: find-up "^6.3.0" @@ -1380,7 +1380,7 @@ read-pkg-up@^9.1.0: read-pkg@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-7.1.0.tgz#438b4caed1ad656ba359b3e00fd094f3c427a43e" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz" integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== dependencies: "@types/normalize-package-data" "^2.4.1" @@ -1390,7 +1390,7 @@ read-pkg@^7.1.0: readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -1403,116 +1403,121 @@ readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== responselike@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: lowercase-keys "^3.0.0" ret@~0.1.10: version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^5.0.0: version "5.0.10" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz" integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== dependencies: glob "^10.3.7" +rimraf@2: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@^5.1.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== seek-bzip@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== dependencies: commander "^2.8.1" semver@^7.3.4: version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== setimmediate@~1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^5.0.0, slash@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== source-map-js@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -1520,12 +1525,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -1533,30 +1538,46 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.20" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz" integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== sql-formatter@^15.0.2: version "15.4.6" - resolved "https://registry.yarnpkg.com/sql-formatter/-/sql-formatter-15.4.6.tgz#6e00e967ce86aa70daa0249097b2d3941e4e66f4" + resolved "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.4.6.tgz" integrity sha512-aH6kwvJpylljHqXe+zpie0Q5snL3uerDLLhjPEBjDCVK1NMRFq4nMJbuPJWYp08LaaaJJgBhShAdAfspcBYY0Q== dependencies: argparse "^2.0.1" get-stdin "=8.0.0" nearley "^2.20.1" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -1565,51 +1586,44 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-dirs@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: is-natural-number "^4.0.1" tar-stream@^1.5.2: version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" @@ -1622,7 +1636,7 @@ tar-stream@^1.5.2: tar@^6.1.15: version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" @@ -1634,12 +1648,12 @@ tar@^6.1.15: temp-dir@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz" integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== tempy@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.1.0.tgz#00958b6df85db8589cb595465e691852aac038e9" + resolved "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz" integrity sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g== dependencies: is-stream "^3.0.0" @@ -1649,49 +1663,49 @@ tempy@^3.0.0: thenby@^1.3.4: version "1.3.4" - resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" + resolved "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz" integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== to-buffer@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" "traverse@>=0.3.0 <0.4": version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== tslib@^2.6.2: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-fest@^1.0.1: version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.5.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== unbzip2-stream@^1.0.9: version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -1699,24 +1713,24 @@ unbzip2-stream@^1.0.9: unicorn-magic@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== unique-string@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: crypto-random-string "^4.0.0" universalify@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unzipper@^0.10.14: version "0.10.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" + resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz" integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== dependencies: big-integer "^1.6.17" @@ -1732,7 +1746,7 @@ unzipper@^0.10.14: update-browserslist-db@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: escalade "^3.2.0" @@ -1740,12 +1754,12 @@ update-browserslist-db@^1.1.1: util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -1753,14 +1767,14 @@ validate-npm-package-license@^3.0.1: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -1769,7 +1783,7 @@ which@^2.0.1: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -1778,7 +1792,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -1787,37 +1801,37 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xtend@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.4.2: version "2.6.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz" integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.0.0: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -1830,7 +1844,7 @@ yargs@^17.0.0: yauzl@^2.4.2: version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -1838,5 +1852,5 @@ yauzl@^2.4.2: yocto-queue@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== From 9b57b1fb7ae9ba60ee595da18baef3e94c7bbed2 Mon Sep 17 00:00:00 2001 From: Paul Dix Date: Tue, 28 Jan 2025 20:24:36 -0500 Subject: [PATCH 02/22] Update plugin docs --- content/shared/v3-core-plugins/_index.md | 38 ++++++++++++++---------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/content/shared/v3-core-plugins/_index.md b/content/shared/v3-core-plugins/_index.md index 9cf6d4fca..057cdb21e 100644 --- a/content/shared/v3-core-plugins/_index.md +++ b/content/shared/v3-core-plugins/_index.md @@ -12,17 +12,7 @@ InfluxDB 3 has an embedded Python VM for dynamically loading plugins that can ex Each plugin type has a different trigger configuration, which will be described in the section on each plugin type. -## Installing Plugins from the repo -The repository at [https://github.com/influxdata/influxdb3_plugins](https://github.com/influxdata/influxdb3_plugins) contans example plugins and contributions from the community. To install a plugin from the repository, you can using the `influxdb3` CLI. - -Just use `gh:` as the plugin name to install a plugin from the repository. For example, to install the `wal_plugin.py` from the repository, you can use the following command: - -```shell -influxdb3 create plugin -d=mydb --filename "gh:examples/shedule/system_metrics" --plugin-type=scheduled system_metrics -influxdb3 create plugin -d=mydb --filename "gh:examples/wal_plugin" --plugin-type=wal_rows wal_plugin_example -``` - -You will then need to create a trigger to activate the plugin. Details on triggers for each type of plugin are provided below. +When starting the server, the argument `--plugin-dir` must be provided that specifies what directory plugins are located in. There is also a public Github repository of example plugins that can be referenced when creating a trigger. The repository at [https://github.com/influxdata/influxdb3_plugins](https://github.com/influxdata/influxdb3_plugins) contans example plugins and contributions from the community. ## Shared API @@ -195,7 +185,7 @@ influxdb3_local.info("This is an info message with an object", obj_to_log) ``` ### Trigger arguments -Every plugin type can receive arguments from the configuration of the trigger. This is useful for passing configuration to the plugin. This can drive behavior like things to monitor for or it could be connection information to third party services that the plugin will interact with. The arguments are passed as a `Dict` of `String` to `String` where the key is the argument name and the value is the argument value. Here's an example of how to use arguments in a plugin: +Every plugin type can receive arguments from the configuration of the trigger. This is useful for passing configuration to the plugin. This can drive behavior like things to monitor for or it could be connection information to third party services that the plugin will interact with. The arguments are passed as a `Dict[str, str]` where the key is the argument name and the value is the argument value. Here's an example of how to use arguments in a WAL plugin: ```python def process_writes(influxdb3_local, table_batches, args=None): @@ -244,7 +234,17 @@ Every trigger is associated with a specific database. The best reference for the influxdb3 create trigger help ``` -For the WAL plugin, the `trigger-spec` can be either `all-tables` which will trigger on any write to the assoicated database or `table:` which will call the `process_writes` function only with the writes for the given table. The `args` parameter can be used to pass configuration to the plugin. +For the WAL plugin, the `trigger-spec` can be either `all-tables` which will trigger on any write to the assoicated database or `table:` which will call the `process_writes` function only with the writes for the given table. The trigger-spec is what the server uses to determine which plugin type the plugin-filename points to. + +The `args` parameter can be used to pass configuration to the plugin. + +For example, if creating a trigger of WAL flush from the examples repo: + +```shell +influxdb3 create trigger --trigger-spec "table:foo" --plugin-filename "gh:examples/wal_plugin/wal_plugin.py" --database mydb foo-trigger +``` + +Without the `gh:` at the start of the filename, the server will look for the file in its plugin directory. ## Schedule Plugin Schedule plugins run on a schedule specified in cron syntax. The plugin will receive the local API, the time of the trigger, and any arguments passed in the trigger definition. Here's an example of a simple schedule plugin: @@ -263,7 +263,11 @@ def process_scheduled_call(influxdb3_local, time, args=None): ``` ### Schedule Trigger Configuration -Schedule plugins are set with a `trigger-spec` of `schedule:`. The `args` parameter can be used to pass configuration to the plugin. For example, if we wanted the above plugin to run the check every minute, we would use `schedule:*/5 * * * *` as the `trigger-spec`. +Schedule plugins are set with a `trigger-spec` of `schedule:` or `every:`. The `args` parameter can be used to pass configuration to the plugin. For example, if we wanted to use the system-metrics example from the Github repo and have it collect every 10 seconds we could use the following trigger definition: + +```shell +influxdb3 create trigger --trigger-spec "every:10s" --plugin-filename "gh:examples/schedule/system_metrics/system_metrics.py" --database mydb system-metrics +``` ## On Request Plugin On Request plugins are triggered by a request to a specific endpoint under `/api/v3/engine`. The plugin will receive the local API, query parameters `Dict[str, str]`, request headers `Dict[str, str]`, request body (as bytes), and any arguments passed in the trigger definition. Here's an example of a simple On Request plugin: @@ -294,4 +298,8 @@ def process_request(influxdb3_local, query_parameters, request_headers, request_ ### On Request Trigger Configuration On Request plugins are set with a `trigger-spec` of `request:`. The `args` parameter can be used to pass configuration to the plugin. For example, if we wanted the above plugin to run on the endpoint `/api/v3/engine/my_plugin`, we would use `request:my_plugin` as the `trigger-spec`. -Trigger specs must be unique across all configured plugins, regardless of which database they are tied to, given the path is the same. \ No newline at end of file +Trigger specs must be unique across all configured plugins, regardless of which database they are tied to, given the path is the same. Here's an example to create a request trigger tied to the "hello-world' path using a plugin in the plugin-dir: + +```shell +influxdb3 create trigger --trigger-spec "request:hello-world" --plugin-filename "hellp/hello_world.py" --database mydb hello-world +``` \ No newline at end of file From 90775648cb7d30036432a6de686e09a71edaa56f Mon Sep 17 00:00:00 2001 From: Paul Dix Date: Fri, 31 Jan 2025 10:07:24 -0500 Subject: [PATCH 03/22] Update content/influxdb3/core/plugins.md Co-authored-by: Jason Stirnaman --- content/influxdb3/core/plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/influxdb3/core/plugins.md b/content/influxdb3/core/plugins.md index ef4628caf..154c8574d 100644 --- a/content/influxdb3/core/plugins.md +++ b/content/influxdb3/core/plugins.md @@ -1,6 +1,6 @@ --- title: Python Plugins and Processing Engine -description: Instructions for using the Python processing engine in InfluxDB 3 +description: Use the Python processing engine to trigger and execute custom code on different events in an {{< product-name >}} instance. menu: influxdb3_core: name: Processing Engine and Python Plugins From df3e4ca0149ee9c4fa88e431dbee675079c1a37c Mon Sep 17 00:00:00 2001 From: Paul Dix Date: Fri, 31 Jan 2025 10:07:29 -0500 Subject: [PATCH 04/22] Update content/influxdb3/enterprise/plugins.md Co-authored-by: Jason Stirnaman --- content/influxdb3/enterprise/plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/influxdb3/enterprise/plugins.md b/content/influxdb3/enterprise/plugins.md index 5ec8f2f5d..4d3f3e45d 100644 --- a/content/influxdb3/enterprise/plugins.md +++ b/content/influxdb3/enterprise/plugins.md @@ -1,6 +1,6 @@ --- title: Python Plugins and Processing Engine -description: Instructions for using the Python processing engine in InfluxDB 3 +description: Use the Python processing engine to trigger and execute custom code on different events in an {{< product-name >}} instance. menu: influxdb3_enterprise: name: Processing Engine and Python Plugins From a15f8c81544d074eef23f3f69c6c8744ccb5f950 Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Wed, 12 Feb 2025 10:49:00 -0600 Subject: [PATCH 05/22] chore: Update and resolve yarn.lock --- yarn.lock | 86 +++++++++++++++++++++++-------------------------------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/yarn.lock b/yarn.lock index bf4664cef..c89aebf9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,7 +41,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -220,7 +220,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.3, "browserslist@>= 4.21.0": +browserslist@^4.23.3: version "4.24.2" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== @@ -668,16 +668,16 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - get-stdin@=8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" @@ -810,7 +810,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@~2.0.0, inherits@~2.0.3, inherits@2: +inherits@2, inherits@~2.0.0, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1058,16 +1058,16 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -1076,11 +1076,6 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - "mkdirp@>=0.5 0": version "0.5.6" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" @@ -1088,6 +1083,11 @@ mkdirp@^1.0.3: dependencies: minimist "^1.2.6" +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + moo@^0.5.0: version "0.5.2" resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz" @@ -1300,7 +1300,7 @@ postcss-value-parser@^4.2.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.0.0, postcss@^8.1.0, postcss@>=8.0.9, postcss@>=8.4.31: +postcss@>=8.4.31: version "8.4.49" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz" integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== @@ -1319,7 +1319,7 @@ prettier-plugin-sql@^0.18.0: sql-formatter "^15.0.2" tslib "^2.6.2" -prettier@^3.0.3, prettier@^3.2.5: +prettier@^3.2.5: version "3.4.2" resolved "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== @@ -1435,13 +1435,6 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^5.0.0: - version "5.0.10" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz" - integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== - dependencies: - glob "^10.3.7" - rimraf@2: version "2.7.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" @@ -1449,6 +1442,13 @@ rimraf@2: dependencies: glob "^7.1.3" +rimraf@^5.0.0: + version "5.0.10" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== + dependencies: + glob "^10.3.7" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -1461,12 +1461,7 @@ safe-buffer@^5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -1550,13 +1545,6 @@ sql-formatter@^15.0.2: get-stdin "=8.0.0" nearley "^2.20.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -1566,16 +1554,7 @@ string_decoder@~1.1.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1593,6 +1572,13 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" From c173edce68ee80c70d7850a3600f4c254feb109c Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Fri, 20 Dec 2024 17:14:19 -0600 Subject: [PATCH 06/22] Initial Kapa.ai chat integration. Continue refactoring JavaScript into a component pattern and ESM. Replaces some jQuery with native DOM API. chore(ai): reference documentation and instructions for training AI chore(ai): implement Kapa AI chat widget - Move script tag to HTML template to make it obvious. - Cleanup javascript to make it more component-like - Set Kapa attributes, support setting userid chore(js): add JS dependencies, previously referenced in script tags, to package.json for JS builds. fix(api): indents chore(js): package Mermaid diagram library chore(js): refactor JS for AIChat and Theme as examples of using the component pattern for HTML/CSS/JS chore(js): Use the new local-storage API in refactored module code and in code not yet ported. Cleanup syntax in local-storage and make functions available from window.LocalStorageAPI. fix(js): theme.js name-change chore(js): fix ai-chat.js file name fix(js): refactor: - componentNames are snakecase in HTML - replace DOM selection method and jQuery eventhandler assignment - remove old theme.js references chore(ai): configure chat window overlay, size, and position: - removes overlay and scroll lock - positions chat to the right and bottom - expands sample question width to 12 cols chore(ai): edit disclaimer fix(ai): size and position chore(js): make ai-chat specific to configuration and and setting userid (for testing and future use). fix(js): copy referrerHost variable to v3-wayfinding instead of relying on influxdb-url to assign it. chore(ai): add a footer div at page bottom to contain modal triggers for custom-time and ask-ai. Still needs some CSS help. Moves tooltip text from CSS to HTML data attribute. chore(ai): dynamically load AI script tag after DOMContentLoaded to avoid race conditions. Call initialization from the modal trigger module and pass the show trigger function to the onload handler. fix(ai): fix modal triggers to viewport fix(modal-triggers): stack the triggers into a single column. restyle footer widgets updated time selector modal to use correct storage term minor style update WIP(ai-chat): get product data chore(js): Factor out pageContext module from influxdb-url.js chore(js): Refactor helpers.js out of inflluxdb-url.js WIP: refactor influxdburl - minimal changes for module conversions feat(ai): Custom AI chat example questions product and version. Ask AI example questions: - Adds support for customizing example Ask AI questions per product or version. - Configure questions in site `data/products.yml`; otherwise, it uses default questions from `ask-ai.js` Context, page, and product data: - Adds sample URLs for remaining versions in influxdb_urls - `page-context.js` consolidates and exports constants for page context (protocol, host, path, referrer) and path-to-data mappings for product and influxdb_url site data Module refactor: - Refactors some JavaScript into ES6 modules, and refactors some of those further into a Component pattern--just vanilla JS and no shadow DOM stuff. The Component pattern that uses data attributes to "bind" JavaScript modules with CSS and HTML is a popular approach in modern web development. This pattern enhances modularity, reusability, and maintainability by associating behavior (JavaScript), structure (HTML), and style (CSS) through the use of data attributes. - `assets/main.js` is the entrypoint - Passes pageParams from the Hugo page to modules that import `@params`. - Moves most external dependencies out of `script` tags and into package.json to be managed with `yarn`. - Adds `eslint`. - For modules that aren't yet components, wraps execution statements inside an `initialize()` function and calls the function from `main.js` on `DOMContentLoaded`. - For components, if the page contains the `data-component=""`, the matching element is passed to the component function on `DOMContentLoaded`. - I tried to avoid changing logic where it wasn't necessary. Update DOC_GPT_PROFILE.md customize ai chat modal styles fix(influxdb-url): Rename to cloud_dedicated in influxdb_urls.yml, remove newly added placeholder URL and use the extant default, refactor - Rename to in influxdb_urls.yml - Fix influxdb-url.js and data provision in local-storage.js to use the new name, mapping it to to retain the existing local storage key chore(api-lib): Use local-storage import instead of window global chore(js): cleanup fix(js): Ensure feature-callout initializes on page load fix(theme): Load preferred theme before making the page visible. Execute a predefined function by specifying the function name in data-theme-callback fix(search-toggle): Restores toggling the search field when sidebar is collapsed. Moves the event handler to a new search-button component fix(ai): Fix custom attribute assignment. Rename property to ai_example_questions Include the word `Bearer` or `Token`, a space, and your **token** value (all case-sensitive). Fix TOC links. Fixes #5781 fix(api-docs): Update API reference directories and generation script for influxdb3 URL paths, update links and names in reference content fix(api-ref): Update getswagger.sh destination paths to use the new directory structure when fetching spec files. Update the redocly plugin module path. hotfix: fix hlevel bug in children shortcode Remove underline from custom time widget add color to custom time widget styling --- DOC_GPT_PROFILE.md | 52 + PLATFORM_REFERENCE.md | 30 + .../influxdb3/cloud-serverless/v2/ref.yml | 16 +- assets/js/api-libs.js | 34 +- assets/js/ask-ai-trigger.js | 19 + assets/js/ask-ai.js | 100 ++ assets/js/code-controls.js | 161 +- assets/js/content-interactions.js | 260 +-- assets/js/custom-timestamps.js | 237 +-- assets/js/docs-themes.js | 42 - assets/js/feature-callouts.js | 20 +- assets/js/helpers.js | 13 + assets/js/influxdb-url.js | 1213 ++++++------- assets/js/local-storage.js | 135 +- assets/js/main.js | 141 ++ assets/js/modals.js | 53 +- assets/js/notifications.js | 64 +- assets/js/page-context.js | 88 + assets/js/page-feedback.js | 103 +- assets/js/search-button.js | 10 + assets/js/sidebar-toggle.js | 26 +- assets/js/tabbed-content.js | 67 +- assets/js/theme-switch.js | 20 + assets/js/theme.js | 42 + assets/js/v3-wayfinding.js | 179 +- assets/jsconfig.json | 10 + .../styles/layouts/_custom-time-trigger.scss | 65 - assets/styles/layouts/_footer-widgets.scss | 139 ++ assets/styles/layouts/_top-nav.scss | 6 +- assets/styles/styles-default.scss | 2 +- content/shared/v3-core-get-started/_index.md | 39 +- .../v3-enterprise-get-started/_index.md | 70 +- data/influxdb_urls.yml | 17 + data/products.yml | 35 + eslint.config.mjs | 9 + layouts/404.html | 5 +- layouts/partials/footer.html | 4 +- .../partials/footer/custom-time-trigger.html | 5 - layouts/partials/footer/javascript.html | 26 +- layouts/partials/footer/modals.html | 2 +- .../modals/influxdb-gs-date-select.html | 7 +- layouts/partials/footer/widgets.html | 6 + .../footer/widgets/ask-ai-trigger.html | 6 + .../footer/widgets/custom-time-trigger.html | 7 + layouts/partials/header.html | 4 +- layouts/partials/header/javascript.html | 45 +- layouts/partials/header/stylesheets.html | 7 + layouts/partials/sidebar/sidebar-toggle.html | 2 +- layouts/partials/topnav.html | 16 +- package.json | 12 +- static/img/influx-logo-cubo-white.png | Bin 0 -> 3514 bytes yarn.lock | 1597 ++++++++++++++++- 52 files changed, 3845 insertions(+), 1423 deletions(-) create mode 100644 DOC_GPT_PROFILE.md create mode 100644 PLATFORM_REFERENCE.md create mode 100644 assets/js/ask-ai-trigger.js create mode 100644 assets/js/ask-ai.js delete mode 100644 assets/js/docs-themes.js create mode 100644 assets/js/helpers.js create mode 100644 assets/js/main.js create mode 100644 assets/js/page-context.js create mode 100644 assets/js/search-button.js create mode 100644 assets/js/theme-switch.js create mode 100644 assets/js/theme.js create mode 100644 assets/jsconfig.json delete mode 100644 assets/styles/layouts/_custom-time-trigger.scss create mode 100644 assets/styles/layouts/_footer-widgets.scss create mode 100644 eslint.config.mjs delete mode 100644 layouts/partials/footer/custom-time-trigger.html create mode 100644 layouts/partials/footer/widgets.html create mode 100644 layouts/partials/footer/widgets/ask-ai-trigger.html create mode 100644 layouts/partials/footer/widgets/custom-time-trigger.html create mode 100644 static/img/influx-logo-cubo-white.png diff --git a/DOC_GPT_PROFILE.md b/DOC_GPT_PROFILE.md new file mode 100644 index 000000000..fd5c16c44 --- /dev/null +++ b/DOC_GPT_PROFILE.md @@ -0,0 +1,52 @@ +Doc is a public custom GPT for OpenAI ChatGPT used to help write and style InfluxData and InfluxDB documentation. + +## Introduction + +Doc writes technical software documentation for InfluxData. The public web site is https://docs.influxdata.com and the source repository is https://github.com/influxdata/docs-v2. +Documentation provides step-by-step guides and reference documentation for InfluxDB and associated clients (CLIs, client libraries (SDKs), and Telegraf (https://docs.influxdata.com/telegraf/v1/)), and the legacy v1 components Kapacitor and Chronograf. + +## Instruction + +When a user asks a question and doesn't include a product from the list below, ask them which product in the list they are using, along with the version and query language: + +InfluxDB OSS 1.x (v1) + - Documentation: https://docs.influxdata.com/influxdb/v1/ + - Query languages: v1.8+ supports InfluxQL and Flux + - Clients: Telegraf, influx CLI, v1 client libraries +InfluxDB Enterprise (v1) + - Documentation: https://docs.influxdata.com/enterprise_influxdb/v1/ + - Query languages: v1.8+ supports InfluxQL and Flux + - Clients: Telegraf, influx CLI, v1 client libraries +InfluxDB OSS 2.x (v2) + - Documentation: https://docs.influxdata.com/influxdb/v2/ + - Query languages: InfluxQL and Flux + - Clients: Telegraf, influx CLI, v2 client libraries +InfluxDB Cloud (v2, multi-tenant) + - Documentation: https://docs.influxdata.com/influxdb/cloud/ + - Query languages: InfluxQL and Flux + - Clients: Telegraf, influx CLI, v2 client libraries +InfluxDB Clustered (v3, 3.0, self-managed distributed) + - Documentation: https://docs.influxdata.com/influxdb/clustered/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influxctl CLI, v3 client libraries +InfluxDB Cloud Dedicated (3.0, v3, InfluxData-managed single tenant) + - Documentation: https://docs.influxdata.com/influxdb/cloud-dedicated/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influxctl CLI, v3 client libraries +InfluxDB Cloud Serverless (v3, 3.0, InfluxData-managed multi-tenant) + - Documentation: https://docs.influxdata.com/influxdb/clustered/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influx CLI, v3 client libraries + +If I ask about a REST API or SDK (client library) and don't specify a product, ask which product. +For API client libraries, refer to the documentation and to the source repositories in https://github.com/InfluxCommunity for the version-specific client library. + +When writing documentation, always use Google Developer Documentation style guidelines and Markdown format. +If writing REST API reference documentation follow YouTube Data API style and Google Developer Documentation style guidelines. + +The project uses the Hugo static site generator to build the documentation. +The site uses JavaScript and jQuery. +For information about linting, tests (using pytests for codeblocks), shortcode , refer to https://github.com/influxdata/docs-v2/blob/master/README.md and https://github.com/influxdata/docs-v2/blob/master/CONTRIBUTING.md. +If something in CONTRIBUTING.md needs clarification, then give me the suggested revision for CONTRIBUTING.md in Markdown. + +The community forum is https://community.influxdata.com/ and should not be used as a primary source of information, but might contain useful suggestions or solutions to specific problems from users. diff --git a/PLATFORM_REFERENCE.md b/PLATFORM_REFERENCE.md new file mode 100644 index 000000000..bc4f1f9ca --- /dev/null +++ b/PLATFORM_REFERENCE.md @@ -0,0 +1,30 @@ +When a user asks a question and doesn't include a product from the list below, ask them which product in the list they are using, along with the version and query language: + +InfluxDB OSS 1.x (v1) + - Documentation: https://docs.influxdata.com/influxdb/v1/ + - Query languages: v1.8+ supports InfluxQL and Flux + - Clients: Telegraf, influx CLI, v1 client libraries +InfluxDB Enterprise (v1) + - Documentation: https://docs.influxdata.com/enterprise_influxdb/v1/ + - Query languages: v1.8+ supports InfluxQL and Flux + - Clients: Telegraf, influx CLI, v1 client libraries +InfluxDB OSS 2.x (v2) + - Documentation: https://docs.influxdata.com/influxdb/v2/ + - Query languages: InfluxQL and Flux + - Clients: Telegraf, influx CLI, v2 client libraries +InfluxDB Cloud (v2, multi-tenant) + - Documentation: https://docs.influxdata.com/influxdb/cloud/ + - Query languages: InfluxQL and Flux + - Clients: Telegraf, influx CLI, v2 client libraries +InfluxDB Clustered (v3, 3.0, self-managed distributed) + - Documentation: https://docs.influxdata.com/influxdb/clustered/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influxctl CLI, v3 client libraries +InfluxDB Cloud Dedicated (3.0, v3, InfluxData-managed single tenant) + - Documentation: https://docs.influxdata.com/influxdb/cloud-dedicated/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influxctl CLI, v3 client libraries +InfluxDB Cloud Serverless (v3, 3.0, InfluxData-managed multi-tenant) + - Documentation: https://docs.influxdata.com/influxdb/clustered/ + - Query languages: SQL and InfluxQL + - Clients: Telegraf, influx CLI, v3 client libraries diff --git a/api-docs/influxdb3/cloud-serverless/v2/ref.yml b/api-docs/influxdb3/cloud-serverless/v2/ref.yml index 530c06856..78e7ff814 100644 --- a/api-docs/influxdb3/cloud-serverless/v2/ref.yml +++ b/api-docs/influxdb3/cloud-serverless/v2/ref.yml @@ -10280,9 +10280,9 @@ components: properties: results: description: | - A resultset object that contains the `statement_id` and the `series` array. + A resultset object that contains the `statement_id` and the `series` array. - Except for `statement_id`, all properties are optional and omitted if empty. If a property is not present, it is assumed to be `null`. + Except for `statement_id`, all properties are optional and omitted if empty. If a property is not present, it is assumed to be `null`. items: properties: error: @@ -10331,12 +10331,12 @@ components: type: integer type: object oneOf: - - required: - - statement_id - - error - - required: - - statement_id - - series + - required: + - statement_id + - error + - required: + - statement_id + - series type: array type: object IntegerLiteral: diff --git a/assets/js/api-libs.js b/assets/js/api-libs.js index 7cd5a7573..17cb76c85 100644 --- a/assets/js/api-libs.js +++ b/assets/js/api-libs.js @@ -1,37 +1,43 @@ //////////////////////////////////////////////////////////////////////////////// ///////////////// Preferred Client Library programming language /////////////// //////////////////////////////////////////////////////////////////////////////// +import { activateTabs, updateBtnURLs } from './tabbed-content.js'; +import { getPreference, setPreference } from './local-storage.js'; -function getVisitedApiLib () { +function getVisitedApiLib() { const path = window.location.pathname.match( /client-libraries\/((?:v[0-9]|flight)\/)?([a-zA-Z0-9]*)/ ); return path && path.length && path[2]; } -function isApiLib () { +function isApiLib() { return /\/client-libraries\//.test(window.location.pathname); } // Set the user's programming language (client library) preference. -function setApiLibPreference (preference) { +function setApiLibPreference(preference) { setPreference('api_lib', preference); } // Retrieve the user's programming language (client library) preference. -function getApiLibPreference () { +function getApiLibPreference() { return getPreference('api_lib') || ''; } -// When visit a client library page, set the api_lib preference -if (isApiLib()) { - var selectedApiLib = getVisitedApiLib(); - setPreference('api_lib', selectedApiLib); +function initialize() { + // When visiting a client library page, set the api_lib preference + if (isApiLib()) { + var selectedApiLib = getVisitedApiLib(); + setPreference('api_lib', selectedApiLib); + } + + // Activate code-tabs based on the cookie then override with query param. + const tab = getApiLibPreference(); + ['.tabs, .code-tabs'].forEach( + (selector) => activateTabs(selector, tab), + updateBtnURLs(tab) + ); } -// Activate code-tabs based on the cookie then override with query param. -var tab = getApiLibPreference(); -['.tabs, .code-tabs'].forEach( - selector => activateTabs(selector, tab), - updateBtnURLs(tab) -); +export { initialize }; diff --git a/assets/js/ask-ai-trigger.js b/assets/js/ask-ai-trigger.js new file mode 100644 index 000000000..406a6d727 --- /dev/null +++ b/assets/js/ask-ai-trigger.js @@ -0,0 +1,19 @@ +import AskAI from './ask-ai.js'; + +function showTrigger(element) { + // Remove the inline display: none style + element.removeAttribute('style'); +} + +export default function AskAITrigger({ component }) { + const kapaContainer = document.querySelector('#kapa-widget-container'); + if (!component && !kapaContainer) { + return; + } + if (!kapaContainer) { + // Initialize the chat widget + AskAI({ onChatLoad: () => showTrigger(component) }); + } else { + showTrigger(component); + } +} \ No newline at end of file diff --git a/assets/js/ask-ai.js b/assets/js/ask-ai.js new file mode 100644 index 000000000..844df1596 --- /dev/null +++ b/assets/js/ask-ai.js @@ -0,0 +1,100 @@ +import { productData } from './page-context.js'; + +function setUser(userid, email) { + const NAMESPACE = 'kapaSettings'; + + // Set the user ID and email in the global settings namespace. + // The chat widget will use this on subsequent chats to personalize the user's experience. + window[NAMESPACE] = { + user: { + uniqueClientId: userid, + email: email, + } + } +} + +// Initialize the chat widget +function initializeChat({onChatLoad, chatAttributes}) { + /* See https://docs.kapa.ai/integrations/website-widget/configuration for + * available configuration options. + * All values are strings. + */ + const requiredAttributes = { + websiteId: 'a02bca75-1dd3-411e-95c0-79ee1139be4d', + projectName: 'InfluxDB', + projectColor: '#020a47', + projectLogo: '/img/influx-logo-cubo-white.png', + } + + const optionalAttributes = { + modalDisclaimer: 'This AI can access [documentation for InfluxDB, clients, and related tools](https://docs.influxdata.com). Information you submit is used in accordance with our [Privacy Policy](https://www.influxdata.com/legal/privacy-policy/).', + modalExampleQuestions: 'Use Python to write data to InfluxDB 3,How do I query using SQL?,How do I use MQTT with Telegraf?', + buttonHide: 'true', + modalOpenOnCommandK: 'true', + modalExampleQuestionsColSpan: '8', + modalFullScreenOnMobile: 'true', + modalHeaderPadding: '.5rem', + modalInnerPositionRight: '0', + modalInnerPositionLeft: '', + modalLockScroll: 'false', + modalOverrideOpenClassAskAi: 'ask-ai-open', + modalSize: '500px', + modalWithOverlay: 'false', + modalInnerMaxWidth: '500px', + modalXOffset: '1rem', + modalYOffset: '10vh', + userAnalyticsFingerprintEnabled: 'true', + fontFamily: 'Proxima Nova, sans-serif', + modalHeaderBgColor: 'linear-gradient(90deg, #d30971 0%, #9b2aff 100%)', + modalHeaderBorderBottom: 'none', + modalTitleColor: '#fff', + modalTitleFontSize: '1.25rem', + } + + const scriptUrl = 'https://widget.kapa.ai/kapa-widget.bundle.js'; + const script = document.createElement('script'); + script.async = true; + script.src = scriptUrl; + script.onload = function() { + onChatLoad(); + window.influxdatadocs.AskAI = AskAI; + }; + script.onerror = function() { + console.error('Error loading AI chat widget script'); + }; + + const dataset = {...requiredAttributes, ...optionalAttributes, ...chatAttributes}; + Object.keys(dataset).forEach(key => { + // Assign dataset attributes from the object + script.dataset[key] = dataset[key]; + }); + + // Check for an existing script element to remove + const oldScript= document.querySelector(`script[src="${scriptUrl}"]`); + if (oldScript) { + oldScript.remove(); + } + document.head.appendChild(script); +} + +function getProductExampleQuestions() { + const questions = productData?.product?.ai_sample_questions || null; + return questions?.join(',') || ''; +} + +/** + * chatParams: specify custom (for example, page-specific) attribute values for the chat, pass the dataset key-values (collected in ...chatParams). See https://docs.kapa.ai/integrations/website-widget/configuration for available configuration options. + * onChatLoad: function to call when the chat widget has loaded + * userid: optional, a unique user ID for the user (not currently used for public docs) +*/ +export default function AskAI({ userid, email, onChatLoad, ...chatParams }) { + const chatAttributes = { + modalExampleQuestions: getProductExampleQuestions(), + ...chatParams, + } + initializeChat({onChatLoad, chatAttributes}); + + if (userid) { + setUser(userid, email); + } +} diff --git a/assets/js/code-controls.js b/assets/js/code-controls.js index 76589de43..2b6344d3d 100644 --- a/assets/js/code-controls.js +++ b/assets/js/code-controls.js @@ -1,7 +1,10 @@ -var codeBlockSelector = ".article--content pre"; -var codeBlocks = $(codeBlockSelector); +import $ from 'jquery'; -var appendHTML = ` +function initialize() { + var codeBlockSelector = '.article--content pre'; + var codeBlocks = $(codeBlockSelector); + + var appendHTML = `
    @@ -9,98 +12,106 @@ var appendHTML = `
  • Fill window
-` +`; -// Wrap all codeblocks with a new 'codeblock' div -$(codeBlocks).each(function() { - $(this).wrap("
"); -}); + // Wrap all codeblocks with a new 'codeblock' div + $(codeBlocks).each(function () { + $(this).wrap("
"); + }); -// Append code controls to all codeblock divs -$('.codeblock').append(appendHTML); + // Append code controls to all codeblock divs + $('.codeblock').append(appendHTML); -//////////////////////////// CODE CONTROLS TOGGLING //////////////////////////// + //////////////////////////// CODE CONTROLS TOGGLING //////////////////////////// -// Click outside of the code-controls to close them -$(document).click(function() { - $('.code-controls').removeClass('open') -}); + // Click outside of the code-controls to close them + $(document).click(function () { + $('.code-controls').removeClass('open'); + }); -// Click the code controls toggle to open code controls -$('.code-controls-toggle').click(function() { - $(this).parent('.code-controls').toggleClass('open'); -}) + // Click the code controls toggle to open code controls + $('.code-controls-toggle').click(function () { + $(this).parent('.code-controls').toggleClass('open'); + }); -// Stop event propagation for clicks inside of the code-controls div -$('.code-controls').click(function(e) { - e.stopPropagation(); -}); + // Stop event propagation for clicks inside of the code-controls div + $('.code-controls').click(function (e) { + e.stopPropagation(); + }); -/////////////////////////////// COPY TO CLIPBOARD ////////////////////////////// + /////////////////////////////// COPY TO CLIPBOARD ////////////////////////////// -// Update button text during lifecycles -function updateText(element, currentText, newText) { - let inner = (element)[0].innerHTML; - inner = inner.replace(currentText, newText) - - element[0].innerHTML = inner -} + // Update button text during lifecycles + function updateText(element, currentText, newText) { + let inner = element[0].innerHTML; + inner = inner.replace(currentText, newText); -// Trigger copy success state lifecycle -function copyLifeCycle(element, state) { - let stateData = ((state === 'success') ? {state: 'success', message: 'Copied!'} : {state: 'failed', message: 'Copy failed!'}) - - updateText(element, 'Copy', stateData.message) - element.addClass(stateData.state) - - setTimeout(function() { - updateText(element, stateData.message, 'Copy'); - element.removeClass(stateData.state) - }, 2500) -} - -// Trigger copy failure state lifecycle - -$('.copy-code').click(function() { - let text = $(this).closest('.code-controls').prev('pre')[0].innerText - - const copyContent = async () => { - try { - await navigator.clipboard.writeText(text); - copyLifeCycle($(this), 'success') - } catch (err) { - copyLifeCycle($(this), 'failed') - } + element[0].innerHTML = inner; } - copyContent() -}) + // Trigger copy success state lifecycle + function copyLifeCycle(element, state) { + let stateData = + state === 'success' + ? { state: 'success', message: 'Copied!' } + : { state: 'failed', message: 'Copy failed!' }; -/////////////////////////////// FULL WINDOW CODE /////////////////////////////// + updateText(element, 'Copy', stateData.message); + element.addClass(stateData.state); -/* + setTimeout(function () { + updateText(element, stateData.message, 'Copy'); + element.removeClass(stateData.state); + }, 2500); + } + + // Trigger copy failure state lifecycle + + $('.copy-code').click(function () { + let text = $(this).closest('.code-controls').prev('pre')[0].innerText; + + const copyContent = async () => { + try { + await navigator.clipboard.writeText(text); + copyLifeCycle($(this), 'success'); + } catch { + copyLifeCycle($(this), 'failed'); + } + }; + + copyContent(); + }); + + /////////////////////////////// FULL WINDOW CODE /////////////////////////////// + + /* On click, open the fullscreen code modal and append a clone of the selected codeblock. Disable scrolling on the body. Disable user selection on everything but the fullscreen codeblock. */ -$('.fullscreen-toggle').click(function() { - var code = $(this).closest('.code-controls').prev('pre').clone(); - - $('#fullscreen-code-placeholder').replaceWith(code[0]); - $('body').css('overflow', 'hidden'); - $('body > div:not(.fullscreen-code)').css('user-select', 'none'); - $('.fullscreen-code').fadeIn(); -}) + $('.fullscreen-toggle').click(function () { + var code = $(this).closest('.code-controls').prev('pre').clone(); -/* + $('#fullscreen-code-placeholder').replaceWith(code[0]); + $('body').css('overflow', 'hidden'); + $('body > div:not(.fullscreen-code)').css('user-select', 'none'); + $('.fullscreen-code').fadeIn(); + }); + + /* On click, close the fullscreen code block. Reenable scrolling on the body. Reenable user selection on everything. Close the modal and replace the code block with the placeholder element. */ -$('.fullscreen-close').click(function() { - $('body').css('overflow', 'auto'); - $('body > div:not(.fullscreen-code)').css('user-select', ''); - $('.fullscreen-code').fadeOut(); - $('.fullscreen-code pre').replaceWith('
') -}); + $('.fullscreen-close').click(function () { + $('body').css('overflow', 'auto'); + $('body > div:not(.fullscreen-code)').css('user-select', ''); + $('.fullscreen-code').fadeOut(); + $('.fullscreen-code pre').replaceWith( + '
' + ); + }); +} + +export { initialize }; diff --git a/assets/js/content-interactions.js b/assets/js/content-interactions.js index 3a1737f76..eb9b4e1bc 100644 --- a/assets/js/content-interactions.js +++ b/assets/js/content-interactions.js @@ -1,154 +1,200 @@ +import $ from 'jquery'; + ///////////////////////////// Make headers linkable ///////////////////////////// -var headingWhiteList = $("\ +function makeHeadersLinkable() { + var headingWhiteList = $( + '\ .article--content h2, \ .article--content h3, \ .article--content h4, \ .article--content h5, \ .article--content h6 \ -"); +' + ); -var headingBlackList = ("\ + var headingBlackList = + '\ .influxdbu-banner h4 \ -"); +'; -headingElements = headingWhiteList.not(headingBlackList); + const headingElements = headingWhiteList.not(headingBlackList); -headingElements.each(function() { + headingElements.each(function () { function getLink(element) { - return ((element.attr('href') === undefined ) ? $(element).attr("id") : element.attr('href')) + return element.attr('href') === undefined + ? $(element).attr('id') + : element.attr('href'); } - var link = "" - $(this).wrapInner( link ); - }) + var link = ''; + $(this).wrapInner(link); + }); +} ///////////////////////////////// Smooth Scroll ///////////////////////////////// -var elementWhiteList = [ - ".tabs p a", - ".code-tabs p a", - ".children-links a", - ".list-links a", - "a.url-trigger", - "a.fullscreen-close" -] +function smoothScroll() { + var elementWhiteList = [ + '.tabs p a', + '.code-tabs p a', + '.children-links a', + '.list-links a', + 'a.url-trigger', + 'a.fullscreen-close', + ]; + + $('.article a[href^="#"]:not(' + elementWhiteList + ')').click(function (e) { + e.preventDefault(); + scrollToAnchor(this.hash); + }); +} function scrollToAnchor(target) { var $target = $(target); - if($target && $target.length > 0) { - $('html, body').stop().animate({ - 'scrollTop': ($target.offset().top) - }, 400, 'swing', function () { - window.location.hash = target; - }); + if ($target && $target.length > 0) { + $('html, body') + .stop() + .animate( + { + scrollTop: $target.offset().top, + }, + 400, + 'swing', + function () { + window.location.hash = target; + } + ); // Unique accordion functionality // If the target is an accordion element, open the accordion after scrolling if ($target.hasClass('expand')) { - if ($(target + ' .expand-label .expand-toggle').hasClass('open')) {} - else { + if ($(target + ' .expand-label .expand-toggle').hasClass('open')) { + // Do nothing? + } else { $(target + '> .expand-label').trigger('click'); - }; - }; + } + } } } -$('.article a[href^="#"]:not(' + elementWhiteList + ')').click(function (e) { - e.preventDefault(); - scrollToAnchor(this.hash); -}); - ///////////////////////////// Left Nav Interactions ///////////////////////////// -$(".children-toggle").click(function(e) { - e.preventDefault() - $(this).toggleClass('open'); - $(this).siblings('.children').toggleClass('open'); -}) - +function leftNavInteractions() { + $('.children-toggle').click(function (e) { + e.preventDefault(); + $(this).toggleClass('open'); + $(this).siblings('.children').toggleClass('open'); + }); +} //////////////////////////// Mobile Contents Toggle //////////////////////////// -$('#contents-toggle-btn').click(function(e) { - e.preventDefault(); - $(this).toggleClass('open'); - $('#nav-tree').toggleClass('open'); -}) - +function mobileContentsToggle() { + $('#contents-toggle-btn').click(function (e) { + e.preventDefault(); + $(this).toggleClass('open'); + $('#nav-tree').toggleClass('open'); + }); +} /////////////////////////////// Truncate Content /////////////////////////////// -$(".truncate-toggle").click(function(e) { - e.preventDefault() - var truncateParent = $(this).closest('.truncate') - var truncateParentID = $(this).closest('.truncate')[0].id +function truncateContent() { + $('.truncate-toggle').click(function (e) { + e.preventDefault(); + var truncateParent = $(this).closest('.truncate'); + var truncateParentID = $(this).closest('.truncate')[0].id; - if (truncateParent.hasClass('closed')) { - $(this)[0].href = `#${truncateParentID}` - } else { - $(this)[0].href = "#" - } - - truncateParent.toggleClass('closed') - truncateParent.find('.truncate-content').toggleClass('closed') -}) - -////////////////////////////// Expand Accordions /////////////////////////////// - -$('.expand-label').click(function() { - $(this).children('.expand-toggle').toggleClass('open') - $(this).next('.expand-content').slideToggle(200) -}) - -// Expand accordions on load based on URL anchor -function openAccordionByHash() { - var anchor = window.location.hash; - - function expandElement() { - if ($(anchor).parents('.expand').length > 0) { - return $(anchor).closest('.expand').children('.expand-label'); - } else if ($(anchor).hasClass('expand')){ - return $(anchor).children('.expand-label'); + if (truncateParent.hasClass('closed')) { + $(this)[0].href = `#${truncateParentID}`; + } else { + $(this)[0].href = '#'; } - }; - if (expandElement() != null) { - if (expandElement().children('.expand-toggle').hasClass('open')) {} - else { - expandElement().children('.expand-toggle').trigger('click'); - }; - }; -}; + truncateParent.toggleClass('closed'); + truncateParent.find('.truncate-content').toggleClass('closed'); + }); +} +////////////////////////////// Expand Accordions /////////////////////////////// +function expandAccordions() { + $('.expand-label').click(function () { + $(this).children('.expand-toggle').toggleClass('open'); + $(this).next('.expand-content').slideToggle(200); + }); -// Open accordions by hash on page load. -openAccordionByHash() + // Expand accordions on load based on URL anchor + function openAccordionByHash() { + var anchor = window.location.hash; + function expandElement() { + if ($(anchor).parents('.expand').length > 0) { + return $(anchor).closest('.expand').children('.expand-label'); + } else if ($(anchor).hasClass('expand')) { + return $(anchor).children('.expand-label'); + } + } + + if (expandElement() != null) { + if (expandElement().children('.expand-toggle').hasClass('open')) { + // Do nothing? + } else { + expandElement().children('.expand-toggle').trigger('click'); + } + } + } + + // Open accordions by hash on page load. + openAccordionByHash(); +} ////////////////////////// Inject tooltips on load ////////////////////////////// -$('.tooltip').each( function(){ - $toolTipText = $('
').addClass('tooltip-text').text($(this).attr('data-tooltip-text')); - $toolTipElement = $('
').addClass('tooltip-container').append($toolTipText); - $(this).prepend($toolTipElement); -}); - +function injectTooltips() { + $('.tooltip').each(function () { + const $toolTipText = $('
') + .addClass('tooltip-text') + .text($(this).attr('data-tooltip-text')); + const $toolTipElement = $('
') + .addClass('tooltip-container') + .append($toolTipText); + $(this).prepend($toolTipElement); + }); +} //////////////////// Style time cells in tables to not wrap //////////////////// -$('.article--content table').each(function() { - var table = $(this); +function styleTimeCells() { + $('.article--content table').each(function () { + var table = $(this); - table.find('td').each(function() { - let cellContent = $(this)[0].innerText - - if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*Z/.test(cellContent)) { - $(this).addClass('nowrap') - } - }) -}) + table.find('td').each(function () { + let cellContent = $(this)[0].innerText; + if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*Z/.test(cellContent)) { + $(this).addClass('nowrap'); + } + }); + }); +} /////////////////////// Open external links in a new tab /////////////////////// -$('.article--content a').each(function() { - var currentHost = location.host; +function openExternalLinks() { + $('.article--content a').each(function () { + var currentHost = location.host; - if (!($(this)[0].href).includes(currentHost)) { - $(this).attr('target', '_blank'); - }; -}) + if (!$(this)[0].href.includes(currentHost)) { + $(this).attr('target', '_blank'); + } + }); +} + +/////////////////////// Initialize all functions ////////////////////////////// +function initialize() { + makeHeadersLinkable(); + smoothScroll(); + leftNavInteractions(); + mobileContentsToggle(); + truncateContent(); + expandAccordions(); + injectTooltips(); + styleTimeCells(); + openExternalLinks(); +} + +export { initialize, scrollToAnchor }; diff --git a/assets/js/custom-timestamps.js b/assets/js/custom-timestamps.js index 9f8cb6d4c..c9e32838b 100644 --- a/assets/js/custom-timestamps.js +++ b/assets/js/custom-timestamps.js @@ -1,13 +1,18 @@ +import $ from 'jquery'; +import { Datepicker } from 'vanillajs-datepicker'; +import { toggleModal } from './modals.js'; +import * as localStorage from './local-storage.js'; + // Placeholder start date used in InfluxDB custom timestamps const defaultStartDate = '2022-01-01'; // Return yyyy-mm-dd formatted string from a Date object -function formatDate (dateObj) { +function formatDate(dateObj) { return dateObj.toISOString().replace(/T.*$/, ''); } // Return yesterday's date -function yesterday () { +function yesterday() { const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); @@ -15,25 +20,25 @@ function yesterday () { } // Split a date string into year, month, and day -function datePart (date) { - datePartRegex = /(\d{4})-(\d{2})-(\d{2})/; - year = date.replace(datePartRegex, '$1'); - month = date.replace(datePartRegex, '$2'); - day = date.replace(datePartRegex, '$3'); +function datePart(date) { + const datePartRegex = /(\d{4})-(\d{2})-(\d{2})/; + const year = date.replace(datePartRegex, '$1'); + const month = date.replace(datePartRegex, '$2'); + const day = date.replace(datePartRegex, '$3'); return { year: year, month: month, day: day }; } ///////////////////////// PREFERENCE COOKIE MANAGEMENT ///////////////////////// -prefID = 'sample_get_started_date'; +const prefID = 'sample_get_started_date'; -function setStartDate (setDate) { - setPreference(prefID, setDate); +function setStartDate(setDate) { + localStorage.setPreference(prefID, setDate); } -function getStartDate () { - return getPreference(prefID); +function getStartDate() { + return localStorage.getPreference(prefID); } //////////////////////////////////////////////////////////////////////////////// @@ -42,71 +47,71 @@ function getStartDate () { var startDate = getStartDate() || yesterday(); // Convert a time value to a Unix timestamp (seconds) -function timeToUnixSeconds (time) { - unixSeconds = new Date(time).getTime() / 1000; +function timeToUnixSeconds(time) { + const unixSeconds = new Date(time).getTime() / 1000; return unixSeconds; } -// Default time values in getting started sample data -let times = [ - { - rfc3339: `${defaultStartDate}T08:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T08:00:00Z`), - }, // 1641024000 - { - rfc3339: `${defaultStartDate}T09:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T09:00:00Z`), - }, // 1641027600 - { - rfc3339: `${defaultStartDate}T10:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T10:00:00Z`), - }, // 1641031200 - { - rfc3339: `${defaultStartDate}T11:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T11:00:00Z`), - }, // 1641034800 - { - rfc3339: `${defaultStartDate}T12:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T12:00:00Z`), - }, // 1641038400 - { - rfc3339: `${defaultStartDate}T13:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T13:00:00Z`), - }, // 1641042000 - { - rfc3339: `${defaultStartDate}T14:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T14:00:00Z`), - }, // 1641045600 - { - rfc3339: `${defaultStartDate}T15:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T15:00:00Z`), - }, // 1641049200 - { - rfc3339: `${defaultStartDate}T16:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T16:00:00Z`), - }, // 1641052800 - { - rfc3339: `${defaultStartDate}T17:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T17:00:00Z`), - }, // 1641056400 - { - rfc3339: `${defaultStartDate}T18:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T18:00:00Z`), - }, // 1641060000 - { - rfc3339: `${defaultStartDate}T19:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T19:00:00Z`), - }, // 1641063600 - { - rfc3339: `${defaultStartDate}T20:00:00Z`, - unix: timeToUnixSeconds(`${defaultStartDate}T20:00:00Z`), - }, // 1641067200 -]; + // Default time values in getting started sample data + const defaultTimes = [ + { + rfc3339: `${defaultStartDate}T08:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T08:00:00Z`), + }, // 1641024000 + { + rfc3339: `${defaultStartDate}T09:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T09:00:00Z`), + }, // 1641027600 + { + rfc3339: `${defaultStartDate}T10:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T10:00:00Z`), + }, // 1641031200 + { + rfc3339: `${defaultStartDate}T11:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T11:00:00Z`), + }, // 1641034800 + { + rfc3339: `${defaultStartDate}T12:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T12:00:00Z`), + }, // 1641038400 + { + rfc3339: `${defaultStartDate}T13:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T13:00:00Z`), + }, // 1641042000 + { + rfc3339: `${defaultStartDate}T14:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T14:00:00Z`), + }, // 1641045600 + { + rfc3339: `${defaultStartDate}T15:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T15:00:00Z`), + }, // 1641049200 + { + rfc3339: `${defaultStartDate}T16:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T16:00:00Z`), + }, // 1641052800 + { + rfc3339: `${defaultStartDate}T17:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T17:00:00Z`), + }, // 1641056400 + { + rfc3339: `${defaultStartDate}T18:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T18:00:00Z`), + }, // 1641060000 + { + rfc3339: `${defaultStartDate}T19:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T19:00:00Z`), + }, // 1641063600 + { + rfc3339: `${defaultStartDate}T20:00:00Z`, + unix: timeToUnixSeconds(`${defaultStartDate}T20:00:00Z`), + }, // 1641067200 + ]; -function updateTimestamps (newStartDate) { +function updateTimestamps (newStartDate, seedTimes=defaultTimes) { // Update the times array with replacement times - times = times.map(x => { + const times = seedTimes.map(x => { var newStartTimestamp = x.rfc3339.replace(/^.*T/, newStartDate + 'T'); return { @@ -128,13 +133,13 @@ function updateTimestamps (newStartDate) { var wrapper = $(this)[0]; times.forEach(function (x) { - oldDatePart = datePart(x.rfc3339.replace(/T.*$/, '')); - newDatePart = datePart(x.rfc3339_new.replace(/T.*$/, '')); - rfc3339Regex = new RegExp( + const oldDatePart = datePart(x.rfc3339.replace(/T.*$/, '')); + const newDatePart = datePart(x.rfc3339_new.replace(/T.*$/, '')); + const rfc3339Regex = new RegExp( `${oldDatePart.year}(.*?)${oldDatePart.month}(.*?)${oldDatePart.day}`, 'g' ); - rfc3339Repl = `${newDatePart.year}$1${newDatePart.month}$2${newDatePart.day}`; + const rfc3339Repl = `${newDatePart.year}$1${newDatePart.month}$2${newDatePart.day}`; wrapper.innerHTML = wrapper.innerHTML .replaceAll(x.unix, x.unix_new) @@ -146,13 +151,13 @@ function updateTimestamps (newStartDate) { var wrapper = $(this)[0]; times.forEach(function (x) { - oldDatePart = datePart(x.rfc3339.replace(/T.*$/, '')); - newDatePart = datePart(x.rfc3339_new.replace(/T.*$/, '')); - rfc3339Regex = new RegExp( + const oldDatePart = datePart(x.rfc3339.replace(/T.*$/, '')); + const newDatePart = datePart(x.rfc3339_new.replace(/T.*$/, '')); + const rfc3339Regex = new RegExp( `${oldDatePart.year}-${oldDatePart.month}-${oldDatePart.day}`, 'g' ); - rfc3339Repl = `${newDatePart.year}-${newDatePart.month}-${newDatePart.day}`; + const rfc3339Repl = `${newDatePart.year}-${newDatePart.month}-${newDatePart.day}`; wrapper.innerHTML = wrapper.innerHTML .replaceAll(x.unix, x.unix_new) @@ -161,7 +166,7 @@ function updateTimestamps (newStartDate) { }); // Create a new seed times array with new start time for next change - times = times.map(x => { + return times.map((x) => { var newStartTimestamp = x.rfc3339.replace(/^.*T/, newStartDate + 'T'); return { @@ -173,38 +178,50 @@ function updateTimestamps (newStartDate) { /////////////////////// MODAL INTERACTIONS / DATE PICKER /////////////////////// -// Date picker form element -var datePickerEl = $('#custom-date-selector'); +function CustomTimeTrigger({component}) { + const $component = $(component); + $component + .find('a[data-action="open"]:first') + .on('click', () => toggleModal('#influxdb-gs-date-select')); -// Initialize the date picker with the current startDate -const elem = datePickerEl[0]; -const datepicker = new Datepicker(elem, { - defaultViewDate: startDate, - format: 'yyyy-mm-dd', - nextArrow: '>', - prevArrow: '<', -}); + // Date picker form element + var datePickerEl = $('#custom-date-selector'); -//////////////////////////////////// ACTIONS /////////////////////////////////// + // Initialize the date picker with the current startDate + const elem = datePickerEl[0]; + const datepicker = new Datepicker(elem, { + defaultViewDate: startDate, + format: 'yyyy-mm-dd', + nextArrow: '>', + prevArrow: '<', + }); -// Initial update to yesterdays date ON PAGE LOAD -// Conditionally set the start date cookie it startDate is equal to the default value -updateTimestamps(startDate); -if (startDate === yesterday()) { - setStartDate(startDate); + //////////////////////////////////// ACTIONS /////////////////////////////////// + + // Initial update to yesterdays date ON PAGE LOAD + // Conditionally set the start date cookie it startDate is equal to the default value + let updatedTimes = updateTimestamps(startDate, defaultTimes); + + if (startDate === yesterday()) { + setStartDate(startDate); + } + + // Submit new date + $('#submit-custom-date').click(function () { + let newDate = datepicker.getDate(); + + if (newDate != undefined) { + newDate = formatDate(newDate); + + // Update the last updated timestamps with the new date + // and reassign the updated times. + updatedTimes = updateTimestamps(newDate, updatedTimes); + setStartDate(newDate); + toggleModal('#influxdb-gs-date-select'); + } else { + toggleModal('#influxdb-gs-date-select'); + } + }); } -// Sumbit new date -$('#submit-custom-date').click(function () { - let newDate = datepicker.getDate(); - - if (newDate != undefined) { - newDate = formatDate(newDate); - - updateTimestamps(newDate); - setStartDate(newDate); - toggleModal('#influxdb-gs-date-select'); - } else { - toggleModal('#influxdb-gs-date-select'); - } -}); +export { CustomTimeTrigger }; diff --git a/assets/js/docs-themes.js b/assets/js/docs-themes.js deleted file mode 100644 index ce9fa90f4..000000000 --- a/assets/js/docs-themes.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copied and pasted this script for CSS swaps w/ cookies from - http://www.thesitewizard.com/javascripts/change-style-sheets.shtml -*/ - -// *** TO BE CUSTOMISED *** -var style_preference_name = 'theme'; -var style_cookie_duration = 30; -var style_domain = 'docs.influxdata.com'; - -// *** END OF CUSTOMISABLE SECTION *** -// You do not need to customise anything below this line - -function switchStyle (css_title) { - // You may use this script on your site free of charge provided - // you do not remove this notice or the URL below. Script from - // http://www.thesitewizard.com/javascripts/change-style-sheets.shtml - var i, link_tag; - for ( - i = 0, link_tag = document.getElementsByTagName('link'); - i < link_tag.length; - i++ - ) { - if ( - link_tag[i].rel.indexOf('stylesheet') != -1 && - link_tag[i].title.includes('theme') - ) { - link_tag[i].disabled = true; - if (link_tag[i].title == css_title) { - link_tag[i].disabled = false; - } - } - setPreference(style_preference_name, css_title.replace(/-theme/, '')); - } -} - -function setStyleFromCookie () { - var css_title = `${getPreference(style_preference_name)}-theme`; - if (css_title !== undefined) { - switchStyle(css_title); - } -} diff --git a/assets/js/feature-callouts.js b/assets/js/feature-callouts.js index 918d783c2..253b09b13 100644 --- a/assets/js/feature-callouts.js +++ b/assets/js/feature-callouts.js @@ -13,21 +13,23 @@ function getCalloutID (el) { // Hide a callout and update the cookie with the viewed callout function hideCallout (calloutID) { - if (!notificationIsRead(calloutID)) { - setNotificationAsRead(calloutID, 'callout'); + if (!window.LocalStorageAPI.notificationIsRead(calloutID)) { + window.LocalStorageAPI.setNotificationAsRead(calloutID, 'callout'); $(`#${calloutID}`).fadeOut(200); } } // Show the url feature callouts on page load -$('.feature-callout').each(function () { - calloutID = calloutID($(this)); +$(document).ready(function () { + $('.feature-callout').each(function () { + const calloutID = getCalloutID($(this)); - if (!notificationIsRead(calloutID, 'callout')) { - $(`#${calloutID}.feature-callout`) - .fadeIn(300) - .removeClass('start-position'); - } + if (!window.LocalStorageAPI.notificationIsRead(calloutID, 'callout')) { + $(`#${calloutID}.feature-callout`) + .fadeIn(300) + .removeClass('start-position'); + } + }); }); // Hide the InfluxDB URL selector callout diff --git a/assets/js/helpers.js b/assets/js/helpers.js new file mode 100644 index 000000000..b3859be49 --- /dev/null +++ b/assets/js/helpers.js @@ -0,0 +1,13 @@ + +/** Delay execution of a function `fn` for a number of milliseconds `ms` + * e.g., delay a validation handler to avoid annoying the user. + */ +function delay(fn, ms) { + let timer = 0; + return function (...args) { + clearTimeout(timer); + timer = setTimeout(fn.bind(this, ...args), ms || 0); + }; +} + +export { delay }; \ No newline at end of file diff --git a/assets/js/influxdb-url.js b/assets/js/influxdb-url.js index 5d47995b1..2febe2b09 100644 --- a/assets/js/influxdb-url.js +++ b/assets/js/influxdb-url.js @@ -1,58 +1,44 @@ -var placeholderUrls = { - oss: 'http://localhost:8086', - cloud: 'https://cloud2.influxdata.com', - core: 'http://localhost:8181', - enterprise: 'http://localhost:8181', - serverless: 'https://cloud2.influxdata.com', - dedicated: 'cluster-id.a.influxdb.io', - clustered: 'cluster-host.com', -}; - /* - NOTE: The defaultUrls variable is defined in assets/js/local-storage.js +//////////////////////////////////////////////////////////////////////////////// +///////////////////////// INFLUXDB URL PREFERENCE ///////////////////////////// +//////////////////////////////////////////////////////////////////////////////// */ +import * as pageParams from '@params'; +import { + DEFAULT_STORAGE_URLS, + getPreference, + setPreference, + setInfluxDBUrls, + removeInfluxDBUrl, + getInfluxDBUrl, + getInfluxDBUrls, +} from './local-storage.js'; +import $ from 'jquery'; +import { context as PRODUCT_CONTEXT, referrerHost } from './page-context.js'; +import { delay } from './helpers.js'; +import { toggleModal } from './modals.js'; -var elementSelector = '.article--content pre:not(.preserve)'; +export const CLOUD_URLS = Object.values(pageParams.influxdb_urls.cloud.providers).flatMap((provider) => provider.regions?.map((region) => region.url)); -// Return the page context (cloud, serverless, oss/enterprise, dedicated, clustered, other) -function context() { - if (/\/influxdb\/cloud\//.test(window.location.pathname)) { - return 'cloud'; - } else if (/\/influxdb3\/core/.test(window.location.pathname)) { - return 'core'; - } else if (/\/influxdb3\/enterprise/.test(window.location.pathname)) { - return 'enterprise'; - } else if (/\/influxdb3\/cloud-serverless/.test(window.location.pathname)) { - return 'serverless'; - } else if (/\/influxdb3\/cloud-dedicated/.test(window.location.pathname)) { - return 'dedicated'; - } else if (/\/influxdb3\/clustered/.test(window.location.pathname)) { - return 'clustered'; - } else if ( - /\/(enterprise_|influxdb).*\/v[1-2]\//.test(window.location.pathname) - ) { - return 'oss/enterprise'; - } else { - return 'other'; +export function InfluxDBUrl() { + const UNIQUE_URL_PRODUCTS = ['dedicated', 'clustered']; + const IS_UNIQUE_URL_PRODUCT = UNIQUE_URL_PRODUCTS.includes(PRODUCT_CONTEXT); + + // Add actual cloud URLs as needed + const elementSelector = '.article--content pre:not(.preserve)'; + + ///////////////////// Stored preference management /////////////////////// + // Retrieve the user's InfluxDB preference (cloud or oss) from the influxdb_pref local storage key. Default is cloud. + function getURLPreference() { + return getPreference('influxdb_url'); } -} -//////////////////////////////////////////////////////////////////////////////// -///////////////////////// Session-management functions ///////////////////////// -//////////////////////////////////////////////////////////////////////////////// + // Set the user's selected InfluxDB preference (cloud or oss) + function setURLPreference(preference) { + setPreference('influxdb_url', preference); + } -// Retrieve the user's InfluxDB preference (cloud or oss) from the influxdb_pref -// local storage key. Default is cloud. -function getURLPreference() { - return getPreference('influxdb_url'); -} - -// Set the user's selected InfluxDB preference (cloud or oss) -function setURLPreference(preference) { - setPreference('influxdb_url', preference); -} - -/* + /* influxdata_docs_urls local storage object keys: - oss @@ -70,647 +56,634 @@ function setURLPreference(preference) { - custom */ -// Store URLs in the urls local storage object -function storeUrl(context, newUrl, prevUrl) { - urlsObj = {}; - urlsObj['prev_' + context] = prevUrl; - urlsObj[context] = newUrl; + // Store URLs in the urls local storage object + function storeUrl(context, newUrl, prevUrl) { + let urlsObj = {}; + urlsObj['prev_' + context] = prevUrl; + urlsObj[context] = newUrl; - setInfluxDBUrls(urlsObj); -} - -// Store custom URL in the url local storage object -// Used to populate the custom URL field -function storeCustomUrl(customUrl) { - setInfluxDBUrls({ custom: customUrl }); - $('input#custom[type=radio]').val(customUrl); -} - -// Set a URL in the urls local storage object to an empty string -// Used to clear the form when custom url input is left empty -function removeCustomUrl() { - removeInfluxDBUrl('custom'); -} - -// Store a product URL in the urls local storage object -// Used to populate the custom URL field -function storeProductUrl(product, productUrl) { - urlsObj = {}; - urlsObj[product] = productUrl; - - setInfluxDBUrls(urlsObj); - $(`input#${product}-url-field`).val(productUrl); -} - -// Set a product URL in the urls local storage object to an empty string -// Used to clear the form when dedicated url input is left empty -function removeProductUrl(product) { - removeInfluxDBUrl(product); -} - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////// InfluxDB URL utility functions //////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// Preserve URLs in codeblocks that come just after or are inside a div -// with the class, .keep-url -function addPreserve() { - $('.keep-url').each(function () { - // For code blocks with no syntax highlighting - $(this).next('pre').addClass('preserve'); - // For code blocks with no syntax highlighting inside of a link (API endpoint blocks) - $(this).next('a').find('pre').addClass('preserve'); - // For code blocks with syntax highlighting - $(this).next('.highlight').find('pre').addClass('preserve'); - // For code blocks inside .keep-url div - // Special use case for codeblocks generated from yaml data / frontmatter - $(this).find('pre').addClass('preserve'); - }); -} - -// Retrieve the currently selected URLs from the urls local storage object. -function getUrls() { - var storedUrls = getInfluxDBUrls(); - var currentCloudUrl = storedUrls.cloud; - var currentOSSUrl = storedUrls.oss; - var currentCoreUrl = storedUrls.core; - var currentEnterpriseUrl = storedUrls.enterprise; - var currentServerlessUrl = storedUrls.serverless; - var currentDedicatedUrl = storedUrls.dedicated; - var currentClusteredUrl = storedUrls.clustered; - var urls = { - oss: currentOSSUrl, - cloud: currentCloudUrl, - core: currentCoreUrl, - enterprise: currentEnterpriseUrl, - serverless: currentServerlessUrl, - dedicated: currentDedicatedUrl, - clustered: currentClusteredUrl, - }; - return urls; -} - -// Retrieve the previously selected URLs from the from the urls local storage object. -// This is used to update URLs whenever you switch between browser tabs. -function getPrevUrls() { - var storedUrls = getInfluxDBUrls(); - var prevCloudUrl = storedUrls.prev_cloud; - var prevOSSUrl = storedUrls.prev_oss; - var prevCoreUrl = storedUrls.prev_core; - var prevEnterpriseUrl = storedUrls.prev_enterprise; - var prevServerlessUrl = storedUrls.prev_serverless; - var prevDedicatedUrl = storedUrls.prev_dedicated; - var prevClusteredUrl = storedUrls.prev_clustered; - var prevUrls = { - oss: prevOSSUrl, - cloud: prevCloudUrl, - core: prevCoreUrl, - enterprise: prevEnterpriseUrl, - serverless: prevServerlessUrl, - dedicated: prevDedicatedUrl, - clustered: prevClusteredUrl, - }; - return prevUrls; -} - -// Iterate through code blocks and update InfluxDB urls -function updateUrls(prevUrls, newUrls) { - var preference = getURLPreference(); - var prevUrlsParsed = { - oss: {}, - cloud: {}, - core: {}, - enterprise: {}, - serverless: {}, - dedicated: {}, - clustered: {}, - }; - - var newUrlsParsed = { - oss: {}, - cloud: {}, - core: {}, - enterprise: {}, - serverless: {}, - dedicated: {}, - clustered: {}, - }; - - Object.keys(prevUrls).forEach(function (k) { - try { - prevUrlsParsed[k] = new URL(prevUrls[k]); - } catch { - prevUrlsParsed[k] = { origin: prevUrls[k], host: prevUrls[k] }; - } - }); - - Object.keys(newUrls).forEach(function (k) { - try { - newUrlsParsed[k] = new URL(newUrls[k]); - } catch { - newUrlsParsed[k] = { origin: newUrls[k], host: newUrls[k] }; - } - }); - - /** - * Match and replace host with host - * then replace URL with URL. - **/ - var ossReplacements = [ - { replace: prevUrlsParsed.cloud, with: newUrlsParsed.cloud }, - { replace: prevUrlsParsed.oss, with: newUrlsParsed.oss }, - ]; - var cloudReplacements = [ - { replace: prevUrlsParsed.cloud, with: newUrlsParsed.cloud }, - { replace: prevUrlsParsed.oss, with: newUrlsParsed.cloud }, - ]; - var serverlessReplacements = [ - { replace: prevUrlsParsed.serverless, with: newUrlsParsed.serverless }, - { replace: prevUrlsParsed.oss, with: newUrlsParsed.serverless }, - ]; - var coreReplacements = [ - { replace: prevUrlsParsed.core, with: newUrlsParsed.core }, - ]; - var enterpriseReplacements = [ - { replace: prevUrlsParsed.enterprise, with: newUrlsParsed.enterprise }, - ]; - var dedicatedReplacements = [ - { replace: prevUrlsParsed.dedicated, with: newUrlsParsed.dedicated }, - ]; - var clusteredReplacements = [ - { replace: prevUrlsParsed.clustered, with: newUrlsParsed.clustered }, - ]; - - if (context() === 'cloud') { - var replacements = cloudReplacements; - } else if (context() === 'core') { - var replacements = coreReplacements; - } else if (context() === 'enterprise') { - var replacements = enterpriseReplacements; - } else if (context() === 'serverless') { - var replacements = serverlessReplacements; - } else if (context() === 'dedicated') { - var replacements = dedicatedReplacements; - } else if (context() === 'clustered') { - var replacements = clusteredReplacements; - } else if (context() === 'oss/enterprise') { - var replacements = ossReplacements; - } else if (preference === 'cloud') { - var replacements = cloudReplacements; - } else { - var replacements = ossReplacements; + setInfluxDBUrls(urlsObj); } - replacements.forEach(function (o) { - if (o.replace.origin != o.with.origin) { - var fuzzyOrigin = new RegExp(o.replace.origin + '(:(^443)|[0-9]+)?', 'g'); - $(elementSelector).each(function () { - $(this).html( - $(this) - .html() - .replace(fuzzyOrigin, function (m) { - return o.with.origin || m; - }) + // Store custom URL in the url local storage object + // Used to populate the custom URL field + function storeCustomUrl(customUrl) { + setInfluxDBUrls({ custom: customUrl }); + $('input#custom[type=radio]').val(customUrl); + } + + // Set a URL in the urls local storage object to an empty string + // Used to clear the form when custom url input is left empty + function removeCustomUrl() { + removeInfluxDBUrl('custom'); + } + + // Store a product URL in the urls local storage object + // Used to populate the custom URL field + function storeProductUrl(product, productUrl) { + let urlsObj = {}; + urlsObj[product] = productUrl; + + setInfluxDBUrls(urlsObj); + $(`input#${product}-url-field`).val(productUrl); + } + + // Set a product URL in the urls local storage object to an empty string + // Used to clear the form when dedicated url input is left empty + function removeProductUrl(product) { + removeInfluxDBUrl(product); + } + + //////////////////////////////////////////////////////////////////////////////// + //////////////////////// InfluxDB URL utility functions //////////////////////// + //////////////////////////////////////////////////////////////////////////////// + + // Preserve URLs in codeblocks that come just after or are inside a div + // with the class, .keep-url + function addPreserve() { + $('.keep-url').each(function () { + // For code blocks with no syntax highlighting + $(this).next('pre').addClass('preserve'); + // For code blocks with no syntax highlighting inside of a link (API endpoint blocks) + $(this).next('a').find('pre').addClass('preserve'); + // For code blocks with syntax highlighting + $(this).next('.highlight').find('pre').addClass('preserve'); + // For code blocks inside .keep-url div + // Special use case for codeblocks generated from yaml data / frontmatter + $(this).find('pre').addClass('preserve'); + }); + } + + // Retrieve the currently selected URLs from the urls local storage object. + function getUrls() { + const { cloud, oss, core, enterprise, serverless, dedicated, clustered } = getInfluxDBUrls(); + return { oss, cloud, core, enterprise, serverless, dedicated, clustered }; +} + + // Retrieve the previously selected URLs from the from the urls local storage object. + // This is used to update URLs whenever you switch between browser tabs. + function getPrevUrls() { + const { + prev_cloud: cloud, + prev_oss: oss, + prev_core: core, + prev_enterprise: enterprise, + prev_serverless: serverless, + prev_dedicated: dedicated, + prev_clustered: clustered, + } = getInfluxDBUrls(); + return { oss, cloud, core, enterprise, serverless, dedicated, clustered }; + } + + // Iterate through code blocks and update InfluxDB urls + function updateUrls(prevUrls, newUrls) { + var prevUrlsParsed = { + oss: {}, + cloud: {}, + core: {}, + enterprise: {}, + serverless: {}, + dedicated: {}, + clustered: {}, + }; + + var newUrlsParsed = { + oss: {}, + cloud: {}, + core: {}, + enterprise: {}, + serverless: {}, + dedicated: {}, + clustered: {}, + }; + + Object.keys(prevUrls).forEach(function (k) { + try { + prevUrlsParsed[k] = new URL(prevUrls[k]); + } catch { + prevUrlsParsed[k] = { origin: prevUrls[k], host: prevUrls[k] }; + } + }); + + Object.keys(newUrls).forEach(function (k) { + try { + newUrlsParsed[k] = new URL(newUrls[k]); + } catch { + newUrlsParsed[k] = { origin: newUrls[k], host: newUrls[k] }; + } + }); + + /** + * Match and replace host with host + * then replace URL with URL. + **/ + var ossReplacements = [ + { replace: prevUrlsParsed.cloud, with: newUrlsParsed.cloud }, + { replace: prevUrlsParsed.oss, with: newUrlsParsed.oss }, + ]; + var cloudReplacements = [ + { replace: prevUrlsParsed.cloud, with: newUrlsParsed.cloud }, + { replace: prevUrlsParsed.oss, with: newUrlsParsed.cloud }, + ]; + var serverlessReplacements = [ + { replace: prevUrlsParsed.serverless, with: newUrlsParsed.serverless }, + { replace: prevUrlsParsed.oss, with: newUrlsParsed.serverless }, + ]; + var coreReplacements = [ + { replace: prevUrlsParsed.core, with: newUrlsParsed.core }, + ]; + var enterpriseReplacements = [ + { replace: prevUrlsParsed.enterprise, with: newUrlsParsed.enterprise }, + ]; + var dedicatedReplacements = [ + { replace: prevUrlsParsed.dedicated, with: newUrlsParsed.dedicated }, + ]; + var clusteredReplacements = [ + { replace: prevUrlsParsed.clustered, with: newUrlsParsed.clustered }, + ]; + + var replacements; + switch (PRODUCT_CONTEXT) { + case 'cloud': + replacements = cloudReplacements; + break; + case 'core': + replacements = coreReplacements; + break; + case 'enterprise': + replacements = enterpriseReplacements; + break; + case 'serverless': + replacements = serverlessReplacements; + break; + case 'dedicated': + replacements = dedicatedReplacements; + break; + case 'clustered': + replacements = clusteredReplacements; + break; + case 'oss/enterprise': + replacements = ossReplacements; + break; + default: + if (getURLPreference() === 'cloud') { + replacements = cloudReplacements; + } else { + replacements = ossReplacements; + } + break; + } + replacements.forEach(function (o) { + if (o.replace.origin != o.with.origin) { + var fuzzyOrigin = new RegExp( + o.replace.origin + '(:(^443)|[0-9]+)?', + 'g' ); - }); - } - }); - - function replaceWholename(startStr, endStr, replacement) { - var startsWithSeparator = new RegExp('[/.]'); - var endsWithSeparator = new RegExp('[-.:]'); - if ( - !startsWithSeparator.test(startStr) && - !endsWithSeparator.test(endStr) - ) { - var newHost = startStr + replacement + endStr; - return newHost; - } - } - - replacements - .map(function (o) { - return { replace: o.replace.host, with: o.with.host }; - }) - .forEach(function (o) { - if (o.replace != o.with) { - var fuzzyHost = new RegExp('(.?)' + o.replace + '(.?)', 'g'); $(elementSelector).each(function () { $(this).html( $(this) .html() - .replace(fuzzyHost, function (m, p1, p2) { - var r = replaceWholename(p1, p2, o.with) || m; - return r; + .replace(fuzzyOrigin, function (m) { + return o.with.origin || m; }) ); }); } }); -} -// Append the URL selector button to each codeblock containing a placeholder URL -function appendUrlSelector() { - var appendToUrls = [ - placeholderUrls.oss, - placeholderUrls.cloud, - placeholderUrls.core, - placeholderUrls.enterprise, - placeholderUrls.serverless, - placeholderUrls.dedicated, - placeholderUrls.clustered, - ]; + function replaceWholename(startStr, endStr, replacement) { + var startsWithSeparator = new RegExp('[/.]'); + var endsWithSeparator = new RegExp('[-.:]'); + if ( + !startsWithSeparator.test(startStr) && + !endsWithSeparator.test(endStr) + ) { + var newHost = startStr + replacement + endStr; + return newHost; + } + } - getBtnText = (context) => { - contextText = { - 'oss/enterprise': 'Change InfluxDB URL', - cloud: 'InfluxDB Cloud Region', - core: 'Change InfluxDB URL', - enterprise: 'Change InfluxDB URL', - serverless: 'InfluxDB Cloud Region', - dedicated: 'Set Dedicated cluster URL', - clustered: 'Set InfluxDB cluster URL', - other: 'InfluxDB Cloud or OSS?', + replacements + .map(function (o) { + return { replace: o.replace.host, with: o.with.host }; + }) + .forEach(function (o) { + if (o.replace != o.with) { + var fuzzyHost = new RegExp('(.?)' + o.replace + '(.?)', 'g'); + $(elementSelector).each(function () { + $(this).html( + $(this) + .html() + .replace(fuzzyHost, function (m, p1, p2) { + var r = replaceWholename(p1, p2, o.with) || m; + return r; + }) + ); + }); + } + }); + } + + // Append the URL selector button to each codeblock containing a placeholder URL + function appendUrlSelector(urls={ + cloud: '', + oss: '', + core: '', + enterprise: '', + serverless: '', + dedicated: '', + clustered: '', + }) { + const appendToUrls = Object.values(urls); + + const getBtnText = (context) => { + const contextText = { + 'oss/enterprise': 'Change InfluxDB URL', + cloud: 'InfluxDB Cloud Region', + core: 'Change InfluxDB URL', + enterprise: 'Change InfluxDB URL', + serverless: 'InfluxDB Cloud Region', + dedicated: 'Set Cloud Dedicated cluster URL', + clustered: 'Set InfluxDB cluster URL', + other: 'InfluxDB Cloud or OSS?', + }; + + return contextText[context]; }; - return contextText[context]; - }; - appendToUrls.forEach(function (url) { - $(elementSelector).each(function () { - var code = $(this).html(); - if (code.includes(url)) { - $(this).after( - "' - ); - $('.select-url').fadeIn(400); - } + $(elementSelector).each(function () { + var code = $(this).html(); + if (code.includes(url)) { + $(this).after( + "' + ); + $('.select-url').fadeIn(400); + } + }); }); + } + +//////////////////////////////////////////////////////////////////////////// +////////////////// Initialize InfluxDB URL interactions //////////////////// +//////////////////////////////////////////////////////////////////////////// + + // Add the preserve tag to code blocks that shouldn't be updated + addPreserve(); + const { cloud, oss, core, enterprise, serverless, dedicated, clustered } = DEFAULT_STORAGE_URLS; + + // Append URL selector buttons to code blocks + appendUrlSelector({ cloud, oss, core, enterprise, serverless, dedicated, clustered }); + + // Update URLs on load + + updateUrls({ cloud, oss, core, enterprise, serverless, dedicated, clustered }, getUrls()); + + // Set active radio button on page load + setRadioButtons(getUrls()); + + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////// Modal window interactions /////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + + // General modal window interactions are controlled in modals.js + + // Open the InfluxDB URL selector modal + $('.url-trigger').click(function (e) { + e.preventDefault(); + toggleModal('#influxdb-url-list'); }); -} -//////////////////////////////////////////////////////////////////////////////// -///////////////////////////// Function executions ////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// Add the preserve tag to code blocks that shouldn't be updated -addPreserve(); - -// Append URL selector buttons to code blocks -appendUrlSelector(); - -// Update URLs on load -updateUrls(placeholderUrls, getUrls()); - -// Set active radio button on page load -setRadioButtons(getUrls()); - -//////////////////////////////////////////////////////////////////////////////// -////////////////////////// Modal window interactions /////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// General modal window interactions are controlled in modals.js - -// Open the InfluxDB URL selector modal -$('.url-trigger').click(function (e) { - e.preventDefault(); - toggleModal('#influxdb-url-list'); -}); - -// Set the selected URL radio buttons to :checked -function setRadioButtons() { - currentUrls = getUrls(); - $('input[name="influxdb-cloud-url"][value="' + currentUrls.cloud + '"]').prop( - 'checked', - true - ); - $( - 'input[name="influxdb-serverless-url"][value="' + - currentUrls.serverless + - '"]' - ).prop('checked', true); - $('input[name="influxdb-oss-url"][value="' + currentUrls.oss + '"]').prop( - 'checked', - true - ); - $('input[name="influxdb-core-url"][value="' + currentUrls.core + '"]').prop( - 'checked', - true - ); - $('input[name="influxdb-enterprise-url"][value="' + currentUrls.enterprise + '"]').prop( - 'checked', - true - ); -} - -// Add checked to fake-radio if cluster is selected on page load -if ($('ul.clusters label input').is(':checked')) { - var group = $('ul.clusters label input:checked') - .parent() - .parent() - .parent() - .siblings(); - $('.fake-radio', group).addClass('checked'); -} - -// Select first cluster when region is clicked -$('p.region').click(function () { - if (!$('.fake-radio', this).hasClass('checked')) { - $('.fake-radio', this).addClass('checked'); - $('+ ul.clusters li:first label', this).trigger('click'); + // Set the selected URL radio buttons to :checked + function setRadioButtons() { + const currentUrls = getUrls(); + $( + 'input[name="influxdb-cloud-url"][value="' + currentUrls.cloud + '"]' + ).prop('checked', true); + $( + 'input[name="influxdb-serverless-url"][value="' + + currentUrls.serverless + + '"]' + ).prop('checked', true); + $('input[name="influxdb-oss-url"][value="' + currentUrls.oss + '"]').prop( + 'checked', + true + ); + $('input[name="influxdb-core-url"][value="' + currentUrls.core + '"]').prop( + 'checked', + true + ); + $( + 'input[name="influxdb-enterprise-url"][value="' + + currentUrls.enterprise + + '"]' + ).prop('checked', true); } -}); -// Remove checked class from fake-radio when another region is selected -$('.region-group').click(function () { - if (!$('.fake-radio', this).hasClass('checked')) { - $('.fake-radio', !this).removeClass('checked'); - $('.fake-radio', this).addClass('checked'); + // Add checked to fake-radio if cluster is selected on page load + if ($('ul.clusters label input').is(':checked')) { + var group = $('ul.clusters label input:checked') + .parent() + .parent() + .parent() + .siblings(); + $('.fake-radio', group).addClass('checked'); } -}); -// Update URLs and URL preference when selected/clicked in the modal -$('input[name="influxdb-oss-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('oss', newUrl, getUrls().oss); - updateUrls(getPrevUrls(), getUrls()); - setURLPreference('oss'); -}); -$('input[name="influxdb-oss-url"]').click(function () { - setURLPreference('oss'); -}); + // Select first cluster when region is clicked + $('p.region').click(function () { + if (!$('.fake-radio', this).hasClass('checked')) { + $('.fake-radio', this).addClass('checked'); + $('+ ul.clusters li:first label', this).trigger('click'); + } + }); -$('input[name="influxdb-cloud-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('cloud', newUrl, getUrls().cloud); - updateUrls(getPrevUrls(), getUrls()); -}); -$('input[name="influxdb-cloud-url"]').click(function () { - setURLPreference('cloud'); -}); + // Remove checked class from fake-radio when another region is selected + $('.region-group').click(function () { + if (!$('.fake-radio', this).hasClass('checked')) { + $('.fake-radio', !this).removeClass('checked'); + $('.fake-radio', this).addClass('checked'); + } + }); -$('input[name="influxdb-core-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('core', newUrl, getUrls().core); - updateUrls(getPrevUrls(), getUrls()); -}); + // Update URLs and URL preference when selected/clicked in the modal + $('input[name="influxdb-oss-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('oss', newUrl, getUrls().oss); + updateUrls(getPrevUrls(), getUrls()); + setURLPreference('oss'); + }); + $('input[name="influxdb-oss-url"]').click(function () { + setURLPreference('oss'); + }); -$('input[name="influxdb-enterprise-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('enterprise', newUrl, getUrls().enterprise); - updateUrls(getPrevUrls(), getUrls()); -}); + $('input[name="influxdb-cloud-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('cloud', newUrl, getUrls().cloud); + updateUrls(getPrevUrls(), getUrls()); + }); + $('input[name="influxdb-cloud-url"]').click(function () { + setURLPreference('cloud'); + }); -$('input[name="influxdb-serverless-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('serverless', newUrl, getUrls().serverless); - updateUrls(getPrevUrls(), getUrls()); -}); + $('input[name="influxdb-core-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('core', newUrl, getUrls().core); + updateUrls(getPrevUrls(), getUrls()); + }); -$('input[name="influxdb-dedicated-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('dedicated', newUrl, getUrls().dedicated); - updateUrls(getPrevUrls(), getUrls()); -}); + $('input[name="influxdb-enterprise-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('enterprise', newUrl, getUrls().enterprise); + updateUrls(getPrevUrls(), getUrls()); + }); -$('input[name="influxdb-clustered-url"]').change(function () { - var newUrl = $(this).val(); - storeUrl('clustered', newUrl, getUrls().clustered); - updateUrls(getPrevUrls(), getUrls()); -}); + $('input[name="influxdb-serverless-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('serverless', newUrl, getUrls().serverless); + updateUrls(getPrevUrls(), getUrls()); + }); -// Toggle preference tabs -function togglePrefBtns(el) { - preference = el.length ? el.attr('id').replace('pref-', '') : 'cloud'; - prefUrls = $('#' + preference + '-urls'); + $('input[name="influxdb-dedicated-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('dedicated', newUrl, getUrls().dedicated); + updateUrls(getPrevUrls(), getUrls()); + }); - el.addClass('active'); - el.siblings().removeClass('active'); - prefUrls.addClass('active').removeClass('inactive'); - prefUrls.siblings().addClass('inactive').removeClass('active'); - setURLPreference(preference); -} + $('input[name="influxdb-clustered-url"]').change(function () { + var newUrl = $(this).val(); + storeUrl('clustered', newUrl, getUrls().clustered); + updateUrls(getPrevUrls(), getUrls()); + }); -// Select preference tab on click -$('#pref-tabs .pref-tab').click(function () { - togglePrefBtns($(this)); -}); + // Populate the product-specific URL fields on page load + UNIQUE_URL_PRODUCTS.forEach(function (productEl) { + let productUrlCookie = getInfluxDBUrl(productEl); + $(`input#${productEl}-url-field`).val(productUrlCookie); + $(`#${productEl}-url-field`).val(productUrlCookie); + }); -// Select preference tab from local storage -function showPreference() { - var preference = getPreference('influxdb_url'); - prefTab = $('#pref-' + preference); - togglePrefBtns(prefTab); -} + // Toggle preference tabs + function togglePrefBtns(el) { + const preference = el.length ? el.attr('id').replace('pref-', '') : 'cloud'; + const prefUrls = $('#' + preference + '-urls'); -// Toggled preferred service on load -showPreference(); + el.addClass('active'); + el.siblings().removeClass('active'); + prefUrls.addClass('active').removeClass('inactive'); + prefUrls.siblings().addClass('inactive').removeClass('active'); + setURLPreference(preference); + } -//////////////////////////////////////////////////////////////////////////////// -///////////////////////////////// Custom URLs ////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// + // Select preference tab on click + $('#pref-tabs .pref-tab').click(function () { + togglePrefBtns($(this)); + }); -// Validate custom URLs -function validateUrl(url) { - /** validDomain = (Named host | IPv6 host | IPvFuture host)(:Port)? **/ - var validDomain = new RegExp( - `([a-z0-9\-._~%]+` + - `|\[[a-f0-9:.]+\]` + - `|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\])` + - `(:[0-9]+)?` - ); + // Select preference tab from local storage + function showPreference() { + const preference = getPreference('influxdb_url'); + const prefTab = $('#pref-' + preference); + togglePrefBtns(prefTab); + } - if (!['dedicated', 'clustered'].includes(context())) { - // Validation for non-dedicated, non-clustered custom InfluxDB URLs - try { - new URL(url); - return { valid: true, error: '' }; - } catch (e) { - var validProtocol = /^http(s?)/; - var protocol = url.match(/http(s?):\/\//) + // Toggled preferred service on load + showPreference(); + + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////// Custom URLs ////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + + // Validate custom URLs + function validateUrl(url) { + /** validDomain = (Named host | IPv6 host | IPvFuture host)(:Port)? **/ + const validDomain = new RegExp( + `([a-z0-9\-._~%]+` + + `|\[[a-f0-9:.]+\]` + + `|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\])` + + `(:[0-9]+)?` + ); + + if (!IS_UNIQUE_URL_PRODUCT) { + // Validation for non-dedicated, non-clustered custom InfluxDB URLs + const validProtocol = /^http(s?)/; + const protocol = url.match(/http(s?):\/\//) ? url.match(/http(s?):\/\//)[0] : ''; - var domain = url.replace(protocol, ''); + const domain = url.replace(protocol, ''); + // First use the regex to check for an HTTP protocol and valid domain + // --JS URL validation can't differentiate host:port string from a protocol. if (validProtocol.test(protocol) == false) { return { valid: false, error: 'Invalid protocol, use http[s]' }; } else if (validDomain.test(domain) == false) { return { valid: false, error: 'Invalid domain' }; - } else if (e) { - return { valid: false, error: 'Invalid URL' }; + } else { + try { + new URL(url); + return { valid: true, error: '' }; + } catch (e) { + if (e instanceof TypeError) { + return { valid: false, error: 'Invalid URL' }; + } + } + } + } else { + // Validation for product-specific URLs + const includesProtocol = /^.*:\/\//; + const protocol = url.match(/^.*:\/\//) ? url.match(/^.*:\/\//)[0] : ''; + const domain = url.replace(protocol, ''); + + if (url.length === 0) { + return { valid: true, error: '' }; + } else if (includesProtocol.test(protocol) == true) { + return { valid: false, error: 'Do not include the protocol' }; + } else if (validDomain.test(domain) == false) { + return { valid: false, error: 'Invalid domain' }; + } else { + return { valid: true, error: '' }; } } - } else { - // Validation for product-specific URLs - var includesProtocol = /^.*:\/\//; - var protocol = url.match(/^.*:\/\//) ? url.match(/^.*:\/\//)[0] : ''; - var domain = url.replace(protocol, ''); + } - if (url.length === 0) { - return { valid: true, error: '' }; - } else if (includesProtocol.test(protocol) == true) { - return { valid: false, error: 'Do not include the protocol' }; - } else if (validDomain.test(domain) == false) { - return { valid: false, error: 'Invalid domain' }; + // Show validation errors + function showValidationMessage(validation) { + $('#custom-url').addClass('error'); + $('#custom-url').attr('data-message', validation.error); + } + + // Hide validation messages and replace the message attr with empty string + function hideValidationMessage() { + $('#custom-url').removeClass('error').attr('data-message', ''); + } + + // Set the custom URL local storage object and apply the change + // If the custom URL field is empty, it defaults to the context default + function applyCustomUrl() { + var custUrl = $('#custom-url-field').val(); + let urlValidation = validateUrl(custUrl); + if (custUrl.length > 0) { + if (urlValidation.valid) { + hideValidationMessage(); + storeCustomUrl(custUrl); + storeUrl(PRODUCT_CONTEXT, custUrl, getUrls()[PRODUCT_CONTEXT]); + updateUrls(getPrevUrls(), getUrls()); + } else { + showValidationMessage(urlValidation); + } } else { - return { valid: true, error: '' }; + removeCustomUrl(); + hideValidationMessage(); + $( + `input[name="influxdb-${PRODUCT_CONTEXT}-url"][value="${DEFAULT_URLS[PRODUCT_CONTEXT]}"]` + ).trigger('click'); } } -} -// Show validation errors -function showValidationMessage(validation) { - $('#custom-url').addClass('error'); - $('#custom-url').attr('data-message', validation.error); -} - -// Hide validation messages and replace the message attr with empty string -function hideValidationMessage() { - $('#custom-url').removeClass('error').attr('data-message', ''); -} - -// Set the custom URL local storage object and apply the change -// If the custom URL field is empty, it defaults to the context default -function applyCustomUrl() { - var custUrl = $('#custom-url-field').val(); - let urlValidation = validateUrl(custUrl); - if (custUrl.length > 0) { - if (urlValidation.valid) { + // Set the product URL local storage object and apply the change + // If the product URL field is empty, it defaults to the product default + function applyProductUrl(product) { + var productUrl = $(`#${product}-url-field`).val(); + let urlValidation = validateUrl(productUrl); + if (productUrl.length > 0) { + if (urlValidation.valid) { + hideValidationMessage(); + storeProductUrl(product, productUrl); + storeUrl(product, productUrl, getUrls()[product]); + updateUrls(getPrevUrls(), getUrls()); + } else { + showValidationMessage(urlValidation); + } + } else { + removeProductUrl(product); hideValidationMessage(); - storeCustomUrl(custUrl); - storeUrl(context(), custUrl, getUrls()[context()]); - updateUrls(getPrevUrls(), getUrls()); + } + } + + // Trigger radio button on custom URL field focus + $('input#custom-url-field').focus(function () { + $('input#custom[type="radio"]').trigger('click'); + }); + + // Update URLs and close modal when using 'enter' to exit custom URL field + $('#custom-url').submit(function (e) { + e.preventDefault(); + + let url = $('#custom-url-field').val() || ''; + + if (['dedicated', 'clustered'].includes(PRODUCT_CONTEXT)) { + url = $(`#${PRODUCT_CONTEXT}-url-field`).val() || ''; + } + + const urlValidation = validateUrl(url); + + if (url === '' || urlValidation.valid) { + if (!['dedicated', 'clustered'].includes(PRODUCT_CONTEXT)) { + applyCustomUrl(); + } else { + applyProductUrl(PRODUCT_CONTEXT); + } + $('#modal-close').trigger('click'); } else { showValidationMessage(urlValidation); } - } else { - removeCustomUrl(); - hideValidationMessage(); - $( - 'input[name="influxdb-${context()}-url"][value="' + defaultUrls[context()] + '"]' - ).trigger('click'); - } -} + }); -// Set the product URL local storage object and apply the change -// If the product URL field is empty, it defaults to the product default -function applyProductUrl(product) { - var productUrl = $(`#${product}-url-field`).val(); - let urlValidation = validateUrl(productUrl); - if (productUrl.length > 0) { + // List of elements that store custom URLs + var urlValueElements = [ + '#custom-url-field', + '#dedicated-url-field', + '#clustered-url-field', + ].join(); + + // Store the custom InfluxDB URL or product-specific URL when exiting the field + $(urlValueElements).blur(function () { + !['dedicated', 'clustered'].includes(PRODUCT_CONTEXT) + ? applyCustomUrl() + : applyProductUrl(PRODUCT_CONTEXT); + }); + + function handleUrlValidation() { + let url = $(urlValueElements).val(); + let urlValidation = validateUrl(url); if (urlValidation.valid) { hideValidationMessage(); - storeProductUrl(product, productUrl); - getUrls(product, productUrl, getUrls()[product]); - updateUrls(getPrevUrls(), getUrls()); } else { showValidationMessage(urlValidation); } - } else { - removeProductUrl(product); - hideValidationMessage(); } -} + // When in erred state, revalidate custom URL on keyup + $(document).on('keyup', urlValueElements, delay(handleUrlValidation, 500)); -// Trigger radio button on custom URL field focus -$('input#custom-url-field').focus(function (e) { - $('input#custom[type="radio"]').trigger('click'); -}); - -// Update URLs and close modal when using 'enter' to exit custom URL field -$('#custom-url').submit(function (e) { - e.preventDefault(); - - const productContext = context(); - let url = $('#custom-url-field').val() || ''; - - if (['dedicated', 'clustered'].includes(productContext)) { - url = $(`#${productContext}-url-field`).val() || ''; + // Populate the custom InfluxDB URL field on page load + var customUrlOnLoad = getInfluxDBUrl('custom'); + if (customUrlOnLoad != '') { + $('input#custom').val(customUrlOnLoad); + $('#custom-url-field').val(customUrlOnLoad); } - const urlValidation = validateUrl(url); + // Populate the product-specific URL fields on page load + var productsWithUniqueURLs = ['dedicated', 'clustered']; - if (url === '' || urlValidation.valid) { - if (!['dedicated', 'clustered'].includes(productContext)) { - applyCustomUrl(); - } else { - applyProductUrl(productContext); - } - $('#modal-close').trigger('click'); - } else { - showValidationMessage(urlValidation); - } -}); + productsWithUniqueURLs.forEach(function (productEl) { + const productUrlCookie = getInfluxDBUrl(productEl); + $(`input#${productEl}-url-field`).val(productUrlCookie); + $(`#${productEl}-url-field`).val(productUrlCookie); + }); -// List of elements that store custom URLs -var urlValueElements = [ - '#custom-url-field', - '#dedicated-url-field', - '#clustered-url-field', -].join(); + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////// Dynamically update URLs //////////////////////////// + //////////////////////////////////////////////////////////////////////////////// -// Store the custom InfluxDB URL or product-specific URL when exiting the field -$(urlValueElements).blur(function () { - !['dedicated', 'clustered'].includes(context()) - ? applyCustomUrl() - : applyProductUrl(context()); -}); - -/** Delay execution of a function `fn` for a number of milliseconds `ms` - * e.g., delay a validation handler to avoid annoying the user. - */ -function delay(fn, ms) { - let timer = 0; - return function (...args) { - clearTimeout(timer); - timer = setTimeout(fn.bind(this, ...args), ms || 0); - }; -} - -function handleUrlValidation() { - let url = $(urlValueElements).val(); - let urlValidation = validateUrl(url); - if (urlValidation.valid) { - hideValidationMessage(); - } else { - showValidationMessage(urlValidation); + // Check if the referrerHost is one of the cloud URLs + // cloudUrls is built dynamically in layouts/partials/footer/javascript.html + if (CLOUD_URLS.includes(referrerHost)) { + storeUrl('cloud', referrerHost, getUrls().cloud); + updateUrls(getPrevUrls(), getUrls()); + setRadioButtons(); + setURLPreference('cloud'); + showPreference(); } } -// When in erred state, revalidate custom URL on keyup -$(document).on('keyup', urlValueElements, delay(handleUrlValidation, 500)); - -// Populate the custom InfluxDB URL field on page load -var customUrlOnLoad = getInfluxDBUrl('custom'); -if (customUrlOnLoad != '') { - $('input#custom').val(customUrlOnLoad); - $('#custom-url-field').val(customUrlOnLoad); -} - -// Populate the product-specific URL fields on page load -var productsWithUniqueURLs = ['dedicated', 'clustered']; - -productsWithUniqueURLs.forEach(function (productEl) { - productUrlCookie = getInfluxDBUrl(productEl); - $(`input#${productEl}-url-field`).val(productUrlCookie); - $(`#${productEl}-url-field`).val(productUrlCookie); -}); - -//////////////////////////////////////////////////////////////////////////////// -/////////////////////////// Dynamically update URLs //////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// Extract the protocol and hostname of referrer -referrerMatch = document.referrer.match(/^(?:[^\/]*\/){2}[^\/]+/g); -referrerHost = referrerMatch ? referrerMatch[0] : ''; - -// Check if the referrerHost is one of the cloud URLs -// cloudUrls is built dynamically in layouts/partials/footer/javascript.html -if (cloudUrls.includes(referrerHost)) { - storeUrl('cloud', referrerHost, getUrls().cloud); - updateUrls(getPrevUrls(), getUrls()); - setRadioButtons(); - setURLPreference('cloud'); - showPreference(); -} diff --git a/assets/js/local-storage.js b/assets/js/local-storage.js index 229765238..9a981e35b 100644 --- a/assets/js/local-storage.js +++ b/assets/js/local-storage.js @@ -10,6 +10,7 @@ - messages: Messages (data/notifications.yaml) that have been seen (array) - callouts: Feature callouts that have been seen (array) */ +import * as pageParams from '@params'; // Prefix for all InfluxData docs local storage const storagePrefix = 'influxdata_docs_'; @@ -17,14 +18,14 @@ const storagePrefix = 'influxdata_docs_'; /* Initialize data in local storage with a default value. */ -initializeLocalStorage = (storageKey, defaultValue) => { - fullStorageKey = storagePrefix + storageKey; +function initializeStorageItem(storageKey, defaultValue) { + const fullStorageKey = storagePrefix + storageKey; // Check if the data exists before initializing the data if (localStorage.getItem(fullStorageKey) === null) { localStorage.setItem(fullStorageKey, defaultValue); } -}; +} /* //////////////////////////////////////////////////////////////////////////////// @@ -35,7 +36,7 @@ initializeLocalStorage = (storageKey, defaultValue) => { const prefStorageKey = storagePrefix + 'preferences'; // Default preferences -var defaultPrefObj = { +const defaultPrefObj = { api_lib: null, influxdb_url: 'cloud', sidebar_state: 'open', @@ -48,119 +49,113 @@ var defaultPrefObj = { Retrieve a preference from the preference key. If the key doesn't exist, initialize it with default values. */ -getPreference = prefName => { +function getPreference(prefName) { // Initialize preference data if it doesn't already exist if (localStorage.getItem(prefStorageKey) === null) { - initializeLocalStorage('preferences', JSON.stringify(defaultPrefObj)); + initializeStorageItem('preferences', JSON.stringify(defaultPrefObj)); } // Retrieve and parse preferences as JSON - prefString = localStorage.getItem(prefStorageKey); - prefObj = JSON.parse(prefString); + const prefString = localStorage.getItem(prefStorageKey); + const prefObj = JSON.parse(prefString); // Return the value of the specified preference return prefObj[prefName]; -}; +} // Set a preference in the preferences key -setPreference = (prefID, prefValue) => { - var prefString = localStorage.getItem(prefStorageKey); - let prefObj = JSON.parse(prefString); +function setPreference(prefID, prefValue) { + const prefString = localStorage.getItem(prefStorageKey); + const prefObj = JSON.parse(prefString); prefObj[prefID] = prefValue; localStorage.setItem(prefStorageKey, JSON.stringify(prefObj)); -}; +} // Return an object containing all preferences -getPreferences = () => JSON.parse(localStorage.getItem(prefStorageKey)); +function getPreferences() { + return JSON.parse(localStorage.getItem(prefStorageKey)); +} -/* //////////////////////////////////////////////////////////////////////////////// -///////////////////////////// INFLUXDATA DOCS URLS ///////////////////////////// +//////////// MANAGE INFLUXDATA DOCS URLS IN LOCAL STORAGE ////////////////////// //////////////////////////////////////////////////////////////////////////////// -*/ -const urlStorageKey = storagePrefix + 'urls'; -// Default URLs per product -var defaultUrls = { - oss: 'http://localhost:8086', - cloud: 'https://us-west-2-1.aws.cloud2.influxdata.com', - core: 'http://localhost:8181', - enterprise: 'http://localhost:8181', - serverless: 'https://us-east-1-1.aws.cloud2.influxdata.com', - dedicated: 'cluster-id.a.influxdb.io', - clustered: 'cluster-host.com', -}; +const defaultUrls = {}; +Object.entries(pageParams.influxdb_urls).forEach(([product, {providers}]) => { + defaultUrls[product] = providers.filter(provider => provider.name === 'Default')[0]?.regions[0]?.url; +}); -// Defines the default urls value -var defaultUrlsObj = { +export const DEFAULT_STORAGE_URLS = { oss: defaultUrls.oss, cloud: defaultUrls.cloud, serverless: defaultUrls.serverless, core: defaultUrls.core, enterprise: defaultUrls.enterprise, - dedicated: defaultUrls.dedicated, + dedicated: defaultUrls.cloud_dedicated, clustered: defaultUrls.clustered, prev_oss: defaultUrls.oss, prev_cloud: defaultUrls.cloud, prev_core: defaultUrls.core, prev_enterprise: defaultUrls.enterprise, prev_serverless: defaultUrls.serverless, - prev_dedicated: defaultUrls.dedicated, + prev_dedicated: defaultUrls.cloud_dedicated, prev_clustered: defaultUrls.clustered, custom: '', }; +const urlStorageKey = storagePrefix + 'urls'; + // Return an object that contains all InfluxDB urls stored in the urls key -getInfluxDBUrls = () => { +function getInfluxDBUrls() { // Initialize urls data if it doesn't already exist if (localStorage.getItem(urlStorageKey) === null) { - initializeLocalStorage('urls', JSON.stringify(defaultUrlsObj)); + initializeStorageItem('urls', JSON.stringify(DEFAULT_STORAGE_URLS)); } return JSON.parse(localStorage.getItem(urlStorageKey)); -}; +} // Get the current or previous URL for a specific product or a custom url -getInfluxDBUrl = product => { +function getInfluxDBUrl(product) { // Initialize urls data if it doesn't already exist if (localStorage.getItem(urlStorageKey) === null) { - initializeLocalStorage('urls', JSON.stringify(defaultUrlsObj)); + initializeStorageItem('urls', JSON.stringify(DEFAULT_STORAGE_URLS)); } // Retrieve and parse the URLs as JSON - urlsString = localStorage.getItem(urlStorageKey); - urlsObj = JSON.parse(urlsString); + const urlsString = localStorage.getItem(urlStorageKey); + const urlsObj = JSON.parse(urlsString); // Return the URL of the specified product return urlsObj[product]; -}; +} /* Set multiple product URLs in the urls key. Input should be an object where the key is the product and the value is the URL to set for that product. */ -setInfluxDBUrls = updatedUrlsObj => { - var urlsString = localStorage.getItem(urlStorageKey); - let urlsObj = JSON.parse(urlsString); +function setInfluxDBUrls(updatedUrlsObj) { + const urlsString = localStorage.getItem(urlStorageKey); + const urlsObj = JSON.parse(urlsString); - newUrlsObj = { ...urlsObj, ...updatedUrlsObj }; + const newUrlsObj = { ...urlsObj, ...updatedUrlsObj }; localStorage.setItem(urlStorageKey, JSON.stringify(newUrlsObj)); -}; +} // Set an InfluxDB URL to an empty string in the urls key -removeInfluxDBUrl = product => { - var urlsString = localStorage.getItem(urlStorageKey); - let urlsObj = JSON.parse(urlsString); +function removeInfluxDBUrl(product) { + const urlsString = localStorage.getItem(urlStorageKey); + const urlsObj = JSON.parse(urlsString); urlsObj[product] = ''; localStorage.setItem(urlStorageKey, JSON.stringify(urlsObj)); -}; +} /* //////////////////////////////////////////////////////////////////////////////// @@ -171,24 +166,24 @@ removeInfluxDBUrl = product => { const notificationStorageKey = storagePrefix + 'notifications'; // Default notifications -var defaultNotificationsObj = { +const defaultNotificationsObj = { messages: [], callouts: [], }; -getNotifications = () => { +function getNotifications() { // Initialize notifications data if it doesn't already exist if (localStorage.getItem(notificationStorageKey) === null) { - initializeLocalStorage('notifications', JSON.stringify(defaultNotificationsObj)); + initializeStorageItem('notifications', JSON.stringify(defaultNotificationsObj)); } // Retrieve and parse the notifications data as JSON - notificationString = localStorage.getItem(notificationStorageKey); - notificationObj = JSON.parse(notificationString); + const notificationString = localStorage.getItem(notificationStorageKey); + const notificationObj = JSON.parse(notificationString); // Return the notifications object return notificationObj; -}; +} /* Checks if a notification is read. Provide the notification ID and one of the @@ -200,12 +195,12 @@ getNotifications = () => { If the notification ID exists in the array assigned to the specified type, the notification has been read. */ -notificationIsRead = (notificationID, notificationType) => { - let notificationsObj = getNotifications(); - readNotifications = notificationsObj[`${notificationType}s`]; +function notificationIsRead(notificationID, notificationType) { + const notificationsObj = getNotifications(); + const readNotifications = notificationsObj[`${notificationType}s`]; return readNotifications.includes(notificationID); -}; +} /* Sets a notification as read. Provide the notification ID and one of the @@ -216,12 +211,28 @@ notificationIsRead = (notificationID, notificationType) => { The notification ID is added to the array assigned to the specified type. */ -setNotificationAsRead = (notificationID, notificationType) => { - let notificationsObj = getNotifications(); - let readNotifications = notificationsObj[`${notificationType}s`]; +function setNotificationAsRead(notificationID, notificationType) { + const notificationsObj = getNotifications(); + const readNotifications = notificationsObj[`${notificationType}s`]; readNotifications.push(notificationID); notificationsObj[notificationType + 's'] = readNotifications; localStorage.setItem(notificationStorageKey, JSON.stringify(notificationsObj)); +} + +// Export functions as a module and make the file backwards compatible for non-module environments until all remaining dependent scripts are ported to modules +export { + defaultUrls, + initializeStorageItem, + getPreference, + setPreference, + getPreferences, + getInfluxDBUrls, + getInfluxDBUrl, + setInfluxDBUrls, + removeInfluxDBUrl, + getNotifications, + notificationIsRead, + setNotificationAsRead, }; diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 000000000..9dff11f32 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,141 @@ +// assets/js/main.js + +// If you need to pass parameters from the calling Hugo page, you can import them here like so: +// import * as pageParams from '@params'; + +/** Import modules that are not components. + * TODO: Refactor these into single-purpose component modules. + */ +// import * as codeblocksPreferences from './api-libs.js'; +// import * as datetime from './datetime.js'; +// import * as featureCallouts from './feature-callouts.js'; +import * as apiLibs from './api-libs.js'; +import * as codeControls from './code-controls.js'; +import * as contentInteractions from './content-interactions.js'; +import { delay } from './helpers.js'; +import { InfluxDBUrl } from './influxdb-url.js'; +import * as localStorage from './local-storage.js'; +import * as modals from './modals.js'; +import * as notifications from './notifications.js'; +import * as pageContext from './page-context.js'; +import * as pageFeedback from './page-feedback.js'; +import * as tabbedContent from './tabbed-content.js'; +import * as v3Wayfinding from './v3-wayfinding.js'; +// import * as homeInteractions from './home-interactions.js'; +// import { getUrls, getReferrerHost, InfluxDBUrl } from './influxdb-url.js'; +// import * as keybindings from './keybindings.js'; +// import * as listFilters from './list-filters.js'; +// import { Modal } from './modal.js'; +// import { showNotifications } from './notifications.js'; +// import ReleaseTOC from './release-toc.js'; +// import * as scroll from './scroll.js'; +// import { TabbedContent } from './tabbed-content.js'; + +/** Import component modules + * The component pattern organizes JavaScript, CSS, and HTML for a specific UI element or interaction: + * - HTML: my-component.html + * - CSS: my-component.css + * - JavaScript: my-component.js + * The JavaScript is ideally a single-purpose module that exports a single default function to initialize the component and handle any component interactions. + */ +import AskAITrigger from './ask-ai-trigger.js'; +import { CustomTimeTrigger } from './custom-timestamps.js'; +import { SearchButton } from './search-button.js'; +import { SidebarToggle } from './sidebar-toggle.js'; +import Theme from './theme.js'; +import ThemeSwitch from './theme-switch.js'; +// import CodeControls from './code-controls.js'; +// import ContentInteractions from './content-interactions.js'; +// import CustomTimestamps from './custom-timestamps.js'; +// import Diagram from './Diagram.js'; +// import FluxGroupKeysExample from './FluxGroupKeysExample.js'; +// import FluxInfluxDBVersionsModal from './flux-influxdb-versions.js'; +// import PageFeedback from './page-feedback.js'; +// import SearchInput from './SearchInput.js'; +// import Sidebar from './Sidebar.js'; +// import V3Wayfinding from './v3-wayfinding.js'; +// import VersionSelector from './VersionSelector.js'; + +// Expose libraries and components within a namespaced object (for backwards compatibility or testing) +// Expose libraries and components within a namespaced object (for backwards compatibility or testing) + + + +document.addEventListener('DOMContentLoaded', function () { + if (typeof window.influxdatadocs === 'undefined') { + window.influxdatadocs = {}; + } + + // Expose modules to the global object for debugging, testing, and backwards compatibility for non-ES6 modules. + window.influxdatadocs.delay = delay; + window.influxdatadocs.localStorage = window.LocalStorageAPI = localStorage; + window.influxdatadocs.pageContext = pageContext; + window.influxdatadocs.toggleModal = modals.toggleModal; + + // On content loaded, initialize (not-component-ready) UI interaction modules + // To differentiate these from component-ready modules, these modules typically export an initialize function that wraps UI interactions and event listeners. + modals.initialize(); + apiLibs.initialize(); + codeControls.initialize(); + contentInteractions.initialize(); + InfluxDBUrl(); + notifications.initialize(); + pageFeedback.initialize(); + tabbedContent.initialize(); + v3Wayfinding.initialize(); + + /** Initialize components + Component Structure: Each component is structured as a jQuery anonymous function that listens for the document ready state. + Initialization in main.js: Each component is called in main.js inside a jQuery document ready function to ensure they are initialized when the document is ready. + Note: These components should *not* be called directly in the HTML. + */ + const components = document.querySelectorAll('[data-component]'); + components.forEach((component) => { + const componentName = component.getAttribute('data-component'); + switch (componentName) { + case 'ask-ai-trigger': + AskAITrigger({ component }); + window.influxdatadocs[componentName] = AskAITrigger; + break; + case 'custom-time-trigger': + CustomTimeTrigger({ component }); + window.influxdatadocs[componentName] = CustomTimeTrigger; + break; + case 'search-button': + SearchButton({ component }); + window.influxdatadocs[componentName] = SearchButton; + break; + case 'sidebar-toggle': + SidebarToggle({ component }); + window.influxdatadocs[componentName] = SidebarToggle; + break; + case 'theme': + Theme({ component }); + window.influxdatadocs[componentName] = Theme; + break; + // CodeControls(); + // ContentInteractions(); + // CustomTimestamps(); + // Diagram(); + // FluxGroupKeysExample(); + // FluxInfluxDBVersionsModal(); + // InfluxDBUrl(); + // Modal(); + // PageFeedback(); + // ReleaseTOC(); + // SearchInput(); + // showNotifications(); + // Sidebar(); + // TabbedContent(); + // ThemeSwitch({}); + // V3Wayfinding(); + // VersionSelector(); + case 'theme-switch': + ThemeSwitch({ component }); + window.influxdatadocs[componentName] = ThemeSwitch; + break; + default: + console.warn(`Unknown component: ${componentName}`); + } + }); +}); diff --git a/assets/js/modals.js b/assets/js/modals.js index 9111f1945..017a1eb2b 100644 --- a/assets/js/modals.js +++ b/assets/js/modals.js @@ -2,28 +2,43 @@ /////////////////////// General modal window interactions ////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Toggle the URL selector modal window -function toggleModal(modalID="") { - if ($(".modal").hasClass("open")) { - $(".modal").fadeOut(200).removeClass("open"); - $(".modal-content").delay(400).hide(0); +import $ from 'jquery'; + +function handleModalClick() { + // Open modal window on click + $('.modal-trigger').click(function (e) { + e.preventDefault(); + toggleModal(); + }); + + // Close modal window on click + $('#modal-close, .modal-overlay').click(function (e) { + e.preventDefault(); + toggleModal(); + + // Remove modal query param ('view') if it exists + const queryParams = new URLSearchParams(window.location.search); + const anchor = window.location.hash; + + if (queryParams.get('view') !== null) { + queryParams.delete('view'); + window.history.replaceState({}, '', `${location.pathname}${anchor}`); + } + }); +} + +function toggleModal(modalID = '') { + if ($('.modal').hasClass('open')) { + $('.modal').fadeOut(200).removeClass('open'); + $('.modal-content').delay(400).hide(0); } else { - $(".modal").fadeIn(200).addClass("open"); + $('.modal').fadeIn(200).addClass('open'); $(`${modalID}.modal-content`).show(); } } -// Close modal window on click -$("#modal-close, .modal-overlay").click(function(e) { - e.preventDefault() - toggleModal() - - // Remove modal query param ('view') if it exists - const queryParams = new URLSearchParams(window.location.search); - const anchor = window.location.hash; +function initialize() { + handleModalClick(); +} - if (queryParams.get('view') !== null) { - queryParams.delete('view'); - window.history.replaceState({}, '', `${location.pathname}${anchor}`); - }; -}) \ No newline at end of file +export { initialize, toggleModal }; diff --git a/assets/js/notifications.js b/assets/js/notifications.js index 2400f9052..5c7082f3a 100644 --- a/assets/js/notifications.js +++ b/assets/js/notifications.js @@ -5,6 +5,8 @@ IDs in the messages array are considered read and no longer appear to the user. */ +import $ from 'jquery'; + // Get notification ID function notificationID(el) { return $(el).attr('id'); @@ -39,7 +41,10 @@ function showNotifications() { var exclude = $(this).data('exclude').split(','); var pageInScope = inScope(window.location.pathname, scope); var pageExcluded = excludePage(window.location.pathname, exclude); - var notificationRead = notificationIsRead(notificationID(this), 'message'); + var notificationRead = window.LocalStorageAPI.notificationIsRead( + notificationID(this), + 'message' + ); if (pageInScope && !pageExcluded && !notificationRead) { $(this).show().animate({ right: 0, opacity: 1 }, 200, 'swing'); @@ -53,32 +58,43 @@ function hideNotification(el) { .closest('.notification') .animate({ height: 0, opacity: 0 }, 200, 'swing', function () { $(this).hide(); - setNotificationAsRead(notificationID(this), 'message'); + window.LocalStorageAPI.setNotificationAsRead( + notificationID(this), + 'message' + ); }); } -// Show notifications on page load -showNotifications(); +function initialize() { + // Show notifications on page load + showNotifications(); -// Hide a notification and set the notification as read -$('.close-notification').click(function (e) { - e.preventDefault(); - hideNotification(this); -}); + // Hide a notification and set the notification as read + $('.close-notification').click(function (e) { + e.preventDefault(); + hideNotification(this); + }); -$('.notification .show').click(function () { - $(this).closest('.notification').toggleClass('min'); -}); + $('.notification .show').click(function () { + $(this).closest('.notification').toggleClass('min'); + }); -// Notification element scroll position -const notificationsInitialPosition = parseInt( - $('#docs-notifications').css('top'), - 10 -); -$(window).scroll(function () { - var notificationPosition = - notificationsInitialPosition - scrollY > 10 - ? notificationsInitialPosition - scrollY - : 10; - $('#docs-notifications').css('top', notificationPosition); -}); + // Notification element scroll position + const notificationsInitialPosition = parseInt( + $('#docs-notifications').css('top'), + 10 + ); + $(window).scroll(function () { + var notificationPosition = + notificationsInitialPosition - scrollY > 10 + ? notificationsInitialPosition - scrollY + : 10; + $('#docs-notifications').css('top', notificationPosition); + }); +} + +export { + initialize, + showNotifications, + hideNotification, +} \ No newline at end of file diff --git a/assets/js/page-context.js b/assets/js/page-context.js new file mode 100644 index 000000000..fdb744966 --- /dev/null +++ b/assets/js/page-context.js @@ -0,0 +1,88 @@ +/** This module retrieves browser context information and site data for the + * current page, version, and product. + */ +import { products, influxdb_urls } from '@params'; + +function getCurrentProductData() { + const path = window.location.pathname; + const mappings = [ + { pattern: /\/influxdb\/cloud\//, product: products.cloud, urls: influxdb_urls.influxdb_cloud }, + { pattern: /\/influxdb3\/core/, product: products.influxdb3_core, urls: influxdb_urls.core }, + { pattern: /\/influxdb3\/enterprise/, product: products.influxdb3_enterprise, urls: influxdb_urls.enterprise }, + { pattern: /\/influxdb3\/cloud-serverless/, product: products.influxdb3_cloud_serverless, urls: influxdb_urls.cloud }, + { pattern: /\/influxdb3\/cloud-dedicated/, product: products.influxdb3_cloud_dedicated, urls: influxdb_urls.dedicated }, + { pattern: /\/influxdb3\/clustered/, product: products.influxdb3_clustered, urls: influxdb_urls.clustered }, + { pattern: /\/enterprise_v1\//, product: products.enterprise_influxdb, urls: influxdb_urls.oss }, + { pattern: /\/influxdb.*v1\//, product: products.influxdb, urls: influxdb_urls.oss }, + { pattern: /\/influxdb.*v2\//, product: products.influxdb, urls: influxdb_urls.oss }, + { pattern: /\/kapacitor\//, product: products.kapacitor, urls: influxdb_urls.oss }, + { pattern: /\/telegraf\//, product: products.telegraf, urls: influxdb_urls.oss }, + { pattern: /\/chronograf\//, product: products.chronograf, urls: influxdb_urls.oss }, + ]; + + for (const { pattern, product, urls } of mappings) { + if (pattern.test(path)) { + return { product, urls }; + } + } + + return 'other'; +} + +// Return the page context (cloud, serverless, oss/enterprise, dedicated, clustered, other) +function getContext() { + if (/\/influxdb\/cloud\//.test(window.location.pathname)) { + return 'cloud'; + } else if (/\/influxdb3\/core/.test(window.location.pathname)) { + return 'core'; + } else if (/\/influxdb3\/enterprise/.test(window.location.pathname)) { + return 'enterprise'; + } else if (/\/influxdb3\/cloud-serverless/.test(window.location.pathname)) { + return 'serverless'; + } else if (/\/influxdb3\/cloud-dedicated/.test(window.location.pathname)) { + return 'dedicated'; + } else if (/\/influxdb3\/clustered/.test(window.location.pathname)) { + return 'clustered'; + } else if ( + /\/(enterprise_|influxdb).*\/v[1-2]\//.test(window.location.pathname) + ) { + return 'oss/enterprise'; + } else { + return 'other'; + } +} + +// Store the host value for the current page +const currentPageHost = window.location.href.match(/^(?:[^/]*\/){2}[^/]+/g)[0]; + +function getReferrerHost() { + // Extract the protocol and hostname of referrer + const referrerMatch = document.referrer.match(/^(?:[^/]*\/){2}[^/]+/g); + return referrerMatch ? referrerMatch[0] : ''; +} + +const context = getContext(), + host = currentPageHost, + hostname = location.hostname, + path = location.pathname, + pathArr = location.pathname.split('/').slice(1, -1), + product = pathArr[0], + productData = getCurrentProductData(), + protocol = location.protocol, + referrer = document.referrer === '' ? 'direct' : document.referrer, + referrerHost = getReferrerHost(), + // TODO: Verify this still does what we want since the addition of InfluxDB 3 naming and the Core and Enterprise versions. + version = (/^v\d/.test(pathArr[1]) || pathArr[1]?.includes('cloud') ? pathArr[1].replace(/^v/, '') : "n/a") + +export { + context, + host, + hostname, + path, + product, + productData, + protocol, + referrer, + referrerHost, + version, +}; \ No newline at end of file diff --git a/assets/js/page-feedback.js b/assets/js/page-feedback.js index af2ea0cd2..eab4ebaa3 100644 --- a/assets/js/page-feedback.js +++ b/assets/js/page-feedback.js @@ -3,52 +3,58 @@ * buttons and modal. */ -// Collect data from the page path -const pathArr = location.pathname.split('/').slice(1, -1) -const pageData = { - host: location.hostname, - path: location.pathname, - product: pathArr[0], - version: (/^v\d/.test(pathArr[1]) || pathArr[1]?.includes('cloud') ? pathArr[1].replace(/^v/, '') : "n/a"), -} +import $ from 'jquery'; +import { hostname, path, product, protocol, version } from './page-context.js'; +import { toggleModal } from './modals.js'; // Hijack form submission and send feedback data to be stored. // Called by onSubmit in each feedback form. function submitFeedbackForm(formID) { - // Collect form data, structure as an object, and remove fname honeypot const formData = new FormData(document.forms[formID]); const formDataObj = Object.fromEntries(formData.entries()); - const {fname, ...feedbackData} = formDataObj; - + const { ...feedbackData } = formDataObj; + // Build lp fields from form data - let fields = ""; + let fields = ''; for (let key in feedbackData) { // Strip out newlines and escape double quotes if the field key is "feedback" - if (key == "feedback-text") { - fields += key + '="' + feedbackData[key].replace(/(\r\n|\n+|\r+)/gm, " ").replace(/(\")/gm, '\\"') + '",'; + if (key == 'feedback-text') { + fields += + key + + '="' + + feedbackData[key] + .replace(/(\r\n|\n+|\r+)/gm, ' ') + .replace(/(\")/gm, '\\"') + + '",'; } else { - fields += key + "=" + feedbackData[key] + ","; - } + fields += key + '=' + feedbackData[key] + ','; + } } - fields = fields.substring(0, fields.length -1); + fields = fields.substring(0, fields.length - 1); // Build lp using page data and the fields string - const lp = `feedback,host=${pageData.host},path=${pageData.path},product=${pageData.product},version=${pageData.version} ${fields}` + const lp = `feedback,host=${hostname},path=${path},product=${product},version=${version} ${fields}`; // Use a honeypot form field to detect a bot // If the value of the honeypot field is greater than 0, the submitter is a bot function isBot() { const honeypot = formData.get('fname'); - return (honeypot.length > 0) + return honeypot.length > 0; } - + // If the submitter is not a bot, send the feedback data if (!isBot()) { - xhr = new XMLHttpRequest(); - xhr.open('POST', 'https://j32dswat7l.execute-api.us-east-1.amazonaws.com/prod'); + const xhr = new XMLHttpRequest(); + xhr.open( + 'POST', + 'https://j32dswat7l.execute-api.us-east-1.amazonaws.com/prod' + ); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhr.setRequestHeader('Access-Control-Allow-Origin', `${location.protocol}//${location.host}`); + xhr.setRequestHeader( + 'Access-Control-Allow-Origin', + `${protocol}//${location.host}` + ); xhr.setRequestHeader('Content-Type', 'text/plain; charset=utf-8'); xhr.setRequestHeader('Accept', 'application/json'); xhr.send(lp); @@ -70,28 +76,43 @@ function submitLifeCycle() { // Called by onclick in the page-feedback modal submit button. function submitLifeCycleAndClose() { submitFeedbackForm('pagefeedbacktext'); - $('.modal #page-feedback .loader-wrapper').css('display', 'flex').hide().fadeIn(200); - $('.modal #page-feedback #thank-you').css('display', 'flex').hide().delay(800).fadeIn(200); - $('.modal #page-feedback textarea').css('box-shadow', 'none') + $('.modal #page-feedback .loader-wrapper') + .css('display', 'flex') + .hide() + .fadeIn(200); + $('.modal #page-feedback #thank-you') + .css('display', 'flex') + .hide() + .delay(800) + .fadeIn(200); + $('.modal #page-feedback textarea').css('box-shadow', 'none'); $('.modal #page-feedback .loader-wrapper').delay(1000).hide(0); - setTimeout(function() {toggleModal()}, 1800); + setTimeout(function () { + toggleModal(); + }, 1800); return false; } -//////////////////////////////// Event triggers //////////////////////////////// +function initialize() { + //////////////////////////////// Event triggers //////////////////////////////// -// Submit page feedback (yes/no) on radio select and trigger life cycle -$('#pagefeedback input[type=radio]').change(function() { - $('form#pagefeedback').submit(); - submitLifeCycle() -}) + // Submit page feedback (yes/no) on radio select and trigger life cycle + $('#pagefeedback input[type=radio]').change(function () { + $('form#pagefeedback').submit(); + submitLifeCycle(); + }); -// Toggle the feedback modal when user selects that the page is not helpful -$('#pagefeedback #not-helpful input[type=radio]').click(function() { - setTimeout(function() {toggleModal('#page-feedback')}, 400); -}) + // Toggle the feedback modal when user selects that the page is not helpful + $('#pagefeedback #not-helpful input[type=radio]').click(function () { + setTimeout(function () { + toggleModal('#page-feedback'); + }, 400); + }); -// Toggle the feedback modal when user selects that the page is not helpful -$('.modal #no-thanks').click(function() { - toggleModal(); -}) \ No newline at end of file + // Toggle the feedback modal when user selects that the page is not helpful + $('.modal #no-thanks').click(function () { + toggleModal(); + }); +} + +export { initialize }; diff --git a/assets/js/search-button.js b/assets/js/search-button.js new file mode 100644 index 000000000..139e12474 --- /dev/null +++ b/assets/js/search-button.js @@ -0,0 +1,10 @@ +import { toggleSidebar } from './sidebar-toggle.js'; + +export function SearchButton({ component }) { + component.querySelector('[data-action="toggle"]') + .addEventListener('click', () => { + toggleSidebar('sidebar-open'); + document.getElementById('algolia-search-input').focus(); + return false; + }); +} \ No newline at end of file diff --git a/assets/js/sidebar-toggle.js b/assets/js/sidebar-toggle.js index 2c20b3ddf..4db64db79 100644 --- a/assets/js/sidebar-toggle.js +++ b/assets/js/sidebar-toggle.js @@ -1,8 +1,10 @@ /* - Copied and pasted this script for CSS swaps w/ cookies from + Portions of this code come from CSS swaps w/ cookies from http://www.thesitewizard.com/javascripts/change-style-sheets.shtml */ +import * as localStorage from './local-storage.js'; + // *** TO BE CUSTOMISED *** var sidebar_state_preference_name = 'sidebar_state'; var sidebar_state_duration = 30; @@ -11,7 +13,7 @@ var style_domain = 'docs.influxdata.com'; // *** END OF CUSTOMISABLE SECTION *** // You do not need to customise anything below this line -function toggleSidebar (toggle_state) { +function toggleSidebar(toggle_state) { // You may use this script on your site free of charge provided // you do not remove this notice or the URL below. Script from // http://www.thesitewizard.com/javascripts/change-style-sheets.shtml @@ -30,16 +32,30 @@ function toggleSidebar (toggle_state) { link_tag[i].disabled = false; } } - setPreference( + localStorage.setPreference( sidebar_state_preference_name, toggle_state.replace(/sidebar-/, '') ); } } -function setSidebarState () { - var toggle_state = `sidebar-${getPreference(sidebar_state_preference_name)}`; +function setSidebarState() { + var toggle_state = `sidebar-${localStorage.getPreference(sidebar_state_preference_name)}`; if (toggle_state !== undefined) { toggleSidebar(toggle_state); } } + +function SidebarToggle({ component }) { + const current_state = component.getAttribute('data-state'); + component + .querySelector('[data-action="toggle"]') + .addEventListener('click', () => { + toggleSidebar(`sidebar-${current_state}`); + return false; + }); + + setSidebarState(); +} + +export { setSidebarState, toggleSidebar, SidebarToggle }; diff --git a/assets/js/tabbed-content.js b/assets/js/tabbed-content.js index 536301828..3d00ddd92 100644 --- a/assets/js/tabbed-content.js +++ b/assets/js/tabbed-content.js @@ -5,7 +5,10 @@ * smoothscroll when clicked. The whitelist is defined in content-interactions.js. **/ -function tabbedContent (container, tab, content) { +import $ from 'jquery'; +import { scrollToAnchor } from './content-interactions.js'; + +function tabbedContent(container, tab, content) { // Add the active class to the first tab in each tab group, // in case it wasn't already set in the markup. $(container).each(function () { @@ -30,10 +33,7 @@ function tabbedContent (container, tab, content) { }); } -tabbedContent('.code-tabs-wrapper', '.code-tabs p a', '.code-tab-content'); -tabbedContent('.tabs-wrapper', '.tabs p a', '.tab-content'); - -function getTabQueryParam () { +function getTabQueryParam() { const queryParams = new URLSearchParams(window.location.search); return $('