From f1ee35b8905de8c3d995d67cfa84906d3c3d070f Mon Sep 17 00:00:00 2001 From: Nate Kelley <133379588+nate-kelley-buster@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:02:12 -0800 Subject: [PATCH] chore: add semvar version update (#42) * added empty state text * update permission group in the dataset * Enhance dataset asset listing with organization-specific filtering - Updated the `list_assets` function to include organization ID filtering in dataset permissions queries. - Removed redundant organization ID filters from the dataset permissions queries to streamline the logic. - Ensured that only relevant dataset assets are returned based on the user's organization, improving data security and relevance. These changes enhance the API's ability to serve organization-specific data, aligning with recent improvements in dataset asset APIs. * containerized class should be white with no border at bottom * clear query when signing out * Use correct endpoint for dataset groups * yaml syntax highligting * create dataset endpoints * update disable logic for deploying a dataset * Refactor user routes to include new endpoint for retrieving user by ID - Removed the public modifier from `get_user` and `update_user` modules to encapsulate them within the module. - Added a new route to the user router for fetching a user by their ID, enhancing the API's functionality. - This change improves the user management capabilities by allowing retrieval of specific user details based on their unique identifier. * Add organizations module and integrate with user routes * remove unused imports and abstract variables * Refactor user update functionality to support role changes - Enhanced the `update_user` endpoint to accept and process user role updates alongside name changes. - Introduced a new `UserResponse` struct for improved response handling. - Updated the `update_user_handler` to handle changes in both user name and organization role, improving the flexibility of user management. - Adjusted response type to return no content upon successful updates, aligning with RESTful practices. These changes enhance the user management capabilities by allowing for more comprehensive updates to user information. * Update user route to use ID parameter for updates - Changed the user update route to require a user ID in the URL, enhancing RESTful practices. - Updated the `update_user` function to extract the user ID from the path, ensuring the correct user is updated based on the provided ID. These changes improve the clarity and functionality of the user update endpoint, aligning it with standard REST conventions. * simplify hooks imports * Remove unused component * restructure folders for layout * update imports for gloabl components * add additional routes * Implement user permission checks in dataset deployment and user update routes - Added permission validation to the `deploy_datasets` and `post_dataset` functions to ensure only users with workspace admin or data admin roles can execute these actions. - Enhanced error handling for permission checks, returning appropriate HTTP status codes and messages for insufficient permissions and internal errors. - Updated imports to include the new security checks module for consistency across routes. These changes improve security by enforcing role-based access control in critical dataset operations. * Refactor user update route to enhance RESTful practices - Updated the user update route to require a user ID in the URL, ensuring the correct user is updated based on the provided ID. - Improved clarity and functionality of the `update_user` function by extracting the user ID from the path. These changes align the user update endpoint with standard REST conventions, enhancing overall API usability. * Enhance dataset listing functionality with user organization roles - Refactored dataset listing logic to incorporate user organization roles, allowing for more granular access control based on user permissions. - Introduced new role checks for `WorkspaceAdmin`, `DataAdmin`, `Querier`, `RestrictedQuerier`, and `Viewer` to determine dataset visibility. - Updated database queries to fetch datasets based on user roles and organization associations, improving data retrieval efficiency. - Removed deprecated functions and streamlined the dataset fetching process, ensuring clarity and maintainability in the codebase. These changes improve the API's security and usability by enforcing role-based access control for dataset operations. * tweaked the post thread permissions handle. * permission_group string fix * remove package.json * fix: Add release please syntax handler and github action (#40) * fix(buster): Add release please syntax handler and github action * chore: add version tracking setup fix: update update nate rulez --------- Co-authored-by: dal --- .github/workflows/release-please.yml | 27 + .github/workflows/version-bump.yml | 73 - .gitignore | 3 + CHANGELOG.md | 0 .../down.sql | 14 + .../up.sql | 14 + .../datasets/assets/list_dataset_assets.rs | 12 +- .../rest/routes/datasets/deploy_datasets.rs | 17 +- .../rest/routes/datasets/list_datasets.rs | 475 +- .../rest/routes/datasets/post_dataset.rs | 28 +- api/src/routes/rest/routes/mod.rs | 2 + .../routes/rest/routes/organizations/mod.rs | 8 + .../routes/rest/routes/organizations/users.rs | 80 + .../rest/routes/users/get_user_by_id.rs | 74 + api/src/routes/rest/routes/users/mod.rs | 8 +- .../routes/rest/routes/users/update_user.rs | 84 +- api/src/routes/ws/datasets/list_datasets.rs | 314 +- .../post_thread/post_thread.rs | 167 +- package.json | 15 - version.txt | 0 web/package-lock.json | 7326 +++-------------- web/package.json | 25 +- .../busterv2/dataset_groups/queryRequests.ts | 23 +- .../api/busterv2/dataset_groups/requests.ts | 4 +- .../busterv2/datasets/permissions/config.ts | 3 + .../busterv2/datasets/permissions/index.ts | 1 + .../datasets/permissions/queryRequests.ts | 94 +- .../busterv2/datasets/permissions/requests.ts | 10 +- .../api/busterv2/datasets/queryRequests.ts | 25 +- web/src/api/busterv2/datasets/requests.ts | 7 +- web/src/api/busterv2/index.ts | 1 + .../api/busterv2/permission_groups/config.ts | 1 + .../api/busterv2/permission_groups/index.ts | 2 + .../permission_groups/queryRequests.ts | 81 +- .../busterv2/permission_groups/requests.ts | 20 +- .../permission_groups/responseInterfaces.ts | 12 +- web/src/api/createInstance.ts | 4 +- web/src/app/app/_components/AppContent.tsx | 4 +- .../app/app/_components/AppContentHeader.tsx | 2 +- .../app/_components/Lists/ListEmptyState.tsx | 7 +- .../Lists/StatusBadgeIndicator.tsx | 2 +- .../NewThreadModal/NewThreadModal.tsx | 1 - .../_components/ShareMenu/CircleButton.tsx | 19 - .../_components/ShareMenu/CopyLinkButton.tsx | 5 +- .../app/_components/ShareMenu/ShareMenu.tsx | 7 +- .../ShareMenu/ShareWithTeamAndGroup.tsx | 5 +- .../AppSidebar/AppSidebarSettings.tsx | 171 +- .../ThreadControllerChart.tsx | 4 +- .../ThreadControllerHeaderPrimary.tsx | 2 +- .../app/app/_layouts/AppAssetCheckLayout.tsx | 2 +- ...eAnonCheck.tsx => ClientSideAnonCheck.tsx} | 0 .../_CollectionIndividualHeader.tsx | 2 +- .../metrics/[threadId]/page.tsx | 6 +- .../DashboardInvidualHeaderPrimary.tsx | 2 +- .../[dashboardId]/metrics/[threadId]/page.tsx | 6 +- .../[datasetId]/_DatasetPageContext.tsx | 12 +- .../DatasetBreadcrumb.tsx | 2 +- .../DatasetsIndividualHeader.tsx | 10 +- .../[datasetId]/editor/MetadataContainer.tsx | 8 +- .../PermissionDatasetGroupSelectedPopup.tsx | 5 +- .../PermissionDatasetGroups.tsx | 5 +- .../PermissionListDatasetGroupContainer.tsx | 6 +- .../NewPermissionGroupModal.tsx | 17 +- ...PermissionListPermissionGroupContainer.tsx | 9 +- .../PermissionPermissionGroup.tsx | 6 +- .../PermissionListUsersContainer.tsx | 6 +- .../_PermissionUsers/PermissionUsers.tsx | 4 +- .../_NewDatasetModal/_NewDatasetModal.tsx | 186 +- web/src/app/app/layout.tsx | 6 +- web/src/app/app/layoutClient.tsx | 2 +- web/src/app/app/metrics/[threadId]/page.tsx | 6 +- .../[datasourceId]/_DatasourceFormContent.tsx | 2 +- web/src/app/app/terms/[termId]/page.tsx | 6 +- web/src/app/app/terms/_TermsHeader.tsx | 6 +- web/src/app/layout.tsx | 2 +- .../breadcrumb/BreadcrumbSeperator.tsx} | 2 +- web/src/components/breadcrumb/index.ts | 1 + .../useBusterChartJSLegend.ts | 1 - .../ChartLoadingComponents.tsx | 4 +- .../error}/GlobalErrorComponent.tsx | 4 +- web/src/components/error/index.ts | 1 + .../components/grid/BusterResizeColumns.tsx | 2 +- web/src/components/index.ts | 3 +- .../inputs/AppCodeEditor/AppCodeEditor.tsx | 16 +- .../inputs/AppCodeEditor/MonacoWebWorker.ts | 37 + .../github_light_theme.ts} | 14 +- .../tomorrow_night_theme.ts} | 10 +- .../{VS_light.ts => themes/vs_light_theme.ts} | 0 .../xcode_default_theme.ts} | 2 +- .../inputs/AppCodeEditor/yamlHelper.ts | 38 + web/src/components/inputs/AppSwitch.tsx | 12 - web/src/components/inputs/index.ts | 1 - .../layout/{ => AppSplitter}/AppSplitter.tsx | 14 +- .../SplitPane/SashContent.tsx | 0 .../{ => AppSplitter}/SplitPane/SplitPane.tsx | 0 .../{ => AppSplitter}/SplitPane/base.ts | 0 .../{ => AppSplitter}/SplitPane/index.ts | 0 .../{ => AppSplitter}/SplitPane/pane.tsx | 0 .../{ => AppSplitter}/SplitPane/sash.tsx | 0 .../SplitPane/themes/default.scss | 0 .../{ => AppSplitter}/SplitPane/types.ts | 0 .../layout/{ => AppSplitter}/config.ts | 0 .../layout/{ => AppSplitter}/helper.ts | 0 .../components/layout/AppSplitter/index.ts | 2 + .../{ => AppSplitter}/splitContentHelper.ts | 10 +- .../components/layout/PreventNavigation.tsx | 5 +- .../BusterInfiniteList/BusterInfiniteList.tsx | 17 +- .../list/BusterList/BusterListReactWindow.tsx | 1 - .../BusterList/BusterListRowComponent.tsx | 113 +- .../BusterListRowComponentSelector.tsx | 7 +- .../components/list/BusterList/interfaces.ts | 2 +- .../AppMessagesHistory.tsx | 6 +- .../BusterWebSocket/useWebSocketCustom.tsx | 2 +- web/src/context/Posthog/usePosthog.tsx | 4 +- web/src/hooks/dom/index.ts | 107 +- web/src/hooks/dom/useBeforeUnload.ts | 7 + web/src/hooks/{ => dom}/useConfetti.tsx | 0 web/src/hooks/dom/useIsShowingEllipsis.ts | 19 + web/src/hooks/dom/useListenToWindowEvent.ts | 11 + web/src/hooks/{ => dom}/useOnWindowResize.tsx | 0 .../dom/usePreventBackwardsNavigation.tsx | 15 + .../hooks/{react => dom}/useSmoothScroll.tsx | 2 +- web/src/hooks/dom/useThemeDetector.ts | 57 + web/src/hooks/{ => dom}/useWindowFocus.ts | 2 +- web/src/hooks/index.ts | 3 - web/src/hooks/react/useAutoScroll.tsx | 212 - web/src/hooks/useBusterSupabaseAuthMethods.ts | 4 +- web/src/hooks/useWindowSize.tsx | 25 - .../routes/busterRoutes/busterAppRoutes.ts | 28 +- web/src/styles/styles.scss | 2 +- web/src/utils/array.ts | 27 +- web/src/utils/canvas.ts | 36 + web/src/utils/index.ts | 1 + web/src/utils/numbers.ts | 11 - web/src/utils/text.ts | 50 +- 135 files changed, 2888 insertions(+), 7669 deletions(-) create mode 100644 .github/workflows/release-please.yml delete mode 100644 .github/workflows/version-bump.yml create mode 100644 CHANGELOG.md create mode 100644 api/migrations/2025-01-16-154339_rls_policies_on_new_tables/down.sql create mode 100644 api/migrations/2025-01-16-154339_rls_policies_on_new_tables/up.sql create mode 100644 api/src/routes/rest/routes/organizations/mod.rs create mode 100644 api/src/routes/rest/routes/organizations/users.rs create mode 100644 api/src/routes/rest/routes/users/get_user_by_id.rs delete mode 100644 package.json create mode 100644 version.txt create mode 100644 web/src/api/busterv2/permission_groups/config.ts delete mode 100644 web/src/app/app/_components/ShareMenu/CircleButton.tsx rename web/src/app/app/_layouts/{_ClientSideAnonCheck.tsx => ClientSideAnonCheck.tsx} (100%) rename web/src/{styles/context/useBreadcrumbStyles.tsx => components/breadcrumb/BreadcrumbSeperator.tsx} (85%) create mode 100644 web/src/components/breadcrumb/index.ts rename web/src/{app/app/_components => components/error}/GlobalErrorComponent.tsx (94%) create mode 100644 web/src/components/inputs/AppCodeEditor/MonacoWebWorker.ts rename web/src/components/inputs/AppCodeEditor/{Github_light.ts => themes/github_light_theme.ts} (94%) rename web/src/components/inputs/AppCodeEditor/{Tomorrow-Night.ts => themes/tomorrow_night_theme.ts} (96%) rename web/src/components/inputs/AppCodeEditor/{VS_light.ts => themes/vs_light_theme.ts} (100%) rename web/src/components/inputs/AppCodeEditor/{Xcode_default.ts => themes/xcode_default_theme.ts} (97%) create mode 100644 web/src/components/inputs/AppCodeEditor/yamlHelper.ts delete mode 100644 web/src/components/inputs/AppSwitch.tsx rename web/src/components/layout/{ => AppSplitter}/AppSplitter.tsx (96%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/SashContent.tsx (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/SplitPane.tsx (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/base.ts (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/index.ts (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/pane.tsx (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/sash.tsx (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/themes/default.scss (100%) rename web/src/components/layout/{ => AppSplitter}/SplitPane/types.ts (100%) rename web/src/components/layout/{ => AppSplitter}/config.ts (100%) rename web/src/components/layout/{ => AppSplitter}/helper.ts (100%) create mode 100644 web/src/components/layout/AppSplitter/index.ts rename web/src/components/layout/{ => AppSplitter}/splitContentHelper.ts (63%) create mode 100644 web/src/hooks/dom/useBeforeUnload.ts rename web/src/hooks/{ => dom}/useConfetti.tsx (100%) create mode 100644 web/src/hooks/dom/useIsShowingEllipsis.ts create mode 100644 web/src/hooks/dom/useListenToWindowEvent.ts rename web/src/hooks/{ => dom}/useOnWindowResize.tsx (100%) create mode 100644 web/src/hooks/dom/usePreventBackwardsNavigation.tsx rename web/src/hooks/{react => dom}/useSmoothScroll.tsx (97%) create mode 100644 web/src/hooks/dom/useThemeDetector.ts rename web/src/hooks/{ => dom}/useWindowFocus.ts (91%) delete mode 100644 web/src/hooks/react/useAutoScroll.tsx delete mode 100644 web/src/hooks/useWindowSize.tsx create mode 100644 web/src/utils/canvas.ts diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 000000000..374fddd3f --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,27 @@ +name: Release + +on: + push: + branches: + - main + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Run Release Please + uses: googleapis/release-please-action@v4 + with: + release-type: simple + package-name: buster + path: . + changelog-path: CHANGELOG.md + version-file: version.txt + bump-minor-pre-major: true + skip-github-release: true + skip-pull-requests: true + token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }} diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml deleted file mode 100644 index 265a56f39..000000000 --- a/.github/workflows/version-bump.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Version Bump - -on: - pull_request: - types: [closed] - branches: - - main - -jobs: - version-bump: - if: github.event.pull_request.merged == true - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: read - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Configure Git - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - - - name: Determine Version Bump - id: bump - run: | - if [[ ${{ contains(github.event.pull_request.labels.*.name, 'bug') }} == 'true' ]]; then - echo "bump=patch" >> $GITHUB_OUTPUT - elif [[ ${{ contains(github.event.pull_request.labels.*.name, 'enhancement') }} == 'true' ]]; then - echo "bump=minor" >> $GITHUB_OUTPUT - elif [[ ${{ contains(github.event.pull_request.labels.*.name, 'breaking') }} == 'true' ]]; then - echo "bump=major" >> $GITHUB_OUTPUT - else - echo "bump=none" >> $GITHUB_OUTPUT - fi - - - name: Bump Version - if: steps.bump.outputs.bump != 'none' - id: version - run: | - NEW_VERSION=$(npm run version:${{ steps.bump.outputs.bump }} --silent) - echo "new_version=${NEW_VERSION}" >> $GITHUB_OUTPUT - - - name: Push changes - if: steps.bump.outputs.bump != 'none' - run: | - git push - git push --tags - - - name: Create GitHub Release - if: steps.bump.outputs.bump != 'none' - uses: softprops/action-gh-release@v1 - with: - tag_name: ${{ steps.version.outputs.new_version }} - name: Release ${{ steps.version.outputs.new_version }} - body: | - Changes in this release: - ${{ github.event.pull_request.title }} - - ${{ github.event.pull_request.body }} - - PR: #${{ github.event.pull_request.number }} - draft: false - prerelease: false \ No newline at end of file diff --git a/.gitignore b/.gitignore index 915190a0e..b79670cf7 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,6 @@ Cargo.lock *.env .DS_Store + +# Node.js dependencies +node_modules/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/down.sql b/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/down.sql new file mode 100644 index 000000000..d6e13ddd4 --- /dev/null +++ b/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/down.sql @@ -0,0 +1,14 @@ +-- This file should undo anything in `up.sql` +DROP POLICY dataset_groups_policy ON dataset_groups; +DROP POLICY dataset_permissions_policy ON dataset_permissions; +DROP POLICY datasets_to_dataset_groups_policy ON datasets_to_dataset_groups; +DROP POLICY datasets_to_permission_groups_policy ON datasets_to_permission_groups; +DROP POLICY permission_groups_to_users_policy ON permission_groups_to_users; +DROP POLICY diesel_schema_migrations_policy ON __diesel_schema_migrations; + +ALTER TABLE dataset_groups DISABLE ROW LEVEL SECURITY; +ALTER TABLE dataset_permissions DISABLE ROW LEVEL SECURITY; +ALTER TABLE datasets_to_dataset_groups DISABLE ROW LEVEL SECURITY; +ALTER TABLE datasets_to_permission_groups DISABLE ROW LEVEL SECURITY; +ALTER TABLE permission_groups_to_users DISABLE ROW LEVEL SECURITY; +ALTER TABLE __diesel_schema_migrations DISABLE ROW LEVEL SECURITY; diff --git a/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/up.sql b/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/up.sql new file mode 100644 index 000000000..33abe6039 --- /dev/null +++ b/api/migrations/2025-01-16-154339_rls_policies_on_new_tables/up.sql @@ -0,0 +1,14 @@ +-- Your SQL goes here +ALTER TABLE dataset_groups ENABLE ROW LEVEL SECURITY; +ALTER TABLE dataset_permissions ENABLE ROW LEVEL SECURITY; +ALTER TABLE datasets_to_dataset_groups ENABLE ROW LEVEL SECURITY; +ALTER TABLE datasets_to_permission_groups ENABLE ROW LEVEL SECURITY; +ALTER TABLE permission_groups_to_users ENABLE ROW LEVEL SECURITY; +ALTER TABLE __diesel_schema_migrations ENABLE ROW LEVEL SECURITY; + +CREATE POLICY dataset_groups_policy ON dataset_groups TO authenticated USING (true); +CREATE POLICY dataset_permissions_policy ON dataset_permissions TO authenticated USING (true); +CREATE POLICY datasets_to_dataset_groups_policy ON datasets_to_dataset_groups TO authenticated USING (true); +CREATE POLICY datasets_to_permission_groups_policy ON datasets_to_permission_groups TO authenticated USING (true); +CREATE POLICY permission_groups_to_users_policy ON permission_groups_to_users TO authenticated USING (true); +CREATE POLICY diesel_schema_migrations_policy ON __diesel_schema_migrations TO authenticated USING (true); diff --git a/api/src/routes/rest/routes/datasets/assets/list_dataset_assets.rs b/api/src/routes/rest/routes/datasets/assets/list_dataset_assets.rs index b7019a784..6c34df841 100644 --- a/api/src/routes/rest/routes/datasets/assets/list_dataset_assets.rs +++ b/api/src/routes/rest/routes/datasets/assets/list_dataset_assets.rs @@ -67,7 +67,8 @@ pub async fn list_assets( .eq(users::id) .and(dataset_permissions::dataset_id.eq(dataset_id)) .and(dataset_permissions::permission_type.eq("user")) - .and(dataset_permissions::deleted_at.is_null())), + .and(dataset_permissions::deleted_at.is_null()) + .and(dataset_permissions::organization_id.eq(organization_id))), ) .inner_join( users_to_organizations::table.on(users_to_organizations::user_id.eq(users::id)), @@ -78,7 +79,6 @@ pub async fn list_assets( "dataset_permissions.id IS NOT NULL", ), )) - .filter(dataset_permissions::organization_id.eq(organization_id)) .filter(users_to_organizations::organization_id.eq(organization_id)) .load::<(User, bool)>(&mut *conn) .await @@ -107,7 +107,8 @@ pub async fn list_assets( .eq(permission_groups::id) .and(dataset_permissions::dataset_id.eq(dataset_id)) .and(dataset_permissions::permission_type.eq("permission_group")) - .and(dataset_permissions::deleted_at.is_null())), + .and(dataset_permissions::deleted_at.is_null()) + .and(dataset_permissions::organization_id.eq(organization_id))), ) .select(( permission_groups::all_columns, @@ -116,7 +117,6 @@ pub async fn list_assets( ), )) .filter(permission_groups::deleted_at.is_null()) - .filter(dataset_permissions::organization_id.eq(organization_id)) .filter(permission_groups::organization_id.eq(organization_id)) .load::<(PermissionGroup, bool)>(&mut *conn) .await @@ -145,7 +145,8 @@ pub async fn list_assets( .eq(dataset_groups::id) .and(dataset_permissions::dataset_id.eq(dataset_id)) .and(dataset_permissions::permission_type.eq("dataset_group")) - .and(dataset_permissions::deleted_at.is_null())), + .and(dataset_permissions::deleted_at.is_null()) + .and(dataset_permissions::organization_id.eq(organization_id))), ) .select(( dataset_groups::all_columns, @@ -154,7 +155,6 @@ pub async fn list_assets( ), )) .filter(dataset_groups::organization_id.eq(organization_id)) - .filter(dataset_permissions::organization_id.eq(organization_id)) .filter(dataset_groups::deleted_at.is_null()) .load::<(DatasetGroup, bool)>(&mut *conn) .await diff --git a/api/src/routes/rest/routes/datasets/deploy_datasets.rs b/api/src/routes/rest/routes/datasets/deploy_datasets.rs index 2570a820a..33195833a 100644 --- a/api/src/routes/rest/routes/datasets/deploy_datasets.rs +++ b/api/src/routes/rest/routes/datasets/deploy_datasets.rs @@ -21,8 +21,7 @@ use crate::{ credentials::get_data_source_credentials, import_dataset_columns::retrieve_dataset_columns, write_query_engine::write_query_engine, - }, - user::user_info::get_user_organization_id, + }, security::checks::is_user_workspace_admin_or_data_admin, user::user_info::get_user_organization_id }, }; @@ -124,6 +123,20 @@ pub async fn deploy_datasets( Extension(user): Extension, Json(request): Json, ) -> Result, (axum::http::StatusCode, String)> { + match is_user_workspace_admin_or_data_admin(&user.id).await { + Ok(true) => (), + Ok(false) => { + return Err(( + axum::http::StatusCode::FORBIDDEN, + "Insufficient permissions".to_string(), + )) + } + Err(e) => { + tracing::error!("Error checking user permissions: {:?}", e); + return Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())); + } + } + let is_simple = match request { DeployDatasetsRequest::Full(_) => false, DeployDatasetsRequest::Simple { .. } => true, diff --git a/api/src/routes/rest/routes/datasets/list_datasets.rs b/api/src/routes/rest/routes/datasets/list_datasets.rs index 8d785f4ec..ecd773aa1 100644 --- a/api/src/routes/rest/routes/datasets/list_datasets.rs +++ b/api/src/routes/rest/routes/datasets/list_datasets.rs @@ -12,12 +12,13 @@ use uuid::Uuid; use crate::{ database::{ - enums::IdentityType, + enums::{IdentityType, UserOrganizationRole}, lib::{get_pg_pool, PgPool}, - models::User, + models::{User, UserToOrganization}, schema::{ - data_sources, datasets, datasets_to_permission_groups, messages, - permission_groups_to_identities, teams_to_users, users, + data_sources, dataset_permissions, datasets, datasets_to_permission_groups, messages, + permission_groups_to_identities, permission_groups_to_users, teams_to_users, users, + users_to_organizations, }, }, routes::rest::ApiResponse, @@ -115,173 +116,46 @@ async fn list_datasets_handler( let page_size = page_size.unwrap_or(25); let admin_view = admin_view.unwrap_or(false); - let pg_pool = get_pg_pool(); + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; - let organization_id = get_user_organization_id(&user_id).await?; - - let list_of_datasets = if let Some(permission_group_id) = permission_group_id { - list_permission_group_datasets( - pg_pool, - organization_id, - page, - page_size, - permission_group_id, - ) - .await? - } else { - match admin_view { - true => { - get_org_datasets( - pg_pool, - &organization_id, - page, - page_size, - enabled, - imported, - data_source_id, - ) - .await? - } - false => get_user_permissioned_datasets(pg_pool, &user_id, page, page_size).await?, + // Right now we only allow users to have one organization this will change in the future + let user_organization_record = match users_to_organizations::table + .filter(users_to_organizations::user_id.eq(user_id)) + .filter(users_to_organizations::deleted_at.is_null()) + .select(users_to_organizations::all_columns) + .first::(&mut conn) + .await + { + Ok(organization_id) => organization_id, + Err(e) => return Err(anyhow!("Unable to get organization from database: {}", e)), + }; + let list_of_datasets = match &user_organization_record.role { + UserOrganizationRole::WorkspaceAdmin + | UserOrganizationRole::DataAdmin + | UserOrganizationRole::Querier => { + get_org_datasets( + &user_organization_record.organization_id, + page, + page_size, + enabled, + imported, + data_source_id, + ) + .await? } + UserOrganizationRole::RestrictedQuerier => { + get_restricted_user_datasets(user_id, page, page_size).await? + } + UserOrganizationRole::Viewer => Vec::new(), }; Ok(list_of_datasets) } -async fn get_user_permissioned_datasets( - pool: &PgPool, - user_id: &Uuid, - page: i64, - page_size: i64, -) -> Result> { - let mut conn = match pool.get().await { - Ok(conn) => conn, - Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), - }; - - let list_dataset_records = match datasets::table - .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) - .inner_join( - datasets_to_permission_groups::table.on(datasets::id - .eq(datasets_to_permission_groups::dataset_id) - .and(datasets_to_permission_groups::deleted_at.is_null())), - ) - .inner_join( - permission_groups_to_identities::table.on( - datasets_to_permission_groups::permission_group_id - .eq(permission_groups_to_identities::permission_group_id) - .and(permission_groups_to_identities::deleted_at.is_null()), - ), - ) - .left_join( - teams_to_users::table.on(permission_groups_to_identities::identity_id - .eq(teams_to_users::team_id) - .and(permission_groups_to_identities::identity_type.eq(IdentityType::Team)) - .and(teams_to_users::deleted_at.is_null())), - ) - .inner_join(users::table.on(datasets::created_by.eq(users::id))) - .left_join(messages::table.on(messages::dataset_id.eq(datasets::id.nullable()))) - .select(( - datasets::id, - datasets::name, - datasets::created_at, - datasets::updated_at, - datasets::enabled, - datasets::imported, - users::id, - users::name.nullable(), - users::email, - data_sources::id, - data_sources::name, - sql::>("max(messages.created_at) as last_queried"), - )) - .group_by(( - datasets::id, - datasets::name, - datasets::created_at, - datasets::updated_at, - datasets::enabled, - datasets::imported, - users::id, - users::name, - users::email, - data_sources::id, - data_sources::name, - )) - .filter(datasets::deleted_at.is_null()) - .filter( - permission_groups_to_identities::identity_id - .eq(user_id) - .or(teams_to_users::user_id.eq(user_id)), - ) - .limit(page_size) - .offset(page * page_size) - .load::<( - Uuid, - String, - DateTime, - DateTime, - bool, - bool, - Uuid, - Option, - String, - Uuid, - String, - Option>, - )>(&mut conn) - .await - { - Ok(datasets) => datasets, - Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), - }; - - let list_dataset_objects: Vec = list_dataset_records - .into_iter() - .map( - |( - id, - name, - created_at, - updated_at, - enabled, - imported, - user_id, - user_name, - user_email, - data_source_id, - data_source_name, - last_queried, - )| { - ListDatasetObject { - id, - name, - created_at: Some(created_at), - updated_at: Some(updated_at), - enabled: Some(enabled), - imported: Some(imported), - data_source: ListDatasetDataSource { - id: data_source_id, - name: data_source_name, - }, - last_queried, - owner: Some(ListDatasetOwner { - id: user_id, - name: user_name.unwrap_or(user_email), - avatar_url: None, - }), - belongs_to: None, - } - }, - ) - .collect(); - - Ok(list_dataset_objects) -} - async fn get_org_datasets( - pool: &PgPool, organization_id: &Uuid, page: i64, page_size: i64, @@ -289,7 +163,7 @@ async fn get_org_datasets( imported: Option, data_source_id: Option, ) -> Result> { - let mut conn = match pool.get().await { + let mut conn = match get_pg_pool().get().await { Ok(conn) => conn, Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), }; @@ -409,62 +283,245 @@ async fn get_org_datasets( Ok(list_dataset_objects) } -async fn list_permission_group_datasets( - pool: &PgPool, - organization_id: Uuid, +async fn get_restricted_user_datasets( + user_id: &Uuid, page: i64, page_size: i64, - permission_group_id: Uuid, ) -> Result> { - let mut conn = match pool.get().await { - Ok(conn) => conn, - Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + let direct_user_permissioned_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let result = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join(users::table.on(datasets::created_by.eq(users::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .left_join(messages::table.on(messages::dataset_id.eq(datasets::id.nullable()))) + .select(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name.nullable(), + users::email, + data_sources::id, + data_sources::name, + sql::>("max(messages.created_at) as last_queried"), + )) + .group_by(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name, + users::email, + data_sources::id, + data_sources::name, + )) + .filter(dataset_permissions::permission_id.eq(user_id)) + .filter(dataset_permissions::permission_type.eq("user")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .limit(page_size) + .offset(page * page_size) + .load::<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(result) + }) }; - let list_dataset_records = match datasets::table - .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) - .left_join( - datasets_to_permission_groups::table.on(datasets::id - .eq(datasets_to_permission_groups::dataset_id) - .and(datasets_to_permission_groups::permission_group_id.eq(permission_group_id)) - .and(datasets_to_permission_groups::deleted_at.is_null())), - ) - .select(( - datasets::id, - datasets::name, - data_sources::id, - data_sources::name, - datasets_to_permission_groups::permission_group_id.nullable(), - )) - .filter(datasets::organization_id.eq(organization_id)) - .filter(datasets::deleted_at.is_null()) - .filter(datasets::enabled.eq(true)) - .limit(page_size) - .offset(page * page_size) - .load::<(Uuid, String, Uuid, String, Option)>(&mut conn) - .await - { - Ok(datasets) => datasets, + // fetch permissions for user through permission group + let permission_group_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let permission_group_datasets: Vec<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )> = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join(users::table.on(datasets::created_by.eq(users::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .inner_join( + permission_groups_to_users::table + .on(permission_groups_to_users::user_id.eq(user_id)), + ) + .left_join(messages::table.on(messages::dataset_id.eq(datasets::id.nullable()))) + .select(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name.nullable(), + users::email, + data_sources::id, + data_sources::name, + sql::>("max(messages.created_at) as last_queried"), + )) + .group_by(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name, + users::email, + data_sources::id, + data_sources::name, + )) + .filter( + dataset_permissions::permission_id + .eq(permission_groups_to_users::permission_group_id), + ) + .filter(dataset_permissions::permission_type.eq("group")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .limit(page_size) + .offset(page * page_size) + .load::<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(permission_group_datasets) + }) + }; + + let mut all_datasets: Vec<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )> = Vec::new(); + + match direct_user_permissioned_datasets_handle.await { + Ok(Ok(direct_user_permissioned_datasets)) => { + all_datasets.extend(direct_user_permissioned_datasets) + } + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), - }; + } - let list_dataset_objects: Vec = list_dataset_records + match permission_group_datasets_handle.await { + Ok(Ok(permission_group_datasets)) => all_datasets.extend(permission_group_datasets), + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + } + + // Deduplicate based on dataset id (first tuple element) + all_datasets.sort_by_key(|k| k.0); + all_datasets.dedup_by_key(|k| k.0); + + let list_dataset_objects: Vec = all_datasets .into_iter() .map( - |(id, name, data_source_id, data_source_name, permission_group_id)| ListDatasetObject { + |( id, name, - created_at: None, - updated_at: None, - enabled: None, - imported: None, - data_source: ListDatasetDataSource { - id: data_source_id, - name: data_source_name, - }, - last_queried: None, - owner: None, - belongs_to: Some(permission_group_id.is_some()), + created_at, + updated_at, + enabled, + imported, + user_id, + user_name, + user_email, + data_source_id, + data_source_name, + last_queried, + )| { + ListDatasetObject { + id, + name, + created_at: Some(created_at), + updated_at: Some(updated_at), + enabled: Some(enabled), + imported: Some(imported), + data_source: ListDatasetDataSource { + id: data_source_id, + name: data_source_name, + }, + last_queried, + owner: Some(ListDatasetOwner { + id: user_id, + name: user_name.unwrap_or(user_email), + avatar_url: None, + }), + belongs_to: None, + } }, ) .collect(); diff --git a/api/src/routes/rest/routes/datasets/post_dataset.rs b/api/src/routes/rest/routes/datasets/post_dataset.rs index ec503fd9f..4e42e5dee 100644 --- a/api/src/routes/rest/routes/datasets/post_dataset.rs +++ b/api/src/routes/rest/routes/datasets/post_dataset.rs @@ -2,6 +2,7 @@ use anyhow::{anyhow, Result}; use axum::{extract::Json, Extension}; use diesel::{ExpressionMethods, JoinOnDsl, QueryDsl}; use diesel_async::RunQueryDsl; +use reqwest::StatusCode; use serde::Deserialize; use uuid::Uuid; @@ -13,7 +14,10 @@ use crate::{ schema::{data_sources, datasets, users_to_organizations}, }, routes::rest::ApiResponse, - utils::user::user_info::get_user_organization_id, + utils::{ + security::checks::is_user_workspace_admin_or_data_admin, + user::user_info::get_user_organization_id, + }, }; #[derive(Debug, Deserialize)] @@ -26,12 +30,32 @@ pub async fn post_dataset( Extension(user): Extension, Json(request): Json, ) -> Result, (axum::http::StatusCode, String)> { + match is_user_workspace_admin_or_data_admin(&user.id).await { + Ok(true) => (), + Ok(false) => { + return Err(( + StatusCode::FORBIDDEN, + "Insufficient permissions".to_string(), + )) + } + Err(e) => { + tracing::error!("Error checking user permissions: {:?}", e); + return Err(( + StatusCode::INTERNAL_SERVER_ERROR, + "Error checking user permissions".to_string(), + )); + } + } + let dataset = match post_dataset_handler(&user.id, &request.data_source_id, &request.name).await { Ok(dataset) => dataset, Err(e) => { tracing::error!("Error creating dataset: {:?}", e); - return Err((axum::http::StatusCode::INTERNAL_SERVER_ERROR, e.to_string())); + return Err(( + StatusCode::INTERNAL_SERVER_ERROR, + "Error creating dataset".to_string(), + )); } }; diff --git a/api/src/routes/rest/routes/mod.rs b/api/src/routes/rest/routes/mod.rs index 9b4fcc017..491ddbb4c 100644 --- a/api/src/routes/rest/routes/mod.rs +++ b/api/src/routes/rest/routes/mod.rs @@ -3,6 +3,7 @@ mod assets; mod data_sources; mod dataset_groups; mod datasets; +mod organizations; mod permission_groups; mod sql; mod users; @@ -21,6 +22,7 @@ pub fn router() -> Router { .nest("/permission_groups", permission_groups::router()) .nest("/dataset_groups", dataset_groups::router()) .nest("/sql", sql::router()) + .nest("/organizations", organizations::router()) .route_layer(middleware::from_fn(auth)), ) } diff --git a/api/src/routes/rest/routes/organizations/mod.rs b/api/src/routes/rest/routes/organizations/mod.rs new file mode 100644 index 000000000..c21b36ff9 --- /dev/null +++ b/api/src/routes/rest/routes/organizations/mod.rs @@ -0,0 +1,8 @@ +use axum::{routing::get, Router}; + +mod users; + +pub fn router() -> Router { + Router::new() + .route("/:id/users", get(users::list_organization_users)) +} diff --git a/api/src/routes/rest/routes/organizations/users.rs b/api/src/routes/rest/routes/organizations/users.rs new file mode 100644 index 000000000..4277f081d --- /dev/null +++ b/api/src/routes/rest/routes/organizations/users.rs @@ -0,0 +1,80 @@ +use anyhow::Result; +use axum::{extract::Path, http::StatusCode, Extension}; +use diesel::{ExpressionMethods, JoinOnDsl, NullableExpressionMethods, QueryDsl}; +use diesel_async::RunQueryDsl; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +use crate::{ + database::{ + enums::{UserOrganizationRole, UserOrganizationStatus}, + lib::get_pg_pool, + models::User, + schema::{users, users_to_organizations}, + }, + routes::rest::ApiResponse, + utils::clients::sentry_utils::send_sentry_error, +}; + +#[derive(Serialize, Deserialize, Clone)] +pub struct UserResponse { + pub id: Uuid, + pub name: Option, + pub email: String, + pub role: UserOrganizationRole, + pub status: UserOrganizationStatus, +} + +pub async fn list_organization_users( + Extension(user): Extension, + Path(organization_id): Path, +) -> Result>, (StatusCode, &'static str)> { + let users = match list_organization_users_handler(organization_id).await { + Ok(users) => users, + Err(e) => { + tracing::error!("Error listing organization users: {:?}", e); + send_sentry_error(&e.to_string(), Some(&user.id)); + return Err(( + StatusCode::INTERNAL_SERVER_ERROR, + "Error listing organization users", + )); + } + }; + + Ok(ApiResponse::JsonData(users)) +} + +async fn list_organization_users_handler(organization_id: Uuid) -> Result> { + let mut conn = get_pg_pool().get().await?; + + let users = users::table + .inner_join(users_to_organizations::table.on(users::id.eq(users_to_organizations::user_id))) + .select(( + users::id, + users::email, + users::name.nullable(), + users_to_organizations::role, + users_to_organizations::status, + )) + .filter(users_to_organizations::organization_id.eq(organization_id)) + .filter(users_to_organizations::deleted_at.is_null()) + .load::<( + Uuid, + String, + Option, + UserOrganizationRole, + UserOrganizationStatus, + )>(&mut conn) + .await?; + + Ok(users + .into_iter() + .map(|(id, email, name, role, status)| UserResponse { + id, + name, + email, + role, + status, + }) + .collect()) +} diff --git a/api/src/routes/rest/routes/users/get_user_by_id.rs b/api/src/routes/rest/routes/users/get_user_by_id.rs new file mode 100644 index 000000000..02091a1b0 --- /dev/null +++ b/api/src/routes/rest/routes/users/get_user_by_id.rs @@ -0,0 +1,74 @@ +use anyhow::Result; +use axum::{extract::Path, Extension}; +use diesel_async::RunQueryDsl; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +use crate::{ + database::{ + enums::{UserOrganizationRole, UserOrganizationStatus}, + lib::get_pg_pool, + models::User, + schema::{users, users_to_organizations}, + }, + routes::rest::ApiResponse, + utils::clients::sentry_utils::send_sentry_error, +}; +use axum::http::StatusCode; +use diesel::{ExpressionMethods, JoinOnDsl, NullableExpressionMethods, QueryDsl}; + +#[derive(Serialize, Deserialize, Clone)] +pub struct UserResponse { + pub id: Uuid, + pub name: Option, + pub email: String, + pub role: UserOrganizationRole, + pub status: UserOrganizationStatus, +} + +pub async fn get_user_by_id( + Extension(user): Extension, + Path(id): Path, +) -> Result, (StatusCode, &'static str)> { + let user_info = match get_user_information(&id).await { + Ok(user_info) => user_info, + Err(e) => { + tracing::error!("Error getting user information: {:?}", e); + send_sentry_error(&e.to_string(), Some(&user.id)); + return Err(( + StatusCode::INTERNAL_SERVER_ERROR, + "Error getting user information", + )); + } + }; + + Ok(ApiResponse::JsonData(user_info)) +} + +pub async fn get_user_information(user_id: &Uuid) -> Result { + let pg_pool = get_pg_pool(); + let mut conn = pg_pool.get().await?; + + let (user, (role, status)) = users::table + .inner_join(users_to_organizations::table.on(users::id.eq(users_to_organizations::user_id))) + .select(( + (users::id, users::email, users::name.nullable()), + (users_to_organizations::role, users_to_organizations::status), + )) + .filter(users::id.eq(user_id)) + .first::<( + (Uuid, String, Option), + (UserOrganizationRole, UserOrganizationStatus), + )>(&mut conn) + .await?; + + let (id, email, name) = user; + + Ok(UserResponse { + id, + name, + email, + role, + status, + }) +} diff --git a/api/src/routes/rest/routes/users/mod.rs b/api/src/routes/rest/routes/users/mod.rs index f3ac8ce9d..4de5bba16 100644 --- a/api/src/routes/rest/routes/users/mod.rs +++ b/api/src/routes/rest/routes/users/mod.rs @@ -3,11 +3,13 @@ use axum::{ Router, }; -pub mod get_user; -pub mod update_user; +mod get_user; +mod get_user_by_id; +mod update_user; pub fn router() -> Router { Router::new() .route("/", get(get_user::get_user)) - .route("/", put(update_user::update_user)) + .route("/:id", put(update_user::update_user)) + .route("/:id", get(get_user_by_id::get_user_by_id)) } diff --git a/api/src/routes/rest/routes/users/update_user.rs b/api/src/routes/rest/routes/users/update_user.rs index f7ee97a0c..74d22aff7 100644 --- a/api/src/routes/rest/routes/users/update_user.rs +++ b/api/src/routes/rest/routes/users/update_user.rs @@ -1,28 +1,54 @@ use anyhow::Result; +use axum::extract::Path; use axum::{Extension, Json}; -use diesel_async::RunQueryDsl; -use crate::database::lib::get_pg_pool; +use crate::database::enums::UserOrganizationStatus; use crate::database::models::User; -use crate::database::schema::users; +use crate::database::schema::{users, users_to_organizations}; +use crate::database::{enums::UserOrganizationRole, lib::get_pg_pool}; use crate::routes::rest::ApiResponse; use crate::utils::clients::sentry_utils::send_sentry_error; +use crate::utils::security::checks::is_user_workspace_admin_or_data_admin; use axum::http::StatusCode; use diesel::{update, ExpressionMethods}; -use serde::Deserialize; +use diesel_async::RunQueryDsl; +use serde::{Deserialize, Serialize}; use uuid::Uuid; +#[derive(Serialize, Deserialize, Clone)] +pub struct UserResponse { + pub id: Uuid, + pub name: Option, + pub email: String, + pub role: UserOrganizationRole, + pub status: UserOrganizationStatus, +} + #[derive(Deserialize)] pub struct UpdateUserRequest { pub name: Option, + pub role: Option, } pub async fn update_user( Extension(user): Extension, + Path(id): Path, Json(body): Json, -) -> Result, (StatusCode, &'static str)> { - let user_info_object = match update_user_handler(&user.id, body.name).await { - Ok(user_info_object) => user_info_object, +) -> Result, (StatusCode, &'static str)> { + match is_user_workspace_admin_or_data_admin(&user.id).await { + Ok(true) => (), + Ok(false) => return Err((StatusCode::FORBIDDEN, "Insufficient permissions")), + Err(e) => { + tracing::error!("Error checking user permissions: {:?}", e); + return Err(( + StatusCode::INTERNAL_SERVER_ERROR, + "Error checking user permissions", + )); + } + } + + match update_user_handler(&id, body).await { + Ok(_) => (), Err(e) => { tracing::error!("Error getting user information: {:?}", e); send_sentry_error(&e.to_string(), Some(&user.id)); @@ -33,10 +59,10 @@ pub async fn update_user( } }; - Ok(ApiResponse::JsonData(user_info_object)) + Ok(ApiResponse::NoContent) } -pub async fn update_user_handler(user_id: &Uuid, name: Option) -> Result { +pub async fn update_user_handler(user_id: &Uuid, change: UpdateUserRequest) -> Result<()> { let pg_pool = get_pg_pool(); let mut conn = match pg_pool.get().await { @@ -46,16 +72,34 @@ pub async fn update_user_handler(user_id: &Uuid, name: Option) -> Result } }; - let user = match update(users::table) - .filter(users::id.eq(user_id)) - .set(users::name.eq(name)) - .returning(users::all_columns) - .get_result::(&mut conn) - .await - { - Ok(user) => user, - Err(e) => return Err(anyhow::anyhow!("Error updating user: {:?}", e)), - }; + if let Some(name) = change.name { + match update(users::table) + .filter(users::id.eq(user_id)) + .set(users::name.eq(name)) + .execute(&mut conn) + .await + { + Ok(user) => user, + Err(e) => return Err(anyhow::anyhow!("Error updating user: {:?}", e)), + }; + } - Ok(user) + if let Some(role) = change.role { + match update(users_to_organizations::table) + .filter(users_to_organizations::user_id.eq(user_id)) + .set(users_to_organizations::role.eq(role)) + .execute(&mut conn) + .await + { + Ok(user_organization_role_update) => user_organization_role_update, + Err(e) => { + return Err(anyhow::anyhow!( + "Error updating user organization role: {:?}", + e + )) + } + }; + } + + Ok(()) } diff --git a/api/src/routes/ws/datasets/list_datasets.rs b/api/src/routes/ws/datasets/list_datasets.rs index c10b08498..48e292e26 100644 --- a/api/src/routes/ws/datasets/list_datasets.rs +++ b/api/src/routes/ws/datasets/list_datasets.rs @@ -8,17 +8,19 @@ use diesel::{ }; use diesel_async::RunQueryDsl; use uuid::Uuid; +use tokio; use serde::{Deserialize, Serialize}; use crate::{ database::{ - enums::IdentityType, - lib::get_pg_pool, - models::User, + enums::{IdentityType, UserOrganizationRole}, + lib::{get_pg_pool, PgPool}, + models::{User, UserToOrganization}, schema::{ - data_sources, datasets, datasets_to_permission_groups, messages, - permission_groups_to_identities, teams_to_users, users, + data_sources, dataset_permissions, datasets, datasets_to_permission_groups, messages, + permission_groups_to_identities, permission_groups_to_users, teams_to_users, users, + users_to_organizations, }, }, routes::ws::{ @@ -92,7 +94,7 @@ allow_columns_to_appear_in_same_group_by_clause!( pub async fn list_datasets(user: &User, req: ListDatasetsRequest) -> Result<()> { let list_dashboards_res = match list_datasets_handler( - user.id, + &user.id, req.page, req.page_size, req.admin_view, @@ -151,7 +153,7 @@ pub async fn list_datasets(user: &User, req: ListDatasetsRequest) -> Result<()> } async fn list_datasets_handler( - user_id: Uuid, + user_id: &Uuid, page: Option, page_size: Option, admin_view: Option, @@ -165,31 +167,41 @@ async fn list_datasets_handler( let page_size = page_size.unwrap_or(25); let admin_view = admin_view.unwrap_or(false); - let organization_id = match get_user_organization_id(&user_id).await { - Ok(organization_id) => organization_id, - // Added this to handle the case where the user does not have an organization... - // Likely will need to be revisited in the future. TODO. - Err(_) => return Ok(vec![]), + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), }; - let list_of_datasets = if let Some(permission_group_id) = permission_group_id { - list_permission_group_datasets(organization_id, page, page_size, permission_group_id) + // Right now we only allow users to have one organization this will change in the future + let user_organization_record = match users_to_organizations::table + .filter(users_to_organizations::user_id.eq(user_id)) + .filter(users_to_organizations::deleted_at.is_null()) + .select(users_to_organizations::all_columns) + .first::(&mut conn) + .await + { + Ok(organization_id) => organization_id, + Err(e) => return Err(anyhow!("Unable to get organization from database: {}", e)), + }; + + let list_of_datasets = match &user_organization_record.role { + UserOrganizationRole::WorkspaceAdmin + | UserOrganizationRole::DataAdmin + | UserOrganizationRole::Querier => { + get_org_datasets( + &user_organization_record.organization_id, + page, + page_size, + enabled, + imported, + data_source_id, + ) .await? - } else { - match admin_view { - true => { - get_org_datasets( - &organization_id, - page, - page_size, - enabled, - imported, - data_source_id, - ) - .await? - } - false => get_user_permissioned_datasets(&user_id, page, page_size).await?, } + UserOrganizationRole::RestrictedQuerier => { + get_restricted_user_datasets(user_id, page, page_size).await? + } + UserOrganizationRole::Viewer => Vec::new(), }; Ok(list_of_datasets) @@ -512,3 +524,249 @@ async fn list_permission_group_datasets( Ok(list_dataset_objects) } + +async fn get_restricted_user_datasets( + user_id: &Uuid, + page: i64, + page_size: i64, +) -> Result> { + let direct_user_permissioned_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let result = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join(users::table.on(datasets::created_by.eq(users::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .left_join(messages::table.on(messages::dataset_id.eq(datasets::id.nullable()))) + .select(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name.nullable(), + users::email, + data_sources::id, + data_sources::name, + sql::>("max(messages.created_at) as last_queried"), + )) + .group_by(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name, + users::email, + data_sources::id, + data_sources::name, + )) + .filter(dataset_permissions::permission_id.eq(user_id)) + .filter(dataset_permissions::permission_type.eq("user")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .limit(page_size) + .offset(page * page_size) + .load::<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(result) + }) + }; + + // fetch permissions for user through permission group + let permission_group_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let permission_group_datasets: Vec<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )> = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join(users::table.on(datasets::created_by.eq(users::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .inner_join( + permission_groups_to_users::table + .on(permission_groups_to_users::user_id.eq(user_id)), + ) + .left_join(messages::table.on(messages::dataset_id.eq(datasets::id.nullable()))) + .select(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name.nullable(), + users::email, + data_sources::id, + data_sources::name, + sql::>("max(messages.created_at) as last_queried"), + )) + .group_by(( + datasets::id, + datasets::name, + datasets::created_at, + datasets::updated_at, + datasets::enabled, + datasets::imported, + users::id, + users::name, + users::email, + data_sources::id, + data_sources::name, + )) + .filter( + dataset_permissions::permission_id + .eq(permission_groups_to_users::permission_group_id), + ) + .filter(dataset_permissions::permission_type.eq("group")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .limit(page_size) + .offset(page * page_size) + .load::<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(permission_group_datasets) + }) + }; + + let mut all_datasets: Vec<( + Uuid, + String, + DateTime, + DateTime, + bool, + bool, + Uuid, + Option, + String, + Uuid, + String, + Option>, + )> = Vec::new(); + + match direct_user_permissioned_datasets_handle.await { + Ok(Ok(direct_user_permissioned_datasets)) => { + all_datasets.extend(direct_user_permissioned_datasets) + } + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + } + + match permission_group_datasets_handle.await { + Ok(Ok(permission_group_datasets)) => all_datasets.extend(permission_group_datasets), + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + } + + // Deduplicate based on dataset id (first tuple element) + all_datasets.sort_by_key(|k| k.0); + all_datasets.dedup_by_key(|k| k.0); + + let list_dataset_objects: Vec = all_datasets + .into_iter() + .map( + |( + id, + name, + created_at, + updated_at, + enabled, + imported, + user_id, + user_name, + user_email, + data_source_id, + data_source_name, + last_queried, + )| { + ListDatasetObject { + id, + name, + created_at: Some(created_at), + updated_at: Some(updated_at), + enabled: Some(enabled), + imported: Some(imported), + data_source: ListDatasetDataSource { + id: data_source_id, + name: data_source_name, + }, + last_queried, + owner: Some(ListDatasetOwner { + id: user_id, + name: user_name.unwrap_or(user_email), + avatar_url: None, + }), + belongs_to: None, + } + }, + ) + .collect(); + + Ok(list_dataset_objects) +} diff --git a/api/src/routes/ws/threads_and_messages/post_thread/post_thread.rs b/api/src/routes/ws/threads_and_messages/post_thread/post_thread.rs index c18ebc974..94b5d5955 100644 --- a/api/src/routes/ws/threads_and_messages/post_thread/post_thread.rs +++ b/api/src/routes/ws/threads_and_messages/post_thread/post_thread.rs @@ -1,12 +1,13 @@ use crate::{ database::{ - enums::{AssetPermissionRole, AssetType, IdentityType}, + enums::{AssetPermissionRole, AssetType, IdentityType, UserOrganizationRole}, lib::{get_pg_pool, get_sqlx_pool, ContextJsonBody, MessageResponses}, - models::{AssetPermission, DataSource, Dataset, DatasetColumn}, + models::{AssetPermission, DataSource, Dataset, DatasetColumn, UserToOrganization}, schema::{ - asset_permissions, data_sources, dataset_columns, datasets, + asset_permissions, data_sources, dataset_columns, dataset_permissions, datasets, datasets_to_permission_groups, messages, permission_groups_to_identities, - teams_to_users, terms, terms_to_datasets, threads, + permission_groups_to_users, teams_to_users, terms, terms_to_datasets, threads, + users_to_organizations, }, }, routes::ws::{ @@ -674,31 +675,46 @@ pub async fn get_user_datasets_with_metadata(user_id: &Uuid) -> Result return Err(anyhow!("Unable to get connection from pool: {}", e)), }; + // Get user's organization and role + let user_organization_record = match users_to_organizations::table + .filter(users_to_organizations::user_id.eq(user_id)) + .filter(users_to_organizations::deleted_at.is_null()) + .select(users_to_organizations::all_columns) + .first::(&mut conn) + .await + { + Ok(organization_id) => organization_id, + Err(e) => return Err(anyhow!("Unable to get organization from database: {}", e)), + }; + + let datasets_with_metadata = match &user_organization_record.role { + UserOrganizationRole::WorkspaceAdmin + | UserOrganizationRole::DataAdmin + | UserOrganizationRole::Querier => { + get_org_datasets_with_metadata(&user_organization_record.organization_id).await? + } + UserOrganizationRole::RestrictedQuerier => { + get_restricted_user_datasets_with_metadata(user_id).await? + } + UserOrganizationRole::Viewer => Vec::new(), + }; + + Ok(datasets_with_metadata) +} + +async fn get_org_datasets_with_metadata( + organization_id: &Uuid, +) -> Result> { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + let dataset_records = match datasets::table .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) - .inner_join( - datasets_to_permission_groups::table.on(datasets::id - .eq(datasets_to_permission_groups::dataset_id) - .and(datasets_to_permission_groups::deleted_at.is_null())), - ) - .inner_join( - permission_groups_to_identities::table.on( - datasets_to_permission_groups::permission_group_id - .eq(permission_groups_to_identities::permission_group_id) - .and(permission_groups_to_identities::deleted_at.is_null()), - ), - ) - .left_join( - teams_to_users::table.on(permission_groups_to_identities::identity_id - .eq(teams_to_users::team_id) - .and(teams_to_users::deleted_at.is_null())), - ) + .filter(datasets::organization_id.eq(organization_id)) .filter(datasets::deleted_at.is_null()) - .filter( - permission_groups_to_identities::identity_id - .eq(user_id) - .or(teams_to_users::user_id.eq(user_id)), - ) + .filter(datasets::enabled.eq(true)) .select((Dataset::as_select(), DataSource::as_select())) .load::<(Dataset, DataSource)>(&mut conn) .await @@ -707,6 +723,103 @@ pub async fn get_user_datasets_with_metadata(user_id: &Uuid) -> Result return Err(anyhow!("Unable to get datasets from database: {}", e)), }; + process_dataset_records(dataset_records).await +} + +async fn get_restricted_user_datasets_with_metadata( + user_id: &Uuid, +) -> Result> { + let direct_user_permissioned_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let result = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .filter(dataset_permissions::permission_id.eq(user_id)) + .filter(dataset_permissions::permission_type.eq("user")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .select((Dataset::as_select(), DataSource::as_select())) + .load::<(Dataset, DataSource)>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(result) + }) + }; + + let permission_group_datasets_handle = { + let user_id = user_id.clone(); + tokio::spawn(async move { + let mut conn = match get_pg_pool().get().await { + Ok(conn) => conn, + Err(e) => return Err(anyhow!("Unable to get connection from pool: {}", e)), + }; + + let result = match datasets::table + .inner_join(data_sources::table.on(datasets::data_source_id.eq(data_sources::id))) + .inner_join( + dataset_permissions::table.on(dataset_permissions::dataset_id.eq(datasets::id)), + ) + .inner_join( + permission_groups_to_users::table + .on(permission_groups_to_users::user_id.eq(user_id)), + ) + .filter( + dataset_permissions::permission_id + .eq(permission_groups_to_users::permission_group_id), + ) + .filter(dataset_permissions::permission_type.eq("permission_group")) + .filter(datasets::deleted_at.is_null()) + .filter(datasets::enabled.eq(true)) + .select((Dataset::as_select(), DataSource::as_select())) + .load::<(Dataset, DataSource)>(&mut conn) + .await + { + Ok(datasets) => datasets, + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + }; + + Ok(result) + }) + }; + + let mut all_datasets = Vec::new(); + + match direct_user_permissioned_datasets_handle.await { + Ok(Ok(direct_user_permissioned_datasets)) => { + all_datasets.extend(direct_user_permissioned_datasets) + } + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + } + + match permission_group_datasets_handle.await { + Ok(Ok(permission_group_datasets)) => all_datasets.extend(permission_group_datasets), + Ok(Err(e)) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + Err(e) => return Err(anyhow!("Unable to get datasets from database: {}", e)), + } + + // Deduplicate based on dataset id + all_datasets.sort_by_key(|k| k.0.id); + all_datasets.dedup_by_key(|k| k.0.id); + + process_dataset_records(all_datasets).await +} + +async fn process_dataset_records( + dataset_records: Vec<(Dataset, DataSource)>, +) -> Result> { let mut datasets_with_metadata = Vec::new(); let mut column_fetch_tasks = Vec::new(); @@ -1514,7 +1627,7 @@ async fn update_thread_and_message( ON CONFLICT (asset_id, asset_type) DO UPDATE SET content = EXCLUDED.content, - updated_at = NOW()" + updated_at = NOW()", ) .bind::(thread_id) .bind::(summary_question.unwrap_or(title)) diff --git a/package.json b/package.json deleted file mode 100644 index c97458bd2..000000000 --- a/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "buster", - "version": "0.0.1", - "private": true, - "workspaces": [ - "web", - "api", - "cli" - ], - "scripts": { - "version:patch": "npm version patch -m \"chore: bump version to %s\"", - "version:minor": "npm version minor -m \"chore: bump version to %s\"", - "version:major": "npm version major -m \"chore: bump version to %s\"" - } -} diff --git a/version.txt b/version.txt new file mode 100644 index 000000000..e69de29bb diff --git a/web/package-lock.json b/web/package-lock.json index 75c04891b..d8b09ce91 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -12,7 +12,7 @@ "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", - "@faker-js/faker": "^9.3.0", + "@faker-js/faker": "^9.4.0", "@fluentui/react-context-selector": "^9.1.71", "@manufac/echarts-simple-transform": "^2.0.11", "@million/lint": "^1.0.14", @@ -20,11 +20,11 @@ "@supabase/auth-helpers-nextjs": "^0.10.0", "@supabase/auth-helpers-react": "^0.5.0", "@supabase/ssr": "^0.5.2", - "@supabase/supabase-js": "^2.47.10", - "@tanstack/react-query": "^5.62.16", + "@supabase/supabase-js": "^2.47.14", + "@tanstack/react-query": "^5.64.1", "@vercel/speed-insights": "^1.1.0", "ahooks": "^3.8.4", - "antd": "^5.23.0", + "antd": "5.23.0", "antd-style": "^3.7.1", "axios": "^1.7.9", "canvas-confetti": "^1.9.3", @@ -51,7 +51,7 @@ "echarts-stat": "^1.2.0", "email-validator": "^2.0.4", "font-color-contrast": "^11.1.0", - "framer-motion": "^11.16.0", + "framer-motion": "^11.18.0", "html2canvas": "^1.4.1", "immer": "^10.1.1", "js-cookie": "^3.0.5", @@ -61,15 +61,16 @@ "material-symbols": "^0.27.2", "monaco-sql-languages": "^0.12.2", "monaco-themes": "^0.4.4", + "monaco-yaml": "^5.2.3", "next": "14.2.22", "next-themes": "^0.4.4", "next-transpile-modules": "^10.0.1", - "papaparse": "^5.4.1", + "papaparse": "^5.5.1", "patternomaly": "^1.3.2", "pluralize": "^8.0.0", - "posthog-js": "^1.204.0", + "posthog-js": "^1.206.1", "prettier": "^3.4.2", - "prettier-plugin-tailwindcss": "^0.6.9", + "prettier-plugin-tailwindcss": "^0.6.10", "rc-virtual-list": "^3.17.0", "react": "^18", "react-chartjs-2": "^5.3.0", @@ -90,10 +91,9 @@ "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.0", "split-pane-react": "^0.1.3", - "sql-language-server": "^1.7.1", "tailwind-merge": "^2.6.0", "utility-types": "^3.11.0", - "uuid": "^11.0.4" + "uuid": "^11.0.5" }, "devDependencies": { "@types/canvas-confetti": "^1.9.0", @@ -113,9 +113,10 @@ "eslint": "^8", "eslint-config-next": "14.2.3", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.2.2", + "monaco-editor-webpack-plugin": "^7.1.0", "postcss": "~8", - "sass": "^1.83.1", + "sass": "^1.83.4", "tailwindcss": "^3.4.17", "typescript": "^5" }, @@ -444,14 +445,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", @@ -507,141 +500,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/runtime": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", @@ -699,11 +557,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, "node_modules/@clack/core": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", @@ -731,6 +584,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -740,21 +594,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -1515,9 +1354,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.3.0.tgz", - "integrity": "sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.4.0.tgz", + "integrity": "sha512-85+k0AxaZSTowL0gXp8zYWDIrWclTbRPg/pm/V0dSFZ6W6D4lhcG3uuZl4zLsEKfEvs69xDbLN2cHQudwp95JA==", "funding": [ { "type": "opencollective", @@ -1604,110 +1443,6 @@ "@swc/helpers": "^0.5.1" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "node_modules/@google-cloud/bigquery": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-5.12.0.tgz", - "integrity": "sha512-UaIvvuKpyJhCRBkxEJXnJwvxOxkGoZHvSs9IsS0MNUS4YphcbWYOyzRMufV5gxdsr7XNSd+36Nj/n/7vyZiCqQ==", - "dependencies": { - "@google-cloud/common": "^3.9.0", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "big.js": "^6.0.0", - "duplexify": "^4.0.0", - "extend": "^3.0.2", - "is": "^3.3.0", - "p-event": "^4.1.0", - "readable-stream": "^3.6.0", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/bigquery/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@google-cloud/bigquery/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/@google-cloud/bigquery/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@google-cloud/common": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", - "integrity": "sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==", - "dependencies": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.14.0", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", - "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", - "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", - "engines": { - "node": ">=10" - } - }, "node_modules/@hono/node-server": { "version": "1.13.7", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.13.7.tgz", @@ -1799,390 +1534,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@joe-re/sql-parser": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@joe-re/sql-parser/-/sql-parser-1.7.1.tgz", - "integrity": "sha512-N2L7Z3HNa4plB28Vw92tWc3AAtnPGGz8iUKMzEgdcCeRW9RWtn7f/8EnknXmQZE15H5nhmnyqT//icVufA4Fhg==", - "license": "GPLv2", - "dependencies": { - "peggy": "^3.0.2" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -2212,6 +1563,18 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -2908,30 +2271,6 @@ "node": ">= 8" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "optional": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@parcel/watcher": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", @@ -3538,22 +2877,6 @@ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", "dev": true }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", @@ -3622,9 +2945,9 @@ } }, "node_modules/@supabase/postgrest-js": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.17.7.tgz", - "integrity": "sha512-aOzOYaTADm/dVTNksyqv9KsbhVa1gHz1Hoxb2ZEF2Ed9H7qlWOfptECQWmkEmrrFjtNaiPrgiSaPECvzI/seDA==", + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.17.11.tgz", + "integrity": "sha512-AOqqgQEhLVqzOMmA8Q0bxQFMfbozbjjQ1Tt4kprkstIKdRl4yZRaMdoVxFkCpU8ivmAe2xNfAVkNK+l16a9P0A==", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" @@ -3674,15 +2997,15 @@ } }, "node_modules/@supabase/supabase-js": { - "version": "2.47.10", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.47.10.tgz", - "integrity": "sha512-vJfPF820Ho5WILYHfKiBykDQ1SB9odTHrRZ0JxHfuLMC8GRvv21YLkUZQK7/rSVCkLvD6/ZwMWaOAfdUd//guw==", + "version": "2.47.15", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.47.15.tgz", + "integrity": "sha512-Ufeqya/8L7Y1CDmpo7HquoHaF/MiRGHhnPE7Djz43ExL0hQnnrzUfu5bBeFXkzQ3uiuaA+fbGMaWlXaSbqKJ7g==", "license": "MIT", "dependencies": { "@supabase/auth-js": "2.67.3", "@supabase/functions-js": "2.4.4", "@supabase/node-fetch": "2.6.15", - "@supabase/postgrest-js": "1.17.7", + "@supabase/postgrest-js": "1.17.11", "@supabase/realtime-js": "2.11.2", "@supabase/storage-js": "2.7.1" } @@ -3702,9 +3025,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.62.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.16.tgz", - "integrity": "sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", + "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", "license": "MIT", "funding": { "type": "github", @@ -3712,12 +3035,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.62.16", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.62.16.tgz", - "integrity": "sha512-XJIZNj65d2IdvU8VBESmrPakfIm6FSdHDzrS1dPrAwmq3ZX+9riMh/ZfbNQHAWnhrgmq7KoXpgZSRyXnqMYT9A==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", + "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.62.16" + "@tanstack/query-core": "5.64.1" }, "funding": { "type": "github", @@ -3727,57 +3050,12 @@ "react": "^18 || ^19" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/@tsconfig/svelte": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-1.0.13.tgz", "integrity": "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==", "license": "MIT" }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, "node_modules/@types/canvas-confetti": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz", @@ -3828,10 +3106,35 @@ "@types/ms": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "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==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", @@ -3847,14 +3150,6 @@ "integrity": "sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==", "license": "MIT" }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/hammerjs": { "version": "2.0.46", "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", @@ -3869,33 +3164,20 @@ "@types/unist": "*" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, "node_modules/@types/js-cookie": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", "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, + "license": "MIT", + "peer": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3939,11 +3221,6 @@ "undici-types": "~6.19.2" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" - }, "node_modules/@types/papaparse": { "version": "5.3.15", "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.15.tgz", @@ -3959,16 +3236,6 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, - "node_modules/@types/pg": { - "version": "8.11.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", - "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^4.0.1" - } - }, "node_modules/@types/phoenix": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz", @@ -4061,11 +3328,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, "node_modules/@types/topojson-client": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/topojson-client/-/topojson-client-3.1.5.tgz", @@ -4106,19 +3368,6 @@ "@types/node": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -4297,34 +3546,203 @@ } } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, "node_modules/@xstate/fsm": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.6.5.tgz", "integrity": "sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==", "license": "MIT" }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true }, "node_modules/accepts": { "version": "1.3.8", @@ -4351,26 +3769,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "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", @@ -4380,42 +3778,11 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "optional": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "devOptional": true, + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4451,6 +3818,7 @@ "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", @@ -4462,6 +3830,62 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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, + "license": "MIT", + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -4505,6 +3929,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -4538,11 +3963,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, "node_modules/antd": { "version": "5.23.0", "resolved": "https://registry.npmjs.org/antd/-/antd-5.23.0.tgz", @@ -4663,6 +4083,7 @@ "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" @@ -4671,12 +4092,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true - }, "node_modules/arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -4698,43 +4113,6 @@ ], "license": "MIT" }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -4756,30 +4134,6 @@ "deep-equal": "^2.0.5" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -4825,14 +4179,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -4947,18 +4293,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -4973,14 +4312,6 @@ "node": ">=0.8" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ast-types": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", @@ -5103,79 +4434,6 @@ "deep-equal": "^2.0.5" } }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -5199,43 +4457,6 @@ "hermes-parser": "0.21.1" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -5248,35 +4469,8 @@ "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==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-arraybuffer": { "version": "1.0.2", @@ -5290,6 +4484,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -5318,30 +4513,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } }, - "node_modules/big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -5354,51 +4530,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bippy": { "version": "0.0.25", "resolved": "https://registry.npmjs.org/bippy/-/bippy-0.0.25.tgz", "integrity": "sha512-+rvlmS7vbv704MjmpMLaSNKezGkc7xux7/DbhTp61RFQZAYwH8V0pbxGYiDWxA9a+7RxNFhHtsSIu9uoB+eK0Q==", "license": "MIT" }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -5500,6 +4637,7 @@ "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" @@ -5509,6 +4647,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -5516,11 +4655,6 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "node_modules/browserslist": { "version": "4.24.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", @@ -5553,14 +4687,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, "node_modules/btoa": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", @@ -5576,6 +4702,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -5605,10 +4732,13 @@ "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==" + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/busboy": { "version": "1.6.0", @@ -5621,99 +4751,6 @@ "node": ">=10.16.0" } }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "optional": 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/cacache/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==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cachedir": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", @@ -5751,14 +4788,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -5822,29 +4851,6 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "optional": true }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -5877,14 +4883,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -6130,12 +5128,15 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=10" + "node": ">=6.0" } }, "node_modules/ci-info": { @@ -6143,48 +5144,6 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -6194,7 +5153,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "devOptional": true, + "dev": true, "engines": { "node": ">=6" } @@ -6375,32 +5334,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -6419,15 +5352,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -6475,14 +5399,6 @@ "node": ">=4.0.0" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/compute-scroll-into-view": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz", @@ -6491,7 +5407,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/config-chain": { "version": "1.1.13", @@ -6544,12 +5461,6 @@ "semver": "bin/semver.js" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -6572,14 +5483,6 @@ "cookie": "^0.6.0" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -6638,6 +5541,7 @@ "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", @@ -6676,27 +5580,6 @@ "node": ">=4" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -6916,51 +5799,6 @@ "node": ">=0.10" } }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-urls/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -7012,14 +5850,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", @@ -7042,19 +5872,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -7067,28 +5884,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-equal": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", @@ -7135,14 +5930,6 @@ "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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -7177,18 +5964,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "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", @@ -7197,20 +5972,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -7219,22 +5980,6 @@ "node": ">=6" } }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -7262,14 +6007,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -7306,26 +6043,6 @@ "integrity": "sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==", "license": "MIT" }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, "node_modules/dompurify": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", @@ -7365,38 +6082,6 @@ "antlr4ng": "2.0.11" } }, - "node_modules/duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -7421,14 +6106,6 @@ "dev": true, "license": "MIT" }, - "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==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/echarts": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", @@ -7503,28 +6180,28 @@ "node": ">4.0" } }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "optional": true, + "peer": true, "dependencies": { "iconv-lite": "^0.6.2" } @@ -7534,6 +6211,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7545,6 +6223,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -7675,17 +6354,6 @@ "node": ">=8.6" } }, - "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -7697,21 +6365,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -7846,6 +6499,14 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", @@ -7965,35 +6626,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -8250,10 +6882,11 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.2.tgz", + "integrity": "sha512-1yI3/hf35wmlq66C8yOyrujQnel+v5l1Vop5Cl2I6ylyNTT1JbuUUnV3/41PzwTzcyDp/oF0jWE3HXvcH5AQOQ==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" @@ -8473,6 +7106,7 @@ "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" } @@ -8496,18 +7130,11 @@ "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/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter2": { "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", @@ -8515,15 +7142,22 @@ "dev": true, "license": "MIT" }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -8545,7 +7179,8 @@ "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/executable": { "version": "4.1.1", @@ -8560,136 +7195,11 @@ "node": ">=4" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -8785,7 +7295,8 @@ "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==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -8798,10 +7309,23 @@ "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.3.tgz", "integrity": "sha512-d9cEfo/WcOezgPLAC/8t8wGb6YOD6JTCPMw2QcG2nAdFmyY+9rTUizCTaGjIZAloWENTEUMAPpkUAIJJJ0i96A==" }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "node_modules/fast-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true }, "node_modules/faster-babel-types": { "version": "0.1.0", @@ -8836,14 +7360,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -8903,15 +7419,11 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -8957,7 +7469,8 @@ "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -8992,14 +7505,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/foreground-child": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", @@ -9047,24 +7552,13 @@ "node": ">=0.4.x" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/framer-motion": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.16.0.tgz", - "integrity": "sha512-oL2AWqLQuw0+CNEUa0sz3mWC/n3i147CckvpQn8bLRs30b+HxTxlRi0YR2FpHHhAbWV7DKjNdHU42KHLfBWh/g==", + "version": "11.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.0.tgz", + "integrity": "sha512-Vmjl5Al7XqKHzDFnVqzi1H9hzn5w4eN/bdqXTymVpU2UuMQuz9w6UPdsL9dFBeH7loBlnu4qcEXME+nvbkcIOw==", "license": "MIT", "dependencies": { - "motion-dom": "^11.16.0", + "motion-dom": "^11.16.4", "motion-utils": "^11.16.0", "tslib": "^2.4.0" }, @@ -9085,50 +7579,11 @@ } } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -9178,87 +7633,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gauge/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==", - "optional": true - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "optional": true - }, - "node_modules/gauge/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==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dependencies": { - "is-property": "^1.0.2" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9294,18 +7668,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -9345,14 +7712,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -9373,11 +7732,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -9412,6 +7766,14 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -9504,51 +7866,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/google-auth-library/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "deprecated": "Package is no longer maintained", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -9572,25 +7889,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "optional": true - }, - "node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/hammerjs": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", @@ -9669,70 +7967,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -10013,27 +8247,6 @@ "node": ">=16.9.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, "node_modules/html-url-attributes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz", @@ -10065,25 +8278,6 @@ "node": ">=8.0.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "optional": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -10099,50 +8293,20 @@ "node": ">=0.10" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, "engines": { "node": ">=8.12.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -10208,24 +8372,6 @@ "node": ">=4" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -10238,22 +8384,17 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10262,7 +8403,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -10302,38 +8444,6 @@ "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.12.2.tgz", "integrity": "sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==" }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "optional": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "engines": { - "node": "*" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -10448,11 +8558,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -10490,17 +8595,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-data-view": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", @@ -10540,41 +8634,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -10604,14 +8663,6 @@ "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -10664,12 +8715,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -10710,6 +8755,7 @@ "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" } @@ -10757,27 +8803,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -10825,6 +8850,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" }, @@ -10935,26 +8961,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -10970,15 +8976,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isomorphic-fetch": { "version": "3.0.0", @@ -10997,82 +8996,6 @@ "dev": true, "license": "MIT" }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/iterator.prototype": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", @@ -11104,854 +9027,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-cli/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==" - }, - "node_modules/jest-cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runtime/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-runtime/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==" - }, - "node_modules/jest-runtime/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/jiti": { "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", @@ -11994,122 +9069,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "optional": true - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", @@ -12122,14 +9081,6 @@ "node": ">=6" } }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -12151,7 +9102,8 @@ "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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -12185,13 +9137,11 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" }, "node_modules/jspdf": { "version": "2.5.2", @@ -12255,25 +9205,6 @@ "node": ">=4.0" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/jwt-decode": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", @@ -12292,22 +9223,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -12336,14 +9251,6 @@ "node": "> 0.8" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -12443,6 +9350,42 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/loader-utils/node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -12567,26 +9510,6 @@ "node": ">=8" } }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -12626,98 +9549,6 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/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==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-table": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", @@ -13007,7 +9838,8 @@ "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==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", @@ -13557,6 +10389,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -13589,25 +10422,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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" }, @@ -13632,199 +10456,12 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/monaco-editor": { "version": "0.52.0", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.0.tgz", @@ -13832,6 +10469,46 @@ "license": "MIT", "peer": true }, + "node_modules/monaco-editor-webpack-plugin": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz", + "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.2" + }, + "peerDependencies": { + "monaco-editor": ">= 0.31.0", + "webpack": "^4.5.0 || 5.x" + } + }, + "node_modules/monaco-languageserver-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/monaco-languageserver-types/-/monaco-languageserver-types-0.4.0.tgz", + "integrity": "sha512-QQ3BZiU5LYkJElGncSNb5AKoJ/LCs6YBMCJMAz9EA7v+JaOdn3kx2cXpPTcZfKA5AEsR0vc97sAw+5mdNhVBmw==", + "license": "MIT", + "dependencies": { + "monaco-types": "^0.1.0", + "vscode-languageserver-protocol": "^3.0.0", + "vscode-uri": "^3.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/monaco-marker-data-provider": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/monaco-marker-data-provider/-/monaco-marker-data-provider-1.2.4.tgz", + "integrity": "sha512-4DsPgsAqpTyUDs3humXRBPUJoihTv+L6v9aupQWD80X2YXaCXUd11mWYeSCYHuPgdUmjFaNWCEOjQ6ewf/QA1Q==", + "license": "MIT", + "dependencies": { + "monaco-types": "^0.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/monaco-sql-languages": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/monaco-sql-languages/-/monaco-sql-languages-0.12.2.tgz", @@ -13851,10 +10528,83 @@ "fast-plist": "^0.1.3" } }, + "node_modules/monaco-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/monaco-types/-/monaco-types-0.1.0.tgz", + "integrity": "sha512-aWK7SN9hAqNYi0WosPoMjenMeXJjwCxDibOqWffyQ/qXdzB/86xshGQobRferfmNz7BSNQ8GB0MD0oby9/5fTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/monaco-worker-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/monaco-worker-manager/-/monaco-worker-manager-2.0.1.tgz", + "integrity": "sha512-kdPL0yvg5qjhKPNVjJoym331PY/5JC11aPJXtCZNwWRvBr6jhkIamvYAyiY5P1AWFmNOy0aRDRoMdZfa71h8kg==", + "license": "MIT", + "peerDependencies": { + "monaco-editor": ">=0.30.0" + } + }, + "node_modules/monaco-yaml": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/monaco-yaml/-/monaco-yaml-5.2.3.tgz", + "integrity": "sha512-GEplKC+YYmS0TOlJdv0FzbqkDN/IG2FSwEw+95myECVxTlhty2amwERYjzvorvJXmIagP1grd3Lleq7aQEJpPg==", + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "dependencies": { + "jsonc-parser": "^3.0.0", + "monaco-languageserver-types": "^0.4.0", + "monaco-marker-data-provider": "^1.0.0", + "monaco-types": "^0.1.0", + "monaco-worker-manager": "^2.0.0", + "path-browserify": "^1.0.0", + "prettier": "^2.0.0", + "vscode-languageserver-textdocument": "^1.0.0", + "vscode-languageserver-types": "^3.0.0", + "vscode-uri": "^3.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + }, + "peerDependencies": { + "monaco-editor": ">=0.36" + } + }, + "node_modules/monaco-yaml/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/monaco-yaml/node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/motion-dom": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.16.0.tgz", - "integrity": "sha512-4bmEwajSdrljzDAYpu6ceEdtI4J5PH25fmN8YSx7Qxk6OMrC10CXM0D5y+VO/pFZjhmCvm2bGf7Rus482kwhzA==", + "version": "11.16.4", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.16.4.tgz", + "integrity": "sha512-2wuCie206pCiP2K23uvwJeci4pMFfyQKpWI0Vy6HrCTDzDCer4TsYtT7IVnuGbDeoIV37UuZiUr6SZMHEc1Vww==", "license": "MIT", "dependencies": { "motion-utils": "^11.16.0" @@ -13880,46 +10630,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mysql2": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", - "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", - "dependencies": { - "denque": "^2.0.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.6.3", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/mysql2/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mysql2/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -13931,25 +10641,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/named-placeholders": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", - "dependencies": { - "lru-cache": "^7.14.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -13967,59 +10658,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -14029,6 +10672,14 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/next": { "version": "14.2.22", "resolved": "https://registry.npmjs.org/next/-/next-14.2.22.tgz", @@ -14125,26 +10776,12 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true }, "node_modules/node-fetch": { "version": "2.7.0", @@ -14165,140 +10802,17 @@ } } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "optional": 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/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "license": "MIT" }, - "node_modules/node-ssh-forward": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/node-ssh-forward/-/node-ssh-forward-0.6.3.tgz", - "integrity": "sha512-iGO0N7zB66mo1sVF9kP6b81TGATMURfwWEUK6P2nimgG/jDR9Q7nHbMUFjNqd+VuWgMqWzURF1jRJwcVM2s8yg==", - "dependencies": { - "debug": "^4.1.1", - "ssh2": "^0.8.9" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "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" } @@ -14307,6 +10821,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -14314,27 +10829,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", - "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==" - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14343,53 +10837,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "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", @@ -14436,17 +10883,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", @@ -14511,17 +10947,6 @@ "node": ">= 0.4" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -14539,11 +10964,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, "node_modules/ohash": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", @@ -14554,6 +10974,7 @@ "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" } @@ -14562,6 +10983,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -14596,39 +11018,6 @@ "dev": true, "license": "MIT" }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -14663,7 +11052,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "devOptional": true, + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -14674,25 +11063,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", @@ -14700,9 +11070,10 @@ "license": "(MIT AND Zlib)" }, "node_modules/papaparse": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", - "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.1.tgz", + "integrity": "sha512-EuEKUhyxrHVozD7g3/ztsJn6qaKse8RPfR6buNB2dMJvdtXNhcw8jccVi/LxNEY3HVrV6GO6Z4OoeCG9Iy9wpA==", + "license": "MIT" }, "node_modules/parent-module": { "version": "1.0.1", @@ -14768,23 +11139,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" }, "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" } @@ -14793,6 +11158,7 @@ "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" } @@ -14801,6 +11167,7 @@ "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" } @@ -14846,31 +11213,6 @@ "integrity": "sha512-70UhA5+ZrnNgdfDBKXIGbMHpP+naTzfx9vPT4KwIdhtWWs0x6FWZRJQMXXhV2jcK0mxl28FA/2LPAKArNG058Q==", "license": "MIT" }, - "node_modules/peggy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/peggy/-/peggy-3.0.2.tgz", - "integrity": "sha512-n7chtCbEoGYRwZZ0i/O3t1cPr6o+d9Xx4Zwy2LYfzv0vjchMBU0tO+qYYyvZloBPcgRgzYvALzGWHe609JjEpg==", - "license": "MIT", - "dependencies": { - "commander": "^10.0.0", - "source-map-generator": "0.8.0" - }, - "bin": { - "peggy": "bin/peggy.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/peggy/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -14884,155 +11226,6 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "devOptional": true }, - "node_modules/pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", - "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-numeric": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", - "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" - }, - "node_modules/pg-types": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", - "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", - "dependencies": { - "pg-int8": "1.0.1", - "pg-numeric": "1.0.2", - "postgres-array": "~3.0.1", - "postgres-bytea": "~3.0.0", - "postgres-date": "~2.1.0", - "postgres-interval": "^3.0.0", - "postgres-range": "^1.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pg/node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pg/node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pg/node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pg/node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pg/node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pg/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -15043,6 +11236,7 @@ "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" }, @@ -15063,6 +11257,7 @@ "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" } @@ -15076,65 +11271,6 @@ "@napi-rs/nice": "^1.0.1" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/playwright": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", @@ -15187,14 +11323,6 @@ "node": ">=4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -15360,50 +11488,10 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postgres-array": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", - "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", - "engines": { - "node": ">=12" - } - }, - "node_modules/postgres-bytea": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", - "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", - "dependencies": { - "obuf": "~1.1.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postgres-date": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", - "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/postgres-interval": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", - "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/postgres-range": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", - "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==" - }, "node_modules/posthog-js": { - "version": "1.204.0", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.204.0.tgz", - "integrity": "sha512-wVt948wKPPztCZ3OeDq8y0dtaPbhbY8vFuEVBUNHOn7PohbTXr7HZ4CNhH8fXgFkx5COEzz/20wWJmEsSU5oCA==", + "version": "1.207.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.207.0.tgz", + "integrity": "sha512-Sx+xamhg1/iKGAtUNh3uAUtAAza4j/yBhxcfUxfqR++WrZdw0V6nmh7LSfVNl7+QVl2qmiPSoZA7z+5ojaWDDQ==", "license": "MIT", "dependencies": { "core-js": "^3.38.1", @@ -15422,31 +11510,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15484,9 +11547,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.9.tgz", - "integrity": "sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==", + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.10.tgz", + "integrity": "sha512-ndj2WLDaMzACnr1gAYZiZZLs5ZdOeBYgOsbBmHj3nvW/6q8h8PymsXiEnKvj/9qgCCAoHyvLOisoQdIcsDvIgw==", "license": "MIT", "engines": { "node": ">=14.21.3" @@ -15496,7 +11559,7 @@ "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", - "@zackad/prettier-plugin-twig-melody": "*", + "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", @@ -15523,7 +11586,7 @@ "@trivago/prettier-plugin-sort-imports": { "optional": true }, - "@zackad/prettier-plugin-twig-melody": { + "@zackad/prettier-plugin-twig": { "optional": true }, "prettier-plugin-astro": { @@ -15574,25 +11637,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, "node_modules/pretty-ms": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", @@ -15626,37 +11670,6 @@ "node": ">= 0.6.0" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -15687,25 +11700,16 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", @@ -15750,11 +11754,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15784,6 +11783,17 @@ "performance-now": "^2.1.0" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -17155,100 +13165,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -17298,14 +13214,6 @@ "node": ">=0.10.0" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dependencies": { - "esprima": "~4.0.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -17438,41 +13346,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -17591,27 +13464,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -17630,15 +13482,16 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", @@ -17661,25 +13514,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -17696,12 +13530,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -17723,35 +13551,6 @@ "dev": true, "license": "ISC" }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -17765,7 +13564,8 @@ "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true }, "node_modules/rgbcolor": { "version": "1.0.1", @@ -17781,6 +13581,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -17796,6 +13597,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17855,14 +13657,6 @@ "postcss": "^8.4.38" } }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17918,6 +13712,7 @@ "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", @@ -17933,14 +13728,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", @@ -17961,282 +13748,13 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true }, "node_modules/sass": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz", - "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz", + "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -18284,17 +13802,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -18305,6 +13812,26 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/screenfull": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", @@ -18356,15 +13883,16 @@ "semver": "bin/semver.js" } }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } }, "node_modules/set-cookie-parser": { "version": "2.6.0", @@ -18403,24 +13931,11 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "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" }, @@ -18432,16 +13947,11 @@ "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/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "optional": true - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -18472,49 +13982,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "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": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -18530,6 +13997,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -18549,116 +14017,6 @@ "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/socket.io": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", @@ -18736,34 +14094,6 @@ "node": ">=10.0.0" } }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "optional": true, - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -18772,15 +14102,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-generator": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz", - "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 10" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -18790,24 +14111,28 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/space-separated-tokens": { "version": "2.0.2", @@ -18818,34 +14143,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==" - }, "node_modules/split-pane-react": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/split-pane-react/-/split-pane-react-0.1.3.tgz", @@ -18855,189 +14152,6 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "optional": true - }, - "node_modules/sql-language-server": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/sql-language-server/-/sql-language-server-1.7.1.tgz", - "integrity": "sha512-HiS8siZQJD9EzkMhY7Jnz3XBbu/rZ99VSmCJE0+gF2CHEtlQCeA+X4Dee0BNjpbJ3dVFMAXmEw4tsM5Y6GbU0w==", - "license": "MIT", - "dependencies": { - "@google-cloud/bigquery": "^5.9.0", - "@joe-re/sql-parser": "^1.7.1", - "@types/pg": "^8.6.6", - "@types/yargs": "^17.0.8", - "cardinal": "^2.1.1", - "jest": "^26.0.1", - "log4js": "^6.2.1", - "mysql2": "^2.3.0", - "node-ssh-forward": "^0.6.3", - "pg": "^8.9.0", - "sqlint": "^1.7.1", - "sqlite3": "^5.0.3", - "vscode-languageclient": "^6.1.3", - "vscode-languageserver": "8.0.0-next.8", - "vscode-languageserver-protocol": "^3.15.3", - "vscode-languageserver-textdocument": "^1.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "sql-language-server": "npm_bin/cli.js" - } - }, - "node_modules/sqlint": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/sqlint/-/sqlint-1.7.1.tgz", - "integrity": "sha512-13zRFQR+Cf1cJiGLgWzl/X1wKVR2zOAMfTLYYeTsGIb9KPmrPbYGW+vqSvNvt2186LiNHqUuq3mqnScCMaDclA==", - "license": "MIT", - "dependencies": { - "@joe-re/sql-parser": "^1.7.1", - "ajv": "^6.12.2", - "chalk": "^4.0.0", - "js-yaml": "^3.14.0", - "yargs": "^17.3.1" - }, - "bin": { - "sqlint": "bin/cli.js" - } - }, - "node_modules/sqlint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sqlint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sqlint/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/sqlite3": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", - "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^7.0.0", - "prebuild-install": "^7.1.1", - "tar": "^6.1.11" - }, - "optionalDependencies": { - "node-gyp": "8.x" - }, - "peerDependencies": { - "node-gyp": "8.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } - } - }, - "node_modules/sqlstring": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ssh2": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz", - "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==", - "dependencies": { - "ssh2-streams": "~0.4.10" - }, - "engines": { - "node": ">=5.2.0" - } - }, - "node_modules/ssh2-streams": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz", - "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==", - "dependencies": { - "asn1": "~0.2.0", - "bcrypt-pbkdf": "^1.0.2", - "streamsearch": "~0.1.2" - }, - "engines": { - "node": ">=5.2.0" - } - }, - "node_modules/ssh2-streams/node_modules/streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -19071,49 +14185,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, "node_modules/stackblur-canvas": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", @@ -19128,41 +14199,6 @@ "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -19175,32 +14211,6 @@ "node": ">= 0.4" } }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -19214,18 +14224,6 @@ "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -19423,26 +14421,11 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "engines": { "node": ">=6" } @@ -19459,11 +14442,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, "node_modules/style-to-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.7.tgz", @@ -19548,18 +14526,6 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.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", @@ -19580,11 +14546,6 @@ "node": ">=12.0.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", @@ -19657,174 +14618,164 @@ "node": ">=6" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "node_modules/terser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/teeny-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", - "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/teeny-request/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/teeny-request/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "terser": "bin/terser" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/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, + "license": "MIT", + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/text-segmentation": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", @@ -19860,11 +14811,6 @@ "node": ">=0.8" } }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, "node_modules/throttle-debounce": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", @@ -19925,11 +14871,6 @@ "node": ">=14.14" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -19939,46 +14880,11 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.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" }, @@ -19986,29 +14892,6 @@ "node": ">=8.0" } }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -20034,36 +14917,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -20583,6 +15436,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -20593,7 +15447,8 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -20607,18 +15462,11 @@ "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==", - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -20759,38 +15607,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -20866,14 +15682,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unplugin": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.0.tgz", @@ -20887,55 +15695,6 @@ "node": ">=14.0.0" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -21007,6 +15766,7 @@ "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" } @@ -21015,33 +15775,11 @@ "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/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/use-merge-value": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-merge-value/-/use-merge-value-1.2.0.tgz", @@ -21053,7 +15791,8 @@ "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==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utility-types": { "version": "3.11.0", @@ -21072,9 +15811,9 @@ } }, "node_modules/uuid": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.4.tgz", - "integrity": "sha512-IzL6VtTTYcAhA/oghbFJ1Dkmqev+FpQWnCBaKq/gUluLxliWvO8DPFWfIviRmYbtaavtSQe4WBL++rFjdcGWEg==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -21084,36 +15823,6 @@ "uuid": "dist/esm/bin/uuid" } }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -21185,59 +15894,6 @@ "node": ">=14.0.0" } }, - "node_modules/vscode-languageclient": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.4.tgz", - "integrity": "sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA==", - "dependencies": { - "semver": "^6.3.0", - "vscode-languageserver-protocol": "3.15.3" - }, - "engines": { - "vscode": "^1.41.0" - } - }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/vscode-languageclient/node_modules/vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient/node_modules/vscode-languageserver-protocol": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz", - "integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==", - "dependencies": { - "vscode-jsonrpc": "^5.0.1", - "vscode-languageserver-types": "3.15.1" - } - }, - "node_modules/vscode-languageclient/node_modules/vscode-languageserver-types": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", - "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" - }, - "node_modules/vscode-languageserver": { - "version": "8.0.0-next.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.0-next.8.tgz", - "integrity": "sha512-Gq0uqKbOgw7YNwPxMoNCeh7mHKMhG5j6EuoSh+w5pnKd7Eu9a74cagqf9aZDVFWW6GRpqR/Z+1o6EXqDK+g2Tg==", - "dependencies": { - "vscode-languageserver-protocol": "3.17.0-next.14" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, "node_modules/vscode-languageserver-protocol": { "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", @@ -21257,54 +15913,25 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, - "node_modules/vscode-languageserver/node_modules/vscode-jsonrpc": { - "version": "8.0.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz", - "integrity": "sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw==", - "engines": { - "node": ">=14.0.0" - } + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" }, - "node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol": { - "version": "3.17.0-next.14", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz", - "integrity": "sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA==", + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "vscode-jsonrpc": "8.0.0-next.6", - "vscode-languageserver-types": "3.17.0-next.7" - } - }, - "node_modules/vscode-languageserver/node_modules/vscode-languageserver-types": { - "version": "3.17.0-next.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz", - "integrity": "sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" + "node": ">=10.13.0" } }, "node_modules/web-namespaces": { @@ -21321,12 +15948,63 @@ "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.2.tgz", "integrity": "sha512-nYfoOqb4EmElljyXU2qdeE76KsvoHdftQKY4DzA9Aw8DervCg2bG634pHLrJ/d6+B4mE3nWTSJv8Mo7B2mbZkw==" }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, "engines": { - "node": ">=10.4" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" } }, "node_modules/webpack-virtual-modules": { @@ -21335,12 +16013,30 @@ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "license": "MIT" }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "iconv-lite": "0.4.24" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" } }, "node_modules/whatwg-fetch": { @@ -21349,11 +16045,6 @@ "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", "license": "MIT" }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -21372,6 +16063,7 @@ "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" }, @@ -21442,11 +16134,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", @@ -21466,35 +16153,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -21633,7 +16291,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -21681,16 +16340,6 @@ "node": ">=8" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "node_modules/xmlhttprequest-ssl": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", @@ -21717,11 +16366,6 @@ "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==" - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/web/package.json b/web/package.json index 8ebe9b586..a0b746d5d 100644 --- a/web/package.json +++ b/web/package.json @@ -17,7 +17,7 @@ "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", - "@faker-js/faker": "^9.3.0", + "@faker-js/faker": "^9.4.0", "@fluentui/react-context-selector": "^9.1.71", "@manufac/echarts-simple-transform": "^2.0.11", "@million/lint": "^1.0.14", @@ -25,11 +25,11 @@ "@supabase/auth-helpers-nextjs": "^0.10.0", "@supabase/auth-helpers-react": "^0.5.0", "@supabase/ssr": "^0.5.2", - "@supabase/supabase-js": "^2.47.10", - "@tanstack/react-query": "^5.62.16", + "@supabase/supabase-js": "^2.47.14", + "@tanstack/react-query": "^5.64.1", "@vercel/speed-insights": "^1.1.0", "ahooks": "^3.8.4", - "antd": "^5.23.0", + "antd": "5.23.0", "antd-style": "^3.7.1", "axios": "^1.7.9", "canvas-confetti": "^1.9.3", @@ -56,7 +56,7 @@ "echarts-stat": "^1.2.0", "email-validator": "^2.0.4", "font-color-contrast": "^11.1.0", - "framer-motion": "^11.16.0", + "framer-motion": "^11.18.0", "html2canvas": "^1.4.1", "immer": "^10.1.1", "js-cookie": "^3.0.5", @@ -66,15 +66,16 @@ "material-symbols": "^0.27.2", "monaco-sql-languages": "^0.12.2", "monaco-themes": "^0.4.4", + "monaco-yaml": "^5.2.3", "next": "14.2.22", "next-themes": "^0.4.4", "next-transpile-modules": "^10.0.1", - "papaparse": "^5.4.1", + "papaparse": "^5.5.1", "patternomaly": "^1.3.2", "pluralize": "^8.0.0", - "posthog-js": "^1.204.0", + "posthog-js": "^1.206.1", "prettier": "^3.4.2", - "prettier-plugin-tailwindcss": "^0.6.9", + "prettier-plugin-tailwindcss": "^0.6.10", "rc-virtual-list": "^3.17.0", "react": "^18", "react-chartjs-2": "^5.3.0", @@ -95,10 +96,9 @@ "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.0", "split-pane-react": "^0.1.3", - "sql-language-server": "^1.7.1", "tailwind-merge": "^2.6.0", "utility-types": "^3.11.0", - "uuid": "^11.0.4" + "uuid": "^11.0.5" }, "devDependencies": { "@types/canvas-confetti": "^1.9.0", @@ -118,9 +118,10 @@ "eslint": "^8", "eslint-config-next": "14.2.3", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "^5.2.2", + "monaco-editor-webpack-plugin": "^7.1.0", "postcss": "~8", - "sass": "^1.83.1", + "sass": "^1.83.4", "tailwindcss": "^3.4.17", "typescript": "^5" }, diff --git a/web/src/api/busterv2/dataset_groups/queryRequests.ts b/web/src/api/busterv2/dataset_groups/queryRequests.ts index d629d0cc7..87f7a0dbe 100644 --- a/web/src/api/busterv2/dataset_groups/queryRequests.ts +++ b/web/src/api/busterv2/dataset_groups/queryRequests.ts @@ -6,8 +6,10 @@ import { getDatasetGroup, updateDatasetGroup } from './requests'; +import { updateDatasetDatasetGroups } from '../datasets'; import { useQueryClient } from '@tanstack/react-query'; import { useMemoizedFn } from 'ahooks'; +import { LIST_DATASET_GROUPS_QUERY_KEY } from '../datasets/permissions/config'; export const useListDatasetGroups = () => { const queryFn = useMemoizedFn(() => listDatasetGroups()); @@ -24,13 +26,9 @@ export const useDeleteDatasetGroup = () => { queryClient.invalidateQueries({ queryKey: ['dataset_groups'] }); return res; }); - const onSuccess = useMemoizedFn(() => { - queryClient.invalidateQueries({ queryKey: ['dataset_groups'] }); - }); return useCreateReactMutation({ - mutationFn, - onSuccess + mutationFn }); }; @@ -59,19 +57,18 @@ export const useCreateDatasetGroup = (datasetId?: string) => { const queryClient = useQueryClient(); const mutationFn = useMemoizedFn(async (data: Parameters[0]) => { const res = await createDatasetGroup(data); - queryClient.invalidateQueries({ queryKey: ['dataset_groups'] }); if (datasetId) { - queryClient.invalidateQueries({ queryKey: ['dataset_groups', datasetId] }); - queryClient.invalidateQueries({ queryKey: ['list_dataset_groups', datasetId] }); + await updateDatasetDatasetGroups({ + dataset_id: datasetId, + groups: [{ id: res.id, assigned: true }] + }); + queryClient.invalidateQueries({ queryKey: [LIST_DATASET_GROUPS_QUERY_KEY, datasetId] }); + queryClient.invalidateQueries({ queryKey: ['dataset_groups'] }); } return res; }); - const onSuccess = useMemoizedFn(() => { - queryClient.invalidateQueries({ queryKey: ['dataset_groups'] }); - }); return useCreateReactMutation({ - mutationFn, - onSuccess + mutationFn }); }; diff --git a/web/src/api/busterv2/dataset_groups/requests.ts b/web/src/api/busterv2/dataset_groups/requests.ts index 4b6dd3197..52c70bea5 100644 --- a/web/src/api/busterv2/dataset_groups/requests.ts +++ b/web/src/api/busterv2/dataset_groups/requests.ts @@ -1,8 +1,8 @@ import { mainApi } from '../../buster'; -import { ListDatasetGroupsResponse } from '../datasets'; +import { DatasetGroup } from './responseInterfaces'; export const listDatasetGroups = async () => { - return mainApi.get(`/dataset_groups`).then((res) => res.data); + return mainApi.get(`/dataset_groups`).then((res) => res.data); }; export const createDatasetGroup = async (data: { name: string }) => { diff --git a/web/src/api/busterv2/datasets/permissions/config.ts b/web/src/api/busterv2/datasets/permissions/config.ts index 5efa1881c..63a5d230d 100644 --- a/web/src/api/busterv2/datasets/permissions/config.ts +++ b/web/src/api/busterv2/datasets/permissions/config.ts @@ -1 +1,4 @@ export const GET_PERMISSIONS_OVERVIEW = (datasetId: string) => `/datasets/${datasetId}/overview`; + +//QUERY KEYS +export const LIST_DATASET_GROUPS_QUERY_KEY = 'list_dataset_groups'; diff --git a/web/src/api/busterv2/datasets/permissions/index.ts b/web/src/api/busterv2/datasets/permissions/index.ts index ef82ce4b8..3f66ae8c3 100644 --- a/web/src/api/busterv2/datasets/permissions/index.ts +++ b/web/src/api/busterv2/datasets/permissions/index.ts @@ -1,3 +1,4 @@ export * from './requests'; export * from './queryRequests'; export * from './responseInterfaces'; +export * from './config'; diff --git a/web/src/api/busterv2/datasets/permissions/queryRequests.ts b/web/src/api/busterv2/datasets/permissions/queryRequests.ts index 79347a0be..7087eb24a 100644 --- a/web/src/api/busterv2/datasets/permissions/queryRequests.ts +++ b/web/src/api/busterv2/datasets/permissions/queryRequests.ts @@ -2,19 +2,23 @@ import { useCreateReactQuery, useCreateReactMutation } from '@/api/createReactQu import { getDatasetPermissionsOverview, listDatasetDatasetGroups, - listPermissionGroups, - listPermissionUsers, - updateDatasetGroups, - updatePermissionGroups, - updatePermissionUsers + listIndividualDatasetPermissionGroups, + updateDatasetPermissionGroups, + updateDatasetDatasetGroups, + updateDatasetPermissionUsers, + listDatasetPermissionUsers } from './requests'; import { useMemoizedFn } from 'ahooks'; import { QueryClient, useQueryClient } from '@tanstack/react-query'; import { getDatasetPermissionsOverview_server } from './serverRequests'; import { ListPermissionUsersResponse } from './responseInterfaces'; +import { PERMISSION_GROUP_QUERY_KEY } from '../../permission_groups'; +import { LIST_DATASET_GROUPS_QUERY_KEY } from './config'; export const useGetDatasetPermissionsOverview = (dataset_id: string) => { - const queryFn = useMemoizedFn(() => getDatasetPermissionsOverview({ dataset_id })); + const queryFn = useMemoizedFn(() => { + return getDatasetPermissionsOverview({ dataset_id }); + }); return useCreateReactQuery({ queryKey: ['dataset_permissions_overview', dataset_id], @@ -34,27 +38,55 @@ export const prefetchGetDatasetPermissionsOverview = async ( return queryClient; }; -export const useListPermissionGroups = (dataset_id: string) => { - const queryFn = useMemoizedFn(() => listPermissionGroups({ dataset_id })); +export const useDatasetListPermissionGroups = (dataset_id: string) => { + const queryFn = useMemoizedFn(() => { + return listIndividualDatasetPermissionGroups({ dataset_id }); + }); return useCreateReactQuery({ - queryKey: ['list_permission_groups', dataset_id], + queryKey: [PERMISSION_GROUP_QUERY_KEY, dataset_id], queryFn, staleTime: 1000 * 5 // 5 seconds }); }; -export const useListDatasetDatasetGroups = (dataset_id: string) => { +export const useDatasetUpdatePermissionGroups = (dataset_id: string) => { + const queryClient = useQueryClient(); + const mutationFn = useMemoizedFn((groups: { id: string; assigned: boolean }[]) => { + const keyedChanges: Record = {}; + groups.forEach(({ id, assigned }) => { + keyedChanges[id] = { id, assigned }; + }); + queryClient.setQueryData( + [PERMISSION_GROUP_QUERY_KEY, dataset_id], + (oldData: ListPermissionUsersResponse[]) => { + return oldData?.map((group) => { + const updatedGroup = keyedChanges[group.id]; + if (updatedGroup) return { ...group, assigned: updatedGroup.assigned }; + return group; + }); + } + ); + + return updateDatasetPermissionGroups({ dataset_id, groups }); + }); + + return useCreateReactMutation({ + mutationFn + }); +}; + +export const useDatasetListDatasetGroups = (dataset_id: string) => { const queryFn = useMemoizedFn(() => listDatasetDatasetGroups({ dataset_id })); return useCreateReactQuery({ - queryKey: ['list_dataset_groups', dataset_id], + queryKey: [LIST_DATASET_GROUPS_QUERY_KEY, dataset_id], queryFn }); }; -export const useListPermissionUsers = (dataset_id: string) => { - const queryFn = useMemoizedFn(() => listPermissionUsers({ dataset_id })); +export const useDatasetListPermissionUsers = (dataset_id: string) => { + const queryFn = useMemoizedFn(() => listDatasetPermissionUsers({ dataset_id })); return useCreateReactQuery({ queryKey: ['list_permission_users', dataset_id], @@ -62,7 +94,7 @@ export const useListPermissionUsers = (dataset_id: string) => { }); }; -export const useUpdatePermissionGroups = (dataset_id: string) => { +export const useDatasetUpdateDatasetGroups = (dataset_id: string) => { const queryClient = useQueryClient(); const mutationFn = useMemoizedFn((groups: { id: string; assigned: boolean }[]) => { const keyedChanges: Record = {}; @@ -70,7 +102,7 @@ export const useUpdatePermissionGroups = (dataset_id: string) => { keyedChanges[id] = { id, assigned }; }); queryClient.setQueryData( - ['list_permission_groups', dataset_id], + [LIST_DATASET_GROUPS_QUERY_KEY, dataset_id], (oldData: ListPermissionUsersResponse[]) => { return oldData?.map((group) => { const updatedGroup = keyedChanges[group.id]; @@ -79,8 +111,7 @@ export const useUpdatePermissionGroups = (dataset_id: string) => { }); } ); - - return updatePermissionGroups({ dataset_id, groups }); + return updateDatasetDatasetGroups({ dataset_id, groups }); }); return useCreateReactMutation({ @@ -88,32 +119,7 @@ export const useUpdatePermissionGroups = (dataset_id: string) => { }); }; -export const useUpdateDatasetGroups = (dataset_id: string) => { - const queryClient = useQueryClient(); - const mutationFn = useMemoizedFn((groups: { id: string; assigned: boolean }[]) => { - const keyedChanges: Record = {}; - groups.forEach(({ id, assigned }) => { - keyedChanges[id] = { id, assigned }; - }); - queryClient.setQueryData( - ['list_dataset_groups', dataset_id], - (oldData: ListPermissionUsersResponse[]) => { - return oldData?.map((group) => { - const updatedGroup = keyedChanges[group.id]; - if (updatedGroup) return { ...group, assigned: updatedGroup.assigned }; - return group; - }); - } - ); - return updateDatasetGroups({ dataset_id, groups }); - }); - - return useCreateReactMutation({ - mutationFn - }); -}; - -export const useUpdatePermissionUsers = (dataset_id: string) => { +export const useDatasetUpdatePermissionUsers = (dataset_id: string) => { const queryClient = useQueryClient(); const mutationFn = useMemoizedFn((users: { id: string; assigned: boolean }[]) => { const keyedChanges: Record = {}; @@ -130,7 +136,7 @@ export const useUpdatePermissionUsers = (dataset_id: string) => { }); } ); - return updatePermissionUsers({ dataset_id, users }); + return updateDatasetPermissionUsers({ dataset_id, users }); }); return useCreateReactMutation({ diff --git a/web/src/api/busterv2/datasets/permissions/requests.ts b/web/src/api/busterv2/datasets/permissions/requests.ts index 9f0ff7548..5309b2d77 100644 --- a/web/src/api/busterv2/datasets/permissions/requests.ts +++ b/web/src/api/busterv2/datasets/permissions/requests.ts @@ -7,7 +7,7 @@ import { } from './responseInterfaces'; import * as config from './config'; -export const listPermissionGroups = async ({ +export const listIndividualDatasetPermissionGroups = async ({ dataset_id }: { dataset_id: string; @@ -23,7 +23,7 @@ export const listDatasetDatasetGroups = async ({ return await mainApi.get(`/datasets/${dataset_id}/dataset_groups`).then((res) => res.data); }; -export const listPermissionUsers = async ({ +export const listDatasetPermissionUsers = async ({ dataset_id }: { dataset_id: string; @@ -31,7 +31,7 @@ export const listPermissionUsers = async ({ return await mainApi.get(`/datasets/${dataset_id}/users`).then((res) => res.data); }; -export const updatePermissionUsers = async ({ +export const updateDatasetPermissionUsers = async ({ dataset_id, users }: { @@ -44,7 +44,7 @@ export const updatePermissionUsers = async ({ return await mainApi.put(`/datasets/${dataset_id}/users`, users); }; -export const updatePermissionGroups = async ({ +export const updateDatasetPermissionGroups = async ({ dataset_id, groups }: { @@ -59,7 +59,7 @@ export const updatePermissionGroups = async ({ return await mainApi.put(`/datasets/${dataset_id}/permission_groups`, groups); }; -export const updateDatasetGroups = async ({ +export const updateDatasetDatasetGroups = async ({ dataset_id, groups }: { diff --git a/web/src/api/busterv2/datasets/queryRequests.ts b/web/src/api/busterv2/datasets/queryRequests.ts index 9f6522ffb..ed23e8d53 100644 --- a/web/src/api/busterv2/datasets/queryRequests.ts +++ b/web/src/api/busterv2/datasets/queryRequests.ts @@ -78,28 +78,14 @@ export const prefetchGetDatasetMetadata = async ( export const useCreateDataset = () => { const queryClient = useQueryClient(); - const mutationFn = useMemoizedFn(() => createDataset()); - const onSuccess = useMemoizedFn((newDataset: unknown) => { - queryClient.setQueryData(['datasets', {}], (oldData) => { - // const newListItem: BusterDatasetListItem = { - // ...newDataset, - // name: newDataset.name, - // created_at: newDataset.created_at, - // updated_at: newDataset.updated_at, - // definition: newDataset.definition, - // owner: '', - // }; - return oldData; - }); - }); - const onError = useMemoizedFn((error: any) => { - console.error('Failed to create dataset:', error); + + const onSuccess = useMemoizedFn(() => { + queryClient.invalidateQueries({ queryKey: ['datasets', {}] }); }); return useCreateReactMutation({ - mutationFn, - onSuccess, - onError + mutationFn: createDataset, + onSuccess }); }; @@ -113,7 +99,6 @@ export const useDeployDataset = () => { mutationFn, onSuccess: (data, variables, context) => { queryClient.invalidateQueries({ queryKey: ['datasets', {}] }); - console.log(variables, context); } }); }; diff --git a/web/src/api/busterv2/datasets/requests.ts b/web/src/api/busterv2/datasets/requests.ts index 068721147..3481f9f85 100644 --- a/web/src/api/busterv2/datasets/requests.ts +++ b/web/src/api/busterv2/datasets/requests.ts @@ -30,8 +30,11 @@ export const getDatasetDataSample = async (datasetId: string): Promise res.data); }; -export const createDataset = async (): Promise => { - return await mainApi.post(`/datasets`).then((res) => res.data); +export const createDataset = async (params: { + name: string; + data_source_id: string; +}): Promise => { + return await mainApi.post(`/datasets`, params).then((res) => res.data); }; export const deleteDataset = async (datasetId: string): Promise => { diff --git a/web/src/api/busterv2/index.ts b/web/src/api/busterv2/index.ts index 89352a7c5..86272634e 100644 --- a/web/src/api/busterv2/index.ts +++ b/web/src/api/busterv2/index.ts @@ -9,3 +9,4 @@ export * from './api_keys'; export * from './sql'; export * from './datasets'; export * from './dataset_groups'; +export * from './permission_groups'; diff --git a/web/src/api/busterv2/permission_groups/config.ts b/web/src/api/busterv2/permission_groups/config.ts new file mode 100644 index 000000000..d9b85c7e8 --- /dev/null +++ b/web/src/api/busterv2/permission_groups/config.ts @@ -0,0 +1 @@ +export const PERMISSION_GROUP_QUERY_KEY = 'permission_groups'; diff --git a/web/src/api/busterv2/permission_groups/index.ts b/web/src/api/busterv2/permission_groups/index.ts index d3f48297f..f17b4e619 100644 --- a/web/src/api/busterv2/permission_groups/index.ts +++ b/web/src/api/busterv2/permission_groups/index.ts @@ -1,2 +1,4 @@ export * from './requests'; export * from './responseInterfaces'; +export * from './queryRequests'; +export * from './config'; diff --git a/web/src/api/busterv2/permission_groups/queryRequests.ts b/web/src/api/busterv2/permission_groups/queryRequests.ts index 02d5ab25b..75a69206f 100644 --- a/web/src/api/busterv2/permission_groups/queryRequests.ts +++ b/web/src/api/busterv2/permission_groups/queryRequests.ts @@ -1,19 +1,70 @@ import { useCreateReactQuery, useCreateReactMutation } from '@/api/createReactQuery'; import { getPermissionGroup, - listPermissionGroups, createPermissionGroup, deletePermissionGroup, - updatePermissionGroup + listAllPermissionGroups, + updatePermissionGroups } from './requests'; import { useMemoizedFn } from 'ahooks'; import { useQueryClient } from '@tanstack/react-query'; -import { useMemo } from 'react'; +import { GetPermissionGroupResponse } from './responseInterfaces'; +import isEmpty from 'lodash/isEmpty'; +import { PERMISSION_GROUP_QUERY_KEY } from './config'; +import { ListPermissionGroupsResponse, updateDatasetPermissionGroups } from '../datasets'; -export const useListPermissionGroups = () => { +export const useListAllPermissionGroups = () => { return useCreateReactQuery({ queryKey: ['permission_groups'], - queryFn: listPermissionGroups + queryFn: listAllPermissionGroups + }); +}; + +export const useCreatePermissionGroup = () => { + const queryClient = useQueryClient(); + + const mutationFn = useMemoizedFn( + async ({ + name, + dataset_id + }: Parameters[0] & { dataset_id?: string }) => { + const res = await createPermissionGroup({ name }); + + if (dataset_id && res?.id) { + await updateDatasetPermissionGroups({ + dataset_id, + groups: [{ id: res.id, assigned: true }] + }); + } + + queryClient.setQueryData( + [PERMISSION_GROUP_QUERY_KEY], + (oldData: GetPermissionGroupResponse[]) => (isEmpty(oldData) ? [res] : [...oldData, res]) + ); + + if (dataset_id) { + queryClient.setQueryData( + [PERMISSION_GROUP_QUERY_KEY, dataset_id], + (oldData: ListPermissionGroupsResponse[]) => { + const newItem: ListPermissionGroupsResponse = { + id: res.id, + name: res.name, + assigned: !!dataset_id + }; + if (isEmpty(oldData)) { + return [newItem]; + } + return [...oldData, newItem]; + } + ); + } + + return res; + } + ); + + return useCreateReactMutation({ + mutationFn }); }; @@ -25,25 +76,13 @@ export const useGetPermissionGroup = (permissionGroupId: string) => { }); }; -export const useCreatePermissionGroup = (dataset_id?: string) => { - const queryClient = useQueryClient(); - return useCreateReactMutation({ - mutationFn: createPermissionGroup, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['permission_groups'] }); - if (dataset_id) { - queryClient.invalidateQueries({ queryKey: ['list_permission_groups', dataset_id] }); - } - } - }); -}; - export const useDeletePermissionGroup = () => { const queryClient = useQueryClient(); return useCreateReactMutation({ mutationFn: deletePermissionGroup, - onSuccess: () => { + onSuccess: (data, variables, context) => { queryClient.invalidateQueries({ queryKey: ['permission_groups'] }); + //TODO delete the permission group from the dataset } }); }; @@ -51,9 +90,9 @@ export const useDeletePermissionGroup = () => { export const useUpdatePermissionGroup = () => { const queryClient = useQueryClient(); return useCreateReactMutation({ - mutationFn: updatePermissionGroup, + mutationFn: updatePermissionGroups, onSuccess: (data, varaiables, context) => { - // queryClient.invalidateQueries({ queryKey: ['permission_groups'] }); + // TODO update the permission group in the dataset } }); }; diff --git a/web/src/api/busterv2/permission_groups/requests.ts b/web/src/api/busterv2/permission_groups/requests.ts index 48c848717..e428459d1 100644 --- a/web/src/api/busterv2/permission_groups/requests.ts +++ b/web/src/api/busterv2/permission_groups/requests.ts @@ -1,8 +1,10 @@ import { mainApi } from '../../buster'; -import { GetPermissionGroupResponse } from './responseInterfaces'; +import { CreatePermissionGroupResponse, GetPermissionGroupResponse } from './responseInterfaces'; -export const listPermissionGroups = async (): Promise => { - return await mainApi.get(`/permission_groups`).then((res) => res.data); +export const listAllPermissionGroups = async (): Promise => { + return await mainApi + .get(`/permission_groups`) + .then((res) => res.data); }; export const getPermissionGroup = async ({ @@ -13,7 +15,7 @@ export const getPermissionGroup = async ({ return await mainApi.get(`/permission_groups/${id}`).then((res) => res.data); }; -export const updatePermissionGroup = async ({ +export const updatePermissionGroups = async ({ id, data }: { @@ -27,6 +29,12 @@ export const deletePermissionGroup = async ({ id }: { id: string }): Promise res.data); }; -export const createPermissionGroup = async (data: { name: string }): Promise => { - return await mainApi.post(`/permission_groups`, data).then((res) => res.data); +export const createPermissionGroup = async ({ + name +}: { + name: string; +}): Promise => { + return await mainApi + .post(`/permission_groups`, { name }) + .then((res) => res.data); }; diff --git a/web/src/api/busterv2/permission_groups/responseInterfaces.ts b/web/src/api/busterv2/permission_groups/responseInterfaces.ts index 53cd0fbc8..9ff201b77 100644 --- a/web/src/api/busterv2/permission_groups/responseInterfaces.ts +++ b/web/src/api/busterv2/permission_groups/responseInterfaces.ts @@ -1 +1,11 @@ -export interface GetPermissionGroupResponse {} +export interface GetPermissionGroupResponse { + created_at: string; + created_by: string; + id: string; + name: string; + organization_id: string; + updated_at: string; + updated_by: string; //THIS IS THE USER ID +} + +export interface CreatePermissionGroupResponse extends GetPermissionGroupResponse {} diff --git a/web/src/api/createInstance.ts b/web/src/api/createInstance.ts index b534aa486..bb82aff40 100644 --- a/web/src/api/createInstance.ts +++ b/web/src/api/createInstance.ts @@ -2,6 +2,7 @@ import { BusterRoutes } from '@/routes/busterRoutes/busterRoutes'; import axios, { AxiosError } from 'axios'; import { rustErrorHandler } from './buster/errors'; import { AxiosRequestHeaders } from 'axios'; +import { isServer } from '@tanstack/react-query'; import { ReadonlyRequestCookies } from 'next/dist/server/web/spec-extension/adapters/request-cookies'; const AXIOS_TIMEOUT = 120000; // 2 minutes @@ -22,7 +23,7 @@ export const createInstance = (baseURL: string) => { (error: AxiosError) => { // console.error(error); //Redirect to login if 401 unauthorized error - if (error.status === 401 && typeof window !== 'undefined') { + if (error.status === 401 && !isServer) { window.location.href = BusterRoutes.AUTH_LOGIN; } return Promise.reject(rustErrorHandler(error)); @@ -40,7 +41,6 @@ export const defaultRequestHandler = async ( } ) => { let token = ''; - const isServer = typeof window === 'undefined'; if (isServer) { const { cookies } = require('next/headers'); const cookiesManager = cookies() as ReadonlyRequestCookies; diff --git a/web/src/app/app/_components/AppContent.tsx b/web/src/app/app/_components/AppContent.tsx index 5d5fe16ac..c7af15b35 100644 --- a/web/src/app/app/_components/AppContent.tsx +++ b/web/src/app/app/_components/AppContent.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { PropsWithChildren, useEffect } from 'react'; +import React, { PropsWithChildren } from 'react'; import { Layout } from 'antd'; import { createStyles } from 'antd-style'; import { appContentHeaderHeight } from './AppContentHeader'; const { Content } = Layout; -const useStyles = createStyles(({ token, css }) => { +const useStyles = createStyles(({ css }) => { return { scrollableContainer: css` max-height: calc(100% - ${appContentHeaderHeight}px); diff --git a/web/src/app/app/_components/AppContentHeader.tsx b/web/src/app/app/_components/AppContentHeader.tsx index d05a929bb..7812e847c 100644 --- a/web/src/app/app/_components/AppContentHeader.tsx +++ b/web/src/app/app/_components/AppContentHeader.tsx @@ -6,7 +6,7 @@ import { createStyles } from 'antd-style'; export const appContentHeaderHeight = 38; -const useStyles = createStyles(({ token, isDarkMode }) => ({ +const useStyles = createStyles(({ token }) => ({ header: { borderBottom: `0.5px solid${token.colorBorder}`, height: appContentHeaderHeight diff --git a/web/src/app/app/_components/Lists/ListEmptyState.tsx b/web/src/app/app/_components/Lists/ListEmptyState.tsx index 8118d8edf..0490d424d 100644 --- a/web/src/app/app/_components/Lists/ListEmptyState.tsx +++ b/web/src/app/app/_components/Lists/ListEmptyState.tsx @@ -18,12 +18,7 @@ export const ListEmptyState: React.FC<{ marginTop: '25vh' }}>
- + <Title level={4} className="text-center [text-wrap:balance]"> {title} diff --git a/web/src/app/app/_components/Lists/StatusBadgeIndicator.tsx b/web/src/app/app/_components/Lists/StatusBadgeIndicator.tsx index a8557bd7b..dee861640 100644 --- a/web/src/app/app/_components/Lists/StatusBadgeIndicator.tsx +++ b/web/src/app/app/_components/Lists/StatusBadgeIndicator.tsx @@ -7,7 +7,7 @@ import { useUserConfigContextSelector } from '@/context/Users'; import { useBusterThreadsContextSelector } from '@/context/Threads'; import { useMemoizedFn } from 'ahooks'; import { Button } from 'antd'; -import React, { useContext, useEffect, useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { StatusNotRequestedIcon } from '@/assets'; export const StatusBadgeButton: React.FC<{ diff --git a/web/src/app/app/_components/NewThreadModal/NewThreadModal.tsx b/web/src/app/app/_components/NewThreadModal/NewThreadModal.tsx index 1276e55e1..805a26d3e 100644 --- a/web/src/app/app/_components/NewThreadModal/NewThreadModal.tsx +++ b/web/src/app/app/_components/NewThreadModal/NewThreadModal.tsx @@ -5,7 +5,6 @@ import { useMemoizedFn, useMount, useThrottleFn } from 'ahooks'; import { useAntToken } from '@/styles/useAntToken'; import { useBusterNewThreadsContextSelector } from '@/context/Threads'; import { inputHasText } from '@/utils'; -import { useDatasetContextSelector } from '@/context/Datasets'; import { useBusterSearchContextSelector } from '@/context/Search'; import { BusterSearchResult } from '@/api/busterv2'; import { useBusterNotifications } from '@/context/BusterNotifications'; diff --git a/web/src/app/app/_components/ShareMenu/CircleButton.tsx b/web/src/app/app/_components/ShareMenu/CircleButton.tsx deleted file mode 100644 index 89c44b8ad..000000000 --- a/web/src/app/app/_components/ShareMenu/CircleButton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useAntToken } from '@/styles/useAntToken'; -import React from 'react'; - -export const CircleButton: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const token = useAntToken(); - - return ( -
- {children} -
- ); -}; diff --git a/web/src/app/app/_components/ShareMenu/CopyLinkButton.tsx b/web/src/app/app/_components/ShareMenu/CopyLinkButton.tsx index ebedea2e3..1187c724f 100644 --- a/web/src/app/app/_components/ShareMenu/CopyLinkButton.tsx +++ b/web/src/app/app/_components/ShareMenu/CopyLinkButton.tsx @@ -4,10 +4,11 @@ import React from 'react'; export const CopyLinkButton: React.FC<{ onCopyLink: () => void; -}> = React.memo(({ onCopyLink }) => { + text?: string; +}> = React.memo(({ onCopyLink, text = 'Copy link' }) => { return ( ); }); diff --git a/web/src/app/app/_components/ShareMenu/ShareMenu.tsx b/web/src/app/app/_components/ShareMenu/ShareMenu.tsx index 6713b78cf..7d8026fcb 100644 --- a/web/src/app/app/_components/ShareMenu/ShareMenu.tsx +++ b/web/src/app/app/_components/ShareMenu/ShareMenu.tsx @@ -9,7 +9,6 @@ import { inputHasText } from '@/utils'; import { validate } from 'email-validator'; import { ShareWithGroupAndTeam } from './ShareWithTeamAndGroup'; import { ShareMenuTopBar, ShareMenuTopBarOptions } from './ShareMenuTopBar'; -import { CircleButton } from './CircleButton'; import { useStyles } from './useStyles'; import { IndividualSharePerson } from './IndividualSharePerson'; import { ShareMenuContentPublish } from './ShareMenuContentPublish'; @@ -263,8 +262,6 @@ const ShareMenuContentShare: React.FC<{ const id = threadId || dashboardId || collectionId || ''; const hasUserTeams = userTeams.length > 0; - - const onSubmitNewEmail = useMemoizedFn(async () => { const isValidEmail = validate(inputValue); if (!isValidEmail) { @@ -391,9 +388,7 @@ const ShareWithGroupAndTeamOption: React.FC<{ 'flex cursor-pointer items-center space-x-1.5 px-3 py-2', styles.hoverListItem )}> - - - +
diff --git a/web/src/app/app/_controllers/AppSidebar/AppSidebarSettings.tsx b/web/src/app/app/_controllers/AppSidebar/AppSidebarSettings.tsx index 1e5332280..8fd165bf1 100644 --- a/web/src/app/app/_controllers/AppSidebar/AppSidebarSettings.tsx +++ b/web/src/app/app/_controllers/AppSidebar/AppSidebarSettings.tsx @@ -7,7 +7,7 @@ import { BusterRoutes, createBusterRoute } from '@/routes'; import { Menu, MenuProps } from 'antd'; import { createStyles } from 'antd-style'; import Link from 'next/link'; -import React, { useContext } from 'react'; +import React, { useContext, useMemo } from 'react'; import { Text } from '@/components'; import { SignOutButton } from './SignOutButton'; import { useMemoizedFn } from 'ahooks'; @@ -164,6 +164,64 @@ const accountItems: MenuItem[] = [ } ]; +const permissionsAndSecurityItems: MenuItem[] = [ + { + key: BusterRoutes.APP_SETTINGS_USERS, + label: ( + + Users + + ) + }, + { + key: BusterRoutes.APP_SETTINGS_DATASETS, + label: ( + + Datasets + + ) + }, + { + key: BusterRoutes.APP_SETTINGS_DATASET_GROUPS, + label: ( + + Dataset Groups + + ) + }, + { + key: BusterRoutes.APP_SETTINGS_ATTRIBUTES, + label: ( + + Attributes + + ) + }, + { + key: BusterRoutes.APP_SETTINGS_SECURITY, + label: ( + + Security + + ) + } +]; + const useStyles = createStyles(({ token, css }) => { return { menuHeader: css` @@ -181,63 +239,75 @@ const useStyles = createStyles(({ token, css }) => { export const AppSidebarSettings: React.FC<{ className?: string; signOut: () => void; -}> = ({ signOut }) => { +}> = React.memo(({ signOut }) => { + const { styles, cx } = useStyles(); const { openInfoMessage } = useBusterNotifications(); const currentRoute = useAppLayoutContextSelector((s) => s.currentRoute); - const { styles, cx } = useStyles(); const userTeams = useUserConfigContextSelector((state) => state.userTeams); const onAddTeam = useMemoizedFn(() => { openInfoMessage('Adding team is not currently supported'); }); - const teamsList: MenuItem[] = [ - ...userTeams.map((team) => ({ - key: createBusterRoute({ - route: BusterRoutes.SETTINGS_TEAM_ID, - teamId: team.id - }), - label: ( - - {team.name} - - ) - })), - { - key: 'addteam', - label: ( -
- - Add team -
- ) - } - ]; + const teamsList: MenuItem[] = useMemo( + () => [ + ...userTeams.map((team) => ({ + key: createBusterRoute({ + route: BusterRoutes.SETTINGS_TEAM_ID, + teamId: team.id + }), + label: ( + + {team.name} + + ) + })), + { + key: 'addteam', + label: ( +
+ + Add team +
+ ) + } + ], + [userTeams, onAddTeam, styles.addButton, cx] + ); - const menus = [ - { - key: 'workspace', - label: 'Workspace', - icon: , - children: workSpaceItems - }, - { - key: 'myaccount', - label: 'My Account', - icon: , - children: accountItems - }, - { - key: 'teams', - label: 'Teams', - icon: , - children: teamsList - } - ]; + const menus = useMemo( + () => [ + { + key: 'myaccount', + label: 'Account', + icon: , + children: accountItems + }, + { + key: 'workspace', + label: 'Workspace', + icon: , + children: workSpaceItems + }, + { + key: 'permissionsandsecurity', + label: 'Permissions & Security', + icon: , + children: permissionsAndSecurityItems + } + // { + // key: 'teams', + // label: 'Teams', + // icon: , + // children: teamsList + // } + ], + [workSpaceItems, permissionsAndSecurityItems, accountItems, teamsList] + ); const allKeys = menus.map((menu) => menu.key); @@ -264,4 +334,5 @@ export const AppSidebarSettings: React.FC<{ ); -}; +}); +AppSidebarSettings.displayName = 'AppSidebarSettings'; diff --git a/web/src/app/app/_controllers/ThreadController/ThreadControllerChartView/ThreadControllerChart.tsx b/web/src/app/app/_controllers/ThreadController/ThreadControllerChartView/ThreadControllerChart.tsx index cd8098919..ad6806883 100644 --- a/web/src/app/app/_controllers/ThreadController/ThreadControllerChartView/ThreadControllerChart.tsx +++ b/web/src/app/app/_controllers/ThreadController/ThreadControllerChartView/ThreadControllerChart.tsx @@ -51,7 +51,7 @@ export const ThreadControllerChart: React.FC<{ }; } - return isTable && !loading && !chartErrorMessage + return isTable && !loading && !chartErrorMessage && (selectedData?.length ?? 0) > 0 ? { maxHeight: 'calc(100% - 20px)' } @@ -59,7 +59,7 @@ export const ThreadControllerChart: React.FC<{ height: '100%', maxHeight: '600px' }; - }, [isTable, chartOnlyView, loading, chartErrorMessage]); + }, [isTable, chartOnlyView, loading, chartErrorMessage, selectedData?.length]); return (
diff --git a/web/src/app/app/_controllers/ThreadController/ThreadControllerHeader/ThreadControllerHeaderPrimary.tsx b/web/src/app/app/_controllers/ThreadController/ThreadControllerHeader/ThreadControllerHeaderPrimary.tsx index e62c768e9..0fee12b3f 100644 --- a/web/src/app/app/_controllers/ThreadController/ThreadControllerHeader/ThreadControllerHeaderPrimary.tsx +++ b/web/src/app/app/_controllers/ThreadController/ThreadControllerHeader/ThreadControllerHeaderPrimary.tsx @@ -11,7 +11,7 @@ import { useBusterThreads, useBusterThreadsContextSelector } from '@/context/Threads'; -import { BreadcrumbSeperator } from '@/styles/context/useBreadcrumbStyles'; +import { BreadcrumbSeperator } from '@/components'; import { useDashboardContextSelector } from '@/context/Dashboards'; import { SaveToDashboardButton } from './SaveToDashboardButton'; import { diff --git a/web/src/app/app/_layouts/AppAssetCheckLayout.tsx b/web/src/app/app/_layouts/AppAssetCheckLayout.tsx index 3034e23cd..2ce5ea7f7 100644 --- a/web/src/app/app/_layouts/AppAssetCheckLayout.tsx +++ b/web/src/app/app/_layouts/AppAssetCheckLayout.tsx @@ -5,7 +5,7 @@ import { AppPasswordAccess } from '../_controllers/AppPasswordAccess'; import { AppNoPageAccess } from '../_controllers/AppNoPageAccess'; import { BusterShareAssetType } from '@/api/busterv2'; import { useBusterSupabaseAuthMethods } from '@/hooks/useBusterSupabaseAuthMethods'; -import { ClientSideAnonCheck } from './_ClientSideAnonCheck'; +import { ClientSideAnonCheck } from './ClientSideAnonCheck'; import { redirect } from 'next/navigation'; import { BusterRoutes, createBusterRoute } from '@/routes'; diff --git a/web/src/app/app/_layouts/_ClientSideAnonCheck.tsx b/web/src/app/app/_layouts/ClientSideAnonCheck.tsx similarity index 100% rename from web/src/app/app/_layouts/_ClientSideAnonCheck.tsx rename to web/src/app/app/_layouts/ClientSideAnonCheck.tsx diff --git a/web/src/app/app/collections/[collectionId]/_CollectionIndividualHeader.tsx b/web/src/app/app/collections/[collectionId]/_CollectionIndividualHeader.tsx index 54e80ac7e..710e08c5e 100644 --- a/web/src/app/app/collections/[collectionId]/_CollectionIndividualHeader.tsx +++ b/web/src/app/app/collections/[collectionId]/_CollectionIndividualHeader.tsx @@ -8,7 +8,7 @@ import { useIndividualCollection } from '@/context/Collections'; import { Breadcrumb, Button, Dropdown, MenuProps } from 'antd'; -import { BreadcrumbSeperator } from '@/styles/context/useBreadcrumbStyles'; +import { BreadcrumbSeperator } from '@/components'; import Link from 'next/link'; import { useAppLayoutContextSelector } from '@/context/BusterAppLayout'; import { BusterRoutes } from '@/routes'; diff --git a/web/src/app/app/collections/[collectionId]/metrics/[threadId]/page.tsx b/web/src/app/app/collections/[collectionId]/metrics/[threadId]/page.tsx index 159e7d3c4..174f81f29 100644 --- a/web/src/app/app/collections/[collectionId]/metrics/[threadId]/page.tsx +++ b/web/src/app/app/collections/[collectionId]/metrics/[threadId]/page.tsx @@ -1,9 +1,9 @@ import { ThreadContentController } from '@/app/app/_controllers/ThreadController'; import { AppAssetCheckLayout } from '@/app/app/_layouts'; -import { getAppSplitterLayout } from '@/components/layout/splitContentHelper'; +import { getAppSplitterLayout } from '@/components/layout'; import React from 'react'; -export default function CollectionThreadPage({ +export default async function CollectionThreadPage({ params: { threadId, collectionId } }: { params: { @@ -11,7 +11,7 @@ export default function CollectionThreadPage({ collectionId: string; }; }) { - const threadLayout = getAppSplitterLayout('thread', ['auto', '360px']); + const threadLayout = await getAppSplitterLayout('thread', ['auto', '360px']); return ( diff --git a/web/src/app/app/dashboards/[dashboardId]/DashboardInvidualHeaderPrimary.tsx b/web/src/app/app/dashboards/[dashboardId]/DashboardInvidualHeaderPrimary.tsx index 64c9c0052..0cabe0a6c 100644 --- a/web/src/app/app/dashboards/[dashboardId]/DashboardInvidualHeaderPrimary.tsx +++ b/web/src/app/app/dashboards/[dashboardId]/DashboardInvidualHeaderPrimary.tsx @@ -4,7 +4,7 @@ import React, { useMemo } from 'react'; import { AppContentHeader } from '../../_components/AppContentHeader'; import { useDashboardContextSelector, useIndividualDashboard } from '@/context/Dashboards'; import { Breadcrumb, Button, Checkbox, Dropdown, MenuProps } from 'antd'; -import { BreadcrumbSeperator } from '@/styles/context/useBreadcrumbStyles'; +import { BreadcrumbSeperator } from '@/components'; import Link from 'next/link'; import { useAppLayoutContextSelector } from '@/context/BusterAppLayout'; import { BusterRoutes } from '@/routes'; diff --git a/web/src/app/app/dashboards/[dashboardId]/metrics/[threadId]/page.tsx b/web/src/app/app/dashboards/[dashboardId]/metrics/[threadId]/page.tsx index efc3515d1..f3cb1ace4 100644 --- a/web/src/app/app/dashboards/[dashboardId]/metrics/[threadId]/page.tsx +++ b/web/src/app/app/dashboards/[dashboardId]/metrics/[threadId]/page.tsx @@ -1,16 +1,16 @@ import { ThreadContentController } from '@/app/app/_controllers/ThreadController'; import { AppAssetCheckLayout } from '@/app/app/_layouts'; -import { getAppSplitterLayout } from '@/components/layout/splitContentHelper'; +import { getAppSplitterLayout } from '@/components/layout'; import React from 'react'; -export default function DashboardThreadPage({ +export default async function DashboardThreadPage({ params: { threadId } }: { params: { threadId: string; }; }) { - const threadLayout = getAppSplitterLayout('thread', ['auto', '360px']); + const threadLayout = await getAppSplitterLayout('thread', ['auto', '360px']); return ( diff --git a/web/src/app/app/datasets/[datasetId]/_DatasetPageContext.tsx b/web/src/app/app/datasets/[datasetId]/_DatasetPageContext.tsx index 375186938..5bba7327c 100644 --- a/web/src/app/app/datasets/[datasetId]/_DatasetPageContext.tsx +++ b/web/src/app/app/datasets/[datasetId]/_DatasetPageContext.tsx @@ -14,7 +14,7 @@ import { useDeployDataset } from '@/api/busterv2'; export const useDatasetPageContext = ({ datasetId }: { datasetId: string }) => { const segments = useSelectedLayoutSegment() as DatasetApps; - const { mutate: onUpdateDataset } = useDeployDataset(); + const { mutate: onUpdateDataset, isPending: isDeployingDataset } = useDeployDataset(); const { dataset, datasetData } = useIndividualDataset({ datasetId }); const originalDatasetSQL = dataset?.data?.sql; const datasetYmlFile = dataset?.data?.yml_file; @@ -27,7 +27,7 @@ export const useDatasetPageContext = ({ datasetId }: { datasetId: string }) => { const disablePublish = useMemo(() => { const originalSQL = datasetSQL || ''; const originalYmlFile = datasetYmlFile || ''; - return !datasetId || !sql || originalSQL === sql || !ymlFile || originalYmlFile === ymlFile; + return !datasetId || !sql || !ymlFile || (originalYmlFile === ymlFile && originalSQL === sql); }, [datasetSQL, sql, datasetId, datasetYmlFile, ymlFile]); const isChangedSQL = useMemo(() => { @@ -40,10 +40,11 @@ export const useDatasetPageContext = ({ datasetId }: { datasetId: string }) => { }); const onPublishDataset = useMemoizedFn(async () => { + if (disablePublish || !sql || !ymlFile) return; onUpdateDataset({ dataset_id: datasetId!, - sql: sql!, - yml: ymlFile! + sql: sql, + yml: ymlFile }); }); @@ -69,7 +70,8 @@ export const useDatasetPageContext = ({ datasetId }: { datasetId: string }) => { dataset, disablePublish, isChangedSQL, - datasetId + datasetId, + isDeployingDataset }; }; diff --git a/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetBreadcrumb.tsx b/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetBreadcrumb.tsx index 0c6ce5486..c9095249f 100644 --- a/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetBreadcrumb.tsx +++ b/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetBreadcrumb.tsx @@ -1,5 +1,5 @@ import { createBusterRoute, BusterRoutes } from '@/routes'; -import { BreadcrumbSeperator } from '@/styles/context/useBreadcrumbStyles'; +import { BreadcrumbSeperator } from '@/components'; import { Breadcrumb } from 'antd'; import Link from 'next/link'; import React, { useMemo } from 'react'; diff --git a/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetsIndividualHeader.tsx b/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetsIndividualHeader.tsx index 417f5d02a..3e1a6f9aa 100644 --- a/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetsIndividualHeader.tsx +++ b/web/src/app/app/datasets/[datasetId]/_DatasetsIndividualHeader/DatasetsIndividualHeader.tsx @@ -17,6 +17,7 @@ export const DatasetsIndividualHeader: React.FC<{}> = React.memo(({}) => { const selectedApp = useDatasetPageContextSelector((state) => state.selectedApp); const dataset = useDatasetPageContextSelector((state) => state.dataset); const onPublishDataset = useDatasetPageContextSelector((state) => state.onPublishDataset); + const isDeployingDataset = useDatasetPageContextSelector((state) => state.isDeployingDataset); const resetDataset = useDatasetPageContextSelector((state) => state.resetDataset); const disablePublish = useDatasetPageContextSelector((state) => state.disablePublish); const isChangedSQL = useDatasetPageContextSelector((state) => state.isChangedSQL); @@ -25,7 +26,6 @@ export const DatasetsIndividualHeader: React.FC<{}> = React.memo(({}) => { const datasetName = dataset?.data?.name; const isAdmin = useUserConfigContextSelector((state) => state.isAdmin); - const setOpenNewDatasetModal = useDatasetContextSelector((state) => state.setOpenNewDatasetModal); const preventNavigation = !disablePublish; @@ -59,10 +59,14 @@ export const DatasetsIndividualHeader: React.FC<{}> = React.memo(({}) => {
- -
diff --git a/web/src/app/app/datasets/[datasetId]/editor/MetadataContainer.tsx b/web/src/app/app/datasets/[datasetId]/editor/MetadataContainer.tsx index 820ed7bf7..d6a7c5f2d 100644 --- a/web/src/app/app/datasets/[datasetId]/editor/MetadataContainer.tsx +++ b/web/src/app/app/datasets/[datasetId]/editor/MetadataContainer.tsx @@ -1,4 +1,3 @@ -import { BusterDataset } from '@/api/busterv2/datasets'; import { AppCodeEditor } from '@/components/inputs/AppCodeEditor'; import { createStyles } from 'antd-style'; import React from 'react'; @@ -11,7 +10,12 @@ export const MetadataContainer: React.FC<{ return (
- +
); }); diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroupSelectedPopup.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroupSelectedPopup.tsx index aad50c50b..eaa06ef5f 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroupSelectedPopup.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroupSelectedPopup.tsx @@ -1,7 +1,6 @@ -import { useUpdateDatasetGroups } from '@/api/busterv2'; +import { useDatasetUpdateDatasetGroups } from '@/api/busterv2'; import { AppMaterialIcons } from '@/components'; import { BusterListSelectedOptionPopupContainer } from '@/components/list'; -import { useCollectionsContextSelector } from '@/context/Collections'; import { useMemoizedFn } from 'ahooks'; import { Button, Dropdown } from 'antd'; import { MenuProps } from 'antd/lib'; @@ -50,7 +49,7 @@ const PermissionDatasetGroupAssignButton: React.FC<{ onSelectChange: (selectedRowKeys: string[]) => void; datasetId: string; }> = ({ selectedRowKeys, onSelectChange, datasetId }) => { - const { mutateAsync: updateDatasetGroups } = useUpdateDatasetGroups(datasetId); + const { mutateAsync: updateDatasetGroups } = useDatasetUpdateDatasetGroups(datasetId); const onAssignClick = useMemoizedFn(async (assigned: boolean) => { try { diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroups.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroups.tsx index a3e38749a..b8aba8226 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroups.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionDatasetGroups.tsx @@ -1,4 +1,4 @@ -import { useListDatasetGroups } from '@/api/busterv2'; +import { useDatasetListDatasetGroups, useListDatasetGroups } from '@/api/busterv2'; import React, { useState } from 'react'; import { useDebounceSearch } from '../useDebounceSearch'; import { useMemoizedFn } from 'ahooks'; @@ -12,7 +12,8 @@ import { NewDatasetGroupModal } from './NewPermissionDatasetGroupModal'; export const PermissionDatasetGroups: React.FC<{ datasetId: string; }> = React.memo(({ datasetId }) => { - const { data: datasetGroups, isFetched: isDatasetGroupsFetched } = useListDatasetGroups(); + const { data: datasetGroups, isFetched: isDatasetGroupsFetched } = + useDatasetListDatasetGroups(datasetId); const [isNewDatasetGroupModalOpen, setIsNewDatasetGroupModalOpen] = useState(false); const { filteredItems, searchText, handleSearchChange } = useDebounceSearch({ diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionListDatasetGroupContainer.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionListDatasetGroupContainer.tsx index f5cf27661..2906213ae 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionListDatasetGroupContainer.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionDatasetGroups/PermissionListDatasetGroupContainer.tsx @@ -1,4 +1,4 @@ -import { ListDatasetGroupsResponse, useUpdateDatasetGroups } from '@/api/busterv2'; +import { ListDatasetGroupsResponse, useDatasetUpdateDatasetGroups } from '@/api/busterv2'; import { BusterListColumn, BusterListRowItem } from '@/components/list'; import { BusterInfiniteList } from '@/components/list/BusterInfiniteList'; import { useMemoizedFn } from 'ahooks'; @@ -12,7 +12,7 @@ export const PermissionListDatasetGroupContainer: React.FC<{ datasetId: string; }> = ({ filteredPermissionGroups, datasetId }) => { const { styles, cx } = useStyles(); - const { mutateAsync: updateDatasetGroups } = useUpdateDatasetGroups(datasetId); + const { mutateAsync: updateDatasetGroups } = useDatasetUpdateDatasetGroups(datasetId); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const numberOfPermissionGroups = filteredPermissionGroups.length; @@ -116,7 +116,7 @@ export const PermissionListDatasetGroupContainer: React.FC<{ showSelectAll={false} selectedRowKeys={selectedRowKeys} onSelectChange={setSelectedRowKeys} - emptyState={
No teams found
} + emptyState={
No dataset groups found
} />
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/NewPermissionGroupModal.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/NewPermissionGroupModal.tsx index 56c12db16..e753d5925 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/NewPermissionGroupModal.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/NewPermissionGroupModal.tsx @@ -1,10 +1,9 @@ -import { useCreatePermissionGroup } from '@/api/busterv2/permission_groups/queryRequests'; -import { AppModal } from '@/components'; +import { useCreatePermissionGroup } from '@/api/busterv2/permission_groups'; +import { AppModal } from '@/components/modal'; import { useMemoizedFn } from 'ahooks'; import React, { useEffect, useMemo, useRef } from 'react'; import { Input, InputRef } from 'antd'; import { useBusterNotifications } from '@/context/BusterNotifications'; - interface NewPermissionGroupModalProps { isOpen: boolean; onClose: () => void; @@ -13,7 +12,7 @@ interface NewPermissionGroupModalProps { export const NewPermissionGroupModal: React.FC = React.memo( ({ isOpen, onClose, datasetId }) => { - const { mutateAsync, isPending } = useCreatePermissionGroup(datasetId); + const { mutateAsync, isPending } = useCreatePermissionGroup(); const inputRef = useRef(null); const { openInfoMessage } = useBusterNotifications(); @@ -25,7 +24,8 @@ export const NewPermissionGroupModal: React.FC = R return; } await mutateAsync({ - name: inputValue + name: inputValue, + dataset_id: datasetId }); onClose(); }); @@ -61,7 +61,12 @@ export const NewPermissionGroupModal: React.FC = R return ( - + ); } diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionListPermissionGroupContainer.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionListPermissionGroupContainer.tsx index 42ed884f0..bfc8afe0d 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionListPermissionGroupContainer.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionListPermissionGroupContainer.tsx @@ -1,4 +1,7 @@ -import { ListPermissionGroupsResponse, useUpdatePermissionGroups } from '@/api/busterv2/datasets'; +import { + ListPermissionGroupsResponse, + useDatasetUpdatePermissionGroups +} from '@/api/busterv2/datasets'; import { BusterListColumn, BusterListRowItem } from '@/components/list'; import { BusterInfiniteList } from '@/components/list/BusterInfiniteList'; import { useMemoizedFn } from 'ahooks'; @@ -12,7 +15,7 @@ export const PermissionListPermissionGroupContainer: React.FC<{ datasetId: string; }> = React.memo(({ filteredPermissionGroups, datasetId }) => { const { styles, cx } = useStyles(); - const { mutateAsync: updatePermissionGroups } = useUpdatePermissionGroups(datasetId); + const { mutateAsync: updatePermissionGroups } = useDatasetUpdatePermissionGroups(datasetId); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const numberOfPermissionGroups = filteredPermissionGroups.length; @@ -118,7 +121,7 @@ export const PermissionListPermissionGroupContainer: React.FC<{ onSelectChange={setSelectedRowKeys} emptyState={
- No teams found + No permission groups found
} /> diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionPermissionGroup.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionPermissionGroup.tsx index 31a4d97d5..9d289b9cd 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionPermissionGroup.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionPermissionGroup/PermissionPermissionGroup.tsx @@ -5,18 +5,18 @@ import { useMemoizedFn } from 'ahooks'; import { Button } from 'antd'; import { AppMaterialIcons } from '@/components'; import { PermissionListPermissionGroupContainer } from './PermissionListPermissionGroupContainer'; -import { useListPermissionGroups } from '@/api/busterv2/datasets'; import { NewPermissionGroupModal } from './NewPermissionGroupModal'; import { useDebounceSearch } from '../useDebounceSearch'; +import { useDatasetListPermissionGroups } from '@/api/busterv2'; export const PermissionPermissionGroup: React.FC<{ datasetId: string; }> = React.memo(({ datasetId }) => { const { data: permissionGroups, isFetched: isPermissionGroupsFetched } = - useListPermissionGroups(datasetId); + useDatasetListPermissionGroups(datasetId); const [isNewPermissionGroupModalOpen, setIsNewPermissionGroupModalOpen] = useState(false); - const { filteredItems, searchText, handleSearchChange, isPending } = useDebounceSearch({ + const { filteredItems, searchText, handleSearchChange } = useDebounceSearch({ items: permissionGroups || [], searchPredicate: (item, searchText) => item.name.toLowerCase().includes(searchText) }); diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionListUsersContainer.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionListUsersContainer.tsx index 2d5949108..e43651192 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionListUsersContainer.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionListUsersContainer.tsx @@ -1,7 +1,7 @@ import { ListPermissionGroupsResponse, ListPermissionUsersResponse, - useUpdatePermissionUsers + useDatasetUpdatePermissionUsers } from '@/api/busterv2/datasets'; import { BusterUserAvatar } from '@/components'; import { BusterListColumn, BusterListRowItem } from '@/components/list'; @@ -17,7 +17,7 @@ export const PermissionListUsersContainer: React.FC<{ datasetId: string; }> = React.memo(({ filteredPermissionUsers, datasetId }) => { const { styles, cx } = useStyles(); - const { mutateAsync: updatePermissionUsers } = useUpdatePermissionUsers(datasetId); + const { mutateAsync: updatePermissionUsers } = useDatasetUpdatePermissionUsers(datasetId); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const numberOfPermissionUsers = filteredPermissionUsers.length; @@ -123,7 +123,7 @@ export const PermissionListUsersContainer: React.FC<{ onSelectChange={setSelectedRowKeys} emptyState={
- No teams found + No users found
} /> diff --git a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionUsers.tsx b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionUsers.tsx index 8fe94101b..d664e6465 100644 --- a/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionUsers.tsx +++ b/web/src/app/app/datasets/[datasetId]/permissions/_PermissionUsers/PermissionUsers.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { HeaderExplanation } from '../HeaderExplanation'; import { PermissionSearch } from '../PermissionSearch'; -import { useListPermissionUsers } from '@/api/busterv2'; +import { useDatasetListPermissionUsers } from '@/api/busterv2'; import { useDebounceSearch } from '../useDebounceSearch'; import { Button } from 'antd'; import { AppMaterialIcons } from '@/components/icons'; @@ -14,7 +14,7 @@ export const PermissionUsers: React.FC<{ }> = React.memo(({ datasetId }) => { const onToggleInviteModal = useAppLayoutContextSelector((x) => x.onToggleInviteModal); const { data: permissionUsers, isFetched: isPermissionUsersFetched } = - useListPermissionUsers(datasetId); + useDatasetListPermissionUsers(datasetId); const { searchText, handleSearchChange, filteredItems } = useDebounceSearch({ items: permissionUsers || [], diff --git a/web/src/app/app/datasets/_NewDatasetModal/_NewDatasetModal.tsx b/web/src/app/app/datasets/_NewDatasetModal/_NewDatasetModal.tsx index 31c052baf..89f32ac8a 100644 --- a/web/src/app/app/datasets/_NewDatasetModal/_NewDatasetModal.tsx +++ b/web/src/app/app/datasets/_NewDatasetModal/_NewDatasetModal.tsx @@ -1,22 +1,12 @@ import React, { useLayoutEffect, useMemo, useState } from 'react'; -import { Button, Select, SelectProps } from 'antd'; +import { Input, Select, SelectProps } from 'antd'; import { useMemoizedFn, useMount } from 'ahooks'; -import { useDatasetContextSelector } from '@/context/Datasets'; import { useDataSourceContextSelector } from '@/context/DataSources'; -import { - BusterDatasetListItem, - useCreateDataset, - useGetDatasets, - useUpdateDataset -} from '@/api/busterv2/datasets'; +import { useCreateDataset } from '@/api/busterv2/datasets'; import { useAppLayoutContextSelector } from '@/context/BusterAppLayout'; import { BusterRoutes, createBusterRoute } from '@/routes'; import { useRouter } from 'next/navigation'; import { AppModal, Text } from '@/components'; -import { useAntToken } from '@/styles/useAntToken'; -import { BusterList, BusterListColumn, BusterListRow } from '@/components/list'; -import { formatDate } from '@/utils/date'; -import { timeout } from '@/utils'; const headerConfig = { title: 'Create a dataset', @@ -35,21 +25,22 @@ export const NewDatasetModal: React.FC<{ const forceInitDataSourceList = useDataSourceContextSelector( (state) => state.forceInitDataSourceList ); - const { mutateAsync: createDataset } = useCreateDataset(); - const [creatingDataset, setCreatingDataset] = React.useState(false); + const { mutateAsync: createDataset, isPending: creatingDataset } = useCreateDataset(); const [selectedDatasource, setSelectedDatasource] = React.useState( datasourceId || null ); + const [datasetName, setDatasetName] = React.useState(''); - const disableSubmit = !selectedDatasource; + const disableSubmit = !selectedDatasource || !datasetName; const createNewDatasetPreflight = useMemoizedFn(async () => { - if (creatingDataset || disableSubmit) return; - setCreatingDataset(true); + if (creatingDataset || disableSubmit || !selectedDatasource) return; + beforeCreate?.(); const res = await createDataset({ - data_source_id: selectedDatasource! + data_source_id: selectedDatasource, + name: datasetName }); if (res.id) { onChangePage({ @@ -62,16 +53,13 @@ export const NewDatasetModal: React.FC<{ afterCreate?.(); }, 150); } - setTimeout(() => { - setCreatingDataset(false); - }, 500); }); const onAddDataSourceClick = useMemoizedFn(() => { - onClose(); + router.push(createBusterRoute({ route: BusterRoutes.SETTINGS_DATASOURCES_ADD })); setTimeout(() => { - router.push(createBusterRoute({ route: BusterRoutes.SETTINGS_DATASOURCES_ADD })); - }, 350); + onClose(); + }, 450); }); useLayoutEffect(() => { @@ -98,14 +86,18 @@ export const NewDatasetModal: React.FC<{ return ( {open && ( - - )} +
+ + + - {open && selectedDatasource && ( - + + + +
)}
); @@ -132,6 +124,10 @@ const SelectDataSourceDropdown: React.FC<{ return selectOptions.find((option) => option.value === selectedDatasource); }, [selectOptions, selectedDatasource]); + const onSelect = useMemoizedFn((value: unknown) => { + setSelectedDatasource(value as string); + }); + useMount(() => { initDataSourceList(); router.prefetch( @@ -149,115 +145,41 @@ const SelectDataSourceDropdown: React.FC<{ value={selectedOption} placeholder="Select datasources that this term pertains to" popupMatchSelectWidth={true} - autoFocus={true} - onChange={(value) => { - setSelectedDatasource(value as unknown as string); - }} + onChange={onSelect} /> ); }); SelectDataSourceDropdown.displayName = 'SelectDataSourceDropdown'; -const SelectFromExistingDataset: React.FC<{ - selectedDatasource: string; -}> = React.memo(({ selectedDatasource }) => { - const token = useAntToken(); - const { data: importedDatasets, isFetched: isFetchedDatasets } = useGetDatasets({ - imported: true - }); - const { mutateAsync: onUpdateDataset } = useUpdateDataset(); - - const onChangePage = useAppLayoutContextSelector((s) => s.onChangePage); - - const [submittingId, setSubmittingId] = useState(null); - - const columns: BusterListColumn[] = useMemo(() => { - return [ - { - title: 'Name', - dataIndex: 'name' - }, - { - title: 'Updated at', - dataIndex: 'updated_at', - render: (v) => formatDate({ date: v, format: 'lll' }), - width: 130 - }, - { - title: 'Actions', - dataIndex: 'actions', - width: 100, - render: (_, record: BusterDatasetListItem) => ( -
- -
- ) - } - ]; - }, [submittingId]); - - const rows: BusterListRow[] = useMemo(() => { - return importedDatasets.map((dataset) => ({ - id: dataset.id, - data: dataset - })); - }, [importedDatasets]); - - const onSelectDataset = useMemoizedFn(async (datasetId: string) => { - setSubmittingId(datasetId); - // try { - // await onUpdateDataset({ - // id: datasetId, - // name: 'test' - // }); - // await timeout(500); - // onChangePage({ - // route: BusterRoutes.APP_DATASETS_ID, - // datasetId - // }); - // } catch (error) { - // setSubmittingId(null); - // } - }); +const DatasetNameInput: React.FC<{ + setDatasetName: (name: string) => void; + datasetName: string; +}> = React.memo( + ({ setDatasetName, datasetName }) => { + return ( + setDatasetName(e.target.value)} + /> + ); + }, + () => true +); +DatasetNameInput.displayName = 'DatasetNameInput'; +const FormWrapper: React.FC<{ + title: string; + children: React.ReactNode; +}> = React.memo(({ title, children }) => { return ( -
-
- Use an existing table or view as a dataset -
-
- - No datasets found -
- ) : ( - <> - ) - } - /> +
+
+ {title}
+
{children}
); }); -SelectFromExistingDataset.displayName = 'SelectFromExistingDataset'; +FormWrapper.displayName = 'FormWrapper'; diff --git a/web/src/app/app/layout.tsx b/web/src/app/app/layout.tsx index 50275635c..782fc0969 100644 --- a/web/src/app/app/layout.tsx +++ b/web/src/app/app/layout.tsx @@ -1,10 +1,8 @@ 'use server'; -import { AppProviders } from '@/context/AppProviders'; import { useSupabaseServerContext } from '@/context/Supabase/useSupabaseContext'; import React from 'react'; -import { AppLayout } from './_controllers/AppLayout'; -import { getAppSplitterLayout } from '@/components/layout/splitContentHelper'; +import { getAppSplitterLayout } from '@/components/layout/AppSplitter'; import { getUserInfo } from '@/api/busterv2/users/requests'; import { useBusterSupabaseAuthMethods } from '@/hooks/useBusterSupabaseAuthMethods'; import { createBusterRoute } from '@/routes'; @@ -22,7 +20,7 @@ export default async function Layout({ const headersList = headers(); const supabaseContext = await useSupabaseServerContext(); const userInfo = await getUserInfo({ jwtToken: supabaseContext.accessToken }); - const defaultLayout = getAppSplitterLayout('app-layout', ['230px', 'auto']); + const defaultLayout = await getAppSplitterLayout('app-layout', ['230px', 'auto']); const { signOut } = useBusterSupabaseAuthMethods(); const pathname = headersList.get('x-next-pathname') as string; const cookiePathname = cookies().get('x-next-pathname')?.value; diff --git a/web/src/app/app/layoutClient.tsx b/web/src/app/app/layoutClient.tsx index daae33165..91090dd77 100644 --- a/web/src/app/app/layoutClient.tsx +++ b/web/src/app/app/layoutClient.tsx @@ -5,7 +5,7 @@ import React from 'react'; import { AppLayout } from './_controllers/AppLayout'; import { BusterUserResponse } from '@/api/busterv2'; import { useSupabaseServerContext } from '@/context/Supabase/useSupabaseContext'; -import { GlobalErrorComponent } from './_components/GlobalErrorComponent'; +import { GlobalErrorComponent } from '../../components/error'; export const AppLayoutClient = ({ children, diff --git a/web/src/app/app/metrics/[threadId]/page.tsx b/web/src/app/app/metrics/[threadId]/page.tsx index dc7b77a95..5e8b20332 100644 --- a/web/src/app/app/metrics/[threadId]/page.tsx +++ b/web/src/app/app/metrics/[threadId]/page.tsx @@ -2,11 +2,11 @@ import { ThreadContentController, ThreadControllerHeader } from '../../_controllers/ThreadController'; -import { getAppSplitterLayout } from '@/components/layout/splitContentHelper'; +import { getAppSplitterLayout } from '@/components/layout'; import { AppAssetCheckLayout } from '../../_layouts/AppAssetCheckLayout'; import { AppContentHeader } from '../../_components/AppContentHeader'; -export default function ThreadsPage({ +export default async function ThreadsPage({ params: { threadId }, searchParams }: { @@ -15,7 +15,7 @@ export default function ThreadsPage({ }; searchParams: { embed?: string }; }) { - const threadLayout = getAppSplitterLayout('thread', ['auto', '360px']); + const threadLayout = await getAppSplitterLayout('thread', ['auto', '360px']); const embedView = searchParams.embed === 'true'; return ( diff --git a/web/src/app/app/settings/datasources/[datasourceId]/_DatasourceFormContent.tsx b/web/src/app/app/settings/datasources/[datasourceId]/_DatasourceFormContent.tsx index 109a1eef2..cdb0f514e 100644 --- a/web/src/app/app/settings/datasources/[datasourceId]/_DatasourceFormContent.tsx +++ b/web/src/app/app/settings/datasources/[datasourceId]/_DatasourceFormContent.tsx @@ -12,7 +12,7 @@ import { BigQueryForm } from './_forms/BigQueryForm'; import { SnowflakeForm } from './_forms/SnowflakeForm'; import { RedshiftForm } from './_forms/RedshiftForm'; import { DataBricksForm } from './_forms/DataBricksForm'; -import { useConfetti } from '@/hooks/useConfetti'; +import { useConfetti } from '@/hooks/dom/useConfetti'; import { SqlServerForm } from './_forms/SqlServerForm'; import { useBusterNotifications } from '@/context/BusterNotifications'; diff --git a/web/src/app/app/terms/[termId]/page.tsx b/web/src/app/app/terms/[termId]/page.tsx index 15ad6e6fe..d81923c3e 100644 --- a/web/src/app/app/terms/[termId]/page.tsx +++ b/web/src/app/app/terms/[termId]/page.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { getAppSplitterLayout } from '@/components/layout/splitContentHelper'; +import { getAppSplitterLayout } from '@/components/layout'; import { TermIndividualContainer } from './TermIndividualContainer'; -export default function TermIdPage({ params: { termId } }: { params: { termId: string } }) { - const termPageIdLayout = getAppSplitterLayout('term-page', ['auto', '300px']); +export default async function TermIdPage({ params: { termId } }: { params: { termId: string } }) { + const termPageIdLayout = await getAppSplitterLayout('term-page', ['auto', '300px']); return ; } diff --git a/web/src/app/app/terms/_TermsHeader.tsx b/web/src/app/app/terms/_TermsHeader.tsx index 0077263e4..582a83dc2 100644 --- a/web/src/app/app/terms/_TermsHeader.tsx +++ b/web/src/app/app/terms/_TermsHeader.tsx @@ -1,10 +1,10 @@ 'use client'; -import React, { useContext, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { AppContentHeader } from '../_components/AppContentHeader'; -import { Breadcrumb, Button, Skeleton } from 'antd'; +import { Breadcrumb, Button } from 'antd'; import { BreadcrumbProps } from 'antd/lib'; -import { BreadcrumbSeperator } from '@/styles/context/useBreadcrumbStyles'; +import { BreadcrumbSeperator } from '@/components'; import Link from 'next/link'; import { BusterRoutes, createBusterRoute } from '@/routes'; import { useTermsIndividual, useTermsContextSelector } from '@/context/Terms'; diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index 2d3c9c514..10a196fa3 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -3,7 +3,7 @@ import React from 'react'; import '../styles/styles.scss'; import { BusterStyleProvider } from '@/context/BusterStyles/BusterStyles'; -import { GlobalErrorComponent } from './app/_components/GlobalErrorComponent'; +import { GlobalErrorComponent } from '../components/error/GlobalErrorComponent'; export const metadata: Metadata = { title: 'Buster', diff --git a/web/src/styles/context/useBreadcrumbStyles.tsx b/web/src/components/breadcrumb/BreadcrumbSeperator.tsx similarity index 85% rename from web/src/styles/context/useBreadcrumbStyles.tsx rename to web/src/components/breadcrumb/BreadcrumbSeperator.tsx index 944200227..0fba49e5b 100644 --- a/web/src/styles/context/useBreadcrumbStyles.tsx +++ b/web/src/components/breadcrumb/BreadcrumbSeperator.tsx @@ -1,5 +1,5 @@ -import { AppMaterialIcons } from '@/components'; import React from 'react'; +import { AppMaterialIcons } from '../icons'; export const BreadcrumbSeperator: React.FC<{ style?: React.CSSProperties; diff --git a/web/src/components/breadcrumb/index.ts b/web/src/components/breadcrumb/index.ts new file mode 100644 index 000000000..fd1ee5142 --- /dev/null +++ b/web/src/components/breadcrumb/index.ts @@ -0,0 +1 @@ +export * from './BreadcrumbSeperator'; diff --git a/web/src/components/charts/BusterChartJS/hooks/useBusterChartJSLegend/useBusterChartJSLegend.ts b/web/src/components/charts/BusterChartJS/hooks/useBusterChartJSLegend/useBusterChartJSLegend.ts index 1a945bb55..3ce89b4ad 100644 --- a/web/src/components/charts/BusterChartJS/hooks/useBusterChartJSLegend/useBusterChartJSLegend.ts +++ b/web/src/components/charts/BusterChartJS/hooks/useBusterChartJSLegend/useBusterChartJSLegend.ts @@ -152,7 +152,6 @@ export const useBusterChartJSLegend = ({ }); const onLegendItemFocus = useMemoizedFn((item: BusterChartLegendItem) => { - // console.log('onLegendItemFocus', item); alert('TODO'); }); diff --git a/web/src/components/charts/LoadingComponents/ChartLoadingComponents.tsx b/web/src/components/charts/LoadingComponents/ChartLoadingComponents.tsx index 2635ad58d..ed91e5cb3 100644 --- a/web/src/components/charts/LoadingComponents/ChartLoadingComponents.tsx +++ b/web/src/components/charts/LoadingComponents/ChartLoadingComponents.tsx @@ -30,7 +30,9 @@ export const NoChartData: React.FC<{ return (
- {noDataText} + + {noDataText} +
); }; diff --git a/web/src/app/app/_components/GlobalErrorComponent.tsx b/web/src/components/error/GlobalErrorComponent.tsx similarity index 94% rename from web/src/app/app/_components/GlobalErrorComponent.tsx rename to web/src/components/error/GlobalErrorComponent.tsx index c1b4ef132..eeddff860 100644 --- a/web/src/app/app/_components/GlobalErrorComponent.tsx +++ b/web/src/components/error/GlobalErrorComponent.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Alert, Button } from 'antd'; -import { Component, ErrorInfo, ReactNode, useEffect } from 'react'; +import { Button } from 'antd'; +import { Component, ErrorInfo, ReactNode } from 'react'; import { Title } from '@/components/text'; interface Props { diff --git a/web/src/components/error/index.ts b/web/src/components/error/index.ts index 43a371efc..ebb33392d 100644 --- a/web/src/components/error/index.ts +++ b/web/src/components/error/index.ts @@ -1 +1,2 @@ export * from './ErrorBoundary'; +export * from './GlobalErrorComponent'; diff --git a/web/src/components/grid/BusterResizeColumns.tsx b/web/src/components/grid/BusterResizeColumns.tsx index 557ed075f..a8054189a 100644 --- a/web/src/components/grid/BusterResizeColumns.tsx +++ b/web/src/components/grid/BusterResizeColumns.tsx @@ -8,7 +8,7 @@ import { useMemoizedFn, useMouse } from 'ahooks'; import { BusterDragColumnMarkers } from './_BusterDragColumnMarkers'; import { calculateColumnSpan, columnSpansToPercent } from './config'; import { createStyles } from 'antd-style'; -import SplitPane, { Pane } from '../layout/SplitPane'; +import SplitPane, { Pane } from '../layout/AppSplitter/SplitPane'; import { useDropzoneStyles } from './BusterResizeRows'; type ContainerProps = { diff --git a/web/src/components/index.ts b/web/src/components/index.ts index d33dcaa99..dd8896f77 100644 --- a/web/src/components/index.ts +++ b/web/src/components/index.ts @@ -1,4 +1,4 @@ -export * from './charts/interfaces/chartBaseInterfaces'; +export type * from './charts/interfaces/chartBaseInterfaces'; export * from './icons'; export * from './loaders'; export * from './buttons'; @@ -11,3 +11,4 @@ export * from './card'; export * from './text'; export * from './layout'; export * from './modal'; +export * from './breadcrumb'; diff --git a/web/src/components/inputs/AppCodeEditor/AppCodeEditor.tsx b/web/src/components/inputs/AppCodeEditor/AppCodeEditor.tsx index a829d1e4f..30ebf1614 100644 --- a/web/src/components/inputs/AppCodeEditor/AppCodeEditor.tsx +++ b/web/src/components/inputs/AppCodeEditor/AppCodeEditor.tsx @@ -12,6 +12,9 @@ import { createStyles } from 'antd-style'; import { motion } from 'framer-motion'; import { useMemoizedFn } from 'ahooks'; +import './MonacoWebWorker'; +import { configureMonacoToUseYaml } from './yamlHelper'; + //import GithubLightTheme from 'monaco-themes/themes/Github Light.json'; //import NightOwnTheme from 'monaco-themes/themes/Night Owl.json'; //https://github.com/brijeshb42/monaco-ace-tokenizer @@ -117,11 +120,16 @@ export const AppCodeEditor = forwardRef const onMountCodeEditor = useMemoizedFn( async (editor: editor.IStandaloneCodeEditor, monaco: typeof import('monaco-editor')) => { const [GithubLightTheme, NightOwlTheme] = await Promise.all([ - (await import('./Github_light')).default, - (await import('./Tomorrow-Night')).default + (await import('./themes/github_light_theme')).default, + (await import('./themes/tomorrow_night_theme')).default ]); - monaco.editor.defineTheme('github-light', GithubLightTheme as any); - monaco.editor.defineTheme('night-owl', NightOwlTheme as any); + + if (language === 'yaml') { + await configureMonacoToUseYaml(monaco); + } + + monaco.editor.defineTheme('github-light', GithubLightTheme); + monaco.editor.defineTheme('night-owl', NightOwlTheme); editor.updateOptions({ theme: useDarkMode ? 'night-owl' : 'github-light' }); diff --git a/web/src/components/inputs/AppCodeEditor/MonacoWebWorker.ts b/web/src/components/inputs/AppCodeEditor/MonacoWebWorker.ts new file mode 100644 index 000000000..8f52e3b90 --- /dev/null +++ b/web/src/components/inputs/AppCodeEditor/MonacoWebWorker.ts @@ -0,0 +1,37 @@ +import { isServer } from '@tanstack/react-query'; + +if (!isServer && typeof window !== 'undefined') { + window.MonacoEnvironment = { + getWorker(moduleId, label) { + switch (label) { + case 'editorWorkerService': + return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url)); + case 'css': + case 'less': + case 'scss': + return new Worker( + new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url) + ); + case 'handlebars': + case 'html': + case 'razor': + return new Worker( + new URL('monaco-editor/esm/vs/language/html/html.worker', import.meta.url) + ); + case 'json': + return new Worker( + new URL('monaco-editor/esm/vs/language/json/json.worker', import.meta.url) + ); + case 'javascript': + case 'typescript': + return new Worker( + new URL('monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url) + ); + case 'yaml': + return new Worker(new URL('monaco-yaml/yaml.worker', import.meta.url)); + default: + throw new Error(`Unknown label ${label}`); + } + } + }; +} diff --git a/web/src/components/inputs/AppCodeEditor/Github_light.ts b/web/src/components/inputs/AppCodeEditor/themes/github_light_theme.ts similarity index 94% rename from web/src/components/inputs/AppCodeEditor/Github_light.ts rename to web/src/components/inputs/AppCodeEditor/themes/github_light_theme.ts index 076ca3509..e8721374d 100644 --- a/web/src/components/inputs/AppCodeEditor/Github_light.ts +++ b/web/src/components/inputs/AppCodeEditor/themes/github_light_theme.ts @@ -1,9 +1,10 @@ -import tailwind from '../../../../tailwind.config'; +import tailwind from '../../../../../tailwind.config'; +import type { editor } from 'monaco-editor'; const colors = tailwind.theme.extend.colors; const editorBackground = '#ffffff'; -const theme = { +const theme: editor.IStandaloneThemeData = { base: 'vs', inherit: true, rules: [ @@ -336,7 +337,14 @@ const theme = { foreground: '032f62', fontStyle: 'underline', token: 'string.other.link' - } + }, + { + foreground: '24292e', + token: 'string.yaml' + }, + { foreground: colors.buster.primary, token: 'type' }, + { foreground: '24292e', token: 'keyword.yaml' }, //booleans + { foreground: 'b31d28', token: 'number.yaml' } ], colors: { 'editor.foreground': '#24292e', diff --git a/web/src/components/inputs/AppCodeEditor/Tomorrow-Night.ts b/web/src/components/inputs/AppCodeEditor/themes/tomorrow_night_theme.ts similarity index 96% rename from web/src/components/inputs/AppCodeEditor/Tomorrow-Night.ts rename to web/src/components/inputs/AppCodeEditor/themes/tomorrow_night_theme.ts index 5011c3bbe..1f1d995f8 100644 --- a/web/src/components/inputs/AppCodeEditor/Tomorrow-Night.ts +++ b/web/src/components/inputs/AppCodeEditor/themes/tomorrow_night_theme.ts @@ -1,4 +1,6 @@ -const theme = { +import type { editor } from 'monaco-editor'; + +const theme: editor.IStandaloneThemeData = { inherit: true, base: 'vs-dark', rules: [ @@ -339,6 +341,12 @@ const theme = { token: 'storage' } ], + colors: { + 'editor.foreground': '#DCDCAA', + 'editor.background': '#1E1E1E', + 'editorCursor.foreground': '#DCDCAA', + 'editorWhitespace.foreground': '#DCDCAA' + }, encodedTokensColors: [] }; diff --git a/web/src/components/inputs/AppCodeEditor/VS_light.ts b/web/src/components/inputs/AppCodeEditor/themes/vs_light_theme.ts similarity index 100% rename from web/src/components/inputs/AppCodeEditor/VS_light.ts rename to web/src/components/inputs/AppCodeEditor/themes/vs_light_theme.ts diff --git a/web/src/components/inputs/AppCodeEditor/Xcode_default.ts b/web/src/components/inputs/AppCodeEditor/themes/xcode_default_theme.ts similarity index 97% rename from web/src/components/inputs/AppCodeEditor/Xcode_default.ts rename to web/src/components/inputs/AppCodeEditor/themes/xcode_default_theme.ts index 0293f877a..dbb06f008 100644 --- a/web/src/components/inputs/AppCodeEditor/Xcode_default.ts +++ b/web/src/components/inputs/AppCodeEditor/themes/xcode_default_theme.ts @@ -1,4 +1,4 @@ -import tailwind from '../../../../tailwind.config'; +import tailwind from '../../../../../tailwind.config'; const colors = tailwind.theme.extend.colors; const theme = { diff --git a/web/src/components/inputs/AppCodeEditor/yamlHelper.ts b/web/src/components/inputs/AppCodeEditor/yamlHelper.ts new file mode 100644 index 000000000..e2ab15ecb --- /dev/null +++ b/web/src/components/inputs/AppCodeEditor/yamlHelper.ts @@ -0,0 +1,38 @@ +export const configureMonacoToUseYaml = async (monaco: typeof import('monaco-editor')) => { + const { configureMonacoYaml } = await import('monaco-yaml'); + + configureMonacoYaml(monaco, { + enableSchemaRequest: true, + schemas: [ + { + // If YAML file is opened matching this glob + fileMatch: ['**/.prettierrc.*'], + // Then this schema will be downloaded from the internet and used. + uri: 'https://json.schemastore.org/prettierrc.json' + }, + { + // If YAML file is opened matching this glob + fileMatch: ['**/person.yaml'], + // The following schema will be applied + schema: { + type: 'object', + properties: { + name: { + type: 'string', + description: 'The person’s display name' + }, + age: { + type: 'integer', + description: 'How old is the person in years?' + }, + occupation: { + enum: ['Delivery person', 'Software engineer', 'Astronaut'] + } + } + }, + // And the URI will be linked to as the source. + uri: 'https://github.com/remcohaszing/monaco-yaml#usage' + } + ] + }); +}; diff --git a/web/src/components/inputs/AppSwitch.tsx b/web/src/components/inputs/AppSwitch.tsx deleted file mode 100644 index b6cd19a21..000000000 --- a/web/src/components/inputs/AppSwitch.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import { Switch, SwitchProps } from 'antd'; - -export interface AppSwitchProps extends SwitchProps { - checked?: boolean; - defaultChecked?: boolean; - onChange: (checked: boolean) => void; -} - -export const AppSwitch: React.FC = (props) => { - return ; -}; diff --git a/web/src/components/inputs/index.ts b/web/src/components/inputs/index.ts index eae31a742..dc300eaa3 100644 --- a/web/src/components/inputs/index.ts +++ b/web/src/components/inputs/index.ts @@ -1,2 +1 @@ -export * from './AppSwitch'; export * from './AppSearchInput'; diff --git a/web/src/components/layout/AppSplitter.tsx b/web/src/components/layout/AppSplitter/AppSplitter.tsx similarity index 96% rename from web/src/components/layout/AppSplitter.tsx rename to web/src/components/layout/AppSplitter/AppSplitter.tsx index 18be7b06b..87a09c79c 100644 --- a/web/src/components/layout/AppSplitter.tsx +++ b/web/src/components/layout/AppSplitter/AppSplitter.tsx @@ -1,14 +1,8 @@ -import { useAntToken } from '@/styles/useAntToken'; +'use client'; + import { useMemoizedFn } from 'ahooks'; -import React, { - useCallback, - useEffect, - useMemo, - useState, - forwardRef, - useImperativeHandle -} from 'react'; -import SplitPane, { Pane } from '@/components/layout/SplitPane'; +import React, { useEffect, useMemo, useState, forwardRef, useImperativeHandle } from 'react'; +import SplitPane, { Pane } from './SplitPane'; import { createAutoSaveId } from './helper'; import Cookies from 'js-cookie'; import { createStyles } from 'antd-style'; diff --git a/web/src/components/layout/SplitPane/SashContent.tsx b/web/src/components/layout/AppSplitter/SplitPane/SashContent.tsx similarity index 100% rename from web/src/components/layout/SplitPane/SashContent.tsx rename to web/src/components/layout/AppSplitter/SplitPane/SashContent.tsx diff --git a/web/src/components/layout/SplitPane/SplitPane.tsx b/web/src/components/layout/AppSplitter/SplitPane/SplitPane.tsx similarity index 100% rename from web/src/components/layout/SplitPane/SplitPane.tsx rename to web/src/components/layout/AppSplitter/SplitPane/SplitPane.tsx diff --git a/web/src/components/layout/SplitPane/base.ts b/web/src/components/layout/AppSplitter/SplitPane/base.ts similarity index 100% rename from web/src/components/layout/SplitPane/base.ts rename to web/src/components/layout/AppSplitter/SplitPane/base.ts diff --git a/web/src/components/layout/SplitPane/index.ts b/web/src/components/layout/AppSplitter/SplitPane/index.ts similarity index 100% rename from web/src/components/layout/SplitPane/index.ts rename to web/src/components/layout/AppSplitter/SplitPane/index.ts diff --git a/web/src/components/layout/SplitPane/pane.tsx b/web/src/components/layout/AppSplitter/SplitPane/pane.tsx similarity index 100% rename from web/src/components/layout/SplitPane/pane.tsx rename to web/src/components/layout/AppSplitter/SplitPane/pane.tsx diff --git a/web/src/components/layout/SplitPane/sash.tsx b/web/src/components/layout/AppSplitter/SplitPane/sash.tsx similarity index 100% rename from web/src/components/layout/SplitPane/sash.tsx rename to web/src/components/layout/AppSplitter/SplitPane/sash.tsx diff --git a/web/src/components/layout/SplitPane/themes/default.scss b/web/src/components/layout/AppSplitter/SplitPane/themes/default.scss similarity index 100% rename from web/src/components/layout/SplitPane/themes/default.scss rename to web/src/components/layout/AppSplitter/SplitPane/themes/default.scss diff --git a/web/src/components/layout/SplitPane/types.ts b/web/src/components/layout/AppSplitter/SplitPane/types.ts similarity index 100% rename from web/src/components/layout/SplitPane/types.ts rename to web/src/components/layout/AppSplitter/SplitPane/types.ts diff --git a/web/src/components/layout/config.ts b/web/src/components/layout/AppSplitter/config.ts similarity index 100% rename from web/src/components/layout/config.ts rename to web/src/components/layout/AppSplitter/config.ts diff --git a/web/src/components/layout/helper.ts b/web/src/components/layout/AppSplitter/helper.ts similarity index 100% rename from web/src/components/layout/helper.ts rename to web/src/components/layout/AppSplitter/helper.ts diff --git a/web/src/components/layout/AppSplitter/index.ts b/web/src/components/layout/AppSplitter/index.ts new file mode 100644 index 000000000..515c3f32f --- /dev/null +++ b/web/src/components/layout/AppSplitter/index.ts @@ -0,0 +1,2 @@ +export * from './AppSplitter'; +export * from './splitContentHelper'; diff --git a/web/src/components/layout/splitContentHelper.ts b/web/src/components/layout/AppSplitter/splitContentHelper.ts similarity index 63% rename from web/src/components/layout/splitContentHelper.ts rename to web/src/components/layout/AppSplitter/splitContentHelper.ts index c1bda2351..4695aa8ce 100644 --- a/web/src/components/layout/splitContentHelper.ts +++ b/web/src/components/layout/AppSplitter/splitContentHelper.ts @@ -1,10 +1,14 @@ +'use server'; + import { cookies } from 'next/headers'; import { createAutoSaveId } from './helper'; -export function getAppSplitterLayout( +const DEFAULT_LAYOUT = ['300px', 'auto']; + +export async function getAppSplitterLayout( id: string = '', - defaultLayout: string[] = ['300px', 'auto'] -): [string, string] { + defaultLayout: string[] = DEFAULT_LAYOUT +): Promise<[string, string]> { const key = createAutoSaveId(id); const layout = cookies().get(key); if (layout) { diff --git a/web/src/components/layout/PreventNavigation.tsx b/web/src/components/layout/PreventNavigation.tsx index 46b8be2d3..91e6bcd2c 100644 --- a/web/src/components/layout/PreventNavigation.tsx +++ b/web/src/components/layout/PreventNavigation.tsx @@ -1,11 +1,10 @@ 'use client'; import { useMemoizedFn, useMount } from 'ahooks'; -import { Modal } from 'antd'; import { useRouter } from 'next/navigation'; import { useState, useRef, useEffect, useMemo } from 'react'; import React from 'react'; -import { AppModal } from '@/components'; +import { AppModal } from '../modal/AppModal'; type PreventNavigationProps = { isDirty: boolean; @@ -39,8 +38,6 @@ export const PreventNavigation: React.FC = React.memo( // Used to make popstate event trigger when back button is clicked. // Without this, the popstate event will not fire because it needs there to be a href to return. - if (typeof window !== 'undefined') { - } /** * Used to prevent navigation when use click in navigation `` or ``. diff --git a/web/src/components/list/BusterInfiniteList/BusterInfiniteList.tsx b/web/src/components/list/BusterInfiniteList/BusterInfiniteList.tsx index 990b2530f..f628f3033 100644 --- a/web/src/components/list/BusterInfiniteList/BusterInfiniteList.tsx +++ b/web/src/components/list/BusterInfiniteList/BusterInfiniteList.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useMemoizedFn, useUpdateEffect } from 'ahooks'; +import { useMemoizedFn } from 'ahooks'; import { BusterListProps } from '../BusterList'; import { getAllIdsInSection } from '../BusterList/helpers'; import { useEffect, useMemo, useRef, useCallback } from 'react'; @@ -19,8 +19,8 @@ export const BusterInfiniteList: React.FC = ({ onSelectChange, emptyState, showHeader = true, - columnHeaderVariant, contextMenu, + columnRowVariant = 'containerized', showSelectAll = true, onScrollEnd, loadingNewContent, @@ -68,9 +68,18 @@ export const BusterInfiniteList: React.FC = ({ selectedRowKeys, onSelectChange: onSelectChange ? onSelectChangePreflight : undefined, onSelectSectionChange: onSelectChange ? onSelectSectionChange : undefined, - onContextMenuClick: undefined + onContextMenuClick: undefined, + columnRowVariant }; - }, [columns, rows, onSelectChange, onSelectSectionChange, contextMenu, selectedRowKeys]); + }, [ + columns, + rows, + onSelectChange, + columnRowVariant, + onSelectSectionChange, + contextMenu, + selectedRowKeys + ]); // Add scroll handler const handleScroll = useCallback(() => { diff --git a/web/src/components/list/BusterList/BusterListReactWindow.tsx b/web/src/components/list/BusterList/BusterListReactWindow.tsx index 334d43370..ad8c05d02 100644 --- a/web/src/components/list/BusterList/BusterListReactWindow.tsx +++ b/web/src/components/list/BusterList/BusterListReactWindow.tsx @@ -16,7 +16,6 @@ export const BusterList: React.FC = ({ onSelectChange, emptyState, showHeader = true, - columnHeaderVariant, contextMenu, showSelectAll = true }) => { diff --git a/web/src/components/list/BusterList/BusterListRowComponent.tsx b/web/src/components/list/BusterList/BusterListRowComponent.tsx index d7e43ed71..a37fcccea 100644 --- a/web/src/components/list/BusterList/BusterListRowComponent.tsx +++ b/web/src/components/list/BusterList/BusterListRowComponent.tsx @@ -1,7 +1,7 @@ import { useMemoizedFn } from 'ahooks'; import get from 'lodash/get'; import React, { useMemo } from 'react'; -import { BusterListRow, BusterListColumn, BusterListRowItem } from './interfaces'; +import { BusterListRow, BusterListColumn, BusterListRowItem, BusterListProps } from './interfaces'; import Link from 'next/link'; import { CheckboxColumn } from './CheckboxColumn'; import { createStyles } from 'antd-style'; @@ -17,63 +17,60 @@ export const BusterListRowComponent = React.memo( onSelectChange?: (v: boolean, id: string) => void; onContextMenuClick?: (e: React.MouseEvent, id: string) => void; style?: React.CSSProperties; + columnRowVariant: BusterListProps['columnRowVariant']; } - >(({ style, row, columns, onSelectChange, checked, onContextMenuClick }, ref) => { - const { styles, cx } = useStyles(); - const link = row.link; - // const router = useRouter(); + >( + ( + { style, columnRowVariant, row, columns, onSelectChange, checked, onContextMenuClick }, + ref + ) => { + const { styles, cx } = useStyles(); + const link = row.link; - const onClick = useMemoizedFn(() => { - // if (link) { - // const isLocalLink = link.startsWith('/'); - // if (isLocalLink) { - // router.push(link); - // } else { - // window.open(link, '_blank'); - // } - // } - row.onClick?.(); - }); + const onContextMenu = useMemoizedFn((e: React.MouseEvent) => { + onContextMenuClick?.(e, row.id); + }); - const onContextMenu = useMemoizedFn((e: React.MouseEvent) => { - onContextMenuClick?.(e, row.id); - }); + const onChange = useMemoizedFn((checked: boolean) => { + onSelectChange?.(checked, row.id); + }); - const onChange = useMemoizedFn((checked: boolean) => { - onSelectChange?.(checked, row.id); - }); - - return ( - -
- {!!onSelectChange ? ( - - ) : ( -
- )} - {columns.map((column, columnIndex) => ( - - ))} -
-
- ); - }), + return ( + +
+ {!!onSelectChange ? ( + + ) : ( +
+ )} + {columns.map((column, columnIndex) => ( + + ))} +
+
+ ); + } + ), (prevProps, nextProps) => { return prevProps.checked === nextProps.checked && prevProps.row.id === nextProps.row.id; } @@ -151,6 +148,14 @@ export const useStyles = createStyles(({ css, token }) => ({ background-color: ${token.colorPrimaryBgHover}; } } + + &.containerized { + background-color: ${token.colorBgContainer}; + + &:last-child { + border-bottom: 0px; + } + } `, cell: css` color: ${token.colorText}; diff --git a/web/src/components/list/BusterList/BusterListRowComponentSelector.tsx b/web/src/components/list/BusterList/BusterListRowComponentSelector.tsx index ed7a4b577..0cddd15a5 100644 --- a/web/src/components/list/BusterList/BusterListRowComponentSelector.tsx +++ b/web/src/components/list/BusterList/BusterListRowComponentSelector.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { BusterListRow, BusterListColumn } from './interfaces'; +import { BusterListRow, BusterListColumn, BusterListProps } from './interfaces'; import { BusterListSectionComponent } from './BusterListSectionComponent'; import { BusterListRowComponent } from './BusterListRowComponent'; @@ -15,6 +15,7 @@ export const BusterListRowComponentSelector = React.forwardRef< selectedRowKeys?: string[]; rows: BusterListRow[]; style?: React.CSSProperties; + columnRowVariant?: BusterListProps['columnRowVariant']; } >( ( @@ -26,7 +27,8 @@ export const BusterListRowComponentSelector = React.forwardRef< onSelectChange, onSelectSectionChange, selectedRowKeys, - onContextMenuClick + onContextMenuClick, + columnRowVariant }, ref ) => { @@ -55,6 +57,7 @@ export const BusterListRowComponentSelector = React.forwardRef< checked={!!selectedRowKeys?.includes(row.id)} ref={ref} onContextMenuClick={onContextMenuClick} + columnRowVariant={columnRowVariant} /> ); } diff --git a/web/src/components/list/BusterList/interfaces.ts b/web/src/components/list/BusterList/interfaces.ts index 7e085eeac..1f88ea301 100644 --- a/web/src/components/list/BusterList/interfaces.ts +++ b/web/src/components/list/BusterList/interfaces.ts @@ -8,7 +8,7 @@ import type { import React from 'react'; export interface BusterListProps { columns: BusterListColumn[]; - columnHeaderVariant?: 'default' | 'gray'; + columnRowVariant?: 'default' | 'containerized'; rows: BusterListRow[]; onSelectChange?: (selectedRowKeys: string[]) => void; emptyState?: undefined | React.ReactNode; diff --git a/web/src/components/messages/AppMessagesContainer/AppMessagesHistory.tsx b/web/src/components/messages/AppMessagesContainer/AppMessagesHistory.tsx index 71363b3bd..c9a22a69a 100644 --- a/web/src/components/messages/AppMessagesContainer/AppMessagesHistory.tsx +++ b/web/src/components/messages/AppMessagesContainer/AppMessagesHistory.tsx @@ -1,10 +1,10 @@ -import React, { useEffect, useLayoutEffect, useMemo, useRef } from 'react'; +import React, { useEffect, useMemo } from 'react'; import { createStyles } from 'antd-style'; import type { AppMessageContainerMessage } from './AppMessagesContainer'; -import { useMemoizedFn, useScroll } from 'ahooks'; +import { useScroll } from 'ahooks'; import last from 'lodash/last'; import { AppHistoryMessage } from './AppHistoryMessage'; -import useSmoothScroller from '@/hooks/react/useSmoothScroll'; +import { useSmoothScroller } from '@/hooks'; const useStyles = createStyles(({ css }) => ({ container: css` diff --git a/web/src/context/BusterWebSocket/useWebSocketCustom.tsx b/web/src/context/BusterWebSocket/useWebSocketCustom.tsx index 7aa599451..9a1c2c8a9 100644 --- a/web/src/context/BusterWebSocket/useWebSocketCustom.tsx +++ b/web/src/context/BusterWebSocket/useWebSocketCustom.tsx @@ -5,7 +5,7 @@ import { BusterSocketResponseBase } from '@/api/buster-socket/baseInterfaces'; import { createBusterResponse } from './helpers'; import { Priority, getPriorityFromRoute } from './messagePriority'; import { DeviceCapabilities, getDeviceCapabilities } from './deviceCapabilities'; -import useWindowFocus from '@/hooks/useWindowFocus'; +import { useWindowFocus } from '@/hooks'; import { SupabaseContextReturnType } from '../Supabase'; type WebSocketHookProps = { diff --git a/web/src/context/Posthog/usePosthog.tsx b/web/src/context/Posthog/usePosthog.tsx index 34d317615..c684a4c31 100644 --- a/web/src/context/Posthog/usePosthog.tsx +++ b/web/src/context/Posthog/usePosthog.tsx @@ -7,7 +7,7 @@ import { PostHogConfig } from 'posthog-js'; import { isDev } from '@/config'; import posthog from 'posthog-js'; import { useUserConfigContextSelector } from '../Users'; - +import { isServer } from '@tanstack/react-query'; const POSTHOG_KEY = process.env.NEXT_PUBLIC_POSTHOG_KEY!; export const BusterPosthogProvider: React.FC = React.memo(({ children }) => { @@ -38,7 +38,7 @@ const PosthogWrapper: React.FC> = ({ children }) => { const team = userTeams[0]; useEffect(() => { - if (POSTHOG_KEY && typeof window !== 'undefined' && user && posthog && team) { + if (POSTHOG_KEY && !isServer && user && posthog && team) { posthog.init(POSTHOG_KEY, options); const email = user.email; diff --git a/web/src/hooks/dom/index.ts b/web/src/hooks/dom/index.ts index c0cfad54a..7a25a09c1 100644 --- a/web/src/hooks/dom/index.ts +++ b/web/src/hooks/dom/index.ts @@ -1,97 +1,10 @@ -'use client'; - -import { ENABLE_DARK_MODE } from '@/context/BusterStyles/BusterStyles'; -import { useMemoizedFn, useMount, useUnmount } from 'ahooks'; -import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react'; - -//DO NOT USE -export const useThemeDetector = ({ addDarkClass }: { addDarkClass?: boolean }) => { - const isServer = typeof window === 'undefined'; - const MEDIA = '(prefers-color-scheme: dark)'; - - const getSystemTheme = (e?: MediaQueryList | MediaQueryListEvent) => { - if (!ENABLE_DARK_MODE) return false; - if (isServer) return false; - if (!e) e = window.matchMedia(MEDIA); - const isDark = e.matches; - return isDark; - }; - - const getCurrentTheme = useMemoizedFn(() => { - if (!isServer) { - document.documentElement.style.display = 'none'; - - const isDarkMode = getSystemTheme(); - - if (addDarkClass) { - const d = document.documentElement; - d.classList.toggle('dark', isDarkMode); - d.classList.toggle('bg-black', isDarkMode); - d.setAttribute('data-color-scheme', !isDarkMode ? 'light' : 'dark'); - } - - // trigger reflow so that overflow style is applied - document.documentElement.style.display = ''; - - return isDarkMode; - } - return false; - }); - const [isDarkTheme, setIsDarkTheme] = useState(() => getSystemTheme()); - - const mqListener = useMemoizedFn(() => { - setIsDarkTheme(getCurrentTheme()); - }); - - useEffect(() => { - const darkThemeMq = window.matchMedia('(prefers-color-scheme: dark)'); - darkThemeMq.addEventListener('change', mqListener); - return () => darkThemeMq.removeEventListener('change', mqListener); - }, []); - - useLayoutEffect(() => { - setIsDarkTheme(getCurrentTheme()); - }, []); - - return isDarkTheme; -}; - -export const usePreventBackwardNavigation = () => { - useMount(() => { - document.documentElement.style.overscrollBehaviorX = 'none'; - document.body.style.overscrollBehaviorX = 'none'; - }); - - useUnmount(() => { - document.documentElement.style.overscrollBehaviorX = 'auto'; - document.body.style.overscrollBehaviorX = 'auto'; - }); -}; - -export const useIsShowingEllipsis = ( - textRef: React.RefObject, - text: string, - maxLength = 25, - width?: number -): boolean => { - const isShowingEllipsis = useMemo(() => { - if (textRef.current) { - return textRef.current?.scrollWidth > textRef.current?.clientWidth; - } - if (!text) return false; - return text.length > maxLength; - }, [text, textRef.current, width, maxLength]); - return isShowingEllipsis; -}; - -export const useListenToWindowEvent = (eventName: string, callback: (event: Event) => void) => { - useEffect(() => { - window.addEventListener(eventName, callback); - - return () => window.removeEventListener(eventName, callback); - }, [eventName, callback]); -}; - -export const useBeforeUnload = (callback: (event: BeforeUnloadEvent) => void) => { - useListenToWindowEvent('beforeunload', callback); -}; +export * from './useThemeDetector'; +export * from './usePreventBackwardsNavigation'; +export * from './useIsShowingEllipsis'; +export * from './useBeforeUnload'; +export * from './useListenToWindowEvent'; +export * from './useSmoothScroll'; +export * from './useOnWindowResize'; +export * from './useWindowFocus'; +export * from './useOnWindowResize'; +export * from './useWindowFocus'; diff --git a/web/src/hooks/dom/useBeforeUnload.ts b/web/src/hooks/dom/useBeforeUnload.ts new file mode 100644 index 000000000..604ee3839 --- /dev/null +++ b/web/src/hooks/dom/useBeforeUnload.ts @@ -0,0 +1,7 @@ +'use client'; + +import { useListenToWindowEvent } from './useListenToWindowEvent'; + +export const useBeforeUnload = (callback: (event: BeforeUnloadEvent) => void) => { + useListenToWindowEvent('beforeunload', callback); +}; diff --git a/web/src/hooks/useConfetti.tsx b/web/src/hooks/dom/useConfetti.tsx similarity index 100% rename from web/src/hooks/useConfetti.tsx rename to web/src/hooks/dom/useConfetti.tsx diff --git a/web/src/hooks/dom/useIsShowingEllipsis.ts b/web/src/hooks/dom/useIsShowingEllipsis.ts new file mode 100644 index 000000000..a8e4a98e0 --- /dev/null +++ b/web/src/hooks/dom/useIsShowingEllipsis.ts @@ -0,0 +1,19 @@ +'use client'; + +import React, { useMemo } from 'react'; + +export const useIsShowingEllipsis = ( + textRef: React.RefObject, + text: string, + maxLength = 25, + width?: number +): boolean => { + const isShowingEllipsis = useMemo(() => { + if (textRef.current) { + return textRef.current?.scrollWidth > textRef.current?.clientWidth; + } + if (!text) return false; + return text.length > maxLength; + }, [text, textRef.current, width, maxLength]); + return isShowingEllipsis; +}; diff --git a/web/src/hooks/dom/useListenToWindowEvent.ts b/web/src/hooks/dom/useListenToWindowEvent.ts new file mode 100644 index 000000000..cb11da1ae --- /dev/null +++ b/web/src/hooks/dom/useListenToWindowEvent.ts @@ -0,0 +1,11 @@ +'use client'; + +import { useEffect } from 'react'; + +export const useListenToWindowEvent = (eventName: string, callback: (event: Event) => void) => { + useEffect(() => { + window.addEventListener(eventName, callback); + + return () => window.removeEventListener(eventName, callback); + }, [eventName, callback]); +}; diff --git a/web/src/hooks/useOnWindowResize.tsx b/web/src/hooks/dom/useOnWindowResize.tsx similarity index 100% rename from web/src/hooks/useOnWindowResize.tsx rename to web/src/hooks/dom/useOnWindowResize.tsx diff --git a/web/src/hooks/dom/usePreventBackwardsNavigation.tsx b/web/src/hooks/dom/usePreventBackwardsNavigation.tsx new file mode 100644 index 000000000..0edc4a636 --- /dev/null +++ b/web/src/hooks/dom/usePreventBackwardsNavigation.tsx @@ -0,0 +1,15 @@ +'use client'; + +import { useMount, useUnmount } from 'ahooks'; + +export const usePreventBackwardNavigation = () => { + useMount(() => { + document.documentElement.style.overscrollBehaviorX = 'none'; + document.body.style.overscrollBehaviorX = 'none'; + }); + + useUnmount(() => { + document.documentElement.style.overscrollBehaviorX = 'auto'; + document.body.style.overscrollBehaviorX = 'auto'; + }); +}; diff --git a/web/src/hooks/react/useSmoothScroll.tsx b/web/src/hooks/dom/useSmoothScroll.tsx similarity index 97% rename from web/src/hooks/react/useSmoothScroll.tsx rename to web/src/hooks/dom/useSmoothScroll.tsx index 3cec3acb2..75a11cd17 100644 --- a/web/src/hooks/react/useSmoothScroll.tsx +++ b/web/src/hooks/dom/useSmoothScroll.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { useMemoizedFn, useThrottleFn, useUpdateEffect } from 'ahooks'; export function useSmoothScroller({ diff --git a/web/src/hooks/dom/useThemeDetector.ts b/web/src/hooks/dom/useThemeDetector.ts new file mode 100644 index 000000000..ab6ffe712 --- /dev/null +++ b/web/src/hooks/dom/useThemeDetector.ts @@ -0,0 +1,57 @@ +'use client'; + +import { ENABLE_DARK_MODE } from '@/context/BusterStyles/BusterStyles'; +import { useMemoizedFn } from 'ahooks'; +import { useEffect, useLayoutEffect, useState } from 'react'; +import { isServer } from '@tanstack/react-query'; + +const DARK_MODE_MEDIA = '(prefers-color-scheme: dark)'; + +export const useThemeDetector = ({ addDarkClass }: { addDarkClass?: boolean }) => { + const [isDarkTheme, setIsDarkTheme] = useState(() => getSystemTheme()); + + const getSystemTheme = (e?: MediaQueryList | MediaQueryListEvent) => { + if (!ENABLE_DARK_MODE) return false; + if (isServer) return false; + if (!e) e = window.matchMedia(DARK_MODE_MEDIA); + const isDark = e.matches; + return isDark; + }; + + const getCurrentTheme = useMemoizedFn(() => { + if (!isServer) { + document.documentElement.style.display = 'none'; + + const isDarkMode = getSystemTheme(); + + if (addDarkClass) { + const d = document.documentElement; + d.classList.toggle('dark', isDarkMode); + d.classList.toggle('bg-black', isDarkMode); + d.setAttribute('data-color-scheme', !isDarkMode ? 'light' : 'dark'); + } + + // trigger reflow so that overflow style is applied + document.documentElement.style.display = ''; + + return isDarkMode; + } + return false; + }); + + const mqListener = useMemoizedFn(() => { + setIsDarkTheme(getCurrentTheme()); + }); + + useEffect(() => { + const darkThemeMq = window.matchMedia(DARK_MODE_MEDIA); + darkThemeMq.addEventListener('change', mqListener); + return () => darkThemeMq.removeEventListener('change', mqListener); + }, []); + + useLayoutEffect(() => { + setIsDarkTheme(getCurrentTheme()); + }, []); + + return isDarkTheme; +}; diff --git a/web/src/hooks/useWindowFocus.ts b/web/src/hooks/dom/useWindowFocus.ts similarity index 91% rename from web/src/hooks/useWindowFocus.ts rename to web/src/hooks/dom/useWindowFocus.ts index 48b0ccaef..e0be63565 100644 --- a/web/src/hooks/useWindowFocus.ts +++ b/web/src/hooks/dom/useWindowFocus.ts @@ -6,7 +6,7 @@ import isFunction from 'lodash/isFunction'; * * @param {Function} callback - The function to be called when the window gains focus. */ -const useWindowFocus = (callback: () => void, offFocusCallback?: () => void) => { +export const useWindowFocus = (callback: () => void, offFocusCallback?: () => void) => { useEffect(() => { if (!isFunction(callback)) { return; diff --git a/web/src/hooks/index.ts b/web/src/hooks/index.ts index 434b1ed12..2a27b2168 100644 --- a/web/src/hooks/index.ts +++ b/web/src/hooks/index.ts @@ -1,5 +1,2 @@ -export * from './useOnWindowResize'; export * from './react'; export * from './dom'; -export * from './useWindowSize'; -export * from './useWindowFocus'; diff --git a/web/src/hooks/react/useAutoScroll.tsx b/web/src/hooks/react/useAutoScroll.tsx deleted file mode 100644 index ace3633f9..000000000 --- a/web/src/hooks/react/useAutoScroll.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import { useMemoizedFn } from 'ahooks'; -import { useState, useMemo, useRef, useCallback, useEffect } from 'react'; - -export type UseAutoScrollProps = { - enabled?: boolean; -}; - -export function useAutoScroll({ enabled = true }: UseAutoScrollProps = {}) { - // Store container element in state so that we can - // mount/dismount handlers via `useEffect` (see below) - const [container, setContainer] = useState(); - - const scroller = useMemo(() => { - if (container) { - return new SmoothScroller(container); - } - }, [container]); - - // Maintain `isSticky` state for the consumer to access - const [isSticky, setIsSticky] = useState(true); - - // Maintain `isStickyRef` value for internal use - // that isn't limited to React's state lifecycle - const isStickyRef = useRef(isSticky); - - const ref = useMemoizedFn((element: HTMLDivElement | null) => { - if (element) { - setContainer(element); - } - }); - - // Convenience function to allow consumers to - // scroll to the bottom of the container - const scrollToEnd = useMemoizedFn(() => { - if (container && scroller) { - isStickyRef.current = true; - - // Update state so that consumers can hook into sticky status - setIsSticky(isStickyRef.current); - - // TODO: support duration greater than 0 - scroller.scrollTo(container.scrollHeight - container.clientHeight, 50); - } - }); - - useEffect(() => { - let resizeObserver: ResizeObserver | undefined; - let mutationObserver: MutationObserver | undefined; - let lastScrollTop: number; - let lastScrollHeight: number; - - function onScrollStart(e: Event) { - if (container && scroller) { - // TODO: understand where these phantom scroll/height changes occur - if (lastScrollHeight !== undefined && container.scrollHeight !== lastScrollHeight) { - return; - } - - const isAtBottom = container.scrollTop + container.clientHeight >= container.scrollHeight; - const hasScrolledUp = container.scrollTop < lastScrollTop; - - if (hasScrolledUp) { - scroller.cancel(); - } - - // We're sticky if we're in the middle of an automated scroll - // or if the user manually scrolled to the bottom - isStickyRef.current = !hasScrolledUp && (scroller.isAnimating || isAtBottom); - - // Update state so that consumers can hook into sticky status - setIsSticky(isStickyRef.current); - } - } - - if (container) { - container.addEventListener('scroll', onScrollStart); - - if (enabled) { - // Scroll when the container's children resize - resizeObserver = new ResizeObserver(() => { - lastScrollTop = container.scrollTop; - lastScrollHeight = container.scrollHeight; - - if (isStickyRef.current) { - scrollToEnd(); - } - }); - - // Monitor the size of the children within the scroll container - for (const child of Array.from(container.children)) { - resizeObserver.observe(child); - } - } - } - - return () => { - container?.removeEventListener('scroll', onScrollStart); - resizeObserver?.disconnect(); - mutationObserver?.disconnect(); - }; - }, [container, scroller, scrollToEnd, enabled]); - - return { ref, container, isSticky, scrollToEnd }; -} - -class SmoothScroller { - private animationFrame?: number; - private startTime?: number; - private startPos?: number; - private endPos?: number; - private duration?: number; - private cancelled: boolean = false; - private initialDuration?: number; - - constructor(private element: HTMLElement) {} - - public scrollTo(to: number, duration: number): Promise { - if (duration === 0) { - this.element.scrollTo({ - top: to - }); - return Promise.resolve(); - } - - const currentScrollTop = this.element.scrollTop; - const currentTime = performance.now(); - - if (this.animationFrame !== undefined) { - cancelAnimationFrame(this.animationFrame); - } - - // If an animation is already running, calculate the current position and progress - if ( - this.startTime !== undefined && - this.startPos !== undefined && - this.endPos !== undefined && - this.initialDuration !== undefined - ) { - const timeElapsed = currentTime - this.startTime; - const progress = Math.min(timeElapsed / this.initialDuration, 1); - const easing = progress; // Linear interpolation - this.startPos = this.startPos + (this.endPos - this.startPos) * easing; - this.duration = (1 - progress) * duration; - } else { - // Otherwise, start a new animation from the current scroll position - this.startPos = currentScrollTop; - this.duration = duration; - } - - this.endPos = to; - this.startTime = currentTime; - this.initialDuration = duration; - this.cancelled = false; - - return new Promise((resolve) => { - this.animationFrame = requestAnimationFrame((time) => this.animate(resolve, time)); - }); - } - - public get isAnimating() { - return this.animationFrame !== undefined; - } - - public cancel() { - this.cancelled = true; - if (this.animationFrame !== undefined) { - cancelAnimationFrame(this.animationFrame); - } - this.reset(); - } - - private easeInOutQuad(t: number): number { - return t; - // return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t; - } - - private animate = (resolve: () => void, currentTime: number) => { - if ( - this.cancelled || - this.startTime === undefined || - this.startPos === undefined || - this.endPos === undefined || - this.duration === undefined || - this.initialDuration === undefined - ) { - return; - } - - const timeElapsed = currentTime - this.startTime; - const progress = Math.min(timeElapsed / this.initialDuration, 1); - const easing = this.easeInOutQuad(progress); - const currentPos = this.startPos + (this.endPos - this.startPos) * easing; - - this.element.scrollTop = currentPos; - - if (progress < 1) { - this.animationFrame = requestAnimationFrame((time) => this.animate(resolve, time)); - } else { - this.reset(); - resolve(); - } - }; - - private reset() { - this.animationFrame = undefined; - this.startTime = undefined; - this.startPos = undefined; - this.endPos = undefined; - this.duration = undefined; - this.initialDuration = undefined; - } -} diff --git a/web/src/hooks/useBusterSupabaseAuthMethods.ts b/web/src/hooks/useBusterSupabaseAuthMethods.ts index b81da3588..105666652 100644 --- a/web/src/hooks/useBusterSupabaseAuthMethods.ts +++ b/web/src/hooks/useBusterSupabaseAuthMethods.ts @@ -1,8 +1,8 @@ -import { headers } from 'next/headers'; import { createClient } from '@/context/Supabase/server'; import { redirect } from 'next/navigation'; import { BusterRoutes, createBusterRoute } from '@/routes/busterRoutes/busterRoutes'; import Cookies from 'js-cookie'; +import { QueryClient } from '@tanstack/react-query'; //TODO use google one click: https://supabase.com/docs/guides/auth/social-login/auth-google#google-pre-built @@ -142,6 +142,7 @@ export const useBusterSupabaseAuthMethods = () => { 'use server'; const supabase = await createClient(); + const queryClient = new QueryClient(); const { error } = await supabase.auth.signOut(); @@ -153,6 +154,7 @@ export const useBusterSupabaseAuthMethods = () => { Object.keys(Cookies.get()).forEach((cookieName) => { Cookies.remove(cookieName); }); + queryClient.clear(); }, 650); return redirect( diff --git a/web/src/hooks/useWindowSize.tsx b/web/src/hooks/useWindowSize.tsx deleted file mode 100644 index 1048b209b..000000000 --- a/web/src/hooks/useWindowSize.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -export const useWindowSize = () => { - const isServer = typeof window === 'undefined'; - - const [windowSize, setWindowSize] = React.useState({ - width: isServer ? 0 : window.innerWidth, - height: isServer ? 0 : window.innerHeight - }); - - React.useEffect(() => { - const handleResize = () => { - setWindowSize({ - width: window.innerWidth, - height: window.innerHeight - }); - }; - handleResize(); - window.addEventListener('resize', handleResize); - - return () => window.removeEventListener('resize', handleResize); - }, []); - - return windowSize; -}; diff --git a/web/src/routes/busterRoutes/busterAppRoutes.ts b/web/src/routes/busterRoutes/busterAppRoutes.ts index d0c0ebf03..b2987170b 100644 --- a/web/src/routes/busterRoutes/busterAppRoutes.ts +++ b/web/src/routes/busterRoutes/busterAppRoutes.ts @@ -9,7 +9,6 @@ export enum BusterAppRoutes { APP_DASHBOARD_ID = '/app/dashboards/:dashboardId', APP_DASHBOARD_THREADS = '/app/dashboards/:dashboardId/metrics', APP_DASHBOARD_THREADS_ID = '/app/dashboards/:dashboardId/metrics/:threadId', - APP_LOGS = '/app/logs', APP_DATASETS = '/app/datasets', APP_DATASETS_ID = '/app/datasets/:datasetId', @@ -35,6 +34,14 @@ export enum BusterAppRoutes { SETTINGS_PREFERENCES = '/app/settings/preferences', SETTINGS_NOTIFICATIONS = '/app/settings/notifications', SETTINGS_TEAM_ID = '/app/settings/team/:teamId', + APP_SETTINGS_USERS = '/app/settings/users', + APP_SETTINGS_USERS_ID = '/app/settings/users/:userId', + APP_SETTINGS_DATASETS = '/app/settings/datasets', + APP_SETTINGS_DATASETS_ID = '/app/settings/datasets/:datasetId', + APP_SETTINGS_DATASET_GROUPS = '/app/settings/dataset-groups', + APP_SETTINGS_DATASET_GROUPS_ID = '/app/settings/dataset-groups/:datasetGroupId', + APP_SETTINGS_ATTRIBUTES = '/app/settings/attributes', + APP_SETTINGS_SECURITY = '/app/settings/security', NEW_USER = '/app/new-user' } @@ -106,4 +113,23 @@ export type BusterAppRoutesWithArgs = { threadId: string; }; [BusterAppRoutes.NEW_USER]: { route: BusterAppRoutes.NEW_USER }; + [BusterAppRoutes.APP_SETTINGS_USERS]: { route: BusterAppRoutes.APP_SETTINGS_USERS }; + [BusterAppRoutes.APP_SETTINGS_USERS_ID]: { + route: BusterAppRoutes.APP_SETTINGS_USERS_ID; + userId: string; + }; + [BusterAppRoutes.APP_SETTINGS_DATASETS]: { route: BusterAppRoutes.APP_SETTINGS_DATASETS }; + [BusterAppRoutes.APP_SETTINGS_DATASETS_ID]: { + route: BusterAppRoutes.APP_SETTINGS_DATASETS_ID; + datasetId: string; + }; + [BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS]: { + route: BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS; + }; + [BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS_ID]: { + route: BusterAppRoutes.APP_SETTINGS_DATASET_GROUPS_ID; + datasetGroupId: string; + }; + [BusterAppRoutes.APP_SETTINGS_ATTRIBUTES]: { route: BusterAppRoutes.APP_SETTINGS_ATTRIBUTES }; + [BusterAppRoutes.APP_SETTINGS_SECURITY]: { route: BusterAppRoutes.APP_SETTINGS_SECURITY }; }; diff --git a/web/src/styles/styles.scss b/web/src/styles/styles.scss index 582d6141c..9c73e5a90 100644 --- a/web/src/styles/styles.scss +++ b/web/src/styles/styles.scss @@ -7,7 +7,7 @@ @import './transitions.scss'; @import './animations.scss'; @import './monaco.scss'; -@import '../components/layout/SplitPane/themes/default.scss'; +@import '../components/layout/AppSplitter/SplitPane/themes/default.scss'; @import 'react-data-grid/lib/styles.css'; h1, diff --git a/web/src/utils/array.ts b/web/src/utils/array.ts index fcf70f17f..c382f4523 100644 --- a/web/src/utils/array.ts +++ b/web/src/utils/array.ts @@ -17,17 +17,18 @@ export const getPredictableItemBasedOnText = (array: T[], input: string): T = return array[index] as T; }; -export const getPredictableTailwindColor = (input: string): string => { - const twentyTailwindColors = [ - 'bg-red-300', - 'bg-orange-300', - 'bg-amber-300', - 'bg-yellow-300', - 'bg-lime-300', - 'bg-green-300', - 'bg-blue-300', - 'bg-gray-300' - ], - predictableIndex = getPredictableItemBasedOnText(twentyTailwindColors, input); - return predictableIndex; +export const getPredictableTailwindColor = ( + input: string, + classColors: string[] = [ + 'bg-red-300', + 'bg-orange-300', + 'bg-amber-300', + 'bg-yellow-300', + 'bg-lime-300', + 'bg-green-300', + 'bg-blue-300', + 'bg-gray-300' + ] +): string => { + return getPredictableItemBasedOnText(classColors, input); }; diff --git a/web/src/utils/canvas.ts b/web/src/utils/canvas.ts new file mode 100644 index 000000000..5e47b509a --- /dev/null +++ b/web/src/utils/canvas.ts @@ -0,0 +1,36 @@ +import memoize from 'lodash/memoize'; +import { isServer } from '@tanstack/react-query'; + +let ctx: CanvasRenderingContext2D; +const getCanvasContext = () => { + if (!ctx) { + //@ts-ignore + ctx = document.createElement('canvas').getContext('2d'); + } + + return ctx; +}; + +export const measureTextWidth = memoize( + (text: string, font: any = {}) => { + if (!isServer) { + const { fontSize, fontFamily = 'sans-serif', fontWeight, fontStyle, fontVariant } = font; + const ctx = getCanvasContext(); + // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font + ctx.font = [fontStyle, fontWeight, fontVariant, `${fontSize || 13.6}px`, fontFamily].join( + ' ' + ); + const metrics = ctx.measureText(typeof text === 'string' ? text : ''); + + return { + width: metrics.width, + height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + }; + } + return { + width: 0, + height: 0 + }; + }, + (text: string, font = {}) => [text, ...Object.values(font)].join('') +); diff --git a/web/src/utils/index.ts b/web/src/utils/index.ts index 0ecd73be9..474ce4d39 100644 --- a/web/src/utils/index.ts +++ b/web/src/utils/index.ts @@ -13,3 +13,4 @@ export * from './math'; export * from './columnFormatter'; export * from './colors'; export * from './regression'; +export * from './canvas'; diff --git a/web/src/utils/numbers.ts b/web/src/utils/numbers.ts index 76c6f87a6..bd0b86482 100644 --- a/web/src/utils/numbers.ts +++ b/web/src/utils/numbers.ts @@ -4,17 +4,6 @@ import max from 'lodash/max'; import isString from 'lodash/isString'; import isDate from 'lodash/isDate'; -const DO_NOT_FORMAT_NUMERICAL_KEYS = ['year', '_years', '_id', 'id_']; -const DO_NOT_FORMAT_NUMERICAL_KEY_STRICT = ['id']; - -export const shouldRoundNumber = (value: string | number | undefined, key?: string) => { - return ( - isNumber(value) && - (!DO_NOT_FORMAT_NUMERICAL_KEYS.some((k) => key?.includes(k)) || - (key && DO_NOT_FORMAT_NUMERICAL_KEY_STRICT.includes(key))) - ); -}; - export const roundNumber = ( input: string | number | undefined, minDecimals = 0, diff --git a/web/src/utils/text.ts b/web/src/utils/text.ts index ba3e99c43..4bf355682 100644 --- a/web/src/utils/text.ts +++ b/web/src/utils/text.ts @@ -1,12 +1,5 @@ -import memoize from 'lodash/memoize'; -import isString from 'lodash/isString'; -import values from 'lodash/values'; import isNumber from 'lodash/isNumber'; -import round from 'lodash/round'; -import max from 'lodash/max'; -import { formatNumber, shouldRoundNumber } from './numbers'; - -const isBrowser = typeof window !== 'undefined'; +import { formatNumber } from './numbers'; export const inputHasText = (input: unknown): boolean => { if (typeof input !== 'string') { @@ -40,15 +33,12 @@ export const removeAllSpaces = (str?: string) => { return str ? str.replace(/\s/g, '') : ''; }; -export const makeHumanReadble = ( - input: string | number | undefined | null, - key?: string -): string => { +export const makeHumanReadble = (input: string | number | undefined | null): string => { if (!input && !isNumber(input)) { return ''; } - if (shouldRoundNumber(input, key)) { + if (isNumber(input)) { return formatNumber(input, { compact: false, minDecimals: 0, @@ -78,37 +68,3 @@ export const makeHumanReadble = ( const capitalizedWords = words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)); return capitalizedWords.join(' '); }; - -let ctx: CanvasRenderingContext2D; -const getCanvasContext = () => { - if (!ctx) { - //@ts-ignore - ctx = document.createElement('canvas').getContext('2d'); - } - - return ctx; -}; - -export const measureTextWidth = memoize( - (text: string, font: any = {}) => { - if (isBrowser) { - const { fontSize, fontFamily = 'sans-serif', fontWeight, fontStyle, fontVariant } = font; - const ctx = getCanvasContext(); - // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font - ctx.font = [fontStyle, fontWeight, fontVariant, `${fontSize || 13.6}px`, fontFamily].join( - ' ' - ); - const metrics = ctx.measureText(isString(text) ? text : ''); - - return { - width: metrics.width, - height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent - }; - } - return { - width: 0, - height: 0 - }; - }, - (text: string, font = {}) => [text, ...values(font)].join('') -);