From 0ecfb7161f5f9fe9053f18ec580093bab9ae3ef8 Mon Sep 17 00:00:00 2001
From: luke-hagar-sp <98849695+luke-hagar-sp@users.noreply.github.com>
Date: Thu, 1 Feb 2024 12:42:36 -0600
Subject: [PATCH] Attempting to correct previous issues with monorepo structure
---
.gitignore | 102 +-
.npmrc | 1 -
.prettierrc | 12 -
.vscode/extensions.json | 3 -
.vscode/settings.json | 6 -
LICENSE | 21 -
LICENSE.txt | 2 +-
README.md | 175 +-
Sveltekit-App/.eslintignore | 13 +
Sveltekit-App/.eslintrc.cjs | 30 +
Sveltekit-App/.gitignore | 10 +
Sveltekit-App/.npmrc | 1 +
Sveltekit-App/.prettierignore | 13 +
Sveltekit-App/.prettierrc | 8 +
Sveltekit-App/.vscode/settings.json | 118 +
Sveltekit-App/README.md | 38 +
Sveltekit-App/package-lock.json | 6156 ++++
Sveltekit-App/package.json | 57 +
Sveltekit-App/postcss.config.cjs | 6 +
Sveltekit-App/src/app.d.ts | 28 +
{src => Sveltekit-App/src}/app.html | 6 +-
{src => Sveltekit-App/src}/app.postcss | 14 +-
Sveltekit-App/src/error.html | 20 +
Sveltekit-App/src/hooks.server.ts | 48 +
.../lib/Components}/AnimatedCounter.svelte | 0
.../src/lib/Components/CodeBlockModal.svelte | 13 +
.../HomepageCards/ResourceLinksCard.svelte | 21 +
.../HomepageCards/StatusCard.svelte | 52 +
.../HomepageCards/SupportLinksCard.svelte | 16 +
.../HomepageCards/TenantLinksCard.svelte | 23 +
.../src/lib/Components/HomepageCards/links.ts | 53 +
.../src/lib/Components/Paginator.svelte | 43 +
.../src/lib/Components/Progress.svelte | 14 +
.../lib/Components/SVGs/HamburgerSVG.svelte | 49 +
.../src/lib/Components/SVGs/HomeSVG.svelte | 14 +
.../lib/Components/SVGs/IdentitiesSVG.svelte | 14 +
.../lib/Components/SVGs/MessagesSVG.svelte | 14 +
.../src/lib/Components/SVGs/ReportsSVG.svelte | 14 +
.../src/lib/Components/SVGs/SourcesSVG.svelte | 14 +
.../src/lib/Components/VACluster.svelte | 77 +
Sveltekit-App/src/lib/Utils.ts | 106 +
Sveltekit-App/src/lib/reports.ts | 30 +
Sveltekit-App/src/lib/sailpoint/sdk.ts | 6 +
Sveltekit-App/src/lib/sidebar/Sidebar.svelte | 29 +
.../src/lib/sidebar/SidebarDrawer.svelte | 15 +
Sveltekit-App/src/lib/sidebar/navigation.ts | 43 +
Sveltekit-App/src/lib/utils/oauth.ts | 211 +
Sveltekit-App/src/routes/+error.svelte | 55 +
Sveltekit-App/src/routes/+layout.server.ts | 3 +
Sveltekit-App/src/routes/+layout.svelte | 206 +
Sveltekit-App/src/routes/+page.server.ts | 51 +
Sveltekit-App/src/routes/+page.svelte | 77 +
.../sailpoint/cluster/[clusterID]/+server.ts | 20 +
.../src/routes/callback/+page.server.ts | 44 +
.../src}/routes/callback/+page.svelte | 10 +-
.../src}/routes/callback/loadinglist.ts | 41 +-
Sveltekit-App/src/routes/home/+page.server.ts | 5 +
Sveltekit-App/src/routes/home/+page.svelte | 18 +
.../src/routes/home/courier/+page.server.ts | 19 +
.../src/routes/home/courier/+page.svelte | 160 +
.../routes/home/identities/+page.server.ts | 62 +
.../src/routes/home/identities/+page.svelte | 125 +
.../identities/[identityID]/+page.server.ts | 56 +
.../home/identities/[identityID]/+page.svelte | 83 +
.../src/routes/home/reports/+page.svelte | 29 +
.../+page.server.ts | 28 +
.../+page.svelte | 87 +
.../+page.server.ts | 28 +
.../+page.svelte | 78 +
.../+page.server.ts | 28 +
.../source-account-create-error/+page.svelte | 93 +
.../source-aggregations/+page.server.ts | 150 +
.../reports/source-aggregations/+page.svelte | 117 +
.../source-owner-configured/+page.server.ts | 49 +
.../source-owner-configured/+page.svelte | 60 +
.../src/routes/home/sources/+page.server.ts | 49 +
.../src/routes/home/sources/+page.svelte | 135 +
.../home/sources/[sourceID]/+page.server.ts | 104 +
.../home/sources/[sourceID]/+page.svelte | 121 +
.../src/routes/logout/+page.server.ts | 15 +
Sveltekit-App/src/routes/logout/+page.svelte | 32 +
.../SailPoint-Developer-Community-Lockup.png | Bin
Sveltekit-App/static/logo.ico | Bin 0 -> 265118 bytes
Sveltekit-App/svelte.config.js | 21 +
.../tailwind.config.ts | 28 +-
Sveltekit-App/tsconfig.json | 18 +
Sveltekit-App/vite.config.ts | 22 +
assets/images/api-linter-output.png | Bin 442020 -> 0 bytes
build.config.json | 15 -
forge.config.ts | 50 +
globals.d.ts | 2 -
jsconfig.json | 11 -
package-lock.json | 27536 ++++++++--------
package.json | 128 +-
postcss.config.cjs | 13 -
screenshot.png | Bin 53678 -> 0 bytes
src/electron.cjs | 104 -
src/global.d.ts | 6 -
src/lib/Counter.svelte | 41 -
src/lib/Logo.svelte | 27 -
src/lib/sailpoint/sdk.ts | 8 -
src/lib/utils/hmr-stores.js | 29 -
src/lib/utils/oauth.ts | 91 -
src/main.ts | 146 +
src/preload.cjs | 13 -
src/routes/+layout.js | 1 -
src/routes/+layout.svelte | 25 -
src/routes/+page.server.ts | 16 -
src/routes/+page.svelte | 66 -
src/routes/api/sailpoint/search/+server.ts | 24 -
src/routes/callback/+page.server.ts | 43 -
src/routes/home/+page.svelte | 70 -
.../+page.svelte | 129 -
.../source-account-create-error/+page.svelte | 118 -
src/types.d.ts | 5 +
static/favicon.ico | Bin 1150 -> 0 bytes
static/icon.png | Bin 35815 -> 0 bytes
static/sveltekit-electron.svg | 16 -
svelte.config.js | 19 -
tsconfig.json | 47 +-
vite.config.js | 11 -
vite.main.config.ts | 10 +
122 files changed, 23585 insertions(+), 15321 deletions(-)
delete mode 100644 .npmrc
delete mode 100644 .prettierrc
delete mode 100644 .vscode/extensions.json
delete mode 100644 .vscode/settings.json
delete mode 100644 LICENSE
create mode 100644 Sveltekit-App/.eslintignore
create mode 100644 Sveltekit-App/.eslintrc.cjs
create mode 100644 Sveltekit-App/.gitignore
create mode 100644 Sveltekit-App/.npmrc
create mode 100644 Sveltekit-App/.prettierignore
create mode 100644 Sveltekit-App/.prettierrc
create mode 100644 Sveltekit-App/.vscode/settings.json
create mode 100644 Sveltekit-App/README.md
create mode 100644 Sveltekit-App/package-lock.json
create mode 100644 Sveltekit-App/package.json
create mode 100644 Sveltekit-App/postcss.config.cjs
create mode 100644 Sveltekit-App/src/app.d.ts
rename {src => Sveltekit-App/src}/app.html (54%)
rename {src => Sveltekit-App/src}/app.postcss (56%)
create mode 100644 Sveltekit-App/src/error.html
create mode 100644 Sveltekit-App/src/hooks.server.ts
rename {src/lib => Sveltekit-App/src/lib/Components}/AnimatedCounter.svelte (100%)
create mode 100644 Sveltekit-App/src/lib/Components/CodeBlockModal.svelte
create mode 100644 Sveltekit-App/src/lib/Components/HomepageCards/ResourceLinksCard.svelte
create mode 100644 Sveltekit-App/src/lib/Components/HomepageCards/StatusCard.svelte
create mode 100644 Sveltekit-App/src/lib/Components/HomepageCards/SupportLinksCard.svelte
create mode 100644 Sveltekit-App/src/lib/Components/HomepageCards/TenantLinksCard.svelte
create mode 100644 Sveltekit-App/src/lib/Components/HomepageCards/links.ts
create mode 100644 Sveltekit-App/src/lib/Components/Paginator.svelte
create mode 100644 Sveltekit-App/src/lib/Components/Progress.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/HamburgerSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/HomeSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/IdentitiesSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/MessagesSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/ReportsSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/SVGs/SourcesSVG.svelte
create mode 100644 Sveltekit-App/src/lib/Components/VACluster.svelte
create mode 100644 Sveltekit-App/src/lib/Utils.ts
create mode 100644 Sveltekit-App/src/lib/reports.ts
create mode 100644 Sveltekit-App/src/lib/sailpoint/sdk.ts
create mode 100644 Sveltekit-App/src/lib/sidebar/Sidebar.svelte
create mode 100644 Sveltekit-App/src/lib/sidebar/SidebarDrawer.svelte
create mode 100644 Sveltekit-App/src/lib/sidebar/navigation.ts
create mode 100644 Sveltekit-App/src/lib/utils/oauth.ts
create mode 100644 Sveltekit-App/src/routes/+error.svelte
create mode 100644 Sveltekit-App/src/routes/+layout.server.ts
create mode 100644 Sveltekit-App/src/routes/+layout.svelte
create mode 100644 Sveltekit-App/src/routes/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/+page.svelte
create mode 100644 Sveltekit-App/src/routes/api/sailpoint/cluster/[clusterID]/+server.ts
create mode 100644 Sveltekit-App/src/routes/callback/+page.server.ts
rename {src => Sveltekit-App/src}/routes/callback/+page.svelte (66%)
rename {src => Sveltekit-App/src}/routes/callback/loadinglist.ts (84%)
create mode 100644 Sveltekit-App/src/routes/home/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/courier/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/courier/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/identities/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/identities/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/identities/[identityID]/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/identities/[identityID]/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/source-aggregations/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/reports/source-aggregations/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/sources/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/sources/+page.svelte
create mode 100644 Sveltekit-App/src/routes/home/sources/[sourceID]/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/home/sources/[sourceID]/+page.svelte
create mode 100644 Sveltekit-App/src/routes/logout/+page.server.ts
create mode 100644 Sveltekit-App/src/routes/logout/+page.svelte
rename {static => Sveltekit-App/static}/SailPoint-Developer-Community-Lockup.png (100%)
create mode 100644 Sveltekit-App/static/logo.ico
create mode 100644 Sveltekit-App/svelte.config.js
rename tailwind.config.ts => Sveltekit-App/tailwind.config.ts (50%)
create mode 100644 Sveltekit-App/tsconfig.json
create mode 100644 Sveltekit-App/vite.config.ts
delete mode 100644 assets/images/api-linter-output.png
delete mode 100644 build.config.json
create mode 100644 forge.config.ts
delete mode 100644 globals.d.ts
delete mode 100644 jsconfig.json
delete mode 100644 postcss.config.cjs
delete mode 100644 screenshot.png
delete mode 100644 src/electron.cjs
delete mode 100644 src/global.d.ts
delete mode 100644 src/lib/Counter.svelte
delete mode 100644 src/lib/Logo.svelte
delete mode 100644 src/lib/sailpoint/sdk.ts
delete mode 100644 src/lib/utils/hmr-stores.js
delete mode 100644 src/lib/utils/oauth.ts
create mode 100644 src/main.ts
delete mode 100644 src/preload.cjs
delete mode 100644 src/routes/+layout.js
delete mode 100644 src/routes/+layout.svelte
delete mode 100644 src/routes/+page.server.ts
delete mode 100644 src/routes/+page.svelte
delete mode 100644 src/routes/api/sailpoint/search/+server.ts
delete mode 100644 src/routes/callback/+page.server.ts
delete mode 100644 src/routes/home/+page.svelte
delete mode 100644 src/routes/identity-inactive-but-has-access/+page.svelte
delete mode 100644 src/routes/source-account-create-error/+page.svelte
create mode 100644 src/types.d.ts
delete mode 100644 static/favicon.ico
delete mode 100644 static/icon.png
delete mode 100644 static/sveltekit-electron.svg
delete mode 100644 svelte.config.js
delete mode 100644 vite.config.js
create mode 100644 vite.main.config.ts
diff --git a/.gitignore b/.gitignore
index ae39d10..8296128 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,92 @@
-node_modules
-.svelte-kit
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
-dist
-build
-package
-
-.env
-.env.*
-*.local
-!.env.example
-
-yarn-error.log
-pnpm-lock.yaml
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
.DS_Store
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# Webpack
+.webpack/
+
+# Vite
+.vite/
+
+# Electron-Forge
+out/
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index c42da84..0000000
--- a/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-engine-strict = true
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 1032184..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "svelteSortOrder": "scripts-markup-styles",
- "htmlWhitespaceSensitivity": "ignore",
- "trailingComma": "all",
- "requirePragma": false,
- "bracketSpacing": true,
- "singleQuote": true,
- "printWidth": 100,
- "useTabs": true,
- "tabWidth": 4,
- "semi": true
-}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index bdef820..0000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "recommendations": ["svelte.svelte-vscode"]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index b797227..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "[svelte]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "svelte.svelte-vscode"
- }
-}
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index d196f33..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022 Braden Wiggins and contributors: https://github.com/fractalhq/sveltekit-electron/graphs/contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/LICENSE.txt b/LICENSE.txt
index 3a42989..964635f 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2022 SailPoint
+Copyright (c) 2024 SailPoint
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 1f08bd4..79b68d0 100644
--- a/README.md
+++ b/README.md
@@ -1,49 +1,22 @@
-## How to use this template
-
-Update sheild urls
-
-* Update url for discourse, downloads, issues, current release, and contributors
-
-Project title and logo
-
-* Update project title and description
-* Update project logo
-* Update link to point to documentation about this project
-
-About the project
-
-* Update project screenshot
-* Update the paragraph with what your project is meant to accomplish
-
-Getting started
-
-* Describe how to get started with your project
-* Describe any prerequisites needed to run your project
-* Describe how to install and run your project
-
-Discuss
-
-* Create a tag in our discourse forum for your project
-* Update link in this section to point to the newly created tag
-
-After these steps are complete remove this checklist!
-
+
[![Discourse Topics][discourse-shield]][discourse-url]
![Times Downloaded][downloads-shield]
![Issues][issues-shield]
![Latest Releases][release-shield]
![Contributor Shield][contributor-shield]
-[discourse-shield]: https://img.shields.io/discourse/topics?label=Discuss%20This%20Tool&server=https%3A%2F%2Fdeveloper.sailpoint.com%2Fdiscuss
-[discourse-url]: https://developer.sailpoint.com/discuss/tag/workflows
-[downloads-shield]: https://img.shields.io/github/downloads/sailpoint-oss/api-linter/total?label=Downloads
-[issues-shield]:https://img.shields.io/github/issues/sailpoint-oss/api-linter?label=Issues
-[release-shield]: https://img.shields.io/github/v/release/sailpoint-oss/api-linter?label=Current%20Release
-[contributor-shield]:https://img.shields.io/github/contributors/sailpoint-oss/api-linter?label=Contributors
-[product-screenshot]: ./assets/images/api-linter-output.png
+
+[discourse-shield]: https://img.shields.io/badge/Discuss_This_Tool-0033a1
+[discourse-url]: https://developer.sailpoint.com/discuss/tag/idn-admin-console
+[downloads-shield]: https://img.shields.io/github/downloads/sailpoint-oss/idn-admin-console/total?label=Downloads
+[issues-shield]:https://img.shields.io/github/issues/sailpoint-oss/idn-admin-console?label=Issues
+[release-shield]: https://img.shields.io/github/v/tag/sailpoint-oss/idn-admin-console?label=Current%20Release
+[contributor-shield]:https://img.shields.io/github/contributors/sailpoint-oss/idn-admin-console?label=Contributors
+
+[product-screenshot]: ./assets/images/idn-admin-console-output.png
@@ -52,90 +25,106 @@ After these steps are complete remove this checklist!
-
SailPoint OSS - README - Template
+ IdentityNow Admin Console - README
- An awesome README template to jumpstart your projects!
+ A desktop application to administer and troubleshoot IdentityNow
- Explore the docs »
-
-
-
+ Request Feature
+- [About the project](#about-the-project)
+- [Get started](#get-started)
+ - [Use a release](#use-a-release)
+ - [Building the application from source](#build-the-application-from-source)
+- [Contribute](#contribute)
+- [License](#license)
+- [Discuss](#discuss)
+
+
-## About The Project
+## About the project
-
-
-
+
-There are many great README templates available on GitHub; however, I didn't find one that really suited my needs so I created this enhanced one. I want to create a README template so amazing that it'll be the last one you ever need -- I think this is it.
+The IdentityNow Admin Console is a desktop application you can use to administer and troubleshoot IdentityNow. The admin console is built using Electron and Sveltekit, and it is developed and maintained by the SailPoint Developer Relations team.
-Here's why:
-* Your time should be focused on creating something amazing. A project that solves a problem and helps others
-* You shouldn't be doing the same tasks over and over like creating a README from scratch
-* You should implement DRY principles to the rest of your life :smile:
-
-Of course, no one template will serve all projects since your needs may be different. So I'll be adding more in the near future. You may also suggest changes by forking this repo and creating a pull request or opening an issue. Thanks to all the people have contributed to expanding this template!
-
-Use the `BLANK_README.md` to get started.
+The goal of the admin console is to provide a single place to perform common administrative tasks and troubleshoot issues in your IdentityNow tenant.
(back to top )
-## Getting Started
+## Get started
-This is an example of how you may give instructions on setting up your project locally.
-To get a local copy up and running follow these simple example steps.
+To use this tool, you will need to have an IdentityNow tenant.
-### Prerequisites
+### Use a release
-This is an example of how to list things you need to use the software and how to install them.
-* npm
- ```sh
- npm install npm@latest -g
- ```
+There are built versions of this application available for each major OS platform. You can find the latest release [here](https://github.com/sailpoint-oss/idn-admin-console/releases/latest).
-### Installation
+Pick your OS and download the relevant file from the latest release:
+| Platform | File Type |
+| -------- | --------- |
+| Windows | exe, zip |
+| Mac | dmg, zip |
+| Linux | deb, rpm, zip |
-_Below is an example of how you can instruct your audience on installing and setting up your app. This template doesn't rely on any external dependencies or services._
-
-1. Get a free API Key at [https://example.com](https://example.com)
-2. Clone the repo
- ```sh
- git clone https://github.com/your_username_/Project-Name.git
- ```
-3. Install NPM packages
- ```sh
- npm install
- ```
-4. Enter your API in `config.js`
- ```js
- const API_KEY = 'ENTER YOUR API';
- ```
+If you want to build the application yourself, follow these steps:
(back to top )
+### Build the application from source
+
+Prerequisites:
+* To build the application from source you will need NPM installed. You can find instructions on how to install NPM [here](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
+
+Once you have NPM installed, you can clone this repository and run the following commands in the specified order and folders:
+
+Go to the folder: `./Sveltekit-App`
+First, run this command:
+```bash
+npm install
+```
+
+Then run this command:
+```bash
+npm run build
+```
+
+Next, go to the folder: `./Electron-App`
+First, run this command:
+```bash
+npm install
+```
+
+Then, run this command:
+```bash
+npm run build
+```
+
+As long as there are no errors during the build process, the built application binaries will then be located in the `./Electron-App/out` folder.
+
-## Contributing
+## Contribute
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
-If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag `enhancement`.
+If you have a suggestion to improve this project, please fork the repo and create a pull request. You can also make a suggestion by opening an issue with the tag `enhancement`.
Don't forget to give the project a star! Thanks again!
-1. Fork the Project
-2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
-3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
-4. Push to the Branch (`git push origin feature/AmazingFeature`)
-5. Open a Pull Request
+Follow these steps to make contributions:
+
+1. Fork the project.
+2. Create your feature branch: `git checkout -b feature/AmazingFeature`
+3. Commit your changes: `git commit -m 'Add some AmazingFeature'`
+4. Push to the branch: `git push origin feature/AmazingFeature`
+5. Open a pull request.
(back to top )
@@ -148,6 +137,6 @@ Distributed under the MIT License. See `LICENSE.txt` for more information.
## Discuss
-[Click Here](https://developer.sailpoint.com/dicuss/tag/{tagName}) to discuss this tool with other users.
+You can go to the [SailPoint Developer Community Forum](https://developer.sailpoint.com/discuss/tag/idn-admin-console) to discuss this tool with other users!
-(back to top )
\ No newline at end of file
+(back to top )
diff --git a/Sveltekit-App/.eslintignore b/Sveltekit-App/.eslintignore
new file mode 100644
index 0000000..3897265
--- /dev/null
+++ b/Sveltekit-App/.eslintignore
@@ -0,0 +1,13 @@
+.DS_Store
+node_modules
+/build
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+
+# Ignore files for PNPM, NPM and YARN
+pnpm-lock.yaml
+package-lock.json
+yarn.lock
diff --git a/Sveltekit-App/.eslintrc.cjs b/Sveltekit-App/.eslintrc.cjs
new file mode 100644
index 0000000..ebc1958
--- /dev/null
+++ b/Sveltekit-App/.eslintrc.cjs
@@ -0,0 +1,30 @@
+module.exports = {
+ root: true,
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:svelte/recommended',
+ 'prettier'
+ ],
+ parser: '@typescript-eslint/parser',
+ plugins: ['@typescript-eslint'],
+ parserOptions: {
+ sourceType: 'module',
+ ecmaVersion: 2020,
+ extraFileExtensions: ['.svelte']
+ },
+ env: {
+ browser: true,
+ es2017: true,
+ node: true
+ },
+ overrides: [
+ {
+ files: ['*.svelte'],
+ parser: 'svelte-eslint-parser',
+ parserOptions: {
+ parser: '@typescript-eslint/parser'
+ }
+ }
+ ]
+};
diff --git a/Sveltekit-App/.gitignore b/Sveltekit-App/.gitignore
new file mode 100644
index 0000000..6635cf5
--- /dev/null
+++ b/Sveltekit-App/.gitignore
@@ -0,0 +1,10 @@
+.DS_Store
+node_modules
+/build
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+vite.config.js.timestamp-*
+vite.config.ts.timestamp-*
diff --git a/Sveltekit-App/.npmrc b/Sveltekit-App/.npmrc
new file mode 100644
index 0000000..b6f27f1
--- /dev/null
+++ b/Sveltekit-App/.npmrc
@@ -0,0 +1 @@
+engine-strict=true
diff --git a/Sveltekit-App/.prettierignore b/Sveltekit-App/.prettierignore
new file mode 100644
index 0000000..3897265
--- /dev/null
+++ b/Sveltekit-App/.prettierignore
@@ -0,0 +1,13 @@
+.DS_Store
+node_modules
+/build
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+
+# Ignore files for PNPM, NPM and YARN
+pnpm-lock.yaml
+package-lock.json
+yarn.lock
diff --git a/Sveltekit-App/.prettierrc b/Sveltekit-App/.prettierrc
new file mode 100644
index 0000000..9573023
--- /dev/null
+++ b/Sveltekit-App/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "useTabs": true,
+ "singleQuote": true,
+ "trailingComma": "none",
+ "printWidth": 100,
+ "plugins": ["prettier-plugin-svelte"],
+ "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
+}
diff --git a/Sveltekit-App/.vscode/settings.json b/Sveltekit-App/.vscode/settings.json
new file mode 100644
index 0000000..9251b94
--- /dev/null
+++ b/Sveltekit-App/.vscode/settings.json
@@ -0,0 +1,118 @@
+{
+ "prettier.documentSelectors": [
+ "**/*.svelte"
+ ],
+ "tailwindCSS.classAttributes": [
+ "class",
+ "accent",
+ "active",
+ "aspectRatio",
+ "background",
+ "badge",
+ "bgBackdrop",
+ "bgDark",
+ "bgDrawer",
+ "bgLight",
+ "blur",
+ "border",
+ "button",
+ "buttonAction",
+ "buttonBack",
+ "buttonClasses",
+ "buttonComplete",
+ "buttonDismiss",
+ "buttonNeutral",
+ "buttonNext",
+ "buttonPositive",
+ "buttonTextCancel",
+ "buttonTextConfirm",
+ "buttonTextFirst",
+ "buttonTextLast",
+ "buttonTextNext",
+ "buttonTextPrevious",
+ "buttonTextSubmit",
+ "caretClosed",
+ "caretOpen",
+ "chips",
+ "color",
+ "controlSeparator",
+ "controlVariant",
+ "cursor",
+ "display",
+ "element",
+ "fill",
+ "fillDark",
+ "fillLight",
+ "flex",
+ "gap",
+ "gridColumns",
+ "height",
+ "hover",
+ "inactive",
+ "indent",
+ "justify",
+ "meter",
+ "padding",
+ "position",
+ "regionAnchor",
+ "regionBackdrop",
+ "regionBody",
+ "regionCaption",
+ "regionCaret",
+ "regionCell",
+ "regionChildren",
+ "regionChipList",
+ "regionChipWrapper",
+ "regionCone",
+ "regionContent",
+ "regionControl",
+ "regionDefault",
+ "regionDrawer",
+ "regionFoot",
+ "regionFootCell",
+ "regionFooter",
+ "regionHead",
+ "regionHeadCell",
+ "regionHeader",
+ "regionIcon",
+ "regionInput",
+ "regionInterface",
+ "regionInterfaceText",
+ "regionLabel",
+ "regionLead",
+ "regionLegend",
+ "regionList",
+ "regionListItem",
+ "regionNavigation",
+ "regionPage",
+ "regionPanel",
+ "regionRowHeadline",
+ "regionRowMain",
+ "regionSummary",
+ "regionSymbol",
+ "regionTab",
+ "regionTrail",
+ "ring",
+ "rounded",
+ "select",
+ "shadow",
+ "slotDefault",
+ "slotFooter",
+ "slotHeader",
+ "slotLead",
+ "slotMessage",
+ "slotMeta",
+ "slotPageContent",
+ "slotPageFooter",
+ "slotPageHeader",
+ "slotSidebarLeft",
+ "slotSidebarRight",
+ "slotTrail",
+ "spacing",
+ "text",
+ "track",
+ "transition",
+ "width",
+ "zIndex"
+ ]
+}
\ No newline at end of file
diff --git a/Sveltekit-App/README.md b/Sveltekit-App/README.md
new file mode 100644
index 0000000..5c91169
--- /dev/null
+++ b/Sveltekit-App/README.md
@@ -0,0 +1,38 @@
+# create-svelte
+
+Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
+
+## Creating a project
+
+If you're seeing this, you've probably already done this step. Congrats!
+
+```bash
+# create a new project in the current directory
+npm create svelte@latest
+
+# create a new project in my-app
+npm create svelte@latest my-app
+```
+
+## Developing
+
+Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
+
+```bash
+npm run dev
+
+# or start the server and open the app in a new browser tab
+npm run dev -- --open
+```
+
+## Building
+
+To create a production version of your app:
+
+```bash
+npm run build
+```
+
+You can preview the production build with `npm run preview`.
+
+> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
diff --git a/Sveltekit-App/package-lock.json b/Sveltekit-App/package-lock.json
new file mode 100644
index 0000000..5a56afb
--- /dev/null
+++ b/Sveltekit-App/package-lock.json
@@ -0,0 +1,6156 @@
+{
+ "name": "idn-admin-console-svelte",
+ "version": "0.0.3",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "idn-admin-console-svelte",
+ "version": "0.0.3",
+ "devDependencies": {
+ "@floating-ui/dom": "1.5.4",
+ "@skeletonlabs/skeleton": "2.7.1",
+ "@skeletonlabs/tw-plugin": "0.3.1",
+ "@sveltejs/adapter-node": "^4.0.1",
+ "@sveltejs/kit": "^2.0.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "@tailwindcss/forms": "0.5.7",
+ "@tailwindcss/typography": "0.5.10",
+ "@types/jsonwebtoken": "^9.0.5",
+ "@types/node": "20.11.5",
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
+ "@typescript-eslint/parser": "^6.12.0",
+ "alasql": "^4.2.2",
+ "autoprefixer": "10.4.17",
+ "axios": "^1.6.2",
+ "cross-env": "^7.0.3",
+ "eslint": "^8.54.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-plugin-svelte": "^2.35.1",
+ "highlight.js": "^11.9.0",
+ "jsonwebtoken": "^9.0.2",
+ "postcss": "8.4.33",
+ "prettier": "^3.1.0",
+ "prettier-plugin-svelte": "^3.1.2",
+ "sailpoint-api-client": "^1.3.0",
+ "svelte": "^4.2.7",
+ "svelte-check": "^3.6.2",
+ "svelte-jsoneditor": "^0.21.3",
+ "tailwindcss": "3.4.1",
+ "tslib": "^2.6.2",
+ "typescript": "^5.3.2",
+ "vite": "^5.0.0",
+ "vite-plugin-tailwind-purgecss": "0.2.0",
+ "vitest": "^1.0.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.23.8",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+ "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@codemirror/autocomplete": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz",
+ "integrity": "sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/commands": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.3.tgz",
+ "integrity": "sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.4.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.1.0"
+ }
+ },
+ "node_modules/@codemirror/lang-json": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz",
+ "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/json": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/language": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.0.tgz",
+ "integrity": "sha512-2vaNn9aPGCRFKWcHPFksctzJ8yS5p7YoaT+jHpc0UGKzNuAIx4qy6R5wiqbP+heEEdyaABA582mNqSHzSoYdmg==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.23.0",
+ "@lezer/common": "^1.1.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
+ "style-mod": "^4.0.0"
+ }
+ },
+ "node_modules/@codemirror/lint": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz",
+ "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/search": {
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.5.tgz",
+ "integrity": "sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/state": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.0.tgz",
+ "integrity": "sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==",
+ "dev": true
+ },
+ "node_modules/@codemirror/view": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.23.0.tgz",
+ "integrity": "sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/state": "^6.4.0",
+ "style-mod": "^4.1.0",
+ "w3c-keyname": "^2.2.4"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+ "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz",
+ "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz",
+ "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/core": "^1.5.3",
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
+ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==",
+ "dev": true
+ },
+ "node_modules/@fortawesome/fontawesome-common-types": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz",
+ "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==",
+ "dev": true,
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-regular-svg-icons": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.1.tgz",
+ "integrity": "sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.5.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-solid-svg-icons": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz",
+ "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.5.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
+ "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@lezer/common": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz",
+ "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==",
+ "dev": true
+ },
+ "node_modules/@lezer/highlight": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz",
+ "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==",
+ "dev": true,
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/json": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.2.tgz",
+ "integrity": "sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==",
+ "dev": true,
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/lr": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz",
+ "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==",
+ "dev": true,
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.24",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz",
+ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==",
+ "dev": true
+ },
+ "node_modules/@replit/codemirror-indentation-markers": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.0.tgz",
+ "integrity": "sha512-5RgeuQ6erfROi1EVI2X7G4UR+KByjb07jhYMynvpvlrV22JlnARifmKMGEUKy0pKcxBNfwbFqoUlTYHPgyZNlg==",
+ "dev": true,
+ "peerDependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "25.0.7",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz",
+ "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.30.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
+ "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz",
+ "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
+ "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
+ "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
+ "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
+ "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
+ "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
+ "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
+ "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
+ "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
+ "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
+ "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
+ "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
+ "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
+ "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "node_modules/@skeletonlabs/skeleton": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/@skeletonlabs/skeleton/-/skeleton-2.7.1.tgz",
+ "integrity": "sha512-zlHehSp8jXePmldLiNthYtFEomcitfcAIuLyvN1/lbHgsx5notUUO50CG0AEUF1BKcrl97watLv4jDmv1ShHJQ==",
+ "dev": true,
+ "dependencies": {
+ "esm-env": "1.0.0"
+ },
+ "peerDependencies": {
+ "svelte": "^3.56.0 || ^4.0.0"
+ }
+ },
+ "node_modules/@skeletonlabs/tw-plugin": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@skeletonlabs/tw-plugin/-/tw-plugin-0.3.1.tgz",
+ "integrity": "sha512-DjjeOHN3HhFQf6gYPT2MUZMkIdw1jeB9mbuKC8etQxUlOR4XitfC7hssRWFJ8RJsvrrN0myCBbdWkVG1JVA96g==",
+ "dev": true,
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0"
+ }
+ },
+ "node_modules/@sphinxxxx/color-conversion": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz",
+ "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==",
+ "dev": true
+ },
+ "node_modules/@sveltejs/adapter-node": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-4.0.1.tgz",
+ "integrity": "sha512-IviiTtKCDp+0QoTmmMlGGZBA1EoUNsjecU6XGV9k62S3f01SNsVhpqi2e4nbI62BLGKh/YKKfFii+Vz/b9XIxg==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/plugin-commonjs": "^25.0.7",
+ "@rollup/plugin-json": "^6.1.0",
+ "@rollup/plugin-node-resolve": "^15.2.3",
+ "rollup": "^4.9.5"
+ },
+ "peerDependencies": {
+ "@sveltejs/kit": "^2.4.0"
+ }
+ },
+ "node_modules/@sveltejs/kit": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.4.3.tgz",
+ "integrity": "sha512-nKNhUdt61vtD961kQpUk6vLDhpnV0yku5F1uYNWvrJYFV0+cGfmW7ol0JVMSjHMXlMtmmv2FTc+nPRrTFwb2UA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^0.6.0",
+ "devalue": "^4.3.2",
+ "esm-env": "^1.0.0",
+ "import-meta-resolve": "^4.0.0",
+ "kleur": "^4.1.5",
+ "magic-string": "^0.30.5",
+ "mrmime": "^2.0.0",
+ "sade": "^1.8.1",
+ "set-cookie-parser": "^2.6.0",
+ "sirv": "^2.0.4",
+ "tiny-glob": "^0.2.9"
+ },
+ "bin": {
+ "svelte-kit": "svelte-kit.js"
+ },
+ "engines": {
+ "node": ">=18.13"
+ },
+ "peerDependencies": {
+ "@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
+ "vite": "^5.0.3"
+ }
+ },
+ "node_modules/@sveltejs/vite-plugin-svelte": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz",
+ "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==",
+ "dev": true,
+ "dependencies": {
+ "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0",
+ "debug": "^4.3.4",
+ "deepmerge": "^4.3.1",
+ "kleur": "^4.1.5",
+ "magic-string": "^0.30.5",
+ "svelte-hmr": "^0.15.3",
+ "vitefu": "^0.2.5"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20"
+ },
+ "peerDependencies": {
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
+ "vite": "^5.0.0"
+ }
+ },
+ "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz",
+ "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20"
+ },
+ "peerDependencies": {
+ "@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
+ "vite": "^5.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz",
+ "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==",
+ "dev": true,
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz",
+ "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==",
+ "dev": true,
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "dev": true
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/jsonwebtoken": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz",
+ "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz",
+ "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/pug": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz",
+ "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==",
+ "dev": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz",
+ "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.19.1",
+ "@typescript-eslint/type-utils": "6.19.1",
+ "@typescript-eslint/utils": "6.19.1",
+ "@typescript-eslint/visitor-keys": "6.19.1",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz",
+ "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.19.1",
+ "@typescript-eslint/types": "6.19.1",
+ "@typescript-eslint/typescript-estree": "6.19.1",
+ "@typescript-eslint/visitor-keys": "6.19.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz",
+ "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.1",
+ "@typescript-eslint/visitor-keys": "6.19.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz",
+ "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "6.19.1",
+ "@typescript-eslint/utils": "6.19.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz",
+ "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz",
+ "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.1",
+ "@typescript-eslint/visitor-keys": "6.19.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz",
+ "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.19.1",
+ "@typescript-eslint/types": "6.19.1",
+ "@typescript-eslint/typescript-estree": "6.19.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz",
+ "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.1",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/@vitest/expect": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz",
+ "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/spy": "1.2.1",
+ "@vitest/utils": "1.2.1",
+ "chai": "^4.3.10"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz",
+ "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/utils": "1.2.1",
+ "p-limit": "^5.0.0",
+ "pathe": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner/node_modules/p-limit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
+ "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vitest/runner/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz",
+ "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.30.5",
+ "pathe": "^1.1.1",
+ "pretty-format": "^29.7.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz",
+ "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==",
+ "dev": true,
+ "dependencies": {
+ "tinyspy": "^2.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz",
+ "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==",
+ "dev": true,
+ "dependencies": {
+ "diff-sequences": "^29.6.3",
+ "estree-walker": "^3.0.3",
+ "loupe": "^2.3.7",
+ "pretty-format": "^29.7.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/alasql": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/alasql/-/alasql-4.2.5.tgz",
+ "integrity": "sha512-O08h/1NXLci1n5dwwqB2//vlCHdQrgaiLD7ZomhDlw01jEBYiBIDgUYF6EEMeh4/ld4ZpD8UZLi4KeACDN1WuA==",
+ "dev": true,
+ "dependencies": {
+ "cross-fetch": "4",
+ "yargs": "16"
+ },
+ "bin": {
+ "alasql": "bin/alasql-cli.js"
+ },
+ "engines": {
+ "node": ">=15"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.17",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz",
+ "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.22.2",
+ "caniuse-lite": "^1.0.30001578",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+ "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
+ "dev": true,
+ "dependencies": {
+ "follow-redirects": "^1.15.4",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios-retry": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz",
+ "integrity": "sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.15.4",
+ "is-retry-allowed": "^2.2.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
+ "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001579",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz",
+ "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chai": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
+ "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.3",
+ "deep-eql": "^4.1.3",
+ "get-func-name": "^2.0.2",
+ "loupe": "^2.3.6",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
+ "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/code-red": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
+ "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@types/estree": "^1.0.1",
+ "acorn": "^8.10.0",
+ "estree-walker": "^3.0.3",
+ "periscopic": "^3.1.0"
+ }
+ },
+ "node_modules/code-red/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/codemirror-wrapped-line-indent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/codemirror-wrapped-line-indent/-/codemirror-wrapped-line-indent-1.0.0.tgz",
+ "integrity": "sha512-8ny0CSJ1T6mYQuBF7yGzgRRv+zOXUBaBscvJH3jczK7Isi19RA2Ans9ip0gZBkUWCOhFmmw1IC1a+uN4zj0GNg==",
+ "dev": true,
+ "peerDependencies": {
+ "@codemirror/language": "^6.9.0",
+ "@codemirror/state": "^6.2.1",
+ "@codemirror/view": "^6.17.1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "dev": true
+ },
+ "node_modules/cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+ "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+ "dev": true,
+ "dependencies": {
+ "node-fetch": "^2.6.12"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
+ "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz",
+ "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==",
+ "dev": true
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.643",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.643.tgz",
+ "integrity": "sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/es6-promise": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
+ "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+ "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.56.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-compat-utils": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
+ "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-svelte": {
+ "version": "2.35.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz",
+ "integrity": "sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14",
+ "debug": "^4.3.1",
+ "eslint-compat-utils": "^0.1.2",
+ "esutils": "^2.0.3",
+ "known-css-properties": "^0.29.0",
+ "postcss": "^8.4.5",
+ "postcss-load-config": "^3.1.4",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.11",
+ "semver": "^7.5.3",
+ "svelte-eslint-parser": ">=0.33.0 <1.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0-0",
+ "svelte": "^3.37.0 || ^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "svelte": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-svelte/node_modules/postcss-selector-parser": {
+ "version": "6.0.15",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+ "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/esm-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz",
+ "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==",
+ "dev": true
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
+ "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
+ "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
+ "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
+ "dev": true
+ },
+ "node_modules/immutable-json-patch": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/immutable-json-patch/-/immutable-json-patch-6.0.1.tgz",
+ "integrity": "sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==",
+ "dev": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz",
+ "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-retry-allowed": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz",
+ "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "dev": true,
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/jmespath": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz",
+ "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
+ "dev": true
+ },
+ "node_modules/jsonrepair": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.5.1.tgz",
+ "integrity": "sha512-F0VxiEj1j7m1OAVUVy6fFYk5s8tthF61J7tjYtEACw1DeNQqKmZF6dPddduxc7Tc5IrLqKTdLAwUNTmrqqg+hw==",
+ "dev": true,
+ "bin": {
+ "jsonrepair": "bin/cli.js"
+ }
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "dev": true,
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dev": true,
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.29.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
+ "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/local-pkg": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
+ "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+ "dev": true,
+ "dependencies": {
+ "mlly": "^1.4.2",
+ "pkg-types": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/locate-character": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "dev": true
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
+ "dev": true
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+ "dev": true
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
+ "dev": true
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true
+ },
+ "node_modules/loupe": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
+ "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.1"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "node_modules/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+ "dev": true
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "dev": true,
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz",
+ "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.3",
+ "pathe": "^1.1.2",
+ "pkg-types": "^1.0.3",
+ "ufo": "^1.3.2"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
+ "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "dev": true,
+ "engines": {
+ "node": "14 || >=16.14"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/periscopic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "is-reference": "^3.0.0"
+ }
+ },
+ "node_modules/periscopic/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/periscopic/node_modules/is-reference": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-types": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
+ "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
+ "dev": true,
+ "dependencies": {
+ "jsonc-parser": "^3.2.0",
+ "mlly": "^1.2.0",
+ "pathe": "^1.1.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.33",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+ "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dev": true,
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+ "version": "6.0.15",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+ "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-scss": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.29"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz",
+ "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-svelte": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz",
+ "integrity": "sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==",
+ "dev": true,
+ "peerDependencies": {
+ "prettier": "^3.0.0",
+ "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/purgecss": {
+ "version": "6.0.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-6.0.0-alpha.0.tgz",
+ "integrity": "sha512-UC7d7uIyZsky+srEsSXny9BkbTcVn3ZtBCNX3rW3DsqJKhvUXFRpufA4ktcHzWF0+JLZgmsqjUm/8R82x9bHpw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^10.0.0",
+ "glob": "^8.0.3",
+ "postcss": "^8.4.4",
+ "postcss-selector-parser": "^6.0.7"
+ },
+ "bin": {
+ "purgecss": "bin/purgecss.js"
+ }
+ },
+ "node_modules/purgecss/node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "dev": true
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
+ "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.9.6",
+ "@rollup/rollup-android-arm64": "4.9.6",
+ "@rollup/rollup-darwin-arm64": "4.9.6",
+ "@rollup/rollup-darwin-x64": "4.9.6",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
+ "@rollup/rollup-linux-arm64-gnu": "4.9.6",
+ "@rollup/rollup-linux-arm64-musl": "4.9.6",
+ "@rollup/rollup-linux-riscv64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-musl": "4.9.6",
+ "@rollup/rollup-win32-arm64-msvc": "4.9.6",
+ "@rollup/rollup-win32-ia32-msvc": "4.9.6",
+ "@rollup/rollup-win32-x64-msvc": "4.9.6",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dev": true,
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/sailpoint-api-client": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/sailpoint-api-client/-/sailpoint-api-client-1.3.0.tgz",
+ "integrity": "sha512-zK5raCM97VmYcuehj/yCGLlm+SWAsm9aGFgabveenQ6WVNqzQvPZZvG2h3wMV50wqmNKIGmpr4OwEKywOuXrtw==",
+ "dev": true,
+ "dependencies": {
+ "axios": "^1.5.1",
+ "axios-retry": "^3.4.0",
+ "js-yaml": "^4.1.0"
+ }
+ },
+ "node_modules/sander": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
+ "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
+ "dev": true,
+ "dependencies": {
+ "es6-promise": "^3.1.2",
+ "graceful-fs": "^4.1.3",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "node_modules/sander/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/sander/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sander/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sander/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.70.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz",
+ "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
+ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sirv": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
+ "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
+ "dev": true,
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sorcery": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
+ "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.14",
+ "buffer-crc32": "^0.2.5",
+ "minimist": "^1.2.0",
+ "sander": "^0.5.0"
+ },
+ "bin": {
+ "sorcery": "bin/sorcery"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true
+ },
+ "node_modules/std-env": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
+ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-literal": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz",
+ "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/style-mod": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz",
+ "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==",
+ "dev": true
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svelte": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.9.tgz",
+ "integrity": "sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/estree": "^1.0.1",
+ "acorn": "^8.9.0",
+ "aria-query": "^5.3.0",
+ "axobject-query": "^4.0.0",
+ "code-red": "^1.0.3",
+ "css-tree": "^2.3.1",
+ "estree-walker": "^3.0.3",
+ "is-reference": "^3.0.1",
+ "locate-character": "^3.0.0",
+ "magic-string": "^0.30.4",
+ "periscopic": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/svelte-awesome": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/svelte-awesome/-/svelte-awesome-3.3.1.tgz",
+ "integrity": "sha512-nC2KXPs/MQF79vnQEj7RZFkWKdocNfN64Zh/kAWTDS4gFNdCrp7q8dwN3PIxe/mqiaDIUc7x4iv2CtOnVPItcQ==",
+ "dev": true,
+ "peerDependencies": {
+ "svelte": "^3.43.1 || ^4.0.0"
+ }
+ },
+ "node_modules/svelte-check": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.3.tgz",
+ "integrity": "sha512-Q2nGnoysxUnB9KjnjpQLZwdjK62DHyW6nuH/gm2qteFnDk0lCehe/6z8TsIvYeKjC6luKaWxiNGyOcWiLLPSwA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "chokidar": "^3.4.1",
+ "fast-glob": "^3.2.7",
+ "import-fresh": "^3.2.1",
+ "picocolors": "^1.0.0",
+ "sade": "^1.7.4",
+ "svelte-preprocess": "^5.1.0",
+ "typescript": "^5.0.3"
+ },
+ "bin": {
+ "svelte-check": "bin/svelte-check"
+ },
+ "peerDependencies": {
+ "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0"
+ }
+ },
+ "node_modules/svelte-eslint-parser": {
+ "version": "0.33.1",
+ "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz",
+ "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "^7.0.0",
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0",
+ "postcss": "^8.4.29",
+ "postcss-scss": "^4.0.8"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "svelte": "^3.37.0 || ^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "svelte": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/svelte-floating-ui": {
+ "version": "1.5.8",
+ "resolved": "https://registry.npmjs.org/svelte-floating-ui/-/svelte-floating-ui-1.5.8.tgz",
+ "integrity": "sha512-dVvJhZ2bT+kQDHlE4Lep8t+sgEc0XD96fXLzAi2DDI2bsaegBbClxXVNMma0C2WsG+n9GJSYx292dTvA8CYRtw==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/core": "^1.5.0",
+ "@floating-ui/dom": "^1.5.3"
+ }
+ },
+ "node_modules/svelte-hmr": {
+ "version": "0.15.3",
+ "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
+ "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20 || ^14.13.1 || >= 16"
+ },
+ "peerDependencies": {
+ "svelte": "^3.19.0 || ^4.0.0"
+ }
+ },
+ "node_modules/svelte-jsoneditor": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/svelte-jsoneditor/-/svelte-jsoneditor-0.21.3.tgz",
+ "integrity": "sha512-dGChYIE7gEl43/TD7vm9sRPyYQHjCDI/AEjqYnTujEbC88Ekjo/OGD+LGE0ERtg/1cuTb7QCskdtynhJTEmCmw==",
+ "dev": true,
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.12.0",
+ "@codemirror/commands": "^6.3.3",
+ "@codemirror/lang-json": "^6.0.1",
+ "@codemirror/language": "^6.10.0",
+ "@codemirror/lint": "^6.4.2",
+ "@codemirror/search": "^6.5.5",
+ "@codemirror/state": "^6.4.0",
+ "@codemirror/view": "^6.23.0",
+ "@fortawesome/free-regular-svg-icons": "^6.5.1",
+ "@fortawesome/free-solid-svg-icons": "^6.5.1",
+ "@lezer/highlight": "^1.2.0",
+ "@replit/codemirror-indentation-markers": "^6.5.0",
+ "ajv": "^8.12.0",
+ "codemirror-wrapped-line-indent": "^1.0.0",
+ "diff-sequences": "^29.6.3",
+ "immutable-json-patch": "6.0.1",
+ "jmespath": "^0.16.0",
+ "json-source-map": "^0.6.1",
+ "jsonrepair": "^3.5.1",
+ "lodash-es": "^4.17.21",
+ "memoize-one": "^6.0.0",
+ "natural-compare-lite": "^1.4.0",
+ "sass": "^1.70.0",
+ "svelte": "^4.2.9",
+ "svelte-awesome": "^3.3.1",
+ "svelte-select": "^5.8.3",
+ "svelte-simple-modal": "^1.6.1",
+ "vanilla-picker": "^2.12.2"
+ }
+ },
+ "node_modules/svelte-jsoneditor/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/svelte-jsoneditor/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/svelte-preprocess": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz",
+ "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@types/pug": "^2.0.6",
+ "detect-indent": "^6.1.0",
+ "magic-string": "^0.30.5",
+ "sorcery": "^0.11.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 16.0.0",
+ "pnpm": "^8.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.10.2",
+ "coffeescript": "^2.5.1",
+ "less": "^3.11.3 || ^4.0.0",
+ "postcss": "^7 || ^8",
+ "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0",
+ "pug": "^3.0.0",
+ "sass": "^1.26.8",
+ "stylus": "^0.55.0",
+ "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0",
+ "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0",
+ "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "coffeescript": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "postcss-load-config": {
+ "optional": true
+ },
+ "pug": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/svelte-select": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-5.8.3.tgz",
+ "integrity": "sha512-nQsvflWmTCOZjssdrNptzfD1Ok45hHVMTL5IHay5DINk7dfu5Er+8KsVJnZMJdSircqtR0YlT4YkCFlxOUhVPA==",
+ "dev": true,
+ "dependencies": {
+ "svelte-floating-ui": "1.5.8"
+ }
+ },
+ "node_modules/svelte-simple-modal": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/svelte-simple-modal/-/svelte-simple-modal-1.6.1.tgz",
+ "integrity": "sha512-D4/Z7LQ6ThawYb7FlAeS/qGbcwVlqzRHn1zZgWPlEK0cp4l2UMcscqel58mp+gTuk4UX9gl516GYXcHFvuyslA==",
+ "dev": true,
+ "peerDependencies": {
+ "svelte": "^3.30.0 || ^4.0.0"
+ }
+ },
+ "node_modules/svelte/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/svelte/node_modules/is-reference": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
+ "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
+ "dev": true,
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.19.1",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
+ "version": "6.0.15",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+ "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dev": true,
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/tinybench": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz",
+ "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==",
+ "dev": true
+ },
+ "node_modules/tinypool": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz",
+ "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz",
+ "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.13.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz",
+ "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==",
+ "dev": true
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/vanilla-picker": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.2.tgz",
+ "integrity": "sha512-dk0gNeNL9fQFGd1VEhNDQfFlbCqAiksRh1H2tVPlavkH88n/a/y30rXi9PPKrYPTK5kEfPO4xcldt4ts/1wIAg==",
+ "dev": true,
+ "dependencies": {
+ "@sphinxxxx/color-conversion": "^2.2.2"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
+ "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.32",
+ "rollup": "^4.2.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-node": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz",
+ "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==",
+ "dev": true,
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.3.4",
+ "pathe": "^1.1.1",
+ "picocolors": "^1.0.0",
+ "vite": "^5.0.0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vite-plugin-tailwind-purgecss": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-tailwind-purgecss/-/vite-plugin-tailwind-purgecss-0.2.0.tgz",
+ "integrity": "sha512-6Q+SaalUd0t3BOIIiCQPlbZQuYARVgjoC78X+fLbQJqIEy/9fC58aQgHMgi+CmYfVfZmJToA8YiLueSGEo2mng==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^3.0.3",
+ "purgecss": "6.0.0-alpha.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.1.1 || ^5.0.0"
+ }
+ },
+ "node_modules/vite-plugin-tailwind-purgecss/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
+ "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==",
+ "dev": true,
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz",
+ "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/expect": "1.2.1",
+ "@vitest/runner": "1.2.1",
+ "@vitest/snapshot": "1.2.1",
+ "@vitest/spy": "1.2.1",
+ "@vitest/utils": "1.2.1",
+ "acorn-walk": "^8.3.2",
+ "cac": "^6.7.14",
+ "chai": "^4.3.10",
+ "debug": "^4.3.4",
+ "execa": "^8.0.1",
+ "local-pkg": "^0.5.0",
+ "magic-string": "^0.30.5",
+ "pathe": "^1.1.1",
+ "picocolors": "^1.0.0",
+ "std-env": "^3.5.0",
+ "strip-literal": "^1.3.0",
+ "tinybench": "^2.5.1",
+ "tinypool": "^0.8.1",
+ "vite": "^5.0.0",
+ "vite-node": "1.2.1",
+ "why-is-node-running": "^2.2.2"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "@vitest/browser": "^1.0.0",
+ "@vitest/ui": "^1.0.0",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "dev": true
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
+ "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
+ "dev": true,
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/Sveltekit-App/package.json b/Sveltekit-App/package.json
new file mode 100644
index 0000000..cbdb94c
--- /dev/null
+++ b/Sveltekit-App/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "idn-admin-console-svelte",
+ "description": "A troubleshooting and administration app for IdentityNow",
+ "version": "0.0.3",
+ "private": true,
+ "author": {
+ "name": "Luke Hagar",
+ "email": "luke.hagar@sailpoint.com"
+ },
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build",
+ "publish": "npm run build",
+ "preview": "vite preview",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
+ "test": "vitest",
+ "lint": "prettier --check . && eslint .",
+ "format": "prettier --write ."
+ },
+ "devDependencies": {
+ "@floating-ui/dom": "1.5.4",
+ "@skeletonlabs/skeleton": "2.7.1",
+ "@skeletonlabs/tw-plugin": "0.3.1",
+ "@sveltejs/adapter-node": "^4.0.1",
+ "@sveltejs/kit": "^2.5.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
+ "@tailwindcss/forms": "0.5.7",
+ "@tailwindcss/typography": "0.5.10",
+ "@types/jsonwebtoken": "^9.0.5",
+ "@types/node": "20.11.5",
+ "@typescript-eslint/eslint-plugin": "^6.20.0",
+ "@typescript-eslint/parser": "^6.20.0",
+ "alasql": "^4.2.6",
+ "autoprefixer": "10.4.17",
+ "axios": "^1.6.7",
+ "eslint": "^8.56.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-svelte": "^2.35.1",
+ "highlight.js": "^11.9.0",
+ "jsonwebtoken": "^9.0.2",
+ "postcss": "8.4.33",
+ "prettier": "^3.2.4",
+ "prettier-plugin-svelte": "^3.1.2",
+ "sailpoint-api-client": "^1.3.0",
+ "svelte": "^4.2.9",
+ "svelte-check": "^3.6.3",
+ "svelte-jsoneditor": "^0.21.4",
+ "tailwindcss": "3.4.1",
+ "tslib": "^2.6.2",
+ "typescript": "^5.3.3",
+ "vite": "^5.0.12",
+ "vite-plugin-tailwind-purgecss": "0.2.0",
+ "vitest": "^1.2.2"
+ },
+ "type": "module"
+}
diff --git a/Sveltekit-App/postcss.config.cjs b/Sveltekit-App/postcss.config.cjs
new file mode 100644
index 0000000..16dce0b
--- /dev/null
+++ b/Sveltekit-App/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
\ No newline at end of file
diff --git a/Sveltekit-App/src/app.d.ts b/Sveltekit-App/src/app.d.ts
new file mode 100644
index 0000000..015c6ae
--- /dev/null
+++ b/Sveltekit-App/src/app.d.ts
@@ -0,0 +1,28 @@
+// See https://kit.svelte.dev/docs/types#app
+// for information about these interfaces
+// and what to do when importing types
+
+import type { IdnSession, Session, TokenDetails } from '$lib/utils/oauth';
+
+declare global {
+ namespace App {
+ interface Locals {
+ hasSession: boolean;
+ hasIdnSession: boolean;
+ session?: Session;
+ idnSession?: IdnSession;
+ tokenDetails?: TokenDetails;
+ }
+
+ // interface PageData {}
+
+ interface Error {
+ message: string;
+ context?: unknown;
+ urls?: string[];
+ errData?: unknown;
+ }
+
+ // interface Platform {}
+ }
+}
diff --git a/src/app.html b/Sveltekit-App/src/app.html
similarity index 54%
rename from src/app.html
rename to Sveltekit-App/src/app.html
index ac33e54..9b16c20 100644
--- a/src/app.html
+++ b/Sveltekit-App/src/app.html
@@ -2,12 +2,12 @@
-
+
- Sveltekit + Electron yeah
+ IdentityNow Admin Console
%sveltekit.head%
- %sveltekit.body%
+ %sveltekit.body%
diff --git a/src/app.postcss b/Sveltekit-App/src/app.postcss
similarity index 56%
rename from src/app.postcss
rename to Sveltekit-App/src/app.postcss
index 588d1b1..38e7f43 100644
--- a/src/app.postcss
+++ b/Sveltekit-App/src/app.postcss
@@ -1,8 +1,18 @@
-/* Write your global styles here, in PostCSS syntax */
@tailwind base;
@tailwind components;
@tailwind utilities;
+@tailwind variants;
+
:root [data-theme='wintry'] {
--theme-rounded-base: 5px;
--theme-rounded-container: 4px;
-}
\ No newline at end of file
+}
+
+html,
+body {
+ @apply h-full overflow-hidden;
+}
+
+td {
+ @apply !align-middle !text-center;
+}
diff --git a/Sveltekit-App/src/error.html b/Sveltekit-App/src/error.html
new file mode 100644
index 0000000..282016c
--- /dev/null
+++ b/Sveltekit-App/src/error.html
@@ -0,0 +1,20 @@
+
+
+Game over, man! Game over!
+
+ No but seriously, it appears there was an unhandled issue loading the layout of the application
+
+
+
+
+
+
+ Please let us know by submitting an issue on GitHub
+
+
+Error Code: %sveltekit.status%
+Error Message: %sveltekit.error.message%
diff --git a/Sveltekit-App/src/hooks.server.ts b/Sveltekit-App/src/hooks.server.ts
new file mode 100644
index 0000000..70ee0eb
--- /dev/null
+++ b/Sveltekit-App/src/hooks.server.ts
@@ -0,0 +1,48 @@
+import {
+ checkIdnSession,
+ checkSession,
+ checkToken,
+ getSession,
+ getToken,
+ getTokenDetails,
+ lastCheckedToken
+} from '$lib/utils/oauth';
+import { redirect, type Handle } from '@sveltejs/kit';
+
+export const handle: Handle = async ({ event, resolve }) => {
+ const hasSession = checkSession(event.cookies);
+ const hasIdnSession = checkIdnSession(event.cookies);
+ event.locals.hasSession = hasSession;
+ event.locals.hasIdnSession = hasIdnSession;
+
+ if (hasSession) {
+ event.locals.session = getSession(event.cookies);
+
+ if (hasIdnSession) {
+ event.locals.idnSession = await getToken(event.cookies);
+ const lastToken = lastCheckedToken(event.cookies);
+ if (lastToken != '' && lastToken === event.locals.idnSession.access_token) {
+ event.locals.tokenDetails = getTokenDetails(event.cookies);
+ } else {
+ event.locals.tokenDetails = await checkToken(
+ event.locals.session.baseUrl,
+ event.locals.idnSession.access_token
+ );
+ event.cookies.set('tokenDetails', JSON.stringify(event.locals.tokenDetails), {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+ }
+ }
+ }
+
+ if (event.url.pathname.startsWith('/home') || event.url.pathname.startsWith('/api')) {
+ if (!hasSession || !hasIdnSession) {
+ redirect(302, '/');
+ }
+ }
+
+ const response = await resolve(event);
+ return response;
+};
diff --git a/src/lib/AnimatedCounter.svelte b/Sveltekit-App/src/lib/Components/AnimatedCounter.svelte
similarity index 100%
rename from src/lib/AnimatedCounter.svelte
rename to Sveltekit-App/src/lib/Components/AnimatedCounter.svelte
diff --git a/Sveltekit-App/src/lib/Components/CodeBlockModal.svelte b/Sveltekit-App/src/lib/Components/CodeBlockModal.svelte
new file mode 100644
index 0000000..f07ae1b
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/CodeBlockModal.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/HomepageCards/ResourceLinksCard.svelte b/Sveltekit-App/src/lib/Components/HomepageCards/ResourceLinksCard.svelte
new file mode 100644
index 0000000..c0af8b5
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/HomepageCards/ResourceLinksCard.svelte
@@ -0,0 +1,21 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/HomepageCards/StatusCard.svelte b/Sveltekit-App/src/lib/Components/HomepageCards/StatusCard.svelte
new file mode 100644
index 0000000..4d73350
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/HomepageCards/StatusCard.svelte
@@ -0,0 +1,52 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/HomepageCards/SupportLinksCard.svelte b/Sveltekit-App/src/lib/Components/HomepageCards/SupportLinksCard.svelte
new file mode 100644
index 0000000..2fc79e7
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/HomepageCards/SupportLinksCard.svelte
@@ -0,0 +1,16 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/HomepageCards/TenantLinksCard.svelte b/Sveltekit-App/src/lib/Components/HomepageCards/TenantLinksCard.svelte
new file mode 100644
index 0000000..778f063
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/HomepageCards/TenantLinksCard.svelte
@@ -0,0 +1,23 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/HomepageCards/links.ts b/Sveltekit-App/src/lib/Components/HomepageCards/links.ts
new file mode 100644
index 0000000..6e1baef
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/HomepageCards/links.ts
@@ -0,0 +1,53 @@
+export const tenantLinks: { label: string; slug: string }[] = [
+ { label: '🔑 Grant Tenant Access', slug: '/ui/a/admin/global/grant-tenant-access' },
+ {
+ label: '🏠 Dashboard',
+ slug: '/ui/admin#admin:dashboard:overview'
+ },
+ { label: '🙂 Identity Profiles', slug: '/ui/admin#admin:identities:profiles' },
+ { label: '📋 Identity List', slug: '/ui/a/admin/identities/all-identities' },
+ { label: '🎭 Access Profiles', slug: '/ui/a/admin/access/access-profiles/landing' },
+ { label: '📦 Roles', slug: '/ui/a/admin/access/roles/landing-page' },
+ { label: '🔗 Sources', slug: '/ui/a/admin/connections/sources-list/configured-sources' },
+ {
+ label: '💻 Virtual Appliances',
+ slug: '/ui/a/admin/connections/virtual-appliances/clusters-list'
+ }
+];
+
+export const resourcelinks: { label: string; href: string }[] = [
+ {
+ label: '💁 Developer Community',
+ href: 'https://developer.sailpoint.com/discuss/'
+ },
+ { label: '📖 API Documentation', href: 'https://developer.sailpoint.com/idn/api/v3' },
+ { label: '💻 CLI Documentation', href: 'https://developer.sailpoint.com/idn/tools/cli' },
+ {
+ label: '🔌 Connector Reference',
+ href: 'https://community.sailpoint.com/t5/IdentityNow-Connectors/IdentityNow-Connectors/ta-p/80019'
+ },
+ {
+ label: '🧮 Transform Guides',
+ href: 'https://community.sailpoint.com/t5/Search/bd-p/search?searchString=%22IdentityNow+Transforms+-%22'
+ },
+ {
+ label: '📚 Rules Documentation',
+ href: 'https://developer.sailpoint.com/idn/docs/rules/'
+ },
+ {
+ label: '🔒 User Level Access Matrix',
+ href: 'https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html'
+ }
+];
+
+export const supportLinks: { label: string; href: string }[] = [
+ {
+ label: '🎫 Submit a ticket',
+ href: 'https://support.sailpoint.com/csm?id=sc_cat_item&sys_id=a78364e81bec151050bcc8866e4bcb5c&referrer=popular_items'
+ },
+ {
+ label: '🔭 Scope of SaaS Support',
+ href: 'https://community.sailpoint.com/t5/IdentityNow-Wiki/What-is-supported-by-SaaS-Support/ta-p/198779'
+ },
+ { label: '🔖 Support Knowledge Base', href: 'https://support.sailpoint.com/' }
+];
diff --git a/Sveltekit-App/src/lib/Components/Paginator.svelte b/Sveltekit-App/src/lib/Components/Paginator.svelte
new file mode 100644
index 0000000..3f67d84
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/Paginator.svelte
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ Go
+
+
Total Count: {totalCount}
+
+
diff --git a/Sveltekit-App/src/lib/Components/Progress.svelte b/Sveltekit-App/src/lib/Components/Progress.svelte
new file mode 100644
index 0000000..8ca021a
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/Progress.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/HamburgerSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/HamburgerSVG.svelte
new file mode 100644
index 0000000..ec79c23
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/HamburgerSVG.svelte
@@ -0,0 +1,49 @@
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/HomeSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/HomeSVG.svelte
new file mode 100644
index 0000000..a79b78b
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/HomeSVG.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/IdentitiesSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/IdentitiesSVG.svelte
new file mode 100644
index 0000000..113943a
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/IdentitiesSVG.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/MessagesSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/MessagesSVG.svelte
new file mode 100644
index 0000000..7f581da
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/MessagesSVG.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/ReportsSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/ReportsSVG.svelte
new file mode 100644
index 0000000..c73d335
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/ReportsSVG.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/SVGs/SourcesSVG.svelte b/Sveltekit-App/src/lib/Components/SVGs/SourcesSVG.svelte
new file mode 100644
index 0000000..4c3e8a5
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/SVGs/SourcesSVG.svelte
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/Components/VACluster.svelte b/Sveltekit-App/src/lib/Components/VACluster.svelte
new file mode 100644
index 0000000..da00fd0
--- /dev/null
+++ b/Sveltekit-App/src/lib/Components/VACluster.svelte
@@ -0,0 +1,77 @@
+
+
+Virtual Appliance Cluster
+Name: {cluster?.name || 'Empty'}
+ID: {cluster?.id || 'Empty'}
+
+{#if cluster?.id}
+ {#await fetch(`/api/sailpoint/cluster/${cluster.id}`)}
+
+ {:then clusterResponse}
+ {#await clusterResponse.json()}
+
+ {:then clusterInfo}
+ Pod: {clusterInfo.pod}
+ Description: {clusterInfo.description ? clusterInfo.description : 'Empty'}
+ CCG Version: {clusterInfo.ccgVersion}
+
+ Debugging Enabled:
+ {clusterInfo.configuration.debug === 'true' ? 'True' : 'False'}
+
+
+
+ Status:
+ {clusterInfo.status}
+
+
+
+ Alert:
+ {clusterInfo.alertKey}
+
+
+
+
Client IDs
+
+ {#each clusterInfo.clientIds as client, index}
+
+ {index + 1}.
+ {client}
+
+ {/each}
+
+
+
+
+
+ Raw Data
+
+
+
+
+
+ {:catch error}
+ Error: {error.message}
+ {/await}
+ {:catch error}
+ Error: {error.message}
+ {/await}
+{/if}
diff --git a/Sveltekit-App/src/lib/Utils.ts b/Sveltekit-App/src/lib/Utils.ts
new file mode 100644
index 0000000..12d3a3b
--- /dev/null
+++ b/Sveltekit-App/src/lib/Utils.ts
@@ -0,0 +1,106 @@
+import { goto } from '$app/navigation';
+import type { ModalSettings, ModalStore } from '@skeletonlabs/skeleton';
+
+export function formatDate(date: string | null | undefined) {
+ if (!date) return 'N/A';
+ return new Date(date).toLocaleString();
+}
+
+export function getLimit(url: URL) {
+ return url.searchParams.get('limit') || '250';
+}
+
+export function getFilters(url: URL) {
+ return url.searchParams.get('filters') || '';
+}
+
+export function getSorters(url: URL) {
+ return url.searchParams.get('sorters') || '';
+}
+
+export function getPage(url: URL) {
+ return url.searchParams.get('page') || '0';
+}
+
+export function getPaginationParams(url: URL) {
+ return {
+ limit: getLimit(url),
+ page: getPage(url),
+ filters: getFilters(url),
+ sorters: getSorters(url)
+ };
+}
+
+type PaginationParams = {
+ limit: string;
+ page: string;
+ filters: string;
+ sorters: string;
+};
+
+export function createOnPageChange(params: PaginationParams, path: string) {
+ return function onPageChange(e: CustomEvent): void {
+ const urlParams = new URLSearchParams();
+ urlParams.set('page', e.detail);
+ urlParams.set('limit', params.limit);
+ urlParams.set('sorters', params.sorters);
+ urlParams.set('filters', params.filters);
+
+ console.log(`${path}?${urlParams.toString()}`);
+
+ goto(`${path}?${urlParams.toString()}`);
+ };
+}
+
+export function createOnAmountChange(params: PaginationParams, path: string) {
+ return function onAmountChange(e: CustomEvent): void {
+ const urlParams = new URLSearchParams();
+ urlParams.set('page', params.page);
+ urlParams.set('limit', e.detail);
+ urlParams.set('sorters', params.sorters);
+ urlParams.set('filters', params.filters);
+
+ console.log(`${path}?${urlParams.toString()}`);
+
+ goto(`${path}?${urlParams.toString()}`);
+ };
+}
+
+export function createOnGo(params: PaginationParams, path: string) {
+ return function onGo(e: KeyboardEvent | MouseEvent): void {
+ if (e.type !== 'click' && (e as KeyboardEvent).key !== 'Enter') return;
+
+ const urlParams = new URLSearchParams();
+ urlParams.set('page', params.page);
+ urlParams.set('limit', params.limit);
+ urlParams.set('sorters', params.sorters);
+ urlParams.set('filters', params.filters);
+
+ console.log(`${path}?${urlParams.toString()}`);
+
+ goto(`${path}?${urlParams.toString()}`);
+ };
+}
+
+export function capitalize(s: string) {
+ if (typeof s !== 'string') return '';
+ return s.charAt(0).toUpperCase() + s.slice(1);
+}
+
+export function TriggerCodeModal(object: unknown, modalStore: ModalStore) {
+ const modal: ModalSettings = {
+ type: 'component',
+ component: 'codeBlockModal',
+ meta: {
+ code: JSON.stringify(object, null, 4),
+ language: 'json'
+ }
+ };
+
+ modalStore.trigger(modal);
+}
+
+export function parseInitials(name: string) {
+ const initials = name.match(/\b(\w)/g) || ['A', 'U'];
+ return initials.join('');
+}
diff --git a/Sveltekit-App/src/lib/reports.ts b/Sveltekit-App/src/lib/reports.ts
new file mode 100644
index 0000000..95aa980
--- /dev/null
+++ b/Sveltekit-App/src/lib/reports.ts
@@ -0,0 +1,30 @@
+export const reports = [
+ {
+ url: '/home/reports/source-account-create-error',
+ name: 'Source Account Create Error',
+ description:
+ 'This report will show all source accounts for which there is a create error associated with the source'
+ },
+ {
+ url: '/home/reports/inactive-identities-with-access',
+ name: 'Inactive Identities With Access',
+ description:
+ 'This report will show all identities that are inactive but still have access in sources'
+ },
+ {
+ url: '/home/reports/missing-cloud-life-cycle-state',
+ name: 'Missing Cloud Life Cycle State',
+ description: 'This report will show all identities that are missing a cloud life cycle state'
+ },
+
+ {
+ url: '/home/reports/source-owner-configured',
+ name: 'Source Owner Configured',
+ description: 'This report will show all sources and their configured owners'
+ },
+ {
+ url: '/home/reports/source-aggregations',
+ name: 'Source Aggregations',
+ description: 'This report will show all sources and their most recent aggregation events'
+ }
+];
diff --git a/Sveltekit-App/src/lib/sailpoint/sdk.ts b/Sveltekit-App/src/lib/sailpoint/sdk.ts
new file mode 100644
index 0000000..4f33707
--- /dev/null
+++ b/Sveltekit-App/src/lib/sailpoint/sdk.ts
@@ -0,0 +1,6 @@
+import { Configuration } from 'sailpoint-api-client';
+
+export function createConfiguration(baseUrl: string, token: string) {
+ const apiConfig = new Configuration({ baseurl: baseUrl, accessToken: token });
+ return apiConfig;
+}
diff --git a/Sveltekit-App/src/lib/sidebar/Sidebar.svelte b/Sveltekit-App/src/lib/sidebar/Sidebar.svelte
new file mode 100644
index 0000000..b3923b5
--- /dev/null
+++ b/Sveltekit-App/src/lib/sidebar/Sidebar.svelte
@@ -0,0 +1,29 @@
+
+
+
diff --git a/Sveltekit-App/src/lib/sidebar/SidebarDrawer.svelte b/Sveltekit-App/src/lib/sidebar/SidebarDrawer.svelte
new file mode 100644
index 0000000..a5e7b50
--- /dev/null
+++ b/Sveltekit-App/src/lib/sidebar/SidebarDrawer.svelte
@@ -0,0 +1,15 @@
+
+
+
+ {#if $drawerStore.id === 'doc-sidenav'}
+
+
+ {/if}
+
diff --git a/Sveltekit-App/src/lib/sidebar/navigation.ts b/Sveltekit-App/src/lib/sidebar/navigation.ts
new file mode 100644
index 0000000..bcaf2d4
--- /dev/null
+++ b/Sveltekit-App/src/lib/sidebar/navigation.ts
@@ -0,0 +1,43 @@
+import HomeSvg from '$lib/Components/SVGs/HomeSVG.svelte';
+import IdentitiesSvg from '$lib/Components/SVGs/IdentitiesSVG.svelte';
+import MessagesSvg from '$lib/Components/SVGs/MessagesSVG.svelte';
+import ReportsSvg from '$lib/Components/SVGs/ReportsSVG.svelte';
+import SourcesSvg from '$lib/Components/SVGs/SourcesSVG.svelte';
+
+export const navigation = [
+ {
+ name: 'Main',
+ content: [
+ {
+ url: '/home',
+ name: 'Home',
+ description: 'Home page for the application.',
+ icon: HomeSvg
+ },
+ {
+ url: '/home/sources',
+ name: 'Sources',
+ description: 'a list of Sources in IdentityNow.',
+ icon: SourcesSvg
+ },
+ {
+ url: '/home/identities',
+ name: 'Identities',
+ description: 'a list of Identities in IdentityNow.',
+ icon: IdentitiesSvg
+ },
+ {
+ url: '/home/reports',
+ name: 'Reports',
+ description: 'a list of Reports for IdentityNow.',
+ icon: ReportsSvg
+ },
+ {
+ url: '/home/courier',
+ name: 'Courier',
+ description: 'an API client for IdentityNow with authentication baked right in.',
+ icon: MessagesSvg
+ }
+ ]
+ }
+];
diff --git a/Sveltekit-App/src/lib/utils/oauth.ts b/Sveltekit-App/src/lib/utils/oauth.ts
new file mode 100644
index 0000000..011ee58
--- /dev/null
+++ b/Sveltekit-App/src/lib/utils/oauth.ts
@@ -0,0 +1,211 @@
+import type { Cookies } from '@sveltejs/kit';
+import { redirect } from '@sveltejs/kit';
+import axios from 'axios';
+import jwt from 'jsonwebtoken';
+
+export function generateAuthLink(tenantUrl: string) {
+ return `${tenantUrl}/oauth/authorize?client_id=sailpoint-cli&response_type=code&redirect_uri=http://localhost:3000/callback`;
+}
+
+export type Session = {
+ baseUrl: string;
+ tenantUrl: string;
+};
+
+export type IdnSession = {
+ access_token: string;
+ refresh_token: string;
+ claims_supported: string;
+ expires_in: string;
+ identity_id: string;
+ internal: string;
+ jti: string;
+ org: string;
+ pod: string;
+ scope: string;
+ strong_auth: string;
+ strong_auth_supported: string;
+ tenant_id: string;
+ token_type: string;
+};
+
+export type TokenDetails = {
+ tenant_id: string;
+ internal: boolean;
+ pod: string;
+ org: string;
+ identity_id: string;
+ user_name: string;
+ strong_auth: boolean;
+ force_auth_supported: boolean;
+ active: boolean;
+ authorities: string[];
+ client_id: string;
+ encoded_scope: string[];
+ strong_auth_supported: boolean;
+ claims_supported: boolean;
+ scope: string[];
+ exp: number;
+ jti: string;
+};
+
+export function lastCheckedToken(cookies: Cookies): string {
+ const lastCheckedToken = cookies.get('lastCheckedToken');
+ if (!lastCheckedToken) {
+ return '';
+ }
+ return lastCheckedToken;
+}
+
+export function getTokenDetails(cookies: Cookies): TokenDetails {
+ const tokenDetailsString = cookies.get('tokenDetails');
+ if (!tokenDetailsString) {
+ return {} as TokenDetails;
+ }
+ return JSON.parse(tokenDetailsString) as TokenDetails;
+}
+
+export function setTokenDetails(cookies: Cookies, tokenDetails: TokenDetails) {
+ cookies.set('tokenDetails', JSON.stringify(tokenDetails), {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+}
+
+export async function checkToken(apiUrl: string, token: string): Promise {
+ const body = 'token=' + token;
+ const url = `${apiUrl}/oauth/check_token/`;
+ const response = await axios.post(url, body).catch(function (err) {
+ if (err.response) {
+ // Request made and server responded
+ console.log(err.response.data);
+ console.log(err.response.status);
+ console.log(err.response.headers);
+ }
+ return undefined;
+ });
+ // if (response) {
+ // console.log(response.data);
+ // }
+ const tokenDetails = response!.data;
+
+ return tokenDetails;
+}
+
+export async function refreshToken(apiUrl: string, refreshToken: string): Promise {
+ const url = `${apiUrl}/oauth/token?grant_type=refresh_token&client_id=sailpoint-cli&refresh_token=${refreshToken}`;
+ const response = await axios.post(url).catch(function (err) {
+ if (err.response) {
+ // Request made and server responded
+ console.log(err.response.data);
+ console.log(err.response.status);
+ console.log(err.response.headers);
+ }
+ return undefined;
+ });
+ // if (response) {
+ // console.log(response.data)
+ // }
+ const idnSession: IdnSession = response!.data as IdnSession;
+ return idnSession;
+}
+
+export async function logout(cookies: Cookies) {
+ cookies.delete('session', {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+
+ cookies.delete('idnSession', {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+}
+
+export function checkSession(cookies: Cookies): boolean {
+ const sessionString = cookies.get('session');
+ if (!sessionString) {
+ return false;
+ }
+ return true;
+}
+
+export function checkIdnSession(cookies: Cookies): boolean {
+ const idnSessionString = cookies.get('idnSession');
+ if (!idnSessionString) {
+ return false;
+ }
+ return true;
+}
+
+export function getSession(cookies: Cookies): Session {
+ const sessionString = cookies.get('session');
+ if (!sessionString) return { baseUrl: '', tenantUrl: '' };
+ return JSON.parse(sessionString) as Session;
+}
+
+export async function getToken(cookies: Cookies): Promise {
+ const sessionString = cookies.get('session');
+ const idnSessionString = cookies.get('idnSession');
+
+ const session: Session = JSON.parse(sessionString!);
+
+ if (!idnSessionString) {
+ console.log('IdnSession does not exist, redirecting to login');
+ redirect(302, generateAuthLink(session.tenantUrl));
+ }
+
+ const idnSession: IdnSession = JSON.parse(idnSessionString);
+
+ if (
+ idnSession &&
+ session &&
+ !session.baseUrl.toLowerCase().includes(idnSession.org.toLowerCase())
+ ) {
+ redirect(302, generateAuthLink(session.tenantUrl));
+ }
+
+ if (isJwtExpired(idnSession.access_token)) {
+ console.log('Refreshing IdnSession token...');
+ const newSession = await refreshToken(session.baseUrl, idnSession.refresh_token);
+ cookies.set('idnSession', JSON.stringify(newSession), {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+ return Promise.resolve(newSession);
+ } else {
+ console.log('IdnSession token is good');
+ return Promise.resolve(idnSession);
+ }
+}
+
+function isJwtExpired(token: string): boolean {
+ try {
+ const decodedToken = jwt.decode(token, { complete: true });
+ if (
+ !decodedToken ||
+ !decodedToken.payload ||
+ typeof decodedToken.payload === 'string' ||
+ !decodedToken.payload.exp
+ ) {
+ // The token is missing the expiration claim ('exp') or is not a valid JWT.
+ return true; // Treat as expired for safety.
+ }
+
+ // Get the expiration timestamp from the token.
+ const expirationTimestamp = decodedToken.payload.exp;
+
+ // Get the current timestamp.
+ const currentTimestamp = Math.floor(Date.now() / 1000);
+
+ // Check if the token has expired.
+ return currentTimestamp >= expirationTimestamp;
+ } catch (error) {
+ // An error occurred during decoding.
+ return true; // Treat as expired for safety.
+ }
+}
diff --git a/Sveltekit-App/src/routes/+error.svelte b/Sveltekit-App/src/routes/+error.svelte
new file mode 100644
index 0000000..83698c2
--- /dev/null
+++ b/Sveltekit-App/src/routes/+error.svelte
@@ -0,0 +1,55 @@
+
+
+
+
+
+ WHOOPS! a {$page.status} error occurred. If
+ you believe this is a bug please submit an issue on
+
+ GitHub
+
+
+ {#if $page.error?.message}
+
Message: {$page.error.message}
+ {/if}
+
+ {#if $page.error?.urls}
+
These links may be helpful:
+
+ {#each $page.error?.urls as url}
+
+ -
+ {url}
+
+ {/each}
+
+ {/if}
+ {#if $page.error?.context}
+
+ {/if}
+ {#if $page.error?.errData}
+
+ {/if}
+
+
diff --git a/Sveltekit-App/src/routes/+layout.server.ts b/Sveltekit-App/src/routes/+layout.server.ts
new file mode 100644
index 0000000..2a259c0
--- /dev/null
+++ b/Sveltekit-App/src/routes/+layout.server.ts
@@ -0,0 +1,3 @@
+export const load = async ({ locals }) => {
+ return { tokenDetails: locals.tokenDetails };
+};
diff --git a/Sveltekit-App/src/routes/+layout.svelte b/Sveltekit-App/src/routes/+layout.svelte
new file mode 100644
index 0000000..d51250c
--- /dev/null
+++ b/Sveltekit-App/src/routes/+layout.svelte
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+
+
+
+ {#if data.tokenDetails}
+
+
+
+ {/if}
+
+
+
+ IdentityNow Admin Console
+
+
+ {#if data.tokenDetails}
+
+
+
+
+
+
+
+
+
{data?.tokenDetails?.user_name}
+
+
+ Tenant:
+ {data?.tokenDetails?.org}
+
+
+ Pod:
+ {data?.tokenDetails?.pod}
+
+
+
Scopes:
+
+ {#each data?.tokenDetails?.scope as scope}
+ {scope}
+ {/each}
+
+
+
+
Logout
+
+
+
+
+ {/if}
+
+
+
+
+ {#if data.tokenDetails}
+
+ {/if}
+
+
+
+
+
+ {#if crumbs.length > 0}
+
+
+ {#each crumbs as crumb, i}
+
+ {#if i < crumbs.length - 1}
+ {crumb.label}
+ ›
+ {:else}
+ {crumb.label}
+ {/if}
+ {/each}
+
+
+ {/if}
+
+
+ {#if ready}
+
+ {/if}
+
+
+
+
+
+
diff --git a/Sveltekit-App/src/routes/+page.server.ts b/Sveltekit-App/src/routes/+page.server.ts
new file mode 100644
index 0000000..8c11cb4
--- /dev/null
+++ b/Sveltekit-App/src/routes/+page.server.ts
@@ -0,0 +1,51 @@
+import { generateAuthLink } from '$lib/utils/oauth';
+import { redirect } from '@sveltejs/kit';
+import type { Actions } from './$types';
+
+export const actions = {
+ default: async ({ cookies, request }) => {
+ const data = await request.formData();
+
+ const baseUrl = data.get('baseUrl');
+ const tenantUrl = data.get('tenantUrl');
+
+ if (!baseUrl || !tenantUrl) {
+ redirect(302, '/login');
+ }
+
+ const session = { baseUrl: baseUrl.toString(), tenantUrl: tenantUrl.toString() };
+ console.log('session', session);
+
+ const idnSessionString = cookies.get('idnSession');
+
+ if (idnSessionString) {
+ // console.log('sessionString', sessionString);
+
+ const idnSession = JSON.parse(idnSessionString);
+ if (idnSession && session.baseUrl.toLowerCase().includes(idnSession.org.toLowerCase())) {
+ console.log('Credential Cache Hit');
+ redirect(302, '/home');
+ } else {
+ console.log('Credential Cache Miss');
+ }
+ }
+
+ cookies.set('session', JSON.stringify(session), {
+ path: '/'
+ });
+ redirect(302, generateAuthLink(tenantUrl.toString()));
+ }
+} satisfies Actions;
+
+export const load = async ({ locals }) => {
+ if (!locals.hasSession || !locals.hasIdnSession) return {};
+
+ if (
+ locals.session &&
+ locals.idnSession &&
+ locals.session.baseUrl.toLowerCase().includes(locals.idnSession.org.toLowerCase())
+ ) {
+ redirect(302, '/home');
+ }
+ return {};
+};
diff --git a/Sveltekit-App/src/routes/+page.svelte b/Sveltekit-App/src/routes/+page.svelte
new file mode 100644
index 0000000..e5d4428
--- /dev/null
+++ b/Sveltekit-App/src/routes/+page.svelte
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
Enter your tenant information to continue
+
+
+
diff --git a/Sveltekit-App/src/routes/api/sailpoint/cluster/[clusterID]/+server.ts b/Sveltekit-App/src/routes/api/sailpoint/cluster/[clusterID]/+server.ts
new file mode 100644
index 0000000..443444c
--- /dev/null
+++ b/Sveltekit-App/src/routes/api/sailpoint/cluster/[clusterID]/+server.ts
@@ -0,0 +1,20 @@
+import { createConfiguration } from '$lib/sailpoint/sdk';
+import { getToken } from '$lib/utils/oauth';
+import { json } from '@sveltejs/kit';
+import { ManagedClustersBetaApi } from 'sailpoint-api-client';
+
+/** @type {import('./$types').RequestHandler} */
+export async function GET({ cookies, params }) {
+ // Generic SDK setup
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+
+ // Route specific SDK call
+ const api = new ManagedClustersBetaApi(config);
+
+ const val = await api.getManagedCluster({ id: params.clusterID });
+ // console.log(val);
+ return json(val.data);
+}
diff --git a/Sveltekit-App/src/routes/callback/+page.server.ts b/Sveltekit-App/src/routes/callback/+page.server.ts
new file mode 100644
index 0000000..a002ae4
--- /dev/null
+++ b/Sveltekit-App/src/routes/callback/+page.server.ts
@@ -0,0 +1,44 @@
+import { generateAuthLink } from '$lib/utils/oauth';
+import { error, redirect } from '@sveltejs/kit';
+import axios from 'axios';
+import type { PageServerLoad } from './$types';
+import { counterList } from './loadinglist';
+
+export const load: PageServerLoad = async ({ url, cookies, locals }) => {
+ const code = url.searchParams.get('code');
+
+ if (!code) error(500, 'No Authorization Code Provided');
+
+ if (!locals.session) error(500, 'No Session Found');
+
+ const response = await axios
+ .post(
+ `${locals.session.baseUrl}/oauth/token?grant_type=authorization_code&client_id=sailpoint-cli&code=${code}&redirect_uri=http://localhost:3000/callback`
+ )
+ .catch(function (err) {
+ if (err.response) {
+ // Request made and server responded
+ console.log(err.response.data);
+ console.log(err.response.status);
+ console.log(err.response.headers);
+ redirect(302, generateAuthLink(locals.session!.tenantUrl));
+ } else if (err.request) {
+ // The request was made but no response was received
+ error(500, { message: 'No Response From IDN' });
+ } else {
+ // Something happened in setting up the request that triggered an err
+ error(500, {
+ message: 'Error during Axios Request'
+ });
+ }
+ });
+
+ console.log(response.data);
+ cookies.set('idnSession', JSON.stringify(response.data), {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+
+ return { counterList };
+};
diff --git a/src/routes/callback/+page.svelte b/Sveltekit-App/src/routes/callback/+page.svelte
similarity index 66%
rename from src/routes/callback/+page.svelte
rename to Sveltekit-App/src/routes/callback/+page.svelte
index b58f74f..8af29f3 100644
--- a/src/routes/callback/+page.svelte
+++ b/Sveltekit-App/src/routes/callback/+page.svelte
@@ -1,16 +1,14 @@
-
+
',
'I need to git pull --my-life-together',
- 'Java developers never RIP. They just get Garbage Collected.',
'Cracking military-grade encryption...',
'Simulating traveling salesman...',
'Proving P=NP...',
@@ -150,12 +135,9 @@ export const counterList = [
'Twiddling thumbs...',
'Searching for plot device...',
'Trying to sort in O(n)...',
- 'Laughing at your pictures-i mean, loading...',
- 'Sending data to NS-i mean, our servers.',
'Looking for sense of humour, please hold on.',
'Please wait while the intern refills his coffee.',
'A different error message? Finally, some progress!',
- 'Hold on while we wrap up our git together...sorry',
'Please hold on as we reheat our coffee',
'Kindly hold on as we convert this bug to a feature...',
'Kindly hold on as our intern quits vim...',
@@ -163,7 +145,6 @@ export const counterList = [
'Installing dependencies',
'Switching to the latest JS framework...',
'Distracted by cat gifs',
- 'Finding someone to hold my beer',
'BRB, working on my side project',
'@todo Insert witty loading message',
"Let's hope it's worth the wait",
@@ -175,20 +156,17 @@ export const counterList = [
"It is dark. You're likely to be eaten by a grue.",
'Loading funny message...',
"It's 10:00pm. Do you know where your children are?",
- 'Waiting Daenerys say all her titles...',
+ 'Waiting for Daenerys say all her titles...',
'Feel free to spin in your chair',
'What the what?',
'format C: ...',
'Forget you saw that password I just typed into the IM ...',
"What's under there?",
- 'Your computer has a virus, its name is Windows!',
- 'Go ahead, hold your breath and do an ironman plank till loading complete',
+ 'Go ahead, hold your breath and do an ironman plank till loading is complete',
'Bored of slow loading spinner, buy more RAM!',
"Help, I'm trapped in a loader!",
- 'What is the difference btwn a hippo and a zippo? One is really heavy, the other is a little lighter',
+ 'What is the difference between a hippo and a zippo? One is really heavy, the other is a little lighter',
'Please wait, while we purge the Decepticons for you. Yes, You can thanks us later!',
- "Chuck Norris once urinated in a semi truck's gas tank as a joke....that truck is now known as Optimus Prime.",
- 'Chuck Norris doesnt wear a watch. HE decides what time it is.',
'Mining some bitcoins...',
'Downloading more RAM..',
'Updating to Windows Vista...',
@@ -221,11 +199,9 @@ export const counterList = [
'Definitely not a virus...',
'You may call me Steve.',
'You seem like a nice person...',
- "Coffee at my place, tommorow at 10A.M. - don't be late!",
'Work, work...',
'Patience! This is difficult, you know...',
'Discovering new ways of making you wait...',
- 'Your time is very important to us. Please wait while we ignore you...',
'Time flies like an arrow; fruit flies like a banana',
'Two men walked into a bar; the third ducked...',
'Sooooo... Have you seen my vacation photos yet?',
@@ -249,7 +225,7 @@ export const counterList = [
'Adjusting the dilithium crystal converter assembly',
'Reversing the shield polarity',
'Disrupting warp fields with an inverse graviton burst',
- 'Up, Up, Down, Down, Left, Right, Left, Right, B, A.',
+ 'Up, Up, Down, Down, Left, Right, Left, Right, B, A, Select, Start',
'Do you like my loading animation? I made it myself',
'Whoah, look at it go!',
"No, I'm awake. I was just resting my eyes.",
@@ -257,4 +233,5 @@ export const counterList = [
"Don't panic... AHHHHH!",
'Ensuring Gnomes are still short.',
'Baking ice cream...'
-].sort((a, b) => 0.5 - Math.random());
\ No newline at end of file
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+].sort((a, b) => 0.5 - Math.random());
diff --git a/Sveltekit-App/src/routes/home/+page.server.ts b/Sveltekit-App/src/routes/home/+page.server.ts
new file mode 100644
index 0000000..4d288bb
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/+page.server.ts
@@ -0,0 +1,5 @@
+export const load = async ({ locals }) => {
+ if (!locals.hasSession) return { baseUrl: '', tenantUrl: '' };
+
+ return { session: locals.session };
+};
diff --git a/Sveltekit-App/src/routes/home/+page.svelte b/Sveltekit-App/src/routes/home/+page.svelte
new file mode 100644
index 0000000..2b4f91e
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/+page.svelte
@@ -0,0 +1,18 @@
+
+
+
diff --git a/Sveltekit-App/src/routes/home/courier/+page.server.ts b/Sveltekit-App/src/routes/home/courier/+page.server.ts
new file mode 100644
index 0000000..94add43
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/courier/+page.server.ts
@@ -0,0 +1,19 @@
+import { getSession, getToken } from '$lib/utils/oauth.js';
+
+export const load = async ({ fetch, cookies }) => {
+ const V3SpecRes = fetch(
+ 'https://raw.githubusercontent.com/sailpoint-oss/api-specs/main/dereferenced/deref-sailpoint-api.v3.json'
+ );
+
+ const BetaSpecRes = fetch(
+ 'https://raw.githubusercontent.com/sailpoint-oss/api-specs/main/dereferenced/deref-sailpoint-api.beta.json'
+ );
+
+ const V3Spec = await V3SpecRes.then((r) => r.json()).then((r) => r.paths);
+ const BetaSpec = await BetaSpecRes.then((r) => r.json()).then((r) => r.paths);
+
+ const session = await getSession(cookies);
+ const idnSession = await getToken(cookies);
+
+ return { V3Spec, BetaSpec, idnSession, session };
+};
diff --git a/Sveltekit-App/src/routes/home/courier/+page.svelte b/Sveltekit-App/src/routes/home/courier/+page.svelte
new file mode 100644
index 0000000..42a198d
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/courier/+page.svelte
@@ -0,0 +1,160 @@
+
+
+
+
+ {
+ selectedPath = selectedAPIVersion.value[0];
+ if (['Beta', 'V3', 'V2'].includes(selectedAPIVersion.name)) {
+ APICallPath = `${selectedAPIVersion.name.toLowerCase()}${selectedPath.name}`;
+ } else if (['CC'].includes(selectedAPIVersion.name)) {
+ APICallPath = `${selectedPath.name}`;
+ } else {
+ APICallPath = '';
+ }
+ }}
+ >
+ {#each APIVersions as APIVersion}
+
+ {APIVersion.name}
+
+ {/each}
+
+ {
+ if (['Beta', 'V3', 'V2'].includes(selectedAPIVersion.name)) {
+ APICallPath = `${selectedAPIVersion.name.toLowerCase()}${selectedPath.name}`;
+ } else if (['CC'].includes(selectedAPIVersion.name)) {
+ APICallPath = `${selectedPath.name}`;
+ } else {
+ APICallPath = '';
+ }
+ }}
+ >
+ {#each selectedAPIVersion.value as path}
+ {path.name}
+ {/each}
+
+
+
+
+ {#each Object.entries(selectedPath.value) as [method, content]}
+ {method.toUpperCase()}
+ {/each}
+
+
+
+ Call
+
+
+
+
+
+
+
+
diff --git a/Sveltekit-App/src/routes/home/identities/+page.server.ts b/Sveltekit-App/src/routes/home/identities/+page.server.ts
new file mode 100644
index 0000000..81debfd
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/identities/+page.server.ts
@@ -0,0 +1,62 @@
+import { getFilters, getLimit, getPage, getSorters } from '$lib/Utils.js';
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getSession, getToken } from '$lib/utils/oauth.js';
+import { error } from '@sveltejs/kit';
+import {
+ IdentitiesBetaApi,
+ type IdentitiesBetaApiListIdentitiesRequest,
+ type IdentityBeta
+} from 'sailpoint-api-client';
+
+export const load = async ({ cookies, url }) => {
+ const session = await getSession(cookies);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new IdentitiesBetaApi(config);
+
+ const page = getPage(url);
+ const filters = getFilters(url);
+ const limit = getLimit(url);
+ const sorters = getSorters(url);
+
+ const requestParams: IdentitiesBetaApiListIdentitiesRequest = {
+ filters,
+ offset: Number(page) * Number(limit),
+ limit: Number(limit),
+ sorters,
+ count: true
+ };
+
+ const apiResponse = api.listIdentities(requestParams);
+
+ const totalCount = new Promise((resolve) => {
+ apiResponse.then((response) => {
+ resolve(response.headers['x-total-count']);
+ });
+ });
+
+ const identities = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ error(500, {
+ message:
+ 'an error occurred while fetching identities. Please examine your filters and and sorters and try again.',
+ context: { params: { page, limit, filters, sorters } },
+ urls: [
+ 'https://developer.sailpoint.com/idn/api/standard-collection-parameters#filtering-results'
+ ],
+ errData: err.response.data
+ });
+ });
+ });
+
+ return {
+ totalCount,
+ identities,
+ params: { page, limit, filters, sorters }
+ };
+};
diff --git a/Sveltekit-App/src/routes/home/identities/+page.svelte b/Sveltekit-App/src/routes/home/identities/+page.svelte
new file mode 100644
index 0000000..7c48f95
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/identities/+page.svelte
@@ -0,0 +1,125 @@
+
+
+
+ {#await data.totalCount then totalCount}
+ {#if totalCount > 250 || Number(data.params.limit) < totalCount}
+
+ {/if}
+ {/await}
+ {#await data.identities}
+
+ {:then identities}
+
+
+
+ ID
+ Name
+ Lifecycle State
+ eMail
+ Created
+ Modified
+
+
+
+ {#each identities as identity}
+
+
+ {identity.id}
+
+
+ {identity.name}
+
+
+ {identity.lifecycleState?.stateName}
+
+
+ {identity.emailAddress}
+
+
+ {formatDate(identity.created)}
+
+
+ {formatDate(identity.modified)}
+
+
+
+
+ Open
+
+
TriggerCodeModal(identity, modalStore)}
+ class="btn btn-sm variant-filled-primary text-sm !text-white"
+ >
+ View
+
+
+
+
+ {/each}
+
+
+
+ {/await}
+ {#await data.totalCount then totalCount}
+ {#if totalCount > 250 || Number(data.params.limit) < totalCount}
+
+ {/if}
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/identities/[identityID]/+page.server.ts b/Sveltekit-App/src/routes/home/identities/[identityID]/+page.server.ts
new file mode 100644
index 0000000..f5c7bca
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/identities/[identityID]/+page.server.ts
@@ -0,0 +1,56 @@
+import { createConfiguration } from '$lib/sailpoint/sdk';
+import { getSession, getToken } from '$lib/utils/oauth';
+import {
+ IdentitiesBetaApi,
+ SearchApi,
+ type EventDocument,
+ type IdentityBeta,
+ type Search
+} from 'sailpoint-api-client';
+
+export const load = async ({ cookies, params }) => {
+ const session = await getSession(cookies);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const identityApi = new IdentitiesBetaApi(config);
+ const searchApi = new SearchApi(config);
+
+ const identityResp = identityApi.getIdentity({ id: params.identityID });
+
+ const identityData = new Promise((resolve) => {
+ identityResp
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ const identityEvents = new Promise((resolve) => {
+ identityResp.then((response) => {
+ const identity = response.data;
+ const search: Search = {
+ indices: ['events'],
+ query: {
+ query: `target.name: "${identity.name}"`
+ },
+ sort: ['created']
+ };
+
+ searchApi
+ .searchPost({
+ search
+ })
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+ });
+
+ return { identityData, identityEvents };
+};
diff --git a/Sveltekit-App/src/routes/home/identities/[identityID]/+page.svelte b/Sveltekit-App/src/routes/home/identities/[identityID]/+page.svelte
new file mode 100644
index 0000000..19a8e8e
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/identities/[identityID]/+page.svelte
@@ -0,0 +1,83 @@
+
+
+
+ {#await data.identityData}
+
+ {:then identityData}
+
+
Name: {identityData.name}
+
Alias: {identityData.alias}
+
ID: {identityData.id}
+
Lifecycle State: {identityData.lifecycleState?.stateName}
+
+
+
Identity JSON
+
+
+
+
+ Identity Events
+
+
+ {#if tabSet === 0}
+ {#await data.identityEvents}
+
+ {:then identityEvents}
+ {#if identityEvents.length > 0}
+
+
+
+ Name
+ Status
+ Created
+ Target
+ Actor
+
+
+
+ {#each identityEvents as event}
+
+ {event.name}
+ {event.status}
+ {event.created}
+ {event.target?.name}
+ {event.actor?.name}
+
+ TriggerCodeModal(event, modalStore)}
+ >
+ View
+
+
+
+ {/each}
+
+
+
+ {:else}
+ No Identity Events
+ {/if}
+ {/await}
+ {/if}
+
+
+
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/reports/+page.svelte b/Sveltekit-App/src/routes/home/reports/+page.svelte
new file mode 100644
index 0000000..0ba3bb0
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/+page.svelte
@@ -0,0 +1,29 @@
+
+
+
diff --git a/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.server.ts b/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.server.ts
new file mode 100644
index 0000000..6aa98b9
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.server.ts
@@ -0,0 +1,28 @@
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import { SearchApi, type Search, Paginator, type IdentityDocument } from 'sailpoint-api-client';
+
+export const load = async ({ cookies }) => {
+ const search: Search = {
+ indices: ['identities'],
+ query: {
+ query: `@accounts(disabled:false) AND (attributes.cloudLifecycleState:inactive)`
+ },
+ sort: ['name']
+ };
+
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new SearchApi(config);
+ const reportResp = Paginator.paginateSearchApi(api, search, 100, 20000);
+
+ const reportData = new Promise((resolve) => {
+ reportResp.then((response) => {
+ resolve(response.data);
+ });
+ });
+
+ return { reportData };
+};
diff --git a/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.svelte b/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.svelte
new file mode 100644
index 0000000..ae4074a
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/inactive-identities-with-access/+page.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+
+ List of all identities that are inactive but still have access in sources
+
+
+ {#await data.reportData}
+
+ {:then reportData}
+ {#if reportData.length === 0}
+
+
No inactive identities with access found
+
+ {:else}
+
+
+
+ Name
+ Sources
+ Created
+ Modified
+ Access Count
+ Entitlement Count
+ Role Count
+
+
+
+ {#each reportData as identity}
+
+
+ {identity.displayName}
+
+
+ {identity.accounts?.map((account) => account.source?.name).join(', ')}
+
+
+ {formatDate(identity.created)}
+
+
+ {formatDate(identity.modified)}
+
+
+ {identity.accessCount}
+
+
+ {identity.entitlementCount}
+
+
+ {identity.roleCount}
+
+
+
+
+ Open
+
+
TriggerCodeModal(identity, modalStore)}
+ class="btn btn-sm variant-filled-primary text-sm !text-white"
+ >
+ View
+
+
+
+
+ {/each}
+
+
+
+ {/if}
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.server.ts b/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.server.ts
new file mode 100644
index 0000000..7950f38
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.server.ts
@@ -0,0 +1,28 @@
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import { Paginator, SearchApi, type IdentityDocument, type Search } from 'sailpoint-api-client';
+
+export const load = async ({ cookies }) => {
+ const search: Search = {
+ indices: ['identities'],
+ query: {
+ query: `NOT _exists_:attributes.cloudLifecycleState`
+ },
+ sort: ['name']
+ };
+
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new SearchApi(config);
+ const searchResp = Paginator.paginateSearchApi(api, search, 100, 20000);
+
+ const reportData = new Promise((resolve) => {
+ searchResp.then((response) => {
+ resolve(response.data);
+ });
+ });
+
+ return { reportData };
+};
diff --git a/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.svelte b/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.svelte
new file mode 100644
index 0000000..1123a30
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/missing-cloud-life-cycle-state/+page.svelte
@@ -0,0 +1,78 @@
+
+
+
+
+
+ Listing of identities that are missing the cloud life cycle state attribute
+
+
+ {#await data.reportData}
+
+ {:then reportData}
+
+
+
+ Name
+ Sources
+ Created
+ Access Count
+ Entitlement Count
+ Role Count
+
+
+
+ {#each reportData as identity}
+
+
+ {identity.displayName}
+
+
+ {identity.accounts?.map((account) => account.source?.name).join(', ')}
+
+
+ {formatDate(identity.created)}
+
+
+ {identity.accessCount}
+
+
+ {identity.entitlementCount}
+
+
+ {identity.roleCount}
+
+
+
+
+ Open
+
+
TriggerCodeModal(identity, modalStore)}
+ class="btn btn-sm variant-filled-primary text-sm !text-white"
+ >
+ View
+
+
+
+
+ {/each}
+
+
+
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.server.ts b/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.server.ts
new file mode 100644
index 0000000..2f8bcca
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.server.ts
@@ -0,0 +1,28 @@
+import { createConfiguration } from '$lib/sailpoint/sdk';
+import { getSession, getToken } from '$lib/utils/oauth';
+import { Paginator, SearchApi, type Search, type EventDocument } from 'sailpoint-api-client';
+
+export const load = async ({ cookies }) => {
+ const session = await getSession(cookies);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new SearchApi(config);
+ const search: Search = {
+ indices: ['events'],
+ query: {
+ query: `name: "Create Account Failed" AND created: [now-90d TO now]`
+ },
+ sort: ['created']
+ };
+
+ const searchResp = Paginator.paginateSearchApi(api, search, 100, 20000);
+
+ const errorEvents = new Promise((resolve) => {
+ searchResp.then((response) => {
+ resolve(response.data);
+ });
+ });
+
+ return { errorEvents };
+};
diff --git a/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.svelte b/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.svelte
new file mode 100644
index 0000000..ff3fdd4
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-account-create-error/+page.svelte
@@ -0,0 +1,93 @@
+
+
+
+
+
Listing of Source Account Create Errors
+
+ {#await reportPromise}
+
+ {:then report}
+ {#if report.length === 0}
+
+
+ No Source Account Create Errors for the last 90 Days
+
+
+ {:else}
+
+
+
+ Source
+ Failure
+ Name
+ Count
+ Exception
+
+
+ {#each report as row}
+ TriggerCodeModal(row, modalStore)}>
+ {row.source}
+ {row.failure}
+ {row.name}
+ {row.failures}
+
+ {row.exception}
+
+
+ {/each}
+
+
+
+ {/if}
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.server.ts b/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.server.ts
new file mode 100644
index 0000000..93ea22d
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.server.ts
@@ -0,0 +1,150 @@
+import { getFilters, getLimit, getPage, getSorters } from '$lib/Utils.js';
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import {
+ SearchApi,
+ SourcesApi,
+ type EventDocument,
+ type Search,
+ type SourcesApiListSourcesRequest,
+ type Source
+} from 'sailpoint-api-client';
+
+export const load = async ({ cookies, url }) => {
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const sourceApi = new SourcesApi(config);
+ const searchApi = new SearchApi(config);
+
+ const page = getPage(url);
+ const filters = getFilters(url);
+ const limit = getLimit(url);
+ const sorters = getSorters(url);
+
+ const requestParams: SourcesApiListSourcesRequest = {
+ filters,
+ offset: Number(page) * Number(limit),
+ limit: Number(limit),
+ sorters,
+ count: true
+ };
+
+ const apiResponse = sourceApi.listSources(requestParams);
+
+ const sources = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ const totalCount = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.headers['x-total-count']);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ type SourceEvents = {
+ accounts: { started: EventDocument | undefined; passed: EventDocument | undefined };
+ entitlements: { started: EventDocument | undefined; passed: EventDocument | undefined };
+ };
+
+ const eventNames: string[] = [
+ 'Aggregate Source Account Passed',
+ 'Aggregate Source Account Started',
+ 'Aggregate Source Entitlement Passed',
+ 'Aggregate Source Entitlement Started'
+ ];
+
+ const eventsMap = new Promise>((resolve) => {
+ sources.then(async (sources) => {
+ const sourceEventsMap = new Map();
+
+ for (const source of sources) {
+ const allEvents: EventDocument[] = [];
+ const promises: Promise[] = [];
+
+ for (const event of eventNames) {
+ const search: Search = {
+ indices: ['events'],
+ query: {
+ query: `target.name: "${source.name}" AND name:"${event}"`
+ },
+ sort: ['created']
+ };
+
+ promises.push(
+ searchApi
+ .searchPost({
+ search
+ })
+ .then((response) => {
+ return response.data;
+ })
+ .catch((err) => {
+ throw err;
+ })
+ );
+ }
+
+ await Promise.allSettled(promises).then((results) => {
+ for (const event of results) {
+ if (event.status == 'fulfilled' && event.value.length > 0) {
+ allEvents.push(event.value[0]);
+ }
+ }
+
+ const sourceEvents: SourceEvents = {
+ accounts: { started: undefined, passed: undefined },
+ entitlements: { started: undefined, passed: undefined }
+ };
+
+ for (const event of allEvents) {
+ if (event.attributes!.sourceName === source.name) {
+ switch (event.technicalName) {
+ case 'SOURCE_ACCOUNT_AGGREGATE_STARTED':
+ if (!sourceEvents.accounts.started) {
+ sourceEvents.accounts.started = event || undefined;
+ }
+ break;
+ case 'SOURCE_ACCOUNT_AGGREGATE_PASSED':
+ if (!sourceEvents.accounts.passed) {
+ sourceEvents.accounts.passed = event || undefined;
+ }
+ break;
+ case 'SOURCE_ENTITLEMENT_AGGREGATE_STARTED':
+ if (!sourceEvents.entitlements.started) {
+ sourceEvents.entitlements.started = event || undefined;
+ }
+ break;
+ case 'SOURCE_ENTITLEMENT_AGGREGATE_PASSED':
+ if (!sourceEvents.entitlements.passed) {
+ sourceEvents.entitlements.passed = event || undefined;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ sourceEventsMap.set(source.name, sourceEvents);
+ });
+ }
+
+ resolve(sourceEventsMap);
+ });
+ });
+
+ return { sources, eventsMap, totalCount, params: { page, limit, filters, sorters } };
+};
diff --git a/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.svelte b/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.svelte
new file mode 100644
index 0000000..a89f487
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-aggregations/+page.svelte
@@ -0,0 +1,117 @@
+
+
+
+
+
List of sources and their most recent aggregation events
+
+
+ {#await data.sources}
+
+ {:then sources}
+
+
+
+ Source Name
+ Type
+ Authoritative
+ Account Aggregations
+ Entitlement Aggregations
+
+
+ {#each sources as source}
+
+ {source.name}
+ {source.type}
+
+ {source.authoritative ? 'True' : 'False'}
+
+ {#await data.eventsMap}
+
+
+
+ {:then eventsMap}
+
+
+
+ eventsMap.get(source.name)?.accounts.started &&
+ TriggerCodeModal(eventsMap.get(source.name)?.accounts.started, modalStore)}
+ >
+ Started: {formatDate(eventsMap.get(source.name)?.accounts.started?.created)}
+
+
+ eventsMap.get(source.name)?.accounts.passed &&
+ TriggerCodeModal(eventsMap.get(source.name)?.accounts.passed, modalStore)}
+ >
+ Passed: {formatDate(eventsMap.get(source.name)?.accounts.passed?.created)}
+
+
+
+ {/await}
+ {#await data.eventsMap}
+
+
+
+ {:then eventsMap}
+
+
+
+ eventsMap.get(source.name)?.entitlements.started &&
+ TriggerCodeModal(
+ eventsMap.get(source.name)?.entitlements.started,
+ modalStore
+ )}
+ >
+ Started: {formatDate(
+ eventsMap.get(source.name)?.entitlements.started?.created
+ )}
+
+
+ eventsMap.get(source.name)?.entitlements.passed &&
+ TriggerCodeModal(
+ eventsMap.get(source.name)?.entitlements.passed,
+ modalStore
+ )}
+ >
+ Passed: {formatDate(eventsMap.get(source.name)?.entitlements.passed?.created)}
+
+
+
+ {/await}
+
+ {/each}
+
+
+
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.server.ts b/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.server.ts
new file mode 100644
index 0000000..21deba2
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.server.ts
@@ -0,0 +1,49 @@
+import { getFilters, getLimit, getSorters, getPage } from '$lib/Utils.js';
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import { SourcesApi, type Source, type SourcesApiListSourcesRequest } from 'sailpoint-api-client';
+
+export const load = async ({ cookies, url }) => {
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new SourcesApi(config);
+
+ const page = getPage(url);
+ const filters = getFilters(url);
+ const limit = getLimit(url);
+ const sorters = getSorters(url);
+
+ const requestParams: SourcesApiListSourcesRequest = {
+ filters,
+ offset: Number(page) * Number(limit),
+ limit: Number(limit),
+ sorters,
+ count: true
+ };
+
+ const apiResponse = api.listSources(requestParams);
+
+ const sources = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ const totalCount = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.headers['x-total-count']);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ return { sources, totalCount, params: { page, limit, filters, sorters } };
+};
diff --git a/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.svelte b/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.svelte
new file mode 100644
index 0000000..0fa9ce2
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/reports/source-owner-configured/+page.svelte
@@ -0,0 +1,60 @@
+
+
+
+
+
Listing of sources and their configured owners
+
+ {#await data.sources}
+
+ {:then sources}
+
+
+
+ Source Name
+ Type
+ Modified
+ Created
+ Owner
+
+
+
+ {#each sources as source}
+
+ {source.name}
+ {source.type}
+ {formatDate(source.modified)}
+ {formatDate(source.created)}
+ {source.owner.name}
+
+
+ Open Source
+
+ TriggerCodeModal(source, modalStore)}
+ class="btn variant-filled-primary text-sm !text-white"
+ >
+ View
+
+
+
+ {/each}
+
+
+
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/sources/+page.server.ts b/Sveltekit-App/src/routes/home/sources/+page.server.ts
new file mode 100644
index 0000000..21deba2
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/sources/+page.server.ts
@@ -0,0 +1,49 @@
+import { getFilters, getLimit, getSorters, getPage } from '$lib/Utils.js';
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import { SourcesApi, type Source, type SourcesApiListSourcesRequest } from 'sailpoint-api-client';
+
+export const load = async ({ cookies, url }) => {
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const api = new SourcesApi(config);
+
+ const page = getPage(url);
+ const filters = getFilters(url);
+ const limit = getLimit(url);
+ const sorters = getSorters(url);
+
+ const requestParams: SourcesApiListSourcesRequest = {
+ filters,
+ offset: Number(page) * Number(limit),
+ limit: Number(limit),
+ sorters,
+ count: true
+ };
+
+ const apiResponse = api.listSources(requestParams);
+
+ const sources = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.data);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ const totalCount = new Promise((resolve) => {
+ apiResponse
+ .then((response) => {
+ resolve(response.headers['x-total-count']);
+ })
+ .catch((err) => {
+ throw err;
+ });
+ });
+
+ return { sources, totalCount, params: { page, limit, filters, sorters } };
+};
diff --git a/Sveltekit-App/src/routes/home/sources/+page.svelte b/Sveltekit-App/src/routes/home/sources/+page.svelte
new file mode 100644
index 0000000..2aa6e94
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/sources/+page.svelte
@@ -0,0 +1,135 @@
+
+
+
+ {#await data.totalCount then totalCount}
+ {#if totalCount > 250 || Number(data.params.limit) < totalCount}
+
+ {/if}
+ {/await}
+ {#await data.sources}
+
+ {:then sources}
+
+
+
+ ID
+ Name
+ Description
+ Type
+ Authoritative
+ Healthy
+ Delete Threshold
+ Owner
+
+
+
+ {#each sources as source}
+
+
+ {source.id}
+
+
+ {source.name}
+
+
+ {source.description}
+
+
+ {source.type}
+
+
+ {source.authoritative ? 'True' : 'False'}
+
+
+
+ {source.healthy ? 'True' : 'False'}
+
+
+
+ {source.deleteThreshold}
+
+
+ {source.owner.name}
+
+
+
+ Open
+
+ TriggerCodeModal(source, modalStore)}
+ class="btn btn-sm variant-filled-primary text-sm !text-white"
+ >
+ View
+
+
+
+ {/each}
+
+
+
+ {/await}
+ {#await data.totalCount then totalCount}
+ {#if totalCount > 250 || Number(data.params.limit) < totalCount}
+
+ {/if}
+ {/await}
+
diff --git a/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.server.ts b/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.server.ts
new file mode 100644
index 0000000..b8b7c26
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.server.ts
@@ -0,0 +1,104 @@
+import { createConfiguration } from '$lib/sailpoint/sdk.js';
+import { getToken } from '$lib/utils/oauth.js';
+import { SearchApi, SourcesApi, type EventDocument, type Search } from 'sailpoint-api-client';
+
+export const load = async ({ cookies, params }) => {
+ const session = JSON.parse(cookies.get('session')!);
+ const idnSession = await getToken(cookies);
+
+ const config = createConfiguration(session.baseUrl, idnSession.access_token);
+ const sourceApi = new SourcesApi(config);
+ const searchApi = new SearchApi(config);
+
+ const sourceResp = await sourceApi.getSource({ id: params.sourceID });
+
+ const source = sourceResp.data;
+
+ type SourceEvents = {
+ accounts: { started: EventDocument | undefined; passed: EventDocument | undefined };
+ entitlements: { started: EventDocument | undefined; passed: EventDocument | undefined };
+ };
+
+ const sourceEvents = new Promise((resolve) => {
+ const eventNames: string[] = [
+ 'Aggregate Source Account Passed',
+ 'Aggregate Source Account Started',
+ 'Aggregate Source Entitlement Passed',
+ 'Aggregate Source Entitlement Started'
+ ];
+
+ const allEvents: EventDocument[] = [];
+
+ const promises: Promise[] = [];
+
+ for (const event of eventNames) {
+ const search: Search = {
+ indices: ['events'],
+ query: {
+ query: `target.name: "${source.name}" AND name:"${event}"`
+ },
+ sort: ['created']
+ };
+
+ promises.push(
+ searchApi
+ .searchPost({
+ search
+ })
+ .then((response) => {
+ return response.data;
+ })
+ .catch((err) => {
+ throw err;
+ })
+ );
+ }
+
+ Promise.allSettled(promises).then((results) => {
+ for (const event of results) {
+ if (event.status == 'fulfilled' && event.value.length > 0) {
+ allEvents.push(event.value[0]);
+ }
+ }
+
+ const sourceEvents: SourceEvents = {
+ accounts: { started: undefined, passed: undefined },
+ entitlements: { started: undefined, passed: undefined }
+ };
+
+ for (const event of allEvents) {
+ if (event.attributes!.sourceName === source.name) {
+ switch (event.technicalName) {
+ case 'SOURCE_ACCOUNT_AGGREGATE_STARTED':
+ if (!sourceEvents.accounts.started) {
+ sourceEvents.accounts.started = event || undefined;
+ }
+ break;
+ case 'SOURCE_ACCOUNT_AGGREGATE_PASSED':
+ if (!sourceEvents.accounts.passed) {
+ sourceEvents.accounts.passed = event || undefined;
+ }
+ break;
+ case 'SOURCE_ENTITLEMENT_AGGREGATE_STARTED':
+ if (!sourceEvents.entitlements.started) {
+ sourceEvents.entitlements.started = event || undefined;
+ }
+ break;
+ case 'SOURCE_ENTITLEMENT_AGGREGATE_PASSED':
+ if (!sourceEvents.entitlements.passed) {
+ sourceEvents.entitlements.passed = event || undefined;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ resolve(sourceEvents);
+ });
+ });
+
+ return { source, sourceEvents };
+};
diff --git a/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.svelte b/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.svelte
new file mode 100644
index 0000000..80e5057
--- /dev/null
+++ b/Sveltekit-App/src/routes/home/sources/[sourceID]/+page.svelte
@@ -0,0 +1,121 @@
+
+
+
+
+
{data.source.name}
+
{data.source.description}
+
ID: {data.source.id}
+
Type: {data.source.type}
+
+ Authoritative: {data.source.authoritative ? 'True' : 'False'}
+
+
+ Healthy:
+
+ {data.source.healthy ? 'True' : 'False'}
+
+
+
+
+
+
+ {#await data.sourceEvents}
+
+ {:then sourceEvents}
+
+
Most Recent Aggregations
+
+
Accounts:
+
+
+
+ Started: {formatDate(sourceEvents.accounts.started?.created)}
+
+
+
+
+
+
+
+ Passed: {formatDate(sourceEvents.accounts.passed?.created)}
+
+
+
+
+
+
+
Entitlements
+
+
+
+ Started: {formatDate(sourceEvents.entitlements.started?.created)}
+
+
+
+
+
+
+
+
+
+ Passed: {formatDate(sourceEvents.entitlements.passed?.created)}
+
+
+
+
+
+
+
+
+ {/await}
+
+
+
+ Connector Attributes JSON
+ Full Source JSON
+
+
+ {#if tabSet === 0}
+
+ {:else if tabSet === 1}
+
+ {:else if tabSet === 2}
+
+ {/if}
+
+
+
+
diff --git a/Sveltekit-App/src/routes/logout/+page.server.ts b/Sveltekit-App/src/routes/logout/+page.server.ts
new file mode 100644
index 0000000..925299e
--- /dev/null
+++ b/Sveltekit-App/src/routes/logout/+page.server.ts
@@ -0,0 +1,15 @@
+export const load = async ({ cookies }) => {
+ cookies.delete('session', {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+
+ cookies.delete('idnSession', {
+ path: '/',
+ httpOnly: false,
+ secure: false
+ });
+
+ return { sessionLoggedOut: true };
+};
diff --git a/Sveltekit-App/src/routes/logout/+page.svelte b/Sveltekit-App/src/routes/logout/+page.svelte
new file mode 100644
index 0000000..d036adb
--- /dev/null
+++ b/Sveltekit-App/src/routes/logout/+page.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+ {#if data.sessionLoggedOut}
+
Successfully Logged out
+ {:else}
+
+ WHOOPS! an error occurred. If you believe this is a bug please submit an issue on
+
+ GitHub
+
+
+ {/if}
+
+
diff --git a/static/SailPoint-Developer-Community-Lockup.png b/Sveltekit-App/static/SailPoint-Developer-Community-Lockup.png
similarity index 100%
rename from static/SailPoint-Developer-Community-Lockup.png
rename to Sveltekit-App/static/SailPoint-Developer-Community-Lockup.png
diff --git a/Sveltekit-App/static/logo.ico b/Sveltekit-App/static/logo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..1c89001e8b656f835c644065f18b774729fc4270
GIT binary patch
literal 265118
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
literal 0
HcmV?d00001
diff --git a/Sveltekit-App/svelte.config.js b/Sveltekit-App/svelte.config.js
new file mode 100644
index 0000000..7a82a88
--- /dev/null
+++ b/Sveltekit-App/svelte.config.js
@@ -0,0 +1,21 @@
+import adapter from '@sveltejs/adapter-node';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
+
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+ extensions: ['.svelte'],
+ // Consult https://kit.svelte.dev/docs/integrations#preprocessors
+ // for more information about preprocessors
+ preprocess: [vitePreprocess()],
+
+ kit: {
+ // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
+ // If your environment is not supported or you settled on a specific environment, switch out the adapter.
+ // See https://kit.svelte.dev/docs/adapters for more information about adapters.
+ adapter: adapter(),
+ csrf: {
+ checkOrigin: false
+ }
+ }
+};
+export default config;
diff --git a/tailwind.config.ts b/Sveltekit-App/tailwind.config.ts
similarity index 50%
rename from tailwind.config.ts
rename to Sveltekit-App/tailwind.config.ts
index c3fc50b..1adc748 100644
--- a/tailwind.config.ts
+++ b/Sveltekit-App/tailwind.config.ts
@@ -1,26 +1,28 @@
import { join } from 'path';
import type { Config } from 'tailwindcss';
-
-// 1. Import the Skeleton plugin
+import forms from '@tailwindcss/forms';
+import typography from '@tailwindcss/typography';
import { skeleton } from '@skeletonlabs/tw-plugin';
-const config = {
- // 2. Opt for dark mode to be handled via the class method
+export default {
darkMode: 'class',
content: [
'./src/**/*.{html,js,svelte,ts}',
- // 3. Append the path to the Skeleton package
- join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}'),
+ join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}')
],
theme: {
- extend: {},
+ extend: {}
},
plugins: [
- // 4. Append the Skeleton plugin (after other plugins)
+ forms,
+ typography,
skeleton({
- themes: { preset: ['wintry'] },
- }),
- ],
+ themes: {
+ preset: [
+ { name: 'wintry', enhancements: true },
+ { name: 'skeleton', enhancements: true }
+ ]
+ }
+ })
+ ]
} satisfies Config;
-
-export default config;
diff --git a/Sveltekit-App/tsconfig.json b/Sveltekit-App/tsconfig.json
new file mode 100644
index 0000000..82081ab
--- /dev/null
+++ b/Sveltekit-App/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "extends": "./.svelte-kit/tsconfig.json",
+ "compilerOptions": {
+ "allowJs": true,
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strict": true,
+ "moduleResolution": "bundler"
+ }
+ // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
+ //
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
+ // from the referenced tsconfig.json - TypeScript does not merge them in
+}
diff --git a/Sveltekit-App/vite.config.ts b/Sveltekit-App/vite.config.ts
new file mode 100644
index 0000000..05ab30d
--- /dev/null
+++ b/Sveltekit-App/vite.config.ts
@@ -0,0 +1,22 @@
+import { purgeCss } from 'vite-plugin-tailwind-purgecss';
+import { sveltekit } from '@sveltejs/kit/vite';
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ plugins: [
+ sveltekit(),
+ purgeCss({
+ safelist: {
+ // any selectors that begin with "hljs-" will not be purged
+ greedy: [/^hljs-/]
+ }
+ })
+ ],
+ test: {
+ include: ['src/**/*.{test,spec}.{js,ts}']
+ },
+ server: {
+ port: 3000,
+ origin: 'http://localhost:3000'
+ }
+});
diff --git a/assets/images/api-linter-output.png b/assets/images/api-linter-output.png
deleted file mode 100644
index 9590cc0f5bf6cbe93fb62342f9b34ed783a5c4fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 442020
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