From b90a13c498996d4e716371cf3d40233bc3a5dcd4 Mon Sep 17 00:00:00 2001 From: LZS911 <932177767@qq.com> Date: Tue, 3 Dec 2024 16:01:54 +0800 Subject: [PATCH 1/4] [feature]: Add `create-dms-page` CLI for automating DMS page creation --- .gitignore | 4 +- package.json | 4 +- packages/base/src/locale/zh-CN/dmsMenu.ts | 1 + packages/base/src/locale/zh-CN/index.ts | 1 + .../page/Nav/SideMenu/MenuList/menus/base.tsx | 2 + .../Nav/SideMenu/MenuList/menus/index.type.ts | 10 +- .../Nav/SideMenu/MenuList/menus/menu.data.tsx | 1 + .../page/Nav/SideMenu/MenuList/menus/sqle.tsx | 2 + packages/base/src/router/router.base.tsx | 177 ++-- packages/base/src/router/router.tsx | 12 +- packages/sqle/src/locale/zh-CN/index.ts | 2 + packages/sqle/src/router/config.tsx | 2 + pnpm-lock.yaml | 920 +++++++++++++----- pnpm-workspace.yaml | 1 + scripts/cli/create-dms-page/README.md | 49 + scripts/cli/create-dms-page/bin/core.js | 2 + scripts/cli/create-dms-page/package.json | 42 + .../cli/create-dms-page/src/common/Task.ts | 7 + .../create-dms-page/src/create-dms-page.ts | 75 ++ scripts/cli/create-dms-page/src/index.ts | 14 + .../src/module/icon-manager/index.ts | 107 ++ .../src/module/icon-manager/interface.ts | 10 + .../create-dms-page/src/module/interface.ts | 4 + .../src/module/locale-manager/index.ts | 91 ++ .../src/module/locale-manager/interface.ts | 11 + .../src/module/menu-manager/index.ts | 186 ++++ .../src/module/menu-manager/interface.ts | 13 + .../src/module/module-orchestrator.ts | 23 + .../module/page-component-manager/index.ts | 88 ++ .../page-component-manager/interface.ts | 8 + .../module/route-path-config-manager/index.ts | 186 ++++ .../route-path-config-manager/interface.ts | 14 + .../cli/create-dms-page/src/template/index.ts | 25 + scripts/cli/create-dms-page/src/types.d.ts | 1 + .../create-dms-page/src/utils/babel-utils.ts | 535 ++++++++++ .../create-dms-page/src/utils/handle-error.ts | 16 + .../cli/create-dms-page/src/utils/logger.ts | 53 + .../create-dms-page/src/utils/path-utils.ts | 250 +++++ .../create-dms-page/src/utils/spawn-util.ts | 19 + .../create-dms-page/src/utils/str-utils.ts | 28 + .../create-dms-page/src/utils/writer-utils.ts | 89 ++ scripts/cli/create-dms-page/tsconfig.json | 106 ++ 42 files changed, 2865 insertions(+), 326 deletions(-) create mode 100644 scripts/cli/create-dms-page/README.md create mode 100755 scripts/cli/create-dms-page/bin/core.js create mode 100644 scripts/cli/create-dms-page/package.json create mode 100644 scripts/cli/create-dms-page/src/common/Task.ts create mode 100644 scripts/cli/create-dms-page/src/create-dms-page.ts create mode 100644 scripts/cli/create-dms-page/src/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/icon-manager/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/icon-manager/interface.ts create mode 100644 scripts/cli/create-dms-page/src/module/interface.ts create mode 100644 scripts/cli/create-dms-page/src/module/locale-manager/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/locale-manager/interface.ts create mode 100644 scripts/cli/create-dms-page/src/module/menu-manager/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/menu-manager/interface.ts create mode 100644 scripts/cli/create-dms-page/src/module/module-orchestrator.ts create mode 100644 scripts/cli/create-dms-page/src/module/page-component-manager/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/page-component-manager/interface.ts create mode 100644 scripts/cli/create-dms-page/src/module/route-path-config-manager/index.ts create mode 100644 scripts/cli/create-dms-page/src/module/route-path-config-manager/interface.ts create mode 100644 scripts/cli/create-dms-page/src/template/index.ts create mode 100644 scripts/cli/create-dms-page/src/types.d.ts create mode 100644 scripts/cli/create-dms-page/src/utils/babel-utils.ts create mode 100644 scripts/cli/create-dms-page/src/utils/handle-error.ts create mode 100644 scripts/cli/create-dms-page/src/utils/logger.ts create mode 100644 scripts/cli/create-dms-page/src/utils/path-utils.ts create mode 100644 scripts/cli/create-dms-page/src/utils/spawn-util.ts create mode 100644 scripts/cli/create-dms-page/src/utils/str-utils.ts create mode 100644 scripts/cli/create-dms-page/src/utils/writer-utils.ts create mode 100644 scripts/cli/create-dms-page/tsconfig.json diff --git a/.gitignore b/.gitignore index 04a7b2685..b3e42a14f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ # dependencies /packages/*/node_modules -/scripts/*/node_modules +/scripts/**/node_modules /node_modules /.pnpm-store /.pnp @@ -41,4 +41,4 @@ yarn-error.log* /packages/icons/.dumi/tmp* docs-dist docs-dist.tar.gz -es \ No newline at end of file +es diff --git a/package.json b/package.json index 8a8cbe422..61a089418 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,13 @@ "icon:docs:g": "pnpm --filter @actiontech/icons docs:g", "icon:docs": "pnpm --filter @actiontech/icons start", "icon:docs:build": "pnpm --filter @actiontech/icons docs:build", - "icon:build": "pnpm --filter @actiontech/icons build" + "icon:build": "pnpm --filter @actiontech/icons build", + "dms:g": "pnpm --filter @actiontech/cli-create-dms-page build && create-dms-page" }, "keywords": [], "author": "", "devDependencies": { + "@actiontech/cli-create-dms-page": "workspace:^", "@cfaester/enzyme-adapter-react-18": "^0.7.0", "@testing-library/dom": "9.3.4", "@testing-library/jest-dom": "6.4.2", diff --git a/packages/base/src/locale/zh-CN/dmsMenu.ts b/packages/base/src/locale/zh-CN/dmsMenu.ts index 6462ac620..2b58571bd 100644 --- a/packages/base/src/locale/zh-CN/dmsMenu.ts +++ b/packages/base/src/locale/zh-CN/dmsMenu.ts @@ -1,3 +1,4 @@ +// @warn/cli/create-dms-page // eslint-disable-next-line import/no-anonymous-default-export export default { projectOverview: '项目概览', diff --git a/packages/base/src/locale/zh-CN/index.ts b/packages/base/src/locale/zh-CN/index.ts index 1f60afb8f..f715c66cd 100644 --- a/packages/base/src/locale/zh-CN/index.ts +++ b/packages/base/src/locale/zh-CN/index.ts @@ -1,3 +1,4 @@ +// @warn/cli/create-dms-page import dmsLogin from './dmsLogin'; import dmsHome from './dmsHome'; import dmsLayout from './dmsLayout'; diff --git a/packages/base/src/page/Nav/SideMenu/MenuList/menus/base.tsx b/packages/base/src/page/Nav/SideMenu/MenuList/menus/base.tsx index 111301fb7..28292ae5a 100644 --- a/packages/base/src/page/Nav/SideMenu/MenuList/menus/base.tsx +++ b/packages/base/src/page/Nav/SideMenu/MenuList/menus/base.tsx @@ -1,3 +1,5 @@ +// @warn/cli/create-dms-page + import { MemberFilled, ExportFilled, diff --git a/packages/base/src/page/Nav/SideMenu/MenuList/menus/index.type.ts b/packages/base/src/page/Nav/SideMenu/MenuList/menus/index.type.ts index 4cb9f01a0..0a7f8c901 100644 --- a/packages/base/src/page/Nav/SideMenu/MenuList/menus/index.type.ts +++ b/packages/base/src/page/Nav/SideMenu/MenuList/menus/index.type.ts @@ -1,3 +1,5 @@ +// @warn/cli/create-dms-page + import { PermissionsConstantType } from '@actiontech/shared/lib/global'; import { ItemType } from 'antd/es/menu/hooks/useItems'; @@ -21,11 +23,13 @@ export type MenuStructTreeType = Array< export type GenerateMenuItemType = (projectID: string) => CustomMenuItemType; -export type MenuStructTreeKey = +type BaseMenuStructTreeKey = | 'instance' | 'member' | 'cloud-beaver' - | 'data-export' + | 'data-export'; + +type SqleMenuStructTreeKey = | 'project-overview' | 'sql-audit' | 'plugin-audit' @@ -42,3 +46,5 @@ export type MenuStructTreeKey = | 'pipeline-configuration' | 'version-management' | 'data-source-comparison'; + +export type MenuStructTreeKey = BaseMenuStructTreeKey | SqleMenuStructTreeKey; diff --git a/packages/base/src/page/Nav/SideMenu/MenuList/menus/menu.data.tsx b/packages/base/src/page/Nav/SideMenu/MenuList/menus/menu.data.tsx index 092e2e599..8e4e9d3ad 100644 --- a/packages/base/src/page/Nav/SideMenu/MenuList/menus/menu.data.tsx +++ b/packages/base/src/page/Nav/SideMenu/MenuList/menus/menu.data.tsx @@ -1,3 +1,4 @@ +// @warn/cli/create-dms-page import { t } from '../../../../../locale'; import { MenuStructTreeType } from './index.type'; import { genMenuItemsWithMenuStructTree } from './common'; diff --git a/packages/base/src/page/Nav/SideMenu/MenuList/menus/sqle.tsx b/packages/base/src/page/Nav/SideMenu/MenuList/menus/sqle.tsx index d0540a6f0..342f2ecce 100644 --- a/packages/base/src/page/Nav/SideMenu/MenuList/menus/sqle.tsx +++ b/packages/base/src/page/Nav/SideMenu/MenuList/menus/sqle.tsx @@ -1,3 +1,5 @@ +// @warn/cli/create-dms-page + import { SIDE_MENU_DATA_PLACEHOLDER_KEY } from './common'; import { t } from '../../../../../locale'; import { GenerateMenuItemType } from './index.type'; diff --git a/packages/base/src/router/router.base.tsx b/packages/base/src/router/router.base.tsx index 9fd23717a..6bd637588 100644 --- a/packages/base/src/router/router.base.tsx +++ b/packages/base/src/router/router.base.tsx @@ -1,60 +1,69 @@ +// @warn/cli/create-dms-page import { PERMISSIONS } from '@actiontech/shared/lib/global'; import { ROUTE_PATHS } from '@actiontech/shared/lib/data/routePaths'; import { RouterConfigItem } from '@actiontech/shared/lib/types/common.type'; -import { lazy } from 'react'; - +import React from 'react'; // #if [ee] -const Project = lazy(() => import('../page/Project')); -const ImportProject = lazy(() => import('../page/Project/ImportProject')); -const ProjectBatchImportDataSource = lazy( +const Project = React.lazy(() => import('../page/Project')); +const ImportProject = React.lazy(() => import('../page/Project/ImportProject')); +const ProjectBatchImportDataSource = React.lazy( () => import('../page/Project/BatchImportDataSource') ); -const ExportTaskList = lazy(() => import('../page/DataExportManagement/List')); -const CreateExportTask = lazy( +const ExportTaskList = React.lazy( + () => import('../page/DataExportManagement/List') +); +const CreateExportTask = React.lazy( () => import('../page/DataExportManagement/Create') ); -const ExportTaskDetail = lazy( +const ExportTaskDetail = React.lazy( () => import('../page/DataExportManagement/Detail') ); -const AddSyncTask = lazy(() => import('../page/SyncDataSource/AddPage')); -const UpdateSyncTask = lazy(() => import('../page/SyncDataSource/UpdatePage')); -const BatchImportDataSource = lazy( +const AddSyncTask = React.lazy(() => import('../page/SyncDataSource/AddPage')); +const UpdateSyncTask = React.lazy( + () => import('../page/SyncDataSource/UpdatePage') +); +const BatchImportDataSource = React.lazy( () => import('../page/DataSource/components/BatchImportDataSource') ); -const GlobalBatchImportDataSource = lazy( +const GlobalBatchImportDataSource = React.lazy( () => import('../page/GlobalDataSource/BatchImportDataSource') ); -const GlobalAddDataSource = lazy( +const GlobalAddDataSource = React.lazy( () => import('../page/DataSource/components/AddDataSource') ); // #endif -const Home = lazy(() => import('../page/Home')); -const UserCenter = lazy(() => import('../page/UserCenter')); -const DataSource = lazy(() => import('../page/DataSource')); -const AddDataSource = lazy( +const Home = React.lazy(() => import('../page/Home')); +const UserCenter = React.lazy(() => import('../page/UserCenter')); +const DataSource = React.lazy(() => import('../page/DataSource')); +const AddDataSource = React.lazy( () => import('../page/DataSource/components/AddDataSource') ); -const UpdateDataSource = lazy( +const UpdateDataSource = React.lazy( () => import('../page/DataSource/components/UpdateDataSource') ); -const DataSourceList = lazy(() => import('../page/DataSource/components/List')); +const DataSourceList = React.lazy( + () => import('../page/DataSource/components/List') +); -const Member = lazy(() => import('../page/Member')); -const ProjectDetail = lazy(() => import('../page/Project/Detail')); -const System = lazy(() => import('../page/System')); +const Member = React.lazy(() => import('../page/Member')); +const System = React.lazy(() => import('../page/System')); -const CloudBeaver = lazy(() => import('../page/CloudBeaver')); -const Account = lazy(() => import('../page/Account')); -const ExportTaskManagement = lazy(() => import('../page/DataExportManagement')); -const DataSourceManagement = lazy(() => import('../page/DataSourceManagement')); +const CloudBeaver = React.lazy(() => import('../page/CloudBeaver')); +const Account = React.lazy(() => import('../page/Account')); +const ExportTaskManagement = React.lazy( + () => import('../page/DataExportManagement') +); +const DataSourceManagement = React.lazy( + () => import('../page/DataSourceManagement') +); -const Transit = lazy(() => import('../page/Transit')); +const Transit = React.lazy(() => import('../page/Transit')); -export const BaseRouterConfig: RouterConfigItem[] = [ +export const BaseGlobalRouterConfig: RouterConfigItem[] = [ { path: ROUTE_PATHS.BASE.HOME, key: 'home', @@ -144,77 +153,73 @@ export const BaseRouterConfig: RouterConfigItem[] = [ element: } ] - }, + } // #endif +]; +export const BaseProjectRouterConfig: RouterConfigItem[] = [ + { + path: ROUTE_PATHS.BASE.MEMBER.index.path, + key: 'member', + element: + }, { - key: 'projectDetail', - path: ROUTE_PATHS.BASE.PROJECT_DETAIL, - element: , + path: ROUTE_PATHS.BASE.DATA_SOURCE.index.path, + key: 'dataSource', + element: , children: [ { - path: ROUTE_PATHS.BASE.MEMBER.index.path, - key: 'member', - element: + index: true, + element: , + key: 'dataSourceList' + }, + { + path: ROUTE_PATHS.BASE.DATA_SOURCE.create.path, + element: , + key: 'dataSourceCreate' }, { - path: ROUTE_PATHS.BASE.DATA_SOURCE.index.path, - key: 'dataSource', - element: , - children: [ - { - index: true, - element: , - key: 'dataSourceList' - }, - { - path: ROUTE_PATHS.BASE.DATA_SOURCE.create.path, - element: , - key: 'dataSourceCreate' - }, - { - path: ROUTE_PATHS.BASE.DATA_SOURCE.update.path, - element: , - key: 'dataSourceUpdate' - }, - // #if [ee] - { - path: ROUTE_PATHS.BASE.DATA_SOURCE.batch_import.path, - element: , - key: 'batchImportDataSource' - } - // #endif - ] + path: ROUTE_PATHS.BASE.DATA_SOURCE.update.path, + element: , + key: 'dataSourceUpdate' }, + // #if [ee] + { + path: ROUTE_PATHS.BASE.DATA_SOURCE.batch_import.path, + element: , + key: 'batchImportDataSource' + } + // #endif + ] + }, + { + path: ROUTE_PATHS.BASE.DATA_EXPORT.index.path, + key: 'dataExportManagement', + element: , + // #if [ee] + children: [ { - path: ROUTE_PATHS.BASE.DATA_EXPORT.index.path, + index: true, key: 'dataExportManagement', - element: , - // #if [ee] - children: [ - { - index: true, - key: 'dataExportManagement', - element: - }, - { - path: ROUTE_PATHS.BASE.DATA_EXPORT.create.path, - element: , - key: 'CreateExportTask' - }, - { - path: ROUTE_PATHS.BASE.DATA_EXPORT.detail.path, - element: , - key: 'ExportTaskDetail' - } - ] - // #endif + element: + }, + { + path: ROUTE_PATHS.BASE.DATA_EXPORT.create.path, + element: , + key: 'CreateExportTask' }, { - path: ROUTE_PATHS.BASE.CLOUD_BEAVER.index.path, - key: 'cloudBeaver', - element: + path: ROUTE_PATHS.BASE.DATA_EXPORT.detail.path, + element: , + key: 'ExportTaskDetail' } ] + + // #endif + }, + { + path: ROUTE_PATHS.BASE.CLOUD_BEAVER.index.path, + key: 'cloudBeaver', + element: } ]; diff --git a/packages/base/src/router/router.tsx b/packages/base/src/router/router.tsx index 29179a2b9..f3ee13b1a 100644 --- a/packages/base/src/router/router.tsx +++ b/packages/base/src/router/router.tsx @@ -1,7 +1,7 @@ import { Navigate, RouteObject } from 'react-router-dom'; import { RouterConfigItem } from '@actiontech/shared/lib/types/common.type'; import { lazy } from 'react'; -import { BaseRouterConfig } from './router.base'; +import { BaseGlobalRouterConfig, BaseProjectRouterConfig } from './router.base'; import { ROUTE_PATHS } from '@actiontech/shared/lib/data/routePaths'; // #if [sqle] @@ -14,12 +14,18 @@ import { const ProjectDetail = lazy(() => import('../page/Project/Detail')); export const AuthRouterConfig: RouterConfigItem[] = [ - ...BaseRouterConfig, + ...BaseGlobalRouterConfig, + { + key: 'projectDetail', + path: ROUTE_PATHS.BASE.PROJECT_DETAIL, + element: , + children: BaseProjectRouterConfig + }, // #if [sqle] ...SQLEGlobalRouterConfig, { - key: 'projectDetail', + key: 'sqleProjectDetail', path: ROUTE_PATHS.BASE.SQLE_PROJECT_DETAIL, element: , children: SQLEProjectDetailRouterConfig diff --git a/packages/sqle/src/locale/zh-CN/index.ts b/packages/sqle/src/locale/zh-CN/index.ts index 8e1c0fa2b..f28dc0c9a 100644 --- a/packages/sqle/src/locale/zh-CN/index.ts +++ b/packages/sqle/src/locale/zh-CN/index.ts @@ -1,3 +1,5 @@ +// @warn/cli/create-dms-page + import audit from './audit'; import dashboard from './dashboard'; import menu from './menu'; diff --git a/packages/sqle/src/router/config.tsx b/packages/sqle/src/router/config.tsx index 460ce3dc3..f9530ec2f 100644 --- a/packages/sqle/src/router/config.tsx +++ b/packages/sqle/src/router/config.tsx @@ -1,3 +1,5 @@ +// @warn/cli/create-dms-page + import React from 'react'; import { Navigate } from 'react-router-dom'; import { RouterConfigItem } from '@actiontech/shared/lib/types/common.type'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64aded0e0..faf70c76e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,6 +122,9 @@ importers: specifier: ^12.2.4 version: 12.2.4 devDependencies: + '@actiontech/cli-create-dms-page': + specifier: workspace:^ + version: link:scripts/cli/create-dms-page '@cfaester/enzyme-adapter-react-18': specifier: ^0.7.0 version: 0.7.0(enzyme@3.11.0)(react-dom@18.2.0)(react@18.2.0) @@ -307,7 +310,7 @@ importers: version: 8.1.0 dumi: specifier: ^2.3.8 - version: 2.3.8(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@2.8.7)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0) + version: 2.3.8(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@3.3.3)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0) father: specifier: ^4.1.0 version: 4.1.0(webpack@5.92.0) @@ -352,6 +355,73 @@ importers: specifier: ^2.2.0 version: 2.2.0 + scripts/cli/create-dms-page: + dependencies: + '@babel/generator': + specifier: ^7.25.0 + version: 7.25.0 + '@babel/parser': + specifier: ^7.24.8 + version: 7.24.8 + '@babel/traverse': + specifier: ^7.24.8 + version: 7.24.8 + '@babel/types': + specifier: ^7.24.9 + version: 7.24.9 + '@faker-js/faker': + specifier: ^9.0.1 + version: 9.0.1 + '@gitbeaker/rest': + specifier: ^40.1.1 + version: 40.1.1 + '@inquirer/prompts': + specifier: ^5.1.2 + version: 5.1.2 + '@octokit/core': + specifier: 3.5.1 + version: 3.5.1 + chalk: + specifier: ^4.1.2 + version: 4.1.2 + cli-progress: + specifier: ^3.12.0 + version: 3.12.0 + clipboardy: + specifier: ^4.0.0 + version: 4.0.0 + commander: + specifier: ^12.1.0 + version: 12.1.0 + node-clipboardy: + specifier: ^1.0.3 + version: 1.0.3 + ora: + specifier: '^5.4.1 ' + version: 5.4.1 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + readline: + specifier: ^1.3.0 + version: 1.3.0 + tar: + specifier: ^7.4.0 + version: 7.4.0 + zod: + specifier: ^3.23.8 + version: 3.23.8 + devDependencies: + '@types/babel__generator': + specifier: ^7.6.8 + version: 7.6.8 + '@types/babel__traverse': + specifier: ^7.20.6 + version: 7.20.6 + '@types/cli-progress': + specifier: ^3.11.6 + version: 3.11.6 + packages: /@adobe/css-tools@4.3.2: @@ -666,6 +736,14 @@ packages: '@babel/highlight': 7.24.6 picocolors: 1.0.0 + /@babel/code-frame@7.26.2: + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.0.0 + /@babel/compat-data@7.24.6: resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} @@ -675,15 +753,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.24.6 - '@babel/generator': 7.24.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-module-transforms': 7.24.6(@babel/core@7.23.6) '@babel/helpers': 7.24.6 - '@babel/parser': 7.24.6 - '@babel/template': 7.24.6 - '@babel/traverse': 7.24.6 - '@babel/types': 7.24.6 + '@babel/parser': 7.24.8 + '@babel/template': 7.25.9 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -699,14 +777,14 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.24.6 - '@babel/generator': 7.24.6 + '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.3) '@babel/helpers': 7.24.6 - '@babel/parser': 7.24.6 + '@babel/parser': 7.24.8 '@babel/template': 7.24.6 - '@babel/traverse': 7.24.6 - '@babel/types': 7.24.6 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -722,14 +800,14 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.24.6 - '@babel/generator': 7.24.6 + '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) '@babel/helpers': 7.24.6 - '@babel/parser': 7.24.6 + '@babel/parser': 7.24.8 '@babel/template': 7.24.6 - '@babel/traverse': 7.24.6 - '@babel/types': 7.24.6 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -769,18 +847,18 @@ packages: /@babel/generator@7.2.0: resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 jsesc: 2.5.2 lodash: 4.17.21 source-map: 0.5.7 trim-right: 1.0.1 dev: true - /@babel/generator@7.24.6: - resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} + /@babel/generator@7.25.0: + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -789,19 +867,19 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-annotate-as-pure@7.24.6: resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-builder-binary-assignment-operator-visitor@7.24.6: resolution: {integrity: sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-compilation-targets@7.24.6: resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} @@ -821,13 +899,13 @@ packages: dependencies: '@babel/core': 7.24.6 '@babel/helper-annotate-as-pure': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 - '@babel/helper-function-name': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.6 '@babel/helper-optimise-call-expression': 7.24.6 '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 /@babel/helper-create-class-features-plugin@7.24.6(@babel/core@7.24.6): @@ -838,13 +916,13 @@ packages: dependencies: '@babel/core': 7.24.6 '@babel/helper-annotate-as-pure': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 - '@babel/helper-function-name': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.6 '@babel/helper-optimise-call-expression': 7.24.6 '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 /@babel/helper-create-regexp-features-plugin@7.24.6(@babel/core@7.24.6): @@ -887,40 +965,42 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-environment-visitor@7.24.6: - resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.9 - /@babel/helper-function-name@7.24.6: - resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.6 - '@babel/types': 7.24.6 + '@babel/template': 7.25.9 + '@babel/types': 7.24.9 - /@babel/helper-hoist-variables@7.24.6: - resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-member-expression-to-functions@7.24.6: resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-module-imports@7.24.6: resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-module-transforms@7.24.6(@babel/core@7.23.6): resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} @@ -929,11 +1009,11 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.23.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.6 '@babel/helper-simple-access': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 dev: true /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.3): @@ -943,11 +1023,11 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.3 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.6 '@babel/helper-simple-access': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 dev: true /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6): @@ -957,17 +1037,17 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.6 '@babel/helper-simple-access': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 /@babel/helper-optimise-call-expression@7.24.6: resolution: {integrity: sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -986,7 +1066,7 @@ packages: dependencies: '@babel/core': 7.24.6 '@babel/helper-annotate-as-pure': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-wrap-function': 7.24.6 /@babel/helper-replace-supers@7.22.20(@babel/core@7.24.6): @@ -996,7 +1076,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.6 '@babel/helper-optimise-call-expression': 7.24.6 @@ -1007,7 +1087,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.6 '@babel/helper-optimise-call-expression': 7.24.6 @@ -1015,38 +1095,38 @@ packages: resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-skip-transparent-expression-wrappers@7.24.6: resolution: {integrity: sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 - /@babel/helper-split-export-declaration@7.24.6: - resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 - /@babel/helper-string-parser@7.24.6: - resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.6: - resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.24.6: @@ -1057,22 +1137,22 @@ packages: resolution: {integrity: sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.24.6 - '@babel/template': 7.24.6 - '@babel/types': 7.24.6 + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.25.9 + '@babel/types': 7.24.9 /@babel/helpers@7.24.6: resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.6 - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 dev: true @@ -1081,17 +1161,24 @@ packages: resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - /@babel/parser@7.24.6: - resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} + /@babel/parser@7.24.8: + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.9 + + /@babel/parser@7.26.2: + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.26.0 /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.6(@babel/core@7.24.6): resolution: {integrity: sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==} @@ -1100,7 +1187,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.6 /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.6(@babel/core@7.24.6): @@ -1130,7 +1217,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.6 /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.6): @@ -1433,7 +1520,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-remap-async-to-generator': 7.24.6(@babel/core@7.24.6) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) @@ -1497,11 +1584,11 @@ packages: '@babel/core': 7.24.6 '@babel/helper-annotate-as-pure': 7.24.6 '@babel/helper-compilation-targets': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 - '@babel/helper-function-name': 7.24.6 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) - '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 /@babel/plugin-transform-computed-properties@7.24.6(@babel/core@7.24.6): @@ -1600,7 +1687,7 @@ packages: dependencies: '@babel/core': 7.24.6 '@babel/helper-compilation-targets': 7.24.6 - '@babel/helper-function-name': 7.24.6 + '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.6 /@babel/plugin-transform-json-strings@7.24.6(@babel/core@7.24.6): @@ -1681,10 +1768,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.6 - '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) '@babel/helper-plugin-utils': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-validator-identifier': 7.25.9 /@babel/plugin-transform-modules-umd@7.24.6(@babel/core@7.24.6): resolution: {integrity: sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==} @@ -1867,7 +1954,7 @@ packages: '@babel/helper-module-imports': 7.24.6 '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.24.6): resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} @@ -2109,7 +2196,7 @@ packages: dependencies: '@babel/core': 7.24.6 '@babel/helper-plugin-utils': 7.24.6 - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 esutils: 2.0.3 /@babel/preset-react@7.18.6(@babel/core@7.24.6): @@ -2164,35 +2251,50 @@ packages: resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.6 - '@babel/parser': 7.24.6 - '@babel/types': 7.24.6 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 - /@babel/traverse@7.24.6: - resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.6 - '@babel/generator': 7.24.6 - '@babel/helper-environment-visitor': 7.24.6 - '@babel/helper-function-name': 7.24.6 - '@babel/helper-hoist-variables': 7.24.6 - '@babel/helper-split-export-declaration': 7.24.6 - '@babel/parser': 7.24.6 - '@babel/types': 7.24.6 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + + /@babel/traverse@7.24.8: + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.25.0 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.24.6: - resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} + /@babel/types@7.24.9: + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 + /@babel/types@7.26.0: + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -3216,6 +3318,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@faker-js/faker@9.0.1: + resolution: {integrity: sha512-4mDeYIgM3By7X6t5E6eYwLAa+2h4DeZDF7thhzIg6XB76jeEvMwadYAMCFJL/R4AnEBcAUO9+gL0vhy3s+qvZA==} + engines: {node: '>=18.0.0', npm: '>=9.0.0'} + dev: false + /@floating-ui/core@0.6.2: resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==} dev: true @@ -3322,6 +3429,33 @@ packages: typescript: 5.4.3 dev: true + /@gitbeaker/core@40.6.0: + resolution: {integrity: sha512-tVVm8ZPrS9YCHEcuPV8vD1IcEf9POpdygWo+kPvkK7LcC36EERVcXagb8snEaGgGLfUaVQh8qP4iDZgPnP3YBQ==} + engines: {node: '>=18.20.0'} + dependencies: + '@gitbeaker/requester-utils': 40.6.0 + qs: 6.13.1 + xcase: 2.0.1 + dev: false + + /@gitbeaker/requester-utils@40.6.0: + resolution: {integrity: sha512-DQu2l3iXtB+8e1Ye2ekeUHABt4mGMRTLtuVWtFqf74sqJnerHNOxVOjPn19qu/nKdvKR3ZLwSRTtPzEsxgcShg==} + engines: {node: '>=18.20.0'} + dependencies: + picomatch-browser: 2.2.6 + qs: 6.13.1 + rate-limiter-flexible: 4.0.1 + xcase: 2.0.1 + dev: false + + /@gitbeaker/rest@40.1.1: + resolution: {integrity: sha512-iYDqghGNGhAG6KJnuat4qHCTaXCuSfxDkP42toaMgJpdzey4Mx4AvA/ko89osbOB+cnlg+dvfmP67U5ih9Jijg==} + engines: {node: '>=18.20.0'} + dependencies: + '@gitbeaker/core': 40.6.0 + '@gitbeaker/requester-utils': 40.6.0 + dev: false + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -3359,6 +3493,140 @@ packages: - supports-color dev: true + /@inquirer/checkbox@2.5.0: + resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/confirm@3.2.0: + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/core@9.2.1: + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/figures': 1.0.8 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.9.0 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/editor@2.2.0: + resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + external-editor: 3.1.0 + dev: false + + /@inquirer/expand@2.3.0: + resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/figures@1.0.8: + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + engines: {node: '>=18'} + dev: false + + /@inquirer/input@2.3.0: + resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/number@1.1.0: + resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/password@2.2.0: + resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + dev: false + + /@inquirer/prompts@5.1.2: + resolution: {integrity: sha512-E+ndnfwtVQtcmPt888Hc/HAxJUHSaA6OIvyvLAQ5BLQv+t20GbYdFSjXeLgb47OpMU+aRsKA/ys+Zoylw3kTVg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/checkbox': 2.5.0 + '@inquirer/confirm': 3.2.0 + '@inquirer/editor': 2.2.0 + '@inquirer/expand': 2.3.0 + '@inquirer/input': 2.3.0 + '@inquirer/number': 1.1.0 + '@inquirer/password': 2.2.0 + '@inquirer/rawlist': 2.3.0 + '@inquirer/select': 2.5.0 + dev: false + + /@inquirer/rawlist@2.3.0: + resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/select@2.5.0: + resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/type@1.5.5: + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + dependencies: + mute-stream: 1.0.0 + dev: false + + /@inquirer/type@2.0.0: + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + dependencies: + mute-stream: 1.0.0 + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3369,7 +3637,13 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + + /@isaacs/fs-minipass@4.0.1: + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + dependencies: + minipass: 7.1.2 + dev: false /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -4058,6 +4332,75 @@ packages: fastq: 1.15.0 dev: true + /@octokit/auth-token@2.5.0: + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + dependencies: + '@octokit/types': 6.41.0 + dev: false + + /@octokit/core@3.5.1: + resolution: {integrity: sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==} + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/endpoint@6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/graphql@4.8.0: + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + dependencies: + '@octokit/request': 5.6.3 + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/openapi-types@12.11.0: + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + dev: false + + /@octokit/request-error@2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request@5.6.3: + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/types@6.41.0: + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + dependencies: + '@octokit/openapi-types': 12.11.0 + dev: false + /@open-draft/until@1.0.3: resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} dev: true @@ -4066,7 +4409,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true - dev: true optional: true /@pkgr/utils@2.4.2: @@ -4649,7 +4991,7 @@ packages: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 entities: 4.4.0 dev: true @@ -4657,7 +4999,7 @@ packages: resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} engines: {node: '>=14'} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 entities: 4.4.0 dev: true @@ -4975,40 +5317,40 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.24.6 - '@babel/types': 7.24.6 - '@types/babel__generator': 7.6.4 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 + '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.6 dev: true /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.6 - '@babel/types': 7.24.6 - '@types/babel__generator': 7.6.4 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 + '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.6 dev: true - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.24.6 - '@babel/types': 7.24.6 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 dev: true - /@types/babel__traverse@7.18.3: - resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 dev: true /@types/cheerio@0.22.31: @@ -5017,6 +5359,12 @@ packages: '@types/node': 13.9.3 dev: true + /@types/cli-progress@3.11.6: + resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true @@ -5225,6 +5573,12 @@ packages: /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 18.15.11 + dev: false + /@types/node@12.20.24: resolution: {integrity: sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==} dev: true @@ -5239,7 +5593,12 @@ packages: /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - dev: true + + /@types/node@22.9.0: + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + dependencies: + undici-types: 6.19.8 + dev: false /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5361,6 +5720,10 @@ packages: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: false + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: false + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true @@ -6679,7 +7042,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-escapes@6.1.0: resolution: {integrity: sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==} @@ -6712,12 +7074,10 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} @@ -6735,7 +7095,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -6745,7 +7104,6 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true /antd@5.7.3(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7sQeE86XkUrYDIKGu/Qu7kl+NWYzkVSGbGqWGIbITHkFZorCyOvvqgF63fiWo/tp2lZWbEOO0Cm7IiYnoeWh9A==} @@ -6825,6 +7183,10 @@ packages: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} dev: true + /arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: false + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true @@ -7105,10 +7467,10 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.24.6 - '@babel/types': 7.24.6 + '@babel/template': 7.25.9 + '@babel/types': 7.24.9 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.6 dev: true /babel-plugin-macros@3.1.0: @@ -7200,7 +7562,7 @@ packages: resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==} dependencies: '@babel/generator': 7.2.0 - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 chalk: 4.1.2 invariant: 2.2.4 pretty-format: 24.9.0 @@ -7289,12 +7651,15 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true /bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} dev: false + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + /big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -7327,7 +7692,6 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true /blob-polyfill@7.0.20220408: resolution: {integrity: sha512-oD8Ydw+5lNoqq+en24iuPt1QixdPpe/nUF8azTHnviCZYu9zUC+TwdzIp5orpblJosNlgNbVmmAb//c6d6ImUQ==} @@ -7398,7 +7762,6 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -7535,7 +7898,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -7724,7 +8086,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /chalk@5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} @@ -7755,7 +8116,6 @@ packages: /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -7800,6 +8160,11 @@ packages: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true + /chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + dev: false + /chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -7856,7 +8221,13 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - dev: true + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: false /cli-spinners@1.3.1: resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==} @@ -7866,7 +8237,6 @@ packages: /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - dev: true /cli-width@2.2.1: resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} @@ -7877,6 +8247,11 @@ packages: engines: {node: '>= 10'} dev: true + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: false + /click-to-react-component@1.1.0(@types/react@18.0.15)(react-dom@18.1.0)(react@18.1.0): resolution: {integrity: sha512-/DjZemufS1BkxyRgZL3r7HXVVOFRWVQi5Xd4EBnjxZMwrHEh0OlUVA2N9CjXkZ0x8zMf8dL1cKnnx+xUWUg4VA==} peerDependencies: @@ -7891,6 +8266,15 @@ packages: - react-dom dev: true + /clipboardy@4.0.0: + resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} + engines: {node: '>=18'} + dependencies: + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 + dev: false + /cliui@2.1.0: resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==} dependencies: @@ -7911,7 +8295,6 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -7991,14 +8374,12 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} @@ -8040,6 +8421,11 @@ packages: /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -8345,7 +8731,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} @@ -8876,7 +9261,6 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -8924,6 +9308,10 @@ packages: engines: {node: '>= 0.8'} dev: true + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -9165,7 +9553,7 @@ packages: resolution: {integrity: sha512-mM6UoGTgTNoo8lA4dwaIwoeSGT+4PeQeiFylr2+kCB5z3/7NEf7lIM4tqrAsEyzecE/HX0+w7Z78hnFZQ9k5vQ==} dev: true - /dumi@2.3.8(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@2.8.7)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0): + /dumi@2.3.8(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@3.3.3)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0): resolution: {integrity: sha512-Hriz1EQ/b+wWtoUd19koonmUXPJA9kwVE7QcxZphZnXnF0RItbuaUC8we0xuYMGnElkgjpLIouEbUfTWSHXSDg==} hasBin: true peerDependencies: @@ -9235,7 +9623,7 @@ packages: sass: 1.77.5 sitemap: 7.1.2 sucrase: 3.35.0 - umi: 4.2.10(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@2.8.7)(react-dom@18.2.0)(react@18.2.0)(sass@1.77.5)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0) + umi: 4.2.10(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@3.3.3)(react-dom@18.2.0)(react@18.2.0)(sass@1.77.5)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0) unified: 10.1.2 unist-util-visit: 4.1.2 unist-util-visit-parents: 5.1.3 @@ -9298,7 +9686,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true /editions@2.3.1: resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==} @@ -9342,11 +9729,9 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} @@ -10282,7 +10667,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} @@ -10299,6 +10683,21 @@ packages: strip-final-newline: 3.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: false + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -10378,7 +10777,6 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -10690,7 +11088,6 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@4.7.4)(webpack@5.92.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -10699,7 +11096,7 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.26.2 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 @@ -10722,7 +11119,7 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.26.2 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 @@ -10921,7 +11318,11 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: false /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} @@ -11017,7 +11418,6 @@ packages: minimatch: 9.0.4 minipass: 7.1.2 path-scurry: 1.11.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -11197,7 +11597,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -11688,13 +12087,17 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: false + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -11720,7 +12123,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: true /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -11747,7 +12149,6 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /iferr@0.1.5: resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} @@ -12033,13 +12434,11 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: true /is-equal@1.7.0: resolution: {integrity: sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==} @@ -12093,7 +12492,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -12127,7 +12525,6 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 - dev: true /is-installed-globally@0.1.0: resolution: {integrity: sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==} @@ -12140,7 +12537,6 @@ packages: /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - dev: true /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -12206,7 +12602,6 @@ packages: /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - dev: true /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -12247,12 +12642,10 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -12279,7 +12672,6 @@ packages: /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: true /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} @@ -12316,7 +12708,20 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + dev: false + + /is64bit@2.0.0: + resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} + engines: {node: '>=18'} + dependencies: + system-architecture: 0.1.0 + dev: false /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} @@ -12331,7 +12736,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} @@ -12367,7 +12771,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.24.6 - '@babel/parser': 7.24.6 + '@babel/parser': 7.24.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -12380,7 +12784,7 @@ packages: engines: {node: '>=10'} dependencies: '@babel/core': 7.24.6 - '@babel/parser': 7.24.6 + '@babel/parser': 7.24.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.5.4 @@ -12442,7 +12846,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} @@ -12736,7 +13139,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.26.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -12871,10 +13274,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.24.6 - '@babel/generator': 7.24.6 + '@babel/generator': 7.25.0 '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) '@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6) - '@babel/types': 7.24.6 + '@babel/types': 7.24.9 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -12964,7 +13367,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 13.9.3 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -13590,7 +13993,6 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -13620,7 +14022,6 @@ packages: /lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - dev: true /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -13966,7 +14367,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -14265,12 +14665,10 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -14302,7 +14700,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - dev: true /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} @@ -14319,7 +14716,14 @@ packages: /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - dev: true + + /minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + dev: false /mississippi@1.3.1: resolution: {integrity: sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==} @@ -14359,6 +14763,12 @@ packages: minimist: 1.2.8 dev: true + /mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + dev: false + /mockdate@3.0.5: resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==} dev: true @@ -14448,6 +14858,11 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -14517,6 +14932,15 @@ packages: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} dev: true + /node-clipboardy@1.0.3: + resolution: {integrity: sha512-/ErAFOtWDNhZh38rrwlAo05Soxbht/rgWugLOt2Ds+NDpZ+2sPiGiwOmFWzV+65fUYjwi+EJfHByIJ4waTHbVg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + dev: false + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -14542,7 +14966,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -14684,14 +15107,12 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true /nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -14862,14 +15283,12 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true /open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} @@ -14944,7 +15363,6 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -14958,7 +15376,6 @@ packages: /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - dev: true /osenv@0.1.5: resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} @@ -15131,7 +15548,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -15215,12 +15632,10 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -15231,7 +15646,6 @@ packages: dependencies: lru-cache: 10.2.2 minipass: 7.1.2 - dev: true /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -15281,6 +15695,11 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picomatch-browser@2.2.6: + resolution: {integrity: sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==} + engines: {node: '>=8.6'} + dev: false + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -15860,7 +16279,7 @@ packages: fast-diff: 1.2.0 dev: true - /prettier-plugin-organize-imports@3.2.4(prettier@2.8.7)(typescript@5.4.3): + /prettier-plugin-organize-imports@3.2.4(prettier@3.3.3)(typescript@5.4.3): resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} peerDependencies: '@volar/vue-language-plugin-pug': ^1.0.4 @@ -15873,11 +16292,11 @@ packages: '@volar/vue-typescript': optional: true dependencies: - prettier: 2.8.7 + prettier: 3.3.3 typescript: 5.4.3 dev: true - /prettier-plugin-packagejson@2.4.3(prettier@2.8.7): + /prettier-plugin-packagejson@2.4.3(prettier@3.3.3): resolution: {integrity: sha512-kPeeviJiwy0BgOSk7No8NmzzXfW4R9FYWni6ziA5zc1kGVVrKnBzMZdu2TUhI+I7h8/5Htt3vARYOk7KKJTTNQ==} peerDependencies: prettier: '>= 1.16.0' @@ -15885,7 +16304,7 @@ packages: prettier: optional: true dependencies: - prettier: 2.8.7 + prettier: 3.3.3 sort-package-json: 2.4.1 synckit: 0.8.5 dev: true @@ -15896,6 +16315,11 @@ packages: hasBin: true dev: true + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: @@ -16121,6 +16545,12 @@ packages: side-channel: 1.0.6 dev: true + /qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + /query-string@6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} engines: {node: '>=6'} @@ -16216,6 +16646,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /rate-limiter-flexible@4.0.1: + resolution: {integrity: sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ==} + dev: false + /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -17290,7 +17724,6 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -17299,6 +17732,10 @@ packages: picomatch: 2.3.1 dev: true + /readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + dev: false + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} @@ -17729,7 +18166,6 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true /resumer@0.0.0: resolution: {integrity: sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==} @@ -17781,6 +18217,13 @@ packages: glob: 10.4.1 dev: true + /rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + dependencies: + glob: 10.4.1 + dev: false + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: @@ -17922,7 +18365,6 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} @@ -17939,7 +18381,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true /sass@1.77.5: resolution: {integrity: sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg==} @@ -18138,7 +18579,6 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} @@ -18148,7 +18588,6 @@ packages: /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /shortid@2.2.16: resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} @@ -18168,12 +18607,10 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - dev: true /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -18527,7 +18964,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -18536,7 +18972,6 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 - dev: true /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -18600,7 +19035,6 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - dev: true /stringify-entities@4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} @@ -18634,14 +19068,12 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -18661,12 +19093,10 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -18936,7 +19366,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -19045,6 +19474,11 @@ packages: tslib: 2.6.3 dev: true + /system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} + dev: false + /systemjs@6.15.1: resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} dev: true @@ -19108,6 +19542,18 @@ packages: xtend: 4.0.2 dev: true + /tar@7.4.0: + resolution: {integrity: sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==} + engines: {node: '>=18'} + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + dev: false + /term-size@1.2.0: resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} engines: {node: '>=4'} @@ -19244,7 +19690,6 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - dev: true /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -19289,7 +19734,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} @@ -19464,7 +19908,6 @@ packages: /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} @@ -19579,7 +20022,7 @@ packages: dev: false optional: true - /umi@4.2.10(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@2.8.7)(react-dom@18.2.0)(react@18.2.0)(sass@1.77.5)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0): + /umi@4.2.10(@babel/core@7.24.6)(@types/node@18.15.11)(@types/react@18.0.15)(eslint@8.38.0)(jest@29.1.2)(postcss-less@6.0.0)(prettier@3.3.3)(react-dom@18.2.0)(react@18.2.0)(sass@1.77.5)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.92.0): resolution: {integrity: sha512-PUnrHWTJVZ3ynr5BnpYalBeu9ugb4C8CNKZrFPSOeTaHQ4dLeJl3rL/ubdhaQVhSWKgMQlv1susQULecEjxlHQ==} engines: {node: '>=14'} hasBin: true @@ -19594,8 +20037,8 @@ packages: '@umijs/server': 4.2.10 '@umijs/test': 4.2.10(@babel/core@7.24.6) '@umijs/utils': 4.2.10 - prettier-plugin-organize-imports: 3.2.4(prettier@2.8.7)(typescript@5.4.3) - prettier-plugin-packagejson: 2.4.3(prettier@2.8.7) + prettier-plugin-organize-imports: 3.2.4(prettier@3.3.3)(typescript@5.4.3) + prettier-plugin-packagejson: 2.4.3(prettier@3.3.3) transitivePeerDependencies: - '@babel/core' - '@types/node' @@ -19638,6 +20081,10 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: false + /unfetch@5.0.0: resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} dev: true @@ -19735,6 +20182,10 @@ packages: unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: false + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -19813,7 +20264,7 @@ packages: resolution: {integrity: sha512-AM6OVeZNwKiirK3IwKxHuopgjX1jB0F8srK9OlCXN+wdmTNg6vgnN9xyQ5abhxq8Oj/kTleLU8OCfZ1FaEW37w==} dependencies: punycode: 1.4.1 - qs: 6.12.1 + qs: 6.13.1 dev: true /url-parse-lax@1.0.0: @@ -19879,7 +20330,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true /util-okam@0.11.1: resolution: {integrity: sha512-e2bG47F03vYx2MbA6znK6t6dwffnXGsVzh8BLpi0pcQ7dDRQf0zSAQ9IR7M+aoozALNibw8eCY53gEK8bBpSjg==} @@ -20163,7 +20613,6 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} @@ -20187,7 +20636,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -20272,7 +20720,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -20333,7 +20780,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /widest-line@2.0.1: resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==} @@ -20368,7 +20814,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -20377,7 +20822,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -20386,7 +20830,6 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.0.1 - dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -20428,6 +20871,10 @@ packages: optional: true dev: true + /xcase@2.0.1: + resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} + dev: false + /xdg-basedir@3.0.0: resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==} engines: {node: '>=4'} @@ -20484,6 +20931,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + dev: false + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -20525,6 +20977,11 @@ packages: engines: {node: '>=10'} dev: true + /yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + dev: false + /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} @@ -20548,7 +21005,6 @@ packages: /zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - dev: true /zustand@4.5.5(@types/react@18.0.15)(react@18.2.0): resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 600b4bb48..8cba9f65c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - 'packages/**' + - 'scripts/cli/create-dms-page' diff --git a/scripts/cli/create-dms-page/README.md b/scripts/cli/create-dms-page/README.md new file mode 100644 index 000000000..1ea974748 --- /dev/null +++ b/scripts/cli/create-dms-page/README.md @@ -0,0 +1,49 @@ +# CLI: create-dms-page + +## 背景 + +在现有的 DMS-UI 架构下,添加一个新的页面需要以下步骤: + +1. 添加菜单图标(SVG 文件)并生成对应的图标组件。 +2. 添加菜单语言包数据以及页面语言包文件。 +3. 添加页面路由配置数据,并在 ROUTE_PATHS 文件中新增对应的页面路径数据。 +4. 添加菜单相关数据。 + +由于上述流程涉及多个分散在项目不同位置的文件,导致整个过程较为繁琐。因此,设计了本脚手架来自动化这些流程。 + +## 使用方式 + +### 前提条件 + +复制菜单图标 SVG 文件(可选):粘贴板内容将用于生成菜单图标 SVG 文件。如果粘贴板内容不是 SVG 内容或没有内容,将使用默认 SVG 生成。请在流程结束后替换 SVG 内容并重新生成图标组件。 + +### 执行命令 + +在 dms-ui/dms-ui-ee 项目的根目录下执行以下命令: + +`pnpm dms:g ` + +其中 `` 支持以下选项: + +- base +- sqle +- provision + +### 输入信息 + +执行命令后,系统将提示输入以下信息: + +1. 菜单图标组件名称:用于生成菜单图标组件的名称。 +2. 页面组件名称:用于生成页面组件的名称。 +3. 页面的中文菜单标题:用于生成对应的菜单语言包。 +4. 路由路径 (Route Path):用于定义页面的 URL 路径。 +5. 当前页面是否为项目内页面:用于生成最终的页面路径。 + +### 后续操作 + +手动添加菜单数据:生成结束后,需手动将生成的菜单数据添加至 menu.data.tsx 文件中。如果在 dms-ui-ee 仓库中添加 provision 类型的页面,则需要将数据添加至 menu.data.dms.tsx 文件中,用于确定新菜单在左侧菜单树上的具体位置。 + +>注意事项 +> +>1. 格式要求:请确保输入的信息符合相应的格式要求。 +>2. 项目结构关联:本脚手架与项目结构强关联。当相关联的代码或页面文件发生变动时,脚手架可能无法正常工作。快速找到相关联文件或变量的方法:在项目全局搜索 @warn/cli/create-dms-page。 diff --git a/scripts/cli/create-dms-page/bin/core.js b/scripts/cli/create-dms-page/bin/core.js new file mode 100755 index 000000000..5dad674fd --- /dev/null +++ b/scripts/cli/create-dms-page/bin/core.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../dist/index.js'); diff --git a/scripts/cli/create-dms-page/package.json b/scripts/cli/create-dms-page/package.json new file mode 100644 index 000000000..b9474ac1d --- /dev/null +++ b/scripts/cli/create-dms-page/package.json @@ -0,0 +1,42 @@ +{ + "name": "@actiontech/cli-create-dms-page", + "description": "使用自动化流程创建一个 DMS 的页面", + "version": "0.0.1", + "bin": { + "create-dms-page": "./bin/core.js" + }, + "files": [ + "dist" + ], + "scripts": { + "build:watch": "tsc -w", + "build": "tsc" + }, + "keywords": [], + "license": "ISC", + "devDependencies": { + "@types/babel__generator": "^7.6.8", + "@types/babel__traverse": "^7.20.6", + "@types/cli-progress": "^3.11.6" + }, + "dependencies": { + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.24.8", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "@faker-js/faker": "^9.0.1", + "@gitbeaker/rest": "^40.1.1", + "@inquirer/prompts": "^5.1.2", + "@octokit/core": "3.5.1", + "chalk": "^4.1.2", + "cli-progress": "^3.12.0", + "clipboardy": "^4.0.0", + "commander": "^12.1.0", + "node-clipboardy": "^1.0.3", + "ora": "^5.4.1 ", + "prettier": "^3.3.3", + "readline": "^1.3.0", + "tar": "^7.4.0", + "zod": "^3.23.8" + } +} \ No newline at end of file diff --git a/scripts/cli/create-dms-page/src/common/Task.ts b/scripts/cli/create-dms-page/src/common/Task.ts new file mode 100644 index 000000000..69b0653ec --- /dev/null +++ b/scripts/cli/create-dms-page/src/common/Task.ts @@ -0,0 +1,7 @@ +import { Command } from 'commander'; + +export interface Task { + register(program: Command): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + run(...arg: any[]): void; +} diff --git a/scripts/cli/create-dms-page/src/create-dms-page.ts b/scripts/cli/create-dms-page/src/create-dms-page.ts new file mode 100644 index 000000000..79af3ed94 --- /dev/null +++ b/scripts/cli/create-dms-page/src/create-dms-page.ts @@ -0,0 +1,75 @@ +import { Command } from 'commander'; +import { Task } from './common/Task'; +import { z } from 'zod'; +import chalk from 'chalk'; +import { ModuleOrchestrator } from './module/module-orchestrator'; +import { IconManager } from './module/icon-manager'; +import { logger } from './utils/logger'; +import { PageComponentManager } from './module/page-component-manager'; +import { LocaleManager } from './module/locale-manager'; +import { RoutePathConfigManager } from './module/route-path-config-manager'; +import { MenuManager } from './module/menu-manager'; +import { handleError } from './utils/handle-error'; + +const initOptionsSchema = z.object({ + verbose: z.boolean(), + info: z.boolean() +}); + +const initComponentTypeSchema = z.enum(['sqle', 'base', 'provision']); + +export type IOptions = z.infer; +export type IComponentType = z.infer; + +export class CreateDMSPage implements Task { + register(program: Command): void { + program + .description('自动化创建dms页面模板代码') + .arguments('') + .usage(`${chalk.green('')} [options]`) + .option('--verbose', 'print additional logs') + .option('--info', 'print environment debug info') + .on('--help', () => { + logger.info('\nAllowed page types:'); + logger.info(Object.keys(initComponentTypeSchema.Values).join(', ')); + }) + .action((type: IComponentType, options: IOptions) => { + this.run(type, options); + }); + } + async run(type: IComponentType, options: IOptions): Promise { + try { + await initComponentTypeSchema.parseAsync(type); + + const iconManager = new IconManager(); + const pageComponentManager = new PageComponentManager(type); + const localeManager = new LocaleManager(type, pageComponentManager); + + const routePathManager = new RoutePathConfigManager( + type, + pageComponentManager + ); + + const menuManager = new MenuManager( + type, + iconManager, + pageComponentManager, + localeManager, + routePathManager + ); + + const orchestrator = new ModuleOrchestrator( + iconManager, + pageComponentManager, + localeManager, + routePathManager, + menuManager + ); + + await orchestrator.createDmsPage(); + } catch (error) { + logger.error(handleError(error)); + process.exit(1); + } + } +} diff --git a/scripts/cli/create-dms-page/src/index.ts b/scripts/cli/create-dms-page/src/index.ts new file mode 100644 index 000000000..209f59f55 --- /dev/null +++ b/scripts/cli/create-dms-page/src/index.ts @@ -0,0 +1,14 @@ +#!/user/bin/env node +import { Command } from 'commander'; +// import pkg from '../package.json'; +import { CreateDMSPage } from './create-dms-page'; + +const program = new Command(); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const pkg = require('../package.json'); + +program.name(pkg.name).description(pkg.description).version(pkg.version); + +new CreateDMSPage().register(program); + +program.parse(); diff --git a/scripts/cli/create-dms-page/src/module/icon-manager/index.ts b/scripts/cli/create-dms-page/src/module/icon-manager/index.ts new file mode 100644 index 000000000..4b5cb78f8 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/icon-manager/index.ts @@ -0,0 +1,107 @@ +import { input } from '@inquirer/prompts'; +import { IIconConfig, IIconManager } from './interface'; +import clipboard from 'node-clipboardy'; +import { PathUtils } from '../../utils/path-utils'; +import path from 'path'; +import { Writer } from '../../utils/writer-utils'; +import { spawnWrapper } from '../../utils/spawn-util'; +import { Template } from '../../template'; +import { StrUtils } from '../../utils/str-utils'; +import { readdir } from 'fs/promises'; + +export class IconManager implements IIconManager { + private readonly iconNamePattern = /^[A-Z][a-zA-Z]*(Filled|Outlined)$/; + public config!: IIconConfig; + + private async getIconConfig(): Promise { + const clipboardData = await clipboard.read(); + + const iconSvgContent = StrUtils.isSvgContent(clipboardData) + ? clipboardData + : Template.iconSvgTemplate; + + const iconName = await input({ + message: + '请输入菜单 icon 名称。(格式:/^[A-Z][a-zA-Z]*(Filled|Outlined)$/)', + required: true, + validate: this.validateIconName.bind(this) + }); + + this.validateIconName(iconName); + + const match = iconName.match(this.iconNamePattern); + if (!match || !match[1]) { + throw new Error(`Unable to extract icon type from: ${iconName}`); + } + + const iconPath = PathUtils.getIconDirectoryAtPath( + match[1].toLocaleLowerCase(), + 'Common' + ); + + this.config = { + iconSvgContent, + iconName, + iconPath, + iconLibName: '@actiontech/icons' + }; + } + + private generateIconFileName(iconName: string): string { + return `${iconName}.svg`; + } + + private async validateIconName(iconName: string): Promise { + const match = iconName.match(this.iconNamePattern); + + if (!match || !match[1]) { + return ( + `Invalid icon name format: ${iconName}\n` + + 'Icon name must:\n' + + '1. Start with an uppercase letter\n' + + '2. Use camelCase\n' + + '3. End with either "Filled" or "Outlined"\n' + + 'Example: BookMarkFilled, UserOutlined' + ); + } + + const style = match[1].toLowerCase(); + + try { + const styleDirectories = await readdir( + PathUtils.getIconDirectoryAtPath(style) + ); + + for (const dir of styleDirectories) { + const typeDirectoryName = PathUtils.getIconDirectoryAtPath(style, dir); + const icons = await readdir(typeDirectoryName); + if (icons.includes(this.generateIconFileName(iconName))) { + return `Icon file ${iconName} already exists in ${typeDirectoryName}`; + } + } + } catch (error) { + throw new Error(`Failed to validate icon name: ${iconName}`); + } + + return true; + } + + private async createIconSvgFile(): Promise { + await Writer.writeFile( + path.join( + this.config.iconPath, + this.generateIconFileName(this.config.iconName) + ), + this.config.iconSvgContent + ); + } + async run(): Promise { + try { + await this.getIconConfig(); + await this.createIconSvgFile(); + await spawnWrapper('pnpm', ['icon:g']); + } catch (error) { + throw new Error(`generate menu icon: ${error}`); + } + } +} diff --git a/scripts/cli/create-dms-page/src/module/icon-manager/interface.ts b/scripts/cli/create-dms-page/src/module/icon-manager/interface.ts new file mode 100644 index 000000000..9c73c88a6 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/icon-manager/interface.ts @@ -0,0 +1,10 @@ +import { IModuleBase } from '../interface'; + +export interface IIconConfig { + iconName: string; + iconPath: string; + iconSvgContent: string; + iconLibName: string; +} + +export interface IIconManager extends IModuleBase {} diff --git a/scripts/cli/create-dms-page/src/module/interface.ts b/scripts/cli/create-dms-page/src/module/interface.ts new file mode 100644 index 000000000..27b6e508b --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/interface.ts @@ -0,0 +1,4 @@ +export interface IModuleBase> { + config: T; + run: () => Promise; +} diff --git a/scripts/cli/create-dms-page/src/module/locale-manager/index.ts b/scripts/cli/create-dms-page/src/module/locale-manager/index.ts new file mode 100644 index 000000000..2ee77fd2d --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/locale-manager/index.ts @@ -0,0 +1,91 @@ +import { IComponentType } from '../../create-dms-page'; +import { Writer } from '../../utils/writer-utils'; +import { IPageComponentManager } from '../page-component-manager/interface'; +import { ILocaleConfig, ILocaleManager } from './interface'; +import { PathUtils } from '../../utils/path-utils'; +import { Template } from '../../template'; +import { BabelUtils } from '../../utils/babel-utils'; +import { StrUtils } from '../../utils/str-utils'; + +export class LocaleManager implements ILocaleManager { + constructor( + private readonly componentType: IComponentType, + private readonly pageComponentManager: IPageComponentManager + ) {} + config!: ILocaleConfig; + + private getLocaleConfig() { + const localeDirAtPath = PathUtils.getLocaleDirectoryAtPath( + this.componentType + ); + const localeIndexFileAtPath = PathUtils.getLocaleIndexFileAtPath( + this.componentType + ); + const localeModuleName = StrUtils.convertFirstLetterToLowerCase( + this.pageComponentManager.config.componentName + ); + const localeModuleFileAtPath = PathUtils.getLocaleModuleFileAtPath( + this.componentType, + localeModuleName + ); + const menuI18nFileAtPath = PathUtils.getMenu18nLocaleFileAtPath(); + + this.config = { + localeDirAtPath, + localeModuleName, + menuI18nFileAtPath, + localeIndexFileAtPath, + localeModuleFileAtPath, + menuI18nKeyPath: `dmsMenu.${localeModuleName}` + }; + } + + private async writeMenuLocalFile() { + await BabelUtils.addKeyToObject({ + filePath: this.config.menuI18nFileAtPath, + isDefaultExportObject: true, + keyPath: [this.config.localeModuleName], + value: { + type: 'literal', + value: this.pageComponentManager.config.pageTitle + } + }); + } + + private async writeLocaleFile() { + await Writer.formattedWriteFile( + this.config.localeModuleFileAtPath, + Template.localeTemplate, + PathUtils.DMS_ROOT_CWD + ); + } + + private async updateLocaleImportDeclare() { + await BabelUtils.addImportDefaultDeclaration({ + filePath: this.config.localeIndexFileAtPath, + moduleSpecifier: `./${this.config.localeModuleName}`, + defaultImport: this.config.localeModuleName + }); + } + + private async updateLocaleExports() { + await BabelUtils.addKeyToObject({ + filePath: this.config.localeIndexFileAtPath, + isDefaultExportObject: true, + keyPath: ['translation', this.config.localeModuleName], + value: { type: 'shorthand', name: this.config.localeModuleName } + }); + } + + public async run(): Promise { + try { + this.getLocaleConfig(); + await this.writeLocaleFile(); + await this.updateLocaleExports(); + await this.updateLocaleImportDeclare(); + await this.writeMenuLocalFile(); + } catch (error) { + throw new Error(`generate page locale: ${error}`); + } + } +} diff --git a/scripts/cli/create-dms-page/src/module/locale-manager/interface.ts b/scripts/cli/create-dms-page/src/module/locale-manager/interface.ts new file mode 100644 index 000000000..4e2cd0830 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/locale-manager/interface.ts @@ -0,0 +1,11 @@ +import { IModuleBase } from '../interface'; + +export interface ILocaleConfig { + localeDirAtPath: string; + localeIndexFileAtPath: string; + localeModuleName: string; + localeModuleFileAtPath: string; + menuI18nKeyPath: string; + menuI18nFileAtPath: string; +} +export interface ILocaleManager extends IModuleBase {} diff --git a/scripts/cli/create-dms-page/src/module/menu-manager/index.ts b/scripts/cli/create-dms-page/src/module/menu-manager/index.ts new file mode 100644 index 000000000..bcf3086ef --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/menu-manager/index.ts @@ -0,0 +1,186 @@ +import { IComponentType } from '../../create-dms-page'; +import { PathUtils } from '../../utils/path-utils'; +import { IMenuConfig, IMenuManager } from './interface'; +import { IPageComponentManager } from '../page-component-manager/interface'; +import { IRoutePathConfigManager } from '../route-path-config-manager/interface'; +import { IIconManager } from '../icon-manager/interface'; +import { BabelUtils, ObjectValue } from '../../utils/babel-utils'; +import { StrUtils } from '../../utils/str-utils'; +import { ILocaleManager } from '../locale-manager/interface'; + +export class MenuManager implements IMenuManager { + config!: IMenuConfig; + + constructor( + private readonly componentType: IComponentType, + private readonly iconManager: IIconManager, + private readonly pageComponentManager: IPageComponentManager, + private readonly localeManager: ILocaleManager, + private readonly routePathManager: IRoutePathConfigManager + ) {} + + private getMenuConfig() { + this.config = { + menuAtPath: PathUtils.getMenuDataAtPath(this.componentType), + menuStructTreeKeyTypeAnnotationAtPath: + PathUtils.getMenuDataTypeAnnotationAtPath(), + menuItemVariableName: `${StrUtils.convertFirstLetterToLowerCase( + this.pageComponentManager.config.componentName + )}`, + menuStructTreeKeyTypeAnnotationName: `${StrUtils.convertFirstLetterToUpperCase( + this.componentType + )}MenuStructTreeKey`, + menuItemArrowFunctionTypeAnnotationName: 'GenerateMenuItemType', + menuStructKey: this.routePathManager.config.routePath, + menusCollectionVariableName: `${this.componentType}MenusCollection` + }; + } + + private generateMenuItemKey(): ObjectValue { + if (this.routePathManager.config.isProjectRoute) { + const prefix = + this.componentType === 'base' + ? 'project/' + : `${this.componentType}/project/`; + + const suffix = `/${this.routePathManager.config.routePath}`; + + return { + type: 'templateLiteral', + quasis: [ + { + raw: prefix, + tail: false + }, + { + raw: suffix, + tail: true + } + ], + names: ['SIDE_MENU_DATA_PLACEHOLDER_KEY'] + }; + } + + return { + type: 'literal', + value: this.routePathManager.config.routePath + }; + } + + private generateMenuItemValueData(): Record { + return { + label: { + type: 'JSXElement', + name: 'TypedLink', + attribute: this.routePathManager.config.isProjectRoute + ? [ + { + name: 'to', + value: { + type: 'identifier', + name: this.routePathManager.config + .routeDataIndexObjectPathWithComponent + } + }, + { + name: 'params', + value: { + type: 'literal', + value: { + projectID: { + type: 'shorthand', + name: 'projectID' + } + } + } + } + ] + : [ + { + name: 'to', + value: { + type: 'identifier', + name: this.routePathManager.config + .routeDataIndexObjectPathWithComponent + } + } + ], + selfClosing: false, + children: [ + { + type: 'function', + functionName: 't', + params: [ + { + type: 'literal', + value: this.localeManager.config.menuI18nKeyPath + } + ] + } + ] + }, + icon: { + type: 'JSXElement', + name: this.iconManager.config.iconName, + selfClosing: true, + attribute: [ + { + name: 'width', + value: { + type: 'identifier', + name: '18' + } + }, + { + name: 'height', + value: { + type: 'identifier', + name: '18' + } + } + ] + }, + key: this.generateMenuItemKey(), + structKey: { + type: 'literal', + value: this.config.menuStructKey + } + }; + } + + private async generateMenuItemArrowFunctionExpression() { + await BabelUtils.addStringLiteralToType({ + filePath: this.config.menuStructTreeKeyTypeAnnotationAtPath, + typeName: this.config.menuStructTreeKeyTypeAnnotationName, + stringLiteral: this.config.menuStructKey + }); + await BabelUtils.updateImportDeclaration({ + filePath: this.config.menuAtPath, + moduleSpecifier: this.iconManager.config.iconLibName, + specifiers: [this.iconManager.config.iconName] + }); + await BabelUtils.addMenuItemVariable({ + filePath: this.config.menuAtPath, + variableName: this.config.menuItemVariableName, + value: { + type: 'literal', + value: this.generateMenuItemValueData() + } + }); + } + + private async exportMenuItemArrowFunctionExpression() { + await BabelUtils.addItemToArray({ + filePath: this.config.menuAtPath, + variableName: this.config.menusCollectionVariableName, + value: { type: 'identifier', name: this.config.menuItemVariableName } + }); + } + + async run(): Promise { + this.getMenuConfig(); + + await this.generateMenuItemArrowFunctionExpression(); + await this.exportMenuItemArrowFunctionExpression(); + } +} diff --git a/scripts/cli/create-dms-page/src/module/menu-manager/interface.ts b/scripts/cli/create-dms-page/src/module/menu-manager/interface.ts new file mode 100644 index 000000000..1bfb5e9bf --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/menu-manager/interface.ts @@ -0,0 +1,13 @@ +import { IModuleBase } from '../interface'; + +export interface IMenuConfig { + menuAtPath: string; + menuItemVariableName: string; + menuItemArrowFunctionTypeAnnotationName: string; + menuStructTreeKeyTypeAnnotationName: string; + menuStructTreeKeyTypeAnnotationAtPath: string; + menuStructKey: string; + menusCollectionVariableName: string; +} + +export interface IMenuManager extends IModuleBase {} diff --git a/scripts/cli/create-dms-page/src/module/module-orchestrator.ts b/scripts/cli/create-dms-page/src/module/module-orchestrator.ts new file mode 100644 index 000000000..abda6daf0 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/module-orchestrator.ts @@ -0,0 +1,23 @@ +import { IIconManager } from './icon-manager/interface'; +import { ILocaleManager } from './locale-manager/interface'; +import { IMenuManager } from './menu-manager/interface'; +import { IPageComponentManager } from './page-component-manager/interface'; +import { IRoutePathConfigManager } from './route-path-config-manager/interface'; + +export class ModuleOrchestrator { + constructor( + private readonly iconManager: IIconManager, + private readonly pageComponentManager: IPageComponentManager, + private readonly localeManager: ILocaleManager, + private readonly routePathManager: IRoutePathConfigManager, + private readonly menuManager: IMenuManager + ) {} + + async createDmsPage() { + await this.iconManager.run(); + await this.pageComponentManager.run(); + await this.localeManager.run(); + await this.routePathManager.run(); + await this.menuManager.run(); + } +} diff --git a/scripts/cli/create-dms-page/src/module/page-component-manager/index.ts b/scripts/cli/create-dms-page/src/module/page-component-manager/index.ts new file mode 100644 index 000000000..4bc52381c --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/page-component-manager/index.ts @@ -0,0 +1,88 @@ +import { input } from '@inquirer/prompts'; +import { IPageComponentManager, IComponentConfig } from './interface'; +import { IComponentType } from '../../create-dms-page'; +import path from 'path'; +import { PathUtils } from '../../utils/path-utils'; +import { Writer } from '../../utils/writer-utils'; +import { Template } from '../../template'; +import { readdir } from 'fs/promises'; + +export class PageComponentManager implements IPageComponentManager { + constructor(private readonly componentType: IComponentType) {} + + private readonly pageNamePattern = /^[A-Z][a-z]*([A-Z][a-z]*)*$/; + + config!: IComponentConfig; + + private async getPageConfig() { + const componentName = await input({ + message: '请输入页面组件名称。(格式:/^[A-Z][a-z]*([A-Z][a-z]*)*$/)', + required: true, + validate: this.validatePageName.bind(this) + }); + + const componentPath = PathUtils.getComponentIndexFileAtPath( + this.componentType, + componentName + ); + + const pageTitle = await input({ + message: '请输入页面中文标题', + required: true, + validate: this.validatePageTile.bind(this) + }); + + this.config = { + componentName, + componentPath, + pageTitle + }; + } + + private validatePageTile(pageTitle: string): string | boolean { + for (let i = 0; i < pageTitle.length; i++) { + const charCode = pageTitle.charCodeAt(i); + if (charCode < 0x4e00 || charCode > 0x9fff) { + return 'The string contains non-Chinese characters'; + } + } + + return true; + } + + private async validatePageName(pageName: string): Promise { + if (!this.pageNamePattern.test(pageName)) { + return `Invalid page component naming: "${pageName}"\n. + The string must start with an uppercase letter and be followed by lowercase letters or numbers, with subsequent words starting with an uppercase letter.\n + Example: DataSourceManagement, SqlExecWorkflow`; + } + + const componentDirAtPath = PathUtils.getComponentDirectoryAtPath( + this.componentType + ); + const componentDirs = await readdir(componentDirAtPath); + + if (componentDirs.includes(pageName)) { + return `Component ${pageName} already exists in ${componentDirAtPath}`; + } + + return true; + } + + private async createPageComponent(): Promise { + await Writer.formattedWriteFile( + path.join(this.config.componentPath), + Template.pageComponentTemplate(this.config.componentName), + PathUtils.DMS_ROOT_CWD + ); + } + + async run(): Promise { + try { + await this.getPageConfig(); + await this.createPageComponent(); + } catch (error) { + throw new Error(`generate page component: ${error}`); + } + } +} diff --git a/scripts/cli/create-dms-page/src/module/page-component-manager/interface.ts b/scripts/cli/create-dms-page/src/module/page-component-manager/interface.ts new file mode 100644 index 000000000..ffed501e3 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/page-component-manager/interface.ts @@ -0,0 +1,8 @@ +import { IModuleBase } from '../interface'; + +export interface IComponentConfig { + componentName: string; + componentPath: string; + pageTitle: string; +} +export interface IPageComponentManager extends IModuleBase {} diff --git a/scripts/cli/create-dms-page/src/module/route-path-config-manager/index.ts b/scripts/cli/create-dms-page/src/module/route-path-config-manager/index.ts new file mode 100644 index 000000000..ee71311f0 --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/route-path-config-manager/index.ts @@ -0,0 +1,186 @@ +import { input, confirm } from '@inquirer/prompts'; +import { IRoutePathConfig, IRoutePathConfigManager } from './interface'; +import { IComponentType } from '../../create-dms-page'; +import { PathUtils } from '../../utils/path-utils'; +import { BabelUtils, ObjectValue } from '../../utils/babel-utils'; +import { IPageComponentManager } from '../page-component-manager/interface'; +import { StrUtils } from '../../utils/str-utils'; + +export class RoutePathConfigManager implements IRoutePathConfigManager { + constructor( + private readonly componentType: IComponentType, + private readonly pageComponentManager: IPageComponentManager + ) {} + config!: IRoutePathConfig; + private readonly routePathPattern = /^[a-z]+(-[a-z]+)*$/; + + private async getRoutePathConfig() { + const routePath = await input({ + message: '请输入页面路由地址。(格式:/^[a-z]+(-[a-z]+)*$/)', + required: true, + validate: this.validateRoutePath.bind(this) + }); + + const isProjectRoute = await confirm({ + message: `当前路由是否属于项目内路由?(项目内路由最终生成路由格式为 ${ + this.componentType === 'base' ? '/' : `/${this.componentType}/` + }project/{projectID}/${routePath})`, + default: true + }); + + const getRouteConfigVariableName = () => { + if (this.componentType === 'sqle') { + return isProjectRoute + ? 'projectDetailRouterConfig' + : 'globalRouterConfig'; + } + + if (this.componentType === 'base') { + return isProjectRoute + ? 'BaseProjectRouterConfig' + : 'BaseGlobalRouterConfig'; + } + + return 'AuthRouterConfig'; + }; + + this.config = { + routePath, + isProjectRoute, + routeConfigVariableName: getRouteConfigVariableName(), + routeConfigAtPath: PathUtils.getRouteConfigAtPath(this.componentType), + routeDataAtPath: PathUtils.getRouteDataAtPath(), + routeDataVariableName: 'ROUTE_PATHS', + routeDataIndexObjectPathWithComponent: `ROUTE_PATHS.${this.componentType.toLocaleUpperCase()}.${StrUtils.camelCaseToUpperCaseSnakeCase( + this.pageComponentManager.config.componentName + )}.index` + }; + } + + private validateRoutePath(routePath: string): string | boolean { + if (!this.routePathPattern.test(routePath)) { + return `Invalid route path format: "${routePath}". The string must be all lowercase and use hyphens to separate words.`; + } + + return true; + } + + private getAddRoutePathsObject(): Record { + const projectParams = ':projectID'; + if (this.config.isProjectRoute) { + if (this.componentType === 'base') { + return { + prefix: { type: 'literal', value: '/project' }, + path: { + type: 'literal', + value: `${projectParams}/${this.config.routePath}` + } + }; + } + + return { + prefix: { type: 'literal', value: `/${this.componentType}/project` }, + path: { + type: 'literal', + value: `${projectParams}/${this.config.routePath}` + } + }; + } + + if (this.componentType === 'base') { + return { + path: { + type: 'literal', + value: `/${this.config.routePath}` + } + }; + } + + return { + path: { + type: 'literal', + value: `/${this.componentType}/${this.config.routePath}` + } + }; + } + + private getAddRouteConfigObject(): Record { + return { + key: { + type: 'literal', + value: StrUtils.convertFirstLetterToLowerCase( + this.pageComponentManager.config.componentName + ) + }, + path: { + type: 'identifier', + name: `${this.config.routeDataIndexObjectPathWithComponent}.path` + }, + element: { + type: 'JSXElement', + name: this.pageComponentManager.config.componentName, + selfClosing: true + } + }; + } + + private async updateRoutePaths() { + const addObject = this.getAddRoutePathsObject(); + + await BabelUtils.addKeyToObject({ + filePath: this.config.routeDataAtPath, + objectName: this.config.routeDataVariableName, + keyPath: [ + this.componentType.toLocaleUpperCase(), + StrUtils.camelCaseToUpperCaseSnakeCase( + this.pageComponentManager.config.componentName + ) + ], + value: { + type: 'literal', + value: { + index: { + type: 'literal', + value: addObject + } + } + } + }); + } + + private async createComponentLoaderDeclaration() { + const importPath = PathUtils.getRelativePath( + this.config.routeConfigAtPath, + this.pageComponentManager.config.componentPath, + true + ); + + await BabelUtils.addReactLoaderComponentDeclaration({ + filePath: this.config.routeConfigAtPath, + componentName: this.pageComponentManager.config.componentName, + importPath + }); + } + + private async updateRouteConfig() { + await this.createComponentLoaderDeclaration(); + + await BabelUtils.addItemToArray({ + filePath: this.config.routeConfigAtPath, + variableName: this.config.routeConfigVariableName, + value: { + type: 'literal', + value: this.getAddRouteConfigObject() + } + }); + } + + run: () => Promise = async () => { + try { + await this.getRoutePathConfig(); + await Promise.all([this.updateRoutePaths(), this.updateRouteConfig()]); + } catch (error) { + throw new Error(`generate route config: ${error}`); + } + }; +} diff --git a/scripts/cli/create-dms-page/src/module/route-path-config-manager/interface.ts b/scripts/cli/create-dms-page/src/module/route-path-config-manager/interface.ts new file mode 100644 index 000000000..360df48ae --- /dev/null +++ b/scripts/cli/create-dms-page/src/module/route-path-config-manager/interface.ts @@ -0,0 +1,14 @@ +import { IModuleBase } from '../interface'; + +export interface IRoutePathConfig { + isProjectRoute: boolean; + routePath: string; + routeDataAtPath: string; + routeDataVariableName: string; + routeDataIndexObjectPathWithComponent: string; + routeConfigAtPath: string; + routeConfigVariableName: string; +} + +export interface IRoutePathConfigManager + extends IModuleBase {} diff --git a/scripts/cli/create-dms-page/src/template/index.ts b/scripts/cli/create-dms-page/src/template/index.ts new file mode 100644 index 000000000..1713aa90a --- /dev/null +++ b/scripts/cli/create-dms-page/src/template/index.ts @@ -0,0 +1,25 @@ +export class Template { + static localeTemplate = ` + // eslint-disable-next-line import/no-anonymous-default-export + export default { + } + `; + static pageComponentTemplate: (name: string) => string = (name) => { + return ` + const ${name}:React.FC = () => { + return ( +
+ ${name} +
+ ) + } + + export default ${name}; + `; + }; + static iconSvgTemplate = ` + + + `; +} diff --git a/scripts/cli/create-dms-page/src/types.d.ts b/scripts/cli/create-dms-page/src/types.d.ts new file mode 100644 index 000000000..99e6074f4 --- /dev/null +++ b/scripts/cli/create-dms-page/src/types.d.ts @@ -0,0 +1 @@ +declare module 'node-clipboardy'; diff --git a/scripts/cli/create-dms-page/src/utils/babel-utils.ts b/scripts/cli/create-dms-page/src/utils/babel-utils.ts new file mode 100644 index 000000000..fa82dd73f --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/babel-utils.ts @@ -0,0 +1,535 @@ +import { readFile } from 'fs/promises'; +import * as parser from '@babel/parser'; +import traverse from '@babel/traverse'; +import generate from '@babel/generator'; +import * as t from '@babel/types'; +import { resolve } from 'path'; +import { Writer } from './writer-utils'; +import { PathUtils } from './path-utils'; + +interface IObjectValueBase { + type: + | 'literal' + | 'identifier' + | 'shorthand' + | 'JSXElement' + | 'function' + | 'templateLiteral'; +} + +interface ILiteralValue extends IObjectValueBase { + type: 'literal'; + value: + | string + | number + | boolean + | null + | undefined + | Array + | Record; +} + +interface IIdentifierValue extends IObjectValueBase { + type: 'identifier'; + name: string; +} + +interface IShorthandValue extends IObjectValueBase { + type: 'shorthand'; + name: string; +} + +interface IJSXElementValue extends IObjectValueBase { + type: 'JSXElement'; + name: string; + attribute?: Array<{ name: string; value: ObjectValue }>; + selfClosing?: boolean; + children?: Array; +} + +interface IFunctionValue extends IObjectValueBase { + type: 'function'; + params?: ObjectValue[]; + functionName: string; +} + +interface ITemplateLiteral extends IObjectValueBase { + type: 'templateLiteral'; + quasis: Array<{ raw: string; tail: boolean }>; + names: string[]; +} + +export type ObjectValue = + | ILiteralValue + | IIdentifierValue + | IShorthandValue + | IJSXElementValue + | IFunctionValue + | ITemplateLiteral; + +interface IAddKeyOptions { + filePath: string; // 文件路径 + objectName?: string; // 要修改的对象名称 + keyPath: string[]; // 要添加的键路径 + value: ObjectValue; // 要添加的值 + isDefaultExportObject?: boolean; +} + +interface IAddItemOptions { + filePath: string; // 文件路径 + variableName: string; // 要修改的对象名称 + value: ObjectValue; // 要添加的值 +} + +interface IUpdateImportOptions { + // 要添加 import 语句的文件路径 + filePath: string; + // 要导入的模块名称或路径 + moduleSpecifier: string; + + specifiers: string[]; +} + +interface IAddDefaultImportOptions { + // 要添加 import 语句的文件路径 + filePath: string; + // 要导入的模块名称或路径 + moduleSpecifier: string; + // 默认导入的名称 + defaultImport: string; +} + +interface IAddReactLoaderComponentDeclarationOptions { + filePath: string; // 文件路径 + componentName: string; //组件名称 + importPath: string; //导入路径 +} + +interface IAddMenuItemVariableOptions { + filePath: string; // 文件路径 + value: ObjectValue; // 要添加的值 + variableName: string; //菜单变量名 +} + +interface IAddStringLiteralOptions { + filePath: string; + typeName: string; + stringLiteral: string; +} + +export class BabelUtils { + static async addKeyToObject(options: IAddKeyOptions) { + const { filePath, objectName, keyPath, value, isDefaultExportObject } = + options; + + const ast = await this.fileCodeToAst(filePath); + + const valueNode = this.valueToAst(value); + + let targetObjectFound = false; + + const addKeyWithObjectExpression = (currentObject: t.ObjectExpression) => { + for (let i = 0; i < keyPath.length - 1; i++) { + const key = keyPath[i]; + let nestedObject = currentObject.properties.find( + (prop): prop is t.ObjectProperty => + t.isObjectProperty(prop) && + ((t.isIdentifier(prop.key) && prop.key.name === key) || + (t.isStringLiteral(prop.key) && prop.key.value === key)) + ); + + if (!nestedObject) { + nestedObject = t.objectProperty( + t.identifier(key), + t.objectExpression([]) + ); + currentObject.properties.push(nestedObject); + } + + currentObject = nestedObject.value as t.ObjectExpression; + } + + const lastKey = keyPath[keyPath.length - 1]; + + if ( + currentObject.properties.some((item) => { + return ( + t.isObjectProperty(item) && + t.isIdentifier(item.key) && + item.key.name === lastKey + ); + }) + ) { + throw new Error( + `当前对象 ${objectName} 存在对象路径为 [${keyPath.join( + ',' + )}] 的值,无法重复添加!` + ); + } + currentObject.properties.push( + t.objectProperty( + t.identifier(lastKey), + valueNode, + false, + value.type === 'shorthand' + ) + ); + }; + + traverse(ast, { + VariableDeclaration(path) { + const declaration = path.node.declarations[0]; + + if ( + t.isIdentifier(declaration.id) && + declaration.id.name === objectName + ) { + targetObjectFound = true; + + if (t.isTSAsExpression(declaration.init)) { + const objectExpression = declaration.init; + const currentObject = + objectExpression.expression as t.ObjectExpression; + addKeyWithObjectExpression(currentObject); + } + } + }, + ExportDefaultDeclaration(path) { + if (isDefaultExportObject) { + targetObjectFound = true; + const declaration = path.node.declaration; + + if (t.isObjectExpression(declaration)) { + addKeyWithObjectExpression(declaration); + } + } + } + }); + + if (!targetObjectFound) { + throw new Error(`Object "${objectName}" not found in ${filePath}`); + } + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + static async addItemToArray(options: IAddItemOptions) { + const { filePath, variableName, value } = options; + + const ast = await this.fileCodeToAst(filePath); + + const valueNode = this.valueToAst(value); + + let targetObjectFound = false; + + traverse(ast, { + VariableDeclaration(path) { + const declaration = path.node.declarations[0]; + + if ( + t.isIdentifier(declaration.id) && + declaration.id.name === variableName + ) { + targetObjectFound = true; + + if (t.isArrayExpression(declaration.init)) { + const arrayExpression = declaration.init; + arrayExpression.elements.push(valueNode); + } + } + } + }); + + if (!targetObjectFound) { + throw new Error(`Array "${variableName}" not found in ${filePath}`); + } + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + private static transformJSXAttributes( + attributes: IJSXElementValue['attribute'] + ): Array { + if (!attributes) { + return []; + } + + return attributes.map((item) => { + return t.jSXAttribute( + t.jsxIdentifier(item.name), + t.jsxExpressionContainer(this.valueToAst(item.value)) + ); + }); + } + private static transformJSXChildren(children: IJSXElementValue['children']) { + if (!children) { + return []; + } + return children.map((item) => + t.jsxExpressionContainer(this.valueToAst(item)) + ); + } + + private static valueToAst(value: ObjectValue): t.Expression { + switch (value.type) { + case 'literal': + // 处理字面量 + if (value.value === null) { + return t.nullLiteral(); + } + if (value.value === undefined) { + return t.identifier('undefined'); + } + if (typeof value.value === 'string') { + return t.stringLiteral(value.value); + } + if (typeof value.value === 'number') { + return t.numericLiteral(value.value); + } + if (typeof value.value === 'boolean') { + return t.booleanLiteral(value.value); + } + if (typeof value.value === 'object') { + const properties = Object.entries(value.value).map(([key, val]) => + t.objectProperty(t.identifier(key), this.valueToAst(val), false) + ); + return t.objectExpression(properties); + } + throw new Error(`Unsupported literal type: ${typeof value.value}`); + + case 'identifier': + // 处理变量引用 + return t.identifier(value.name); + + case 'shorthand': + // shorthand 属性在 ObjectProperty 中特殊处理 + return t.identifier(value.name); + + case 'function': + return t.callExpression( + t.identifier(value.functionName), + value.params ? value.params.map((item) => this.valueToAst(item)) : [] + ); + + case 'templateLiteral': + return t.templateLiteral( + value.quasis.map((item) => + t.templateElement({ raw: item.raw }, item.tail) + ), + value.names.map((item) => t.identifier(item)) + ); + + case 'JSXElement': + return t.jSXElement( + { + type: 'JSXOpeningElement', + name: t.jsxIdentifier(value.name), + attributes: this.transformJSXAttributes(value.attribute), + selfClosing: !!value.selfClosing + }, + !value.selfClosing + ? t.jsxClosingElement(t.jsxIdentifier(value.name)) + : null, + this.transformJSXChildren(value.children) + ); + + default: + throw new Error(`Unsupported value type: ${(value as any).type}`); + } + } + + private static async fileCodeToAst(filePath: string) { + const code = await readFile(resolve(filePath), 'utf-8'); + + return parser.parse(code, { + sourceType: 'module', + plugins: ['typescript', 'jsx'] + }); + } + + private static async formattedWriteFileCodeWithAst( + ast: parser.ParseResult, + filePath: string + ) { + const output = generate(ast, { + retainLines: true, + compact: false, + filename: filePath, + jsescOption: { + minimal: true + } + }).code; + + await Writer.formattedWriteFile(filePath, output, PathUtils.DMS_ROOT_CWD); + } + + static async updateImportDeclaration(options: IUpdateImportOptions) { + const { filePath, moduleSpecifier, specifiers } = options; + + const ast = await this.fileCodeToAst(filePath); + + traverse(ast, { + Program(path) { + const currentImportIsExisting = path.node.body.some((item) => { + if ( + t.isImportDeclaration(item) && + item.source.value === moduleSpecifier + ) { + specifiers.forEach((specifier) => { + item.specifiers.push( + t.importSpecifier( + t.identifier(specifier), + t.identifier(specifier) + ) + ); + }); + return true; + } + return false; + }); + + if (!currentImportIsExisting) { + path.node.body.unshift( + t.importDeclaration( + specifiers.map((item) => + t.importSpecifier(t.identifier(item), t.identifier(item)) + ), + t.stringLiteral(moduleSpecifier) + ) + ); + } + } + }); + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + static async addImportDefaultDeclaration(options: IAddDefaultImportOptions) { + const { filePath, moduleSpecifier, defaultImport } = options; + + const ast = await this.fileCodeToAst(filePath); + + traverse(ast, { + Program(path) { + const currentDefaultImportIsExisting = path.node.body.some((item) => { + if (t.isImportDeclaration(item)) { + return item.source.value === moduleSpecifier; + } + return false; + }); + + if (!currentDefaultImportIsExisting) { + path.node.body.unshift( + t.importDeclaration( + [t.importDefaultSpecifier(t.identifier(defaultImport))], + t.stringLiteral(moduleSpecifier) + ) + ); + } + } + }); + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + static async addReactLoaderComponentDeclaration( + options: IAddReactLoaderComponentDeclarationOptions + ) { + const { filePath, componentName, importPath } = options; + + const ast = await this.fileCodeToAst(filePath); + let lastConstDeclaration = null; + + traverse(ast, { + VariableDeclaration(path) { + //todo 校验 componentName 是否已经定义 + + //找到最后一个 const + React.lazy 的语句 + if ( + path.node.kind === 'const' && + t.isCallExpression(path.node.declarations[0].init) + ) { + lastConstDeclaration = path; + } + } + }); + + if (lastConstDeclaration) { + const newConstDeclaration = parser.parse( + `\nconst ${componentName} = React.lazy(() => import('${importPath}'));` + ).program.body[0]; + + (lastConstDeclaration as any).insertAfter(newConstDeclaration); + } + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + static async addMenuItemVariable(options: IAddMenuItemVariableOptions) { + const { filePath, value, variableName } = options; + + const ast = await this.fileCodeToAst(filePath); + let lastMenuItemDeclaration = null; + + traverse(ast, { + VariableDeclaration(path) { + //找到最后一个菜单函数 + if ( + path.node.kind === 'const' && + t.isArrowFunctionExpression(path.node.declarations[0].init) + ) { + lastMenuItemDeclaration = path; + } + } + }); + + if (lastMenuItemDeclaration) { + const newConstDeclaration = this.valueToAst(value); + + const functionId = t.identifier(variableName); + functionId.typeAnnotation = t.tsTypeAnnotation( + t.tsTypeReference(t.identifier('GenerateMenuItemType')) + ); + + const arrowFunction = t.arrowFunctionExpression( + [t.identifier('projectID')], + newConstDeclaration + ); + + const declaration = t.variableDeclaration('const', [ + t.variableDeclarator(functionId, arrowFunction) + ]); + + (lastMenuItemDeclaration as any).insertAfter(declaration); + } + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } + + static async addStringLiteralToType(options: IAddStringLiteralOptions) { + const { filePath, typeName, stringLiteral } = options; + + const ast = await this.fileCodeToAst(filePath); + let existingTypeName = false; + + traverse(ast, { + TSTypeAliasDeclaration(path) { + if ( + path.node.id.name === typeName && + t.isTSUnionType(path.node.typeAnnotation) + ) { + existingTypeName = true; + path.node.typeAnnotation.types.push( + t.tsLiteralType(t.stringLiteral(stringLiteral)) + ); + } + } + }); + + if (!existingTypeName) { + throw new Error(`TSUnionType "${typeName}" not found in ${filePath}`); + } + + await this.formattedWriteFileCodeWithAst(ast, filePath); + } +} diff --git a/scripts/cli/create-dms-page/src/utils/handle-error.ts b/scripts/cli/create-dms-page/src/utils/handle-error.ts new file mode 100644 index 000000000..289ba237d --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/handle-error.ts @@ -0,0 +1,16 @@ +import { logger } from './logger'; + +export function handleError(error: unknown) { + if (typeof error === 'string') { + logger.error(error); + process.exit(1); + } + + if (error instanceof Error) { + logger.error(error.message); + process.exit(1); + } + + logger.error('Something went wrong. Please try again.'); + process.exit(1); +} diff --git a/scripts/cli/create-dms-page/src/utils/logger.ts b/scripts/cli/create-dms-page/src/utils/logger.ts new file mode 100644 index 000000000..d48a320e9 --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/logger.ts @@ -0,0 +1,53 @@ +import chalk from 'chalk'; + +function stringify(arg: unknown): string { + if (typeof arg === 'string') { + return arg; + } else if (arg === null) { + return 'null'; + } else if (arg === undefined) { + return 'undefined'; + } else if (typeof arg === 'object') { + try { + return JSON.stringify(arg, null, 2); + } catch (error) { + return '[Circular]'; + } + } else { + return String(arg); + } +} + +function createLogFunction(chalkColor: chalk.Chalk) { + return (...args: unknown[]) => { + const message = args.map(stringify).join(' '); + console.log(chalkColor(message)); + }; +} + +export const logger = { + error: createLogFunction(chalk.red), + warn: createLogFunction(chalk.yellow), + info: createLogFunction(chalk.cyan), + success: createLogFunction(chalk.green), + break() { + console.log(''); + } +}; + +export const verboseLogger = (show = false) => { + const createConditionalLogFunction = (chalkColor: chalk.Chalk) => { + return (...args: unknown[]) => { + if (show) { + createLogFunction(chalkColor)(...args); + } + }; + }; + + return { + error: createConditionalLogFunction(chalk.red), + warn: createConditionalLogFunction(chalk.yellow), + info: createConditionalLogFunction(chalk.cyan), + success: createConditionalLogFunction(chalk.green) + }; +}; diff --git a/scripts/cli/create-dms-page/src/utils/path-utils.ts b/scripts/cli/create-dms-page/src/utils/path-utils.ts new file mode 100644 index 000000000..493cfa534 --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/path-utils.ts @@ -0,0 +1,250 @@ +// @warn/cli/create-dms-page +import { existsSync } from 'fs'; +import path from 'path'; +import { IComponentType } from '../create-dms-page'; +export class PathUtils { + static CLI_ROOT_CWD = path.resolve(__dirname, '..', '..'); + static DMS_ROOT_CWD = path.join(this.CLI_ROOT_CWD, '..', '..', '..'); + static SQLE_ROOT_CWD = path.join(this.DMS_ROOT_CWD, 'packages', 'sqle'); + static BASE_ROOT_CWD = path.join(this.DMS_ROOT_CWD, 'packages', 'base'); + static SHARED_ROOT_CWD = path.join(this.DMS_ROOT_CWD, 'packages', 'shared'); + + // icon path + static ICON_ROOT_CWD = path.join(this.DMS_ROOT_CWD, 'packages', 'icons'); + static getIconDirectoryAtPath(style: string, type?: string): string { + const iconPath = type + ? path.join(PathUtils.ICON_ROOT_CWD, 'svg', style, type) + : path.join(PathUtils.ICON_ROOT_CWD, 'svg', style); + + if (!existsSync(iconPath)) { + throw new Error( + `${iconPath} does not exist. Please check the icon package path under the packages directory!` + ); + } + + return iconPath; + } + + // local path + static getLocaleDirectoryAtPath(type: IComponentType) { + const localeDirAtPath = path.join( + PathUtils.getRootCWDWithType(type), + 'src', + 'locale', + 'zh-CN' + ); + + if (!existsSync(localeDirAtPath)) { + throw new Error( + `${localeDirAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return localeDirAtPath; + } + static getLocaleIndexFileAtPath(type: IComponentType) { + const localeDirAtPath = this.getLocaleDirectoryAtPath(type); + + const indexFileAtPath = path.join(localeDirAtPath, 'index.ts'); + + if (!existsSync(indexFileAtPath)) { + throw new Error( + `${indexFileAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return indexFileAtPath; + } + static getLocaleModuleFileAtPath(type: IComponentType, moduleName: string) { + const localeModuleFileAtPath = path.join( + this.getLocaleDirectoryAtPath(type), + `${moduleName}.ts` + ); + + if (existsSync(localeModuleFileAtPath)) { + throw new Error( + `${localeModuleFileAtPath} does exist. Please check the path under the packages directory!` + ); + } + + return localeModuleFileAtPath; + } + static getMenu18nLocaleFileAtPath() { + const menuI18nFileAtPath = path.join( + PathUtils.getRootCWDWithType('base'), + 'src', + 'locale', + 'zh-CN', + 'dmsMenu.ts' + ); + + if (!existsSync(menuI18nFileAtPath)) { + throw new Error( + `${menuI18nFileAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return menuI18nFileAtPath; + } + + // component path + static getComponentDirectoryAtPath(type: IComponentType) { + const componentDirAtPath = path.join( + PathUtils.getRootCWDWithType(type), + 'src', + 'page' + ); + + if (!existsSync(componentDirAtPath)) { + throw new Error( + `${componentDirAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return componentDirAtPath; + } + static getComponentIndexFileAtPath( + type: IComponentType, + componentName: string + ) { + const componentDirAtPath = this.getComponentDirectoryAtPath(type); + + return path.join(componentDirAtPath, componentName, 'index.tsx'); + } + + // router path + static getRouteConfigAtPath(type: IComponentType) { + let configAtPath = ''; + if (type === 'base') { + configAtPath = path.join( + PathUtils.getRootCWDWithType('base'), + 'src', + 'router', + 'router.base.tsx' + ); + } + + if (type === 'sqle') { + configAtPath = path.join( + PathUtils.getRootCWDWithType('sqle'), + 'src', + 'router', + 'config.tsx' + ); + } + if (type === 'provision') { + configAtPath = path.join( + PathUtils.getRootCWDWithType('provision'), + 'src', + 'router', + 'router.tsx' + ); + } + + if (!configAtPath) { + throw new Error( + `No routing configuration file corresponding to ${type} was found` + ); + } + + if (!existsSync(configAtPath)) { + throw new Error( + `${configAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return configAtPath; + } + static getRouteDataAtPath() { + const routeDataAtPath = path.join( + PathUtils.SHARED_ROOT_CWD, + 'lib', + 'data', + 'routePaths.ts' + ); + + if (!existsSync(routeDataAtPath)) { + throw new Error( + `${routeDataAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return routeDataAtPath; + } + + // menu path + static getMenuDataAtPath(type: IComponentType) { + const menuDataAtPath = path.join( + PathUtils.getRootCWDWithType('base'), + 'src', + 'page', + 'Nav', + 'sideMenu', + 'menuList', + 'menus', + `${type}.tsx` + ); + + if (!existsSync(menuDataAtPath)) { + throw new Error( + `${menuDataAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return menuDataAtPath; + } + static getMenuDataTypeAnnotationAtPath() { + const menuStructTreeKeyTypeAnnotationAtPath = path.join( + PathUtils.getRootCWDWithType('base'), + 'src', + 'page', + 'Nav', + 'sideMenu', + 'menuList', + 'menus', + `index.type.ts` + ); + + if (!existsSync(menuStructTreeKeyTypeAnnotationAtPath)) { + throw new Error( + `${menuStructTreeKeyTypeAnnotationAtPath} does not exist. Please check the path under the packages directory!` + ); + } + + return menuStructTreeKeyTypeAnnotationAtPath; + } + + static getRootCWDWithType( + type: 'sqle' | 'base' | 'shared' | 'icons' | 'provision' + ) { + return path.join(this.DMS_ROOT_CWD, 'packages', type); + } + + static getRelativePath(from: string, to: string, isFile?: boolean): string { + const normalize = (str: string) => { + return str.replace(/[\\/]+$/, '').split(/[\\/]+/); + }; + + const fromParts = normalize(from); + const toParts = normalize(to); + + if (isFile) { + fromParts.pop(); + toParts.pop(); + } + + let i = 0; + while ( + i < fromParts.length && + i < toParts.length && + fromParts[i] === toParts[i] + ) { + i++; + } + + const upCount = fromParts.length - i; + const relativeParts = [...Array(upCount).fill('..'), ...toParts.slice(i)]; + + return relativeParts.length === 0 ? '.' : relativeParts.join('/'); + } +} diff --git a/scripts/cli/create-dms-page/src/utils/spawn-util.ts b/scripts/cli/create-dms-page/src/utils/spawn-util.ts new file mode 100644 index 000000000..4989921bf --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/spawn-util.ts @@ -0,0 +1,19 @@ +import { spawn } from 'node:child_process'; + +export const spawnWrapper = ( + command: string, + args: string[] +): Promise => { + return new Promise((resolve, reject) => { + const child = spawn(command, args, { stdio: 'inherit' }); + child.on('close', (code) => { + if (code !== 0) { + reject({ + command: `${command} ${args.join(' ')}` + }); + return; + } + resolve(); + }); + }); +}; diff --git a/scripts/cli/create-dms-page/src/utils/str-utils.ts b/scripts/cli/create-dms-page/src/utils/str-utils.ts new file mode 100644 index 000000000..0d0f87a21 --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/str-utils.ts @@ -0,0 +1,28 @@ +export class StrUtils { + static convertFirstLetterToLowerCase(str: string) { + return str.replace(/^[A-Z]/, (match) => match.toLowerCase()); + } + + static convertFirstLetterToUpperCase(str: string) { + return str.replace(/^[a-z]/, (match) => match.toUpperCase()); + } + + static camelCaseToUpperCaseSnakeCase(str: string): string { + const firstChar = str.charAt(0).toLowerCase(); + const remainingChars = str + .slice(1) + .replace(/([A-Z])/g, '_$1') + .toLowerCase(); + return `${firstChar}${remainingChars}`.toUpperCase(); + } + + static isSvgContent(str: string): boolean { + try { + const parser = new DOMParser(); + const doc = parser.parseFromString(str, 'image/svg+xml'); + return doc.documentElement.tagName.toLowerCase() === 'svg'; + } catch (error) { + return false; + } + } +} diff --git a/scripts/cli/create-dms-page/src/utils/writer-utils.ts b/scripts/cli/create-dms-page/src/utils/writer-utils.ts new file mode 100644 index 000000000..c084487ea --- /dev/null +++ b/scripts/cli/create-dms-page/src/utils/writer-utils.ts @@ -0,0 +1,89 @@ +import { promises as fs, existsSync, readFileSync } from 'fs'; +import * as path from 'path'; +import * as prettier from 'prettier'; +import type { RequiredOptions } from 'prettier'; +import { logger } from './logger'; + +export class Writer { + private static options: Partial; + + public static async writeFile(src: string, content: string) { + try { + await this.makeDir(path.dirname(src)); + await fs.writeFile(src, content); + } catch (error) { + logger.error(`Write file:: ${src}`); + logger.error(error); + } + } + + public static async formattedWriteFile( + src: string, + content: string, + cwd: string + ) { + try { + this.getPrettierOption(cwd); + await this.makeDir(path.dirname(src)); + const formattedCode = await prettier.format(content, this.options); + await fs.writeFile(src, formattedCode); + } catch (error) { + logger.error(`Formatted write file:: ${src}`); + logger.error(error); + } + } + + private static getPrettierOption(cwd: string) { + if (this.options) { + return; + } + + ['.prettierrc', '.prettierrc.json'].forEach((v) => { + const configPath = path.resolve(cwd, v); + if (existsSync(configPath)) { + this.options = { + parser: 'typescript', + ...JSON.parse(readFileSync(configPath, 'utf-8')) + }; + } + }); + + if (this.options) { + return; + } + + ['.prettierrc.js', 'prettier.config.js', '.prettierrc.cjs'].forEach((v) => { + const configPath = path.resolve(cwd, v); + if (existsSync(configPath)) { + this.options = { + parser: 'typescript', + ...require(configPath) + }; + } + }); + + if (this.options) { + return; + } + + this.options = { + parser: 'typescript', + tabWidth: 2, + semi: true, + printWidth: 80, + trailingComma: 'none', + arrowParens: 'avoid', + proseWrap: 'preserve', + useTabs: false, + singleQuote: true, + bracketSpacing: true, + jsxBracketSameLine: false + }; + } + + private static async makeDir(dirname: string) { + if (!existsSync(dirname)) { + await fs.mkdir(dirname, { recursive: true }); + } + } +} diff --git a/scripts/cli/create-dms-page/tsconfig.json b/scripts/cli/create-dms-page/tsconfig.json new file mode 100644 index 000000000..af9c7a141 --- /dev/null +++ b/scripts/cli/create-dms-page/tsconfig.json @@ -0,0 +1,106 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "CommonJS" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [ + // "./src", + // "./package.json" + // ] /* Allow multiple folders to be treated as one when resolving modules. */, + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true /* Create source map files for emitted JavaScript files. */, + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + "skipDefaultLibCheck": true /* Skip type checking .d.ts files that are included with TypeScript. */, + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": ["node_modules", "dist", "./bin"], + "include": ["./src"] +} From 3dbc01013ef8971328fb63dfd544815a2246da15 Mon Sep 17 00:00:00 2001 From: LZS911 <932177767@qq.com> Date: Tue, 3 Dec 2024 16:28:16 +0800 Subject: [PATCH 2/4] [chore]: fix ci issue and add checker for cli --- package.json | 6 +- .../__snapshots__/router.base.test.tsx.snap | 2 +- .../router.ce.base.test.tsx.snap | 2 +- .../router.ce.sqle.test.tsx.snap | 2 +- packages/base/src/router/test/data.tsx | 17 +- pnpm-lock.yaml | 323 +++--------------- scripts/cli/create-dms-page/package.json | 11 +- .../cli/create-dms-page/src/utils/logger.ts | 1 + 8 files changed, 73 insertions(+), 291 deletions(-) diff --git a/package.json b/package.json index 61a089418..a9bc43e07 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,9 @@ "build": "pnpm --filter base build", "build:ee": "pnpm --filter base build:ee", "build:demo": "pnpm --filter base build:demo", - "prettier:w": "prettier -w packages/*/src/ packages/*/lib/", - "prettier:c": "prettier -c packages/*/src/ packages/*/lib/", - "eslint": "eslint packages/*/src/ packages/*/lib/", + "prettier:w": "prettier -w packages/*/src/ packages/*/lib/ scripts/cli/*/src", + "prettier:c": "prettier -c packages/*/src/ packages/*/lib/ scripts/cli/*/src", + "eslint": "eslint packages/*/src/ packages/*/lib/ scripts/cli/*/src", "stylelint": "stylelint packages/*/{src,lib}/**/{*.less,style.ts,element.ts}", "ts-check": "tsc --noEmit", "checker": "pnpm ts-check && pnpm eslint && pnpm stylelint && pnpm prettier:c", diff --git a/packages/base/src/router/test/__snapshots__/router.base.test.tsx.snap b/packages/base/src/router/test/__snapshots__/router.base.test.tsx.snap index dbfb5fce5..06e8fb076 100644 --- a/packages/base/src/router/test/__snapshots__/router.base.test.tsx.snap +++ b/packages/base/src/router/test/__snapshots__/router.base.test.tsx.snap @@ -201,7 +201,7 @@ exports[`base/router-base-ee render base route data snap 1`] = ` "path": ":projectID/cloud-beaver", }, ], - "element": , + "element": , "key": "projectDetail", "path": "/project/*", }, diff --git a/packages/base/src/router/test/__snapshots__/router.ce.base.test.tsx.snap b/packages/base/src/router/test/__snapshots__/router.ce.base.test.tsx.snap index bf9f0fad9..863fdc41b 100644 --- a/packages/base/src/router/test/__snapshots__/router.ce.base.test.tsx.snap +++ b/packages/base/src/router/test/__snapshots__/router.ce.base.test.tsx.snap @@ -100,7 +100,7 @@ exports[`base/router-base-ce render base route data snap 1`] = ` "path": ":projectID/cloud-beaver", }, ], - "element": , + "element": , "key": "projectDetail", "path": "/project/*", }, diff --git a/packages/base/src/router/test/__snapshots__/router.ce.sqle.test.tsx.snap b/packages/base/src/router/test/__snapshots__/router.ce.sqle.test.tsx.snap index 1747e7fdd..a8d0a4540 100644 --- a/packages/base/src/router/test/__snapshots__/router.ce.sqle.test.tsx.snap +++ b/packages/base/src/router/test/__snapshots__/router.ce.sqle.test.tsx.snap @@ -997,7 +997,7 @@ exports[`base/router-sqle-ce render sqle route data snap 1`] = ` }, ], "element": , - "key": "projectDetail", + "key": "sqleProjectDetail", "path": "/sqle/project/*", }, { diff --git a/packages/base/src/router/test/data.tsx b/packages/base/src/router/test/data.tsx index b57dd5039..996e645a4 100644 --- a/packages/base/src/router/test/data.tsx +++ b/packages/base/src/router/test/data.tsx @@ -1,10 +1,23 @@ import { RouteObject, useRoutes, Outlet } from 'react-router-dom'; import { RouterConfigItem } from '@actiontech/shared/lib/types/common.type'; import { AuthRouterConfig, unAuthRouterConfig } from '../router'; -import { BaseRouterConfig } from '../router.base'; +import { + BaseGlobalRouterConfig, + BaseProjectRouterConfig +} from '../router.base'; +import { ROUTE_PATHS } from '@actiontech/shared/lib/data/routePaths'; +import ProjectDetail from '../../page/Project/Detail'; const routeData = { - base: BaseRouterConfig, + base: [ + ...BaseGlobalRouterConfig, + { + key: 'projectDetail', + path: ROUTE_PATHS.BASE.PROJECT_DETAIL, + element: , + children: BaseProjectRouterConfig + } + ], sqle: AuthRouterConfig, unAuth: unAuthRouterConfig }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index faf70c76e..95b51720c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -369,45 +369,21 @@ importers: '@babel/types': specifier: ^7.24.9 version: 7.24.9 - '@faker-js/faker': - specifier: ^9.0.1 - version: 9.0.1 - '@gitbeaker/rest': - specifier: ^40.1.1 - version: 40.1.1 '@inquirer/prompts': specifier: ^5.1.2 version: 5.1.2 - '@octokit/core': - specifier: 3.5.1 - version: 3.5.1 chalk: specifier: ^4.1.2 version: 4.1.2 - cli-progress: - specifier: ^3.12.0 - version: 3.12.0 - clipboardy: - specifier: ^4.0.0 - version: 4.0.0 commander: specifier: ^12.1.0 version: 12.1.0 node-clipboardy: specifier: ^1.0.3 version: 1.0.3 - ora: - specifier: '^5.4.1 ' - version: 5.4.1 prettier: specifier: ^3.3.3 version: 3.3.3 - readline: - specifier: ^1.3.0 - version: 1.3.0 - tar: - specifier: ^7.4.0 - version: 7.4.0 zod: specifier: ^3.23.8 version: 3.23.8 @@ -418,9 +394,6 @@ importers: '@types/babel__traverse': specifier: ^7.20.6 version: 7.20.6 - '@types/cli-progress': - specifier: ^3.11.6 - version: 3.11.6 packages: @@ -3318,11 +3291,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@faker-js/faker@9.0.1: - resolution: {integrity: sha512-4mDeYIgM3By7X6t5E6eYwLAa+2h4DeZDF7thhzIg6XB76jeEvMwadYAMCFJL/R4AnEBcAUO9+gL0vhy3s+qvZA==} - engines: {node: '>=18.0.0', npm: '>=9.0.0'} - dev: false - /@floating-ui/core@0.6.2: resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==} dev: true @@ -3429,33 +3397,6 @@ packages: typescript: 5.4.3 dev: true - /@gitbeaker/core@40.6.0: - resolution: {integrity: sha512-tVVm8ZPrS9YCHEcuPV8vD1IcEf9POpdygWo+kPvkK7LcC36EERVcXagb8snEaGgGLfUaVQh8qP4iDZgPnP3YBQ==} - engines: {node: '>=18.20.0'} - dependencies: - '@gitbeaker/requester-utils': 40.6.0 - qs: 6.13.1 - xcase: 2.0.1 - dev: false - - /@gitbeaker/requester-utils@40.6.0: - resolution: {integrity: sha512-DQu2l3iXtB+8e1Ye2ekeUHABt4mGMRTLtuVWtFqf74sqJnerHNOxVOjPn19qu/nKdvKR3ZLwSRTtPzEsxgcShg==} - engines: {node: '>=18.20.0'} - dependencies: - picomatch-browser: 2.2.6 - qs: 6.13.1 - rate-limiter-flexible: 4.0.1 - xcase: 2.0.1 - dev: false - - /@gitbeaker/rest@40.1.1: - resolution: {integrity: sha512-iYDqghGNGhAG6KJnuat4qHCTaXCuSfxDkP42toaMgJpdzey4Mx4AvA/ko89osbOB+cnlg+dvfmP67U5ih9Jijg==} - engines: {node: '>=18.20.0'} - dependencies: - '@gitbeaker/core': 40.6.0 - '@gitbeaker/requester-utils': 40.6.0 - dev: false - /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -3637,13 +3578,7 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - - /@isaacs/fs-minipass@4.0.1: - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - dependencies: - minipass: 7.1.2 - dev: false + dev: true /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -4332,75 +4267,6 @@ packages: fastq: 1.15.0 dev: true - /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} - dependencies: - '@octokit/types': 6.41.0 - dev: false - - /@octokit/core@3.5.1: - resolution: {integrity: sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==} - dependencies: - '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0 - '@octokit/request': 5.6.3 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false - - /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} - dependencies: - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.1 - dev: false - - /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} - dependencies: - '@octokit/request': 5.6.3 - '@octokit/types': 6.41.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false - - /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - dev: false - - /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} - dependencies: - '@octokit/types': 6.41.0 - deprecation: 2.3.1 - once: 1.4.0 - dev: false - - /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} - dependencies: - '@octokit/endpoint': 6.0.12 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 - is-plain-object: 5.0.0 - node-fetch: 2.7.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false - - /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} - dependencies: - '@octokit/openapi-types': 12.11.0 - dev: false - /@open-draft/until@1.0.3: resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} dev: true @@ -4409,6 +4275,7 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true + dev: true optional: true /@pkgr/utils@2.4.2: @@ -5359,12 +5226,6 @@ packages: '@types/node': 13.9.3 dev: true - /@types/cli-progress@3.11.6: - resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} - dependencies: - '@types/node': 18.15.11 - dev: true - /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true @@ -7078,6 +6939,7 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + dev: true /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} @@ -7104,6 +6966,7 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + dev: true /antd@5.7.3(moment@2.29.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7sQeE86XkUrYDIKGu/Qu7kl+NWYzkVSGbGqWGIbITHkFZorCyOvvqgF63fiWo/tp2lZWbEOO0Cm7IiYnoeWh9A==} @@ -7651,15 +7514,12 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true /bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} dev: false - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: false - /big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -7692,6 +7552,7 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true /blob-polyfill@7.0.20220408: resolution: {integrity: sha512-oD8Ydw+5lNoqq+en24iuPt1QixdPpe/nUF8azTHnviCZYu9zUC+TwdzIp5orpblJosNlgNbVmmAb//c6d6ImUQ==} @@ -7762,6 +7623,7 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -7898,6 +7760,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -8160,11 +8023,6 @@ packages: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - dev: false - /chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -8221,13 +8079,7 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - - /cli-progress@3.12.0: - resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} - engines: {node: '>=4'} - dependencies: - string-width: 4.2.3 - dev: false + dev: true /cli-spinners@1.3.1: resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==} @@ -8237,6 +8089,7 @@ packages: /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + dev: true /cli-width@2.2.1: resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} @@ -8266,15 +8119,6 @@ packages: - react-dom dev: true - /clipboardy@4.0.0: - resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} - engines: {node: '>=18'} - dependencies: - execa: 8.0.1 - is-wsl: 3.1.0 - is64bit: 2.0.0 - dev: false - /cliui@2.1.0: resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==} dependencies: @@ -8295,6 +8139,7 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + dev: true /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -9261,6 +9106,7 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -9308,10 +9154,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: false - /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -9686,6 +9528,7 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true /editions@2.3.1: resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==} @@ -9732,6 +9575,7 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} @@ -10683,21 +10527,6 @@ packages: strip-final-newline: 3.0.0 dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: false - /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -11088,6 +10917,7 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 + dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@4.7.4)(webpack@5.92.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -11319,11 +11149,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: false - /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -11418,6 +11243,7 @@ packages: minimatch: 9.0.4 minipass: 7.1.2 path-scurry: 1.11.1 + dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -12093,11 +11919,6 @@ packages: engines: {node: '>=14.18.0'} dev: true - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: false - /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -12149,6 +11970,7 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true /iferr@0.1.5: resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} @@ -12439,6 +12261,7 @@ packages: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + dev: true /is-equal@1.7.0: resolution: {integrity: sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==} @@ -12525,6 +12348,7 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 + dev: true /is-installed-globally@0.1.0: resolution: {integrity: sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==} @@ -12537,6 +12361,7 @@ packages: /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + dev: true /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -12602,6 +12427,7 @@ packages: /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + dev: true /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -12646,6 +12472,7 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -12672,6 +12499,7 @@ packages: /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + dev: true /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} @@ -12709,20 +12537,6 @@ packages: dependencies: is-docker: 2.2.1 - /is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - dependencies: - is-inside-container: 1.0.0 - dev: false - - /is64bit@2.0.0: - resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} - engines: {node: '>=18'} - dependencies: - system-architecture: 0.1.0 - dev: false - /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: true @@ -12846,6 +12660,7 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: true /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} @@ -13993,6 +13808,7 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -14022,6 +13838,7 @@ packages: /lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} + dev: true /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -14669,6 +14486,7 @@ packages: /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -14700,6 +14518,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} @@ -14716,14 +14535,7 @@ packages: /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - - /minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} - engines: {node: '>= 18'} - dependencies: - minipass: 7.1.2 - rimraf: 5.0.10 - dev: false + dev: true /mississippi@1.3.1: resolution: {integrity: sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==} @@ -14763,12 +14575,6 @@ packages: minimist: 1.2.8 dev: true - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - dev: false - /mockdate@3.0.5: resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==} dev: true @@ -14966,6 +14772,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -15113,6 +14920,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 + dev: true /nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -15289,6 +15097,7 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 + dev: true /open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} @@ -15363,6 +15172,7 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true /os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -15636,6 +15446,7 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -15646,6 +15457,7 @@ packages: dependencies: lru-cache: 10.2.2 minipass: 7.1.2 + dev: true /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -15695,11 +15507,6 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picomatch-browser@2.2.6: - resolution: {integrity: sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==} - engines: {node: '>=8.6'} - dev: false - /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -16550,6 +16357,7 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 + dev: true /query-string@6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} @@ -16646,10 +16454,6 @@ packages: engines: {node: '>= 0.6'} dev: true - /rate-limiter-flexible@4.0.1: - resolution: {integrity: sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ==} - dev: false - /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -17724,6 +17528,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -17732,10 +17537,6 @@ packages: picomatch: 2.3.1 dev: true - /readline@1.3.0: - resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} - dev: false - /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} @@ -18166,6 +17967,7 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true /resumer@0.0.0: resolution: {integrity: sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==} @@ -18217,13 +18019,6 @@ packages: glob: 10.4.1 dev: true - /rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - dependencies: - glob: 10.4.1 - dev: false - /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: @@ -18365,6 +18160,7 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} @@ -18972,6 +18768,7 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.0.1 + dev: true /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -19035,6 +18832,7 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true /stringify-entities@4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} @@ -19074,6 +18872,7 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 + dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -19097,6 +18896,7 @@ packages: /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -19474,11 +19274,6 @@ packages: tslib: 2.6.3 dev: true - /system-architecture@0.1.0: - resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} - engines: {node: '>=18'} - dev: false - /systemjs@6.15.1: resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} dev: true @@ -19542,18 +19337,6 @@ packages: xtend: 4.0.2 dev: true - /tar@7.4.0: - resolution: {integrity: sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==} - engines: {node: '>=18'} - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 - yallist: 5.0.0 - dev: false - /term-size@1.2.0: resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} engines: {node: '>=4'} @@ -19734,6 +19517,7 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} @@ -20182,10 +19966,6 @@ packages: unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - /universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - dev: false - /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -20330,6 +20110,7 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true /util-okam@0.11.1: resolution: {integrity: sha512-e2bG47F03vYx2MbA6znK6t6dwffnXGsVzh8BLpi0pcQ7dDRQf0zSAQ9IR7M+aoozALNibw8eCY53gEK8bBpSjg==} @@ -20613,6 +20394,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true /web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} @@ -20636,6 +20418,7 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -20720,6 +20503,7 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -20822,6 +20606,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -20830,6 +20615,7 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.0.1 + dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -20871,10 +20657,6 @@ packages: optional: true dev: true - /xcase@2.0.1: - resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} - dev: false - /xdg-basedir@3.0.0: resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==} engines: {node: '>=4'} @@ -20931,11 +20713,6 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - dev: false - /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} diff --git a/scripts/cli/create-dms-page/package.json b/scripts/cli/create-dms-page/package.json index b9474ac1d..f15923848 100644 --- a/scripts/cli/create-dms-page/package.json +++ b/scripts/cli/create-dms-page/package.json @@ -16,27 +16,18 @@ "license": "ISC", "devDependencies": { "@types/babel__generator": "^7.6.8", - "@types/babel__traverse": "^7.20.6", - "@types/cli-progress": "^3.11.6" + "@types/babel__traverse": "^7.20.6" }, "dependencies": { "@babel/generator": "^7.25.0", "@babel/parser": "^7.24.8", "@babel/traverse": "^7.24.8", "@babel/types": "^7.24.9", - "@faker-js/faker": "^9.0.1", - "@gitbeaker/rest": "^40.1.1", "@inquirer/prompts": "^5.1.2", - "@octokit/core": "3.5.1", "chalk": "^4.1.2", - "cli-progress": "^3.12.0", - "clipboardy": "^4.0.0", "commander": "^12.1.0", "node-clipboardy": "^1.0.3", - "ora": "^5.4.1 ", "prettier": "^3.3.3", - "readline": "^1.3.0", - "tar": "^7.4.0", "zod": "^3.23.8" } } \ No newline at end of file diff --git a/scripts/cli/create-dms-page/src/utils/logger.ts b/scripts/cli/create-dms-page/src/utils/logger.ts index d48a320e9..f4c76f733 100644 --- a/scripts/cli/create-dms-page/src/utils/logger.ts +++ b/scripts/cli/create-dms-page/src/utils/logger.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import chalk from 'chalk'; function stringify(arg: unknown): string { From f5a070c5586bf7c44cfa88e5e819ef1d848fde4c Mon Sep 17 00:00:00 2001 From: LZS911 <932177767@qq.com> Date: Tue, 3 Dec 2024 16:45:24 +0800 Subject: [PATCH 3/4] [chore]: Remove redundant validate [skip ci] --- scripts/cli/create-dms-page/src/module/icon-manager/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/cli/create-dms-page/src/module/icon-manager/index.ts b/scripts/cli/create-dms-page/src/module/icon-manager/index.ts index 4b5cb78f8..a41c1496d 100644 --- a/scripts/cli/create-dms-page/src/module/icon-manager/index.ts +++ b/scripts/cli/create-dms-page/src/module/icon-manager/index.ts @@ -27,8 +27,6 @@ export class IconManager implements IIconManager { validate: this.validateIconName.bind(this) }); - this.validateIconName(iconName); - const match = iconName.match(this.iconNamePattern); if (!match || !match[1]) { throw new Error(`Unable to extract icon type from: ${iconName}`); From d676306bbf70e7a20219635e27865cf422c6d4e6 Mon Sep 17 00:00:00 2001 From: LZS911 <932177767@qq.com> Date: Tue, 3 Dec 2024 16:56:15 +0800 Subject: [PATCH 4/4] [chore]: adjust handle error [skip ci] --- scripts/cli/create-dms-page/src/create-dms-page.ts | 3 +-- scripts/cli/create-dms-page/src/utils/babel-utils.ts | 4 ++-- scripts/cli/create-dms-page/src/utils/handle-error.ts | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/cli/create-dms-page/src/create-dms-page.ts b/scripts/cli/create-dms-page/src/create-dms-page.ts index 79af3ed94..b3ba493a5 100644 --- a/scripts/cli/create-dms-page/src/create-dms-page.ts +++ b/scripts/cli/create-dms-page/src/create-dms-page.ts @@ -68,8 +68,7 @@ export class CreateDMSPage implements Task { await orchestrator.createDmsPage(); } catch (error) { - logger.error(handleError(error)); - process.exit(1); + handleError(error); } } } diff --git a/scripts/cli/create-dms-page/src/utils/babel-utils.ts b/scripts/cli/create-dms-page/src/utils/babel-utils.ts index fa82dd73f..1b4313161 100644 --- a/scripts/cli/create-dms-page/src/utils/babel-utils.ts +++ b/scripts/cli/create-dms-page/src/utils/babel-utils.ts @@ -161,9 +161,9 @@ export class BabelUtils { }) ) { throw new Error( - `当前对象 ${objectName} 存在对象路径为 [${keyPath.join( + `The current object ${objectName} has an object path with the value [${keyPath.join( ',' - )}] 的值,无法重复添加!` + )}] and cannot be added repeatedly!` ); } currentObject.properties.push( diff --git a/scripts/cli/create-dms-page/src/utils/handle-error.ts b/scripts/cli/create-dms-page/src/utils/handle-error.ts index 289ba237d..ee9eacb92 100644 --- a/scripts/cli/create-dms-page/src/utils/handle-error.ts +++ b/scripts/cli/create-dms-page/src/utils/handle-error.ts @@ -3,12 +3,10 @@ import { logger } from './logger'; export function handleError(error: unknown) { if (typeof error === 'string') { logger.error(error); - process.exit(1); } if (error instanceof Error) { logger.error(error.message); - process.exit(1); } logger.error('Something went wrong. Please try again.');