From afa5dee9f25dad1f0c6945c6c531bd8a094ac43b Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Sun, 21 Aug 2022 20:49:41 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 19 + .env.test | 36 + .eslintignore | 15 + .eslintrc.js | 80 + .github/ISSUE_TEMPLATE/1-bug.md | 39 + .github/ISSUE_TEMPLATE/2-feature.md | 32 + .github/ISSUE_TEMPLATE/3-bug-cn.md | 28 + .github/ISSUE_TEMPLATE/config.yml | 8 + .github/commit-convention.md | 89 + .github/contributing.md | 5 + .github/pull_request_template.md | 34 + .github/workflows/deploy.yml | 118 + .github/workflows/ftp-schedule.yml | 56 + .github/workflows/issue-close-require.yml | 17 + .github/workflows/issue-labeled.yml | 29 + .github/workflows/release.yml | 24 + .gitignore | 30 +- .gitpod.yml | 6 + .husky/commit-msg | 6 + .husky/common.sh | 9 + .husky/lintstagedrc.js | 8 + .husky/pre-commit | 8 + .prettierignore | 9 + .stylelintignore | 3 + .yarnclean | 48 + commitlint.config.js | 33 + jest.config.mjs | 36 + mock/_createProductionServer.ts | 6 +- mock/_util.ts | 10 +- mock/demo/account.ts | 64 +- mock/student/practice.ts | 36 + mock/sys/menu.ts | 228 +- mock/sys/user.ts | 80 +- package.json | 97 +- pnpm-lock.yaml | 7419 ---------- postcss.config.js | 5 + prettier.config.js | 10 + public/resource/img/pwa-192x192.png | Bin 0 -> 12205 bytes public/resource/img/pwa-512x512.png | Bin 0 -> 52656 bytes src/App.vue | 8 +- src/api/demo/error.ts | 4 +- src/api/student/model/practice-model.ts | 57 + src/api/student/practice.ts | 56 + src/api/sys/menu.ts | 6 +- src/api/sys/model/menuModel.ts | 2 +- src/api/sys/upload.ts | 10 +- src/api/sys/user.ts | 18 +- src/components/Application/index.ts | 14 +- .../Application/src/AppDarkModeToggle.vue | 20 +- .../Application/src/AppLocalePicker.vue | 16 +- src/components/Application/src/AppLogo.vue | 24 +- .../Application/src/AppProvider.vue | 14 +- .../Application/src/search/AppSearch.vue | 14 +- .../src/search/AppSearchFooter.vue | 16 +- .../src/search/AppSearchKeyItem.vue | 2 +- .../Application/src/search/AppSearchModal.vue | 36 +- .../Application/src/search/useMenuSearch.ts | 34 +- .../Application/src/useAppContext.ts | 4 +- src/components/Authority/index.ts | 4 +- src/components/Authority/src/Authority.vue | 14 +- src/components/Basic/index.ts | 8 +- src/components/Basic/src/BasicArrow.vue | 10 +- src/components/Basic/src/BasicHelp.vue | 34 +- src/components/Basic/src/BasicTitle.vue | 16 +- src/components/Button/index.ts | 10 +- src/components/Button/src/BasicButton.vue | 14 +- .../Button/src/PopConfirmButton.vue | 26 +- src/components/Button/src/props.ts | 2 +- src/components/CardList/index.ts | 4 +- src/components/CardList/src/CardList.vue | 24 +- src/components/CardList/src/data.ts | 4 +- src/components/ClickOutSide/index.ts | 4 +- .../ClickOutSide/src/ClickOutSide.vue | 10 +- src/components/CodeEditor/index.ts | 8 +- src/components/CodeEditor/src/CodeEditor.vue | 16 +- .../CodeEditor/src/codemirror/CodeMirror.vue | 48 +- .../CodeEditor/src/codemirror/codeMirror.ts | 14 +- .../src/json-preview/JsonPreview.vue | 4 +- src/components/CodeEditor/src/typing.ts | 6 +- src/components/Container/index.ts | 10 +- .../Container/src/LazyContainer.vue | 38 +- .../Container/src/ScrollContainer.vue | 8 +- .../src/collapse/CollapseContainer.vue | 24 +- .../Container/src/collapse/CollapseHeader.vue | 8 +- src/components/Container/src/typing.ts | 2 +- src/components/ContextMenu/index.ts | 4 +- .../ContextMenu/src/ContextMenu.vue | 14 +- .../ContextMenu/src/createContextMenu.ts | 22 +- src/components/CountDown/index.ts | 6 +- src/components/CountDown/src/CountButton.vue | 16 +- .../CountDown/src/CountdownInput.vue | 16 +- src/components/CountDown/src/useCountdown.ts | 4 +- src/components/CountTo/index.ts | 4 +- src/components/CountTo/src/CountTo.vue | 34 +- src/components/Cropper/index.ts | 8 +- src/components/Cropper/src/CopperModal.vue | 46 +- src/components/Cropper/src/Cropper.vue | 44 +- src/components/Cropper/src/CropperAvatar.vue | 44 +- src/components/Cropper/src/typing.ts | 2 +- src/components/Description/index.ts | 8 +- .../Description/src/Description.vue | 42 +- src/components/Description/src/typing.ts | 6 +- .../Description/src/useDescription.ts | 8 +- src/components/Drawer/index.ts | 8 +- src/components/Drawer/src/BasicDrawer.vue | 52 +- .../Drawer/src/components/DrawerFooter.vue | 22 +- .../Drawer/src/components/DrawerHeader.vue | 22 +- src/components/Drawer/src/props.ts | 12 +- src/components/Drawer/src/typing.ts | 10 +- src/components/Drawer/src/useDrawer.ts | 28 +- src/components/Dropdown/index.ts | 6 +- src/components/Dropdown/src/Dropdown.vue | 26 +- src/components/Excel/index.ts | 10 +- src/components/Excel/src/Export2Excel.ts | 12 +- src/components/Excel/src/ExportExcelModal.vue | 54 +- src/components/Excel/src/ImportExcel.vue | 28 +- src/components/Excel/src/typing.ts | 2 +- src/components/FlowChart/index.ts | 4 +- src/components/FlowChart/src/FlowChart.vue | 38 +- .../FlowChart/src/FlowChartToolbar.vue | 54 +- .../FlowChart/src/adpterForTurbo.ts | 4 +- src/components/FlowChart/src/config.ts | 98 +- src/components/FlowChart/src/enum.ts | 14 +- src/components/FlowChart/src/types.ts | 4 +- .../FlowChart/src/useFlowContext.ts | 6 +- src/components/Form/index.ts | 20 +- src/components/Form/src/BasicForm.vue | 54 +- src/components/Form/src/componentMap.ts | 86 +- .../Form/src/components/ApiCascader.vue | 44 +- .../Form/src/components/ApiRadioGroup.vue | 28 +- .../Form/src/components/ApiSelect.vue | 34 +- .../Form/src/components/ApiTreeSelect.vue | 22 +- .../Form/src/components/FormAction.vue | 30 +- .../Form/src/components/FormItem.vue | 72 +- .../Form/src/components/RadioButtonGroup.vue | 12 +- src/components/Form/src/helper.ts | 50 +- src/components/Form/src/hooks/useAdvanced.ts | 18 +- src/components/Form/src/hooks/useAutoFocus.ts | 10 +- .../Form/src/hooks/useComponentRegister.ts | 8 +- src/components/Form/src/hooks/useForm.ts | 16 +- .../Form/src/hooks/useFormContext.ts | 4 +- .../Form/src/hooks/useFormEvents.ts | 36 +- .../Form/src/hooks/useFormValues.ts | 14 +- .../Form/src/hooks/useLabelWidth.ts | 10 +- src/components/Form/src/props.ts | 20 +- src/components/Form/src/types/form.ts | 24 +- src/components/Form/src/types/formItem.ts | 10 +- src/components/Form/src/types/index.ts | 64 +- src/components/Icon/data/icons.data.ts | 1578 +-- src/components/Icon/index.ts | 6 +- src/components/Icon/src/Icon.vue | 34 +- src/components/Icon/src/IconPicker.vue | 67 +- src/components/Icon/src/SvgIcon.vue | 16 +- src/components/Loading/index.ts | 6 +- src/components/Loading/src/Loading.vue | 16 +- src/components/Loading/src/createLoading.ts | 14 +- src/components/Loading/src/typing.ts | 4 +- src/components/Loading/src/useLoading.ts | 10 +- src/components/Markdown/index.ts | 8 +- src/components/Markdown/src/Markdown.vue | 54 +- .../Markdown/src/MarkdownViewer.vue | 8 +- src/components/Markdown/src/typing.ts | 2 +- src/components/Menu/index.ts | 2 +- src/components/Menu/src/BasicMenu.vue | 44 +- .../Menu/src/components/BasicMenuItem.vue | 10 +- .../Menu/src/components/BasicSubMenuItem.vue | 20 +- .../Menu/src/components/MenuItemContent.vue | 14 +- src/components/Menu/src/props.ts | 16 +- src/components/Menu/src/useOpenKeys.ts | 18 +- src/components/Modal/index.ts | 12 +- src/components/Modal/src/BasicModal.vue | 56 +- src/components/Modal/src/components/Modal.tsx | 16 +- .../Modal/src/components/ModalClose.vue | 22 +- .../Modal/src/components/ModalFooter.vue | 12 +- .../Modal/src/components/ModalHeader.vue | 10 +- .../Modal/src/components/ModalWrapper.vue | 24 +- src/components/Modal/src/hooks/useModal.ts | 28 +- .../Modal/src/hooks/useModalContext.ts | 4 +- .../Modal/src/hooks/useModalDrag.ts | 34 +- .../Modal/src/hooks/useModalFullScreen.ts | 4 +- src/components/Modal/src/props.ts | 14 +- src/components/Modal/src/typing.ts | 8 +- src/components/Page/index.ts | 8 +- src/components/Page/src/PageFooter.vue | 12 +- src/components/Page/src/PageWrapper.vue | 28 +- src/components/Preview/index.ts | 4 +- src/components/Preview/src/Functional.vue | 54 +- src/components/Preview/src/Preview.vue | 18 +- src/components/Preview/src/functional.ts | 10 +- src/components/Qrcode/index.ts | 6 +- src/components/Qrcode/src/Qrcode.vue | 34 +- src/components/Qrcode/src/drawCanvas.ts | 16 +- src/components/Qrcode/src/drawLogo.ts | 16 +- src/components/Qrcode/src/qrcodePlus.ts | 4 +- src/components/Qrcode/src/toCanvas.ts | 6 +- src/components/Qrcode/src/typing.ts | 2 +- src/components/Scrollbar/index.ts | 4 +- src/components/Scrollbar/src/Scrollbar.vue | 36 +- src/components/Scrollbar/src/bar.ts | 28 +- src/components/Scrollbar/src/util.ts | 34 +- src/components/SimpleMenu/index.ts | 4 +- src/components/SimpleMenu/src/SimpleMenu.vue | 46 +- .../SimpleMenu/src/SimpleMenuTag.vue | 18 +- .../SimpleMenu/src/SimpleSubMenu.vue | 30 +- .../SimpleMenu/src/components/Menu.vue | 38 +- .../src/components/MenuCollapseTransition.vue | 30 +- .../SimpleMenu/src/components/MenuItem.vue | 26 +- .../SimpleMenu/src/components/SubMenuItem.vue | 46 +- .../SimpleMenu/src/components/types.ts | 2 +- .../SimpleMenu/src/components/useMenu.ts | 22 +- .../src/components/useSimpleMenuContext.ts | 6 +- src/components/SimpleMenu/src/useOpenKeys.ts | 16 +- src/components/StrengthMeter/index.ts | 4 +- .../StrengthMeter/src/StrengthMeter.vue | 38 +- src/components/Table/index.ts | 20 +- src/components/Table/src/BasicTable.vue | 108 +- src/components/Table/src/componentMap.ts | 26 +- .../src/components/EditTableHeaderIcon.vue | 8 +- .../Table/src/components/ExpandIcon.tsx | 2 +- .../Table/src/components/HeaderCell.vue | 18 +- .../Table/src/components/TableAction.vue | 42 +- .../Table/src/components/TableFooter.vue | 38 +- .../Table/src/components/TableHeader.vue | 26 +- .../Table/src/components/TableImg.vue | 18 +- .../Table/src/components/TableTitle.vue | 14 +- .../src/components/editable/CellComponent.ts | 14 +- .../src/components/editable/EditableCell.vue | 82 +- .../Table/src/components/editable/helper.ts | 28 +- .../Table/src/components/editable/index.ts | 8 +- .../src/components/settings/ColumnSetting.vue | 62 +- .../components/settings/FullScreenSetting.vue | 16 +- .../src/components/settings/RedoSetting.vue | 14 +- .../src/components/settings/SizeSetting.vue | 24 +- .../Table/src/components/settings/index.vue | 24 +- src/components/Table/src/const.ts | 10 +- src/components/Table/src/hooks/useColumns.ts | 44 +- .../Table/src/hooks/useCustomRow.ts | 30 +- .../Table/src/hooks/useDataSource.ts | 30 +- src/components/Table/src/hooks/useLoading.ts | 4 +- .../Table/src/hooks/usePagination.tsx | 24 +- .../Table/src/hooks/useRowSelection.ts | 18 +- src/components/Table/src/hooks/useTable.ts | 20 +- .../Table/src/hooks/useTableContext.ts | 10 +- .../Table/src/hooks/useTableExpand.ts | 12 +- .../Table/src/hooks/useTableFooter.ts | 16 +- .../Table/src/hooks/useTableForm.ts | 16 +- .../Table/src/hooks/useTableHeader.ts | 18 +- .../Table/src/hooks/useTableScroll.ts | 46 +- .../Table/src/hooks/useTableStyle.ts | 12 +- src/components/Table/src/props.ts | 14 +- src/components/Table/src/types/column.ts | 8 +- .../Table/src/types/componentType.ts | 18 +- src/components/Table/src/types/pagination.ts | 8 +- src/components/Table/src/types/table.ts | 24 +- src/components/Table/src/types/tableAction.ts | 8 +- src/components/Time/index.ts | 4 +- src/components/Time/src/Time.vue | 42 +- src/components/Tinymce/index.ts | 4 +- src/components/Tinymce/src/Editor.vue | 150 +- src/components/Tinymce/src/ImgUpload.vue | 32 +- src/components/Tinymce/src/helper.ts | 128 +- src/components/Tinymce/src/tinymce.ts | 6 +- src/components/Transition/index.ts | 36 +- .../Transition/src/CollapseTransition.vue | 30 +- .../Transition/src/CreateTransition.tsx | 12 +- .../Transition/src/ExpandTransition.ts | 18 +- src/components/Tree/index.ts | 6 +- src/components/Tree/src/Tree.vue | 88 +- src/components/Tree/src/TreeHeader.vue | 48 +- src/components/Tree/src/TreeIcon.ts | 10 +- src/components/Tree/src/props.ts | 14 +- src/components/Tree/src/typing.ts | 8 +- src/components/Tree/src/useTree.ts | 18 +- src/components/Upload/index.ts | 4 +- src/components/Upload/src/BasicUpload.vue | 42 +- src/components/Upload/src/FileList.vue | 20 +- src/components/Upload/src/ThumbUrl.vue | 10 +- src/components/Upload/src/UploadModal.vue | 60 +- .../Upload/src/UploadPreviewModal.vue | 30 +- src/components/Upload/src/data.tsx | 76 +- src/components/Upload/src/helper.ts | 4 +- src/components/Upload/src/props.ts | 8 +- src/components/Upload/src/typing.ts | 10 +- src/components/Upload/src/useUpload.ts | 16 +- src/components/Verify/index.ts | 8 +- src/components/Verify/src/DragVerify.vue | 52 +- src/components/Verify/src/ImgRotate.vue | 40 +- src/components/Verify/src/props.ts | 8 +- src/components/VirtualScroll/index.ts | 4 +- .../VirtualScroll/src/VirtualScroll.vue | 18 +- src/components/registerGlobComp.ts | 6 +- src/directives/clickOutside.ts | 10 +- src/directives/index.ts | 6 +- src/directives/loading.ts | 16 +- src/directives/permission.ts | 6 +- src/directives/repeatClick.ts | 8 +- src/directives/ripple/index.ts | 74 +- src/enums/appEnum.ts | 32 +- src/enums/breakpointEnum.ts | 12 +- src/enums/cacheEnum.ts | 20 +- src/enums/exceptionEnum.ts | 10 +- src/enums/httpEnum.ts | 16 +- src/enums/menuEnum.ts | 34 +- src/enums/pageEnum.ts | 8 +- src/enums/roleEnum.ts | 4 +- src/enums/sizeEnum.ts | 6 +- src/hooks/component/useFormItem.ts | 10 +- src/hooks/component/usePageContext.ts | 4 +- src/hooks/core/onMountedOrActivated.ts | 2 +- src/hooks/core/useAttrs.ts | 6 +- src/hooks/core/useContext.ts | 2 +- src/hooks/core/useLockFn.ts | 2 +- src/hooks/core/useRefs.ts | 4 +- src/hooks/core/useTimeout.ts | 8 +- src/hooks/event/useBreakpoint.ts | 8 +- src/hooks/event/useEventListener.ts | 6 +- src/hooks/event/useIntersectionObserver.ts | 4 +- src/hooks/event/useScroll.ts | 18 +- src/hooks/event/useScrollTo.ts | 4 +- src/hooks/event/useWindowSizeFn.ts | 8 +- src/hooks/setting/index.ts | 6 +- src/hooks/setting/useHeaderSetting.ts | 14 +- src/hooks/setting/useMenuSetting.ts | 12 +- src/hooks/setting/useMultipleTabSetting.ts | 6 +- src/hooks/setting/useRootSetting.ts | 10 +- src/hooks/setting/useTransitionSetting.ts | 6 +- src/hooks/web/useAppInject.ts | 4 +- src/hooks/web/useContentHeight.ts | 30 +- src/hooks/web/useContextMenu.ts | 6 +- src/hooks/web/useCopyToClipboard.ts | 22 +- src/hooks/web/useDesign.ts | 2 +- src/hooks/web/useECharts.ts | 36 +- src/hooks/web/useFullContent.ts | 8 +- src/hooks/web/useI18n.ts | 6 +- src/hooks/web/useLockPage.ts | 12 +- src/hooks/web/useMessage.tsx | 46 +- src/hooks/web/usePage.ts | 22 +- src/hooks/web/usePagination.ts | 4 +- src/hooks/web/usePermission.ts | 26 +- src/hooks/web/useScript.ts | 8 +- src/hooks/web/useSortable.ts | 8 +- src/hooks/web/useTabs.ts | 12 +- src/hooks/web/useTitle.ts | 14 +- src/hooks/web/useWatermark.ts | 36 +- src/layouts/default/content/index.vue | 18 +- .../default/content/useContentContext.ts | 4 +- .../default/content/useContentViewHeight.ts | 6 +- src/layouts/default/feature/index.vue | 28 +- src/layouts/default/footer/index.vue | 30 +- src/layouts/default/header/MultipleHeader.vue | 28 +- .../default/header/components/Breadcrumb.vue | 44 +- .../default/header/components/ErrorAction.vue | 16 +- .../default/header/components/FullScreen.vue | 16 +- .../default/header/components/index.ts | 12 +- .../header/components/lock/LockModal.vue | 30 +- .../header/components/notify/NoticeList.vue | 18 +- .../default/header/components/notify/data.ts | 244 +- .../header/components/notify/index.vue | 20 +- .../components/user-dropdown/DropMenuItem.vue | 10 +- .../header/components/user-dropdown/index.vue | 46 +- src/layouts/default/header/index.vue | 44 +- src/layouts/default/index.vue | 38 +- src/layouts/default/menu/index.vue | 48 +- src/layouts/default/menu/useLayoutMenu.ts | 20 +- src/layouts/default/setting/SettingDrawer.tsx | 118 +- .../setting/components/InputNumberItem.vue | 16 +- .../default/setting/components/SelectItem.vue | 16 +- .../setting/components/SettingFooter.vue | 44 +- .../default/setting/components/SwitchItem.vue | 18 +- .../setting/components/ThemeColorPicker.vue | 16 +- .../default/setting/components/TypePicker.vue | 18 +- .../default/setting/components/index.ts | 14 +- src/layouts/default/setting/enum.ts | 34 +- src/layouts/default/setting/handler.ts | 20 +- src/layouts/default/setting/index.vue | 10 +- src/layouts/default/sider/DragBar.vue | 12 +- src/layouts/default/sider/LayoutSider.vue | 30 +- src/layouts/default/sider/MixSider.vue | 52 +- src/layouts/default/sider/index.vue | 20 +- src/layouts/default/sider/useLayoutSider.ts | 18 +- .../default/tabs/components/FoldButton.vue | 18 +- .../default/tabs/components/TabContent.vue | 26 +- .../default/tabs/components/TabRedo.vue | 12 +- src/layouts/default/tabs/index.vue | 38 +- src/layouts/default/tabs/types.ts | 6 +- src/layouts/default/tabs/useMultipleTabs.ts | 18 +- src/layouts/default/tabs/useTabDropdown.ts | 42 +- src/layouts/default/trigger/HeaderTrigger.vue | 16 +- src/layouts/default/trigger/SiderTrigger.vue | 8 +- src/layouts/default/trigger/index.vue | 14 +- src/layouts/iframe/index.vue | 8 +- src/layouts/iframe/useFrameKeepAlive.ts | 16 +- src/layouts/page/index.vue | 16 +- src/layouts/page/transition.ts | 8 +- src/locales/helper.ts | 16 +- src/locales/lang/en.ts | 10 +- src/locales/lang/en/common.ts | 30 +- src/locales/lang/en/component.ts | 186 +- src/locales/lang/en/layout.ts | 188 +- src/locales/lang/en/routes/basic.ts | 4 +- src/locales/lang/en/routes/dashboard.ts | 8 +- src/locales/lang/en/routes/demo.ts | 312 +- src/locales/lang/en/sys.ts | 148 +- src/locales/lang/zh-CN/common.ts | 30 +- src/locales/lang/zh-CN/component.ts | 186 +- src/locales/lang/zh-CN/layout.ts | 192 +- src/locales/lang/zh-CN/routes/basic.ts | 4 +- src/locales/lang/zh-CN/routes/dashboard.ts | 8 +- src/locales/lang/zh-CN/routes/demo.ts | 306 +- src/locales/lang/zh-CN/routes/practice.ts | 4 + src/locales/lang/zh-CN/sys.ts | 146 +- src/locales/lang/zh_CN.ts | 12 +- src/locales/setupI18n.ts | 12 +- src/locales/useLocale.ts | 14 +- src/logics/error-handle/index.ts | 62 +- src/logics/initAppConfig.ts | 30 +- src/logics/mitt/routeChange.ts | 6 +- src/logics/theme/dark.ts | 20 +- src/logics/theme/index.ts | 6 +- src/logics/theme/updateBackground.ts | 26 +- src/logics/theme/updateColorWeak.ts | 4 +- src/logics/theme/updateGrayMode.ts | 4 +- src/logics/theme/util.ts | 2 +- src/main.ts | 34 +- src/router/constant.ts | 10 +- src/router/guard/index.ts | 30 +- src/router/guard/paramMenuGuard.ts | 12 +- src/router/guard/permissionGuard.ts | 14 +- src/router/guard/stateGuard.ts | 14 +- src/router/helper/menuHelper.ts | 20 +- src/router/helper/routeHelper.ts | 48 +- src/router/index.ts | 8 +- src/router/menus/index.ts | 26 +- src/router/routes/basic.ts | 40 +- src/router/routes/index.ts | 26 +- src/router/routes/mainOut.ts | 2 +- src/router/routes/modules/about.ts | 26 +- src/router/routes/modules/dashboard.ts | 32 +- src/router/routes/modules/practice.ts | 27 + src/router/types.ts | 12 +- src/settings/componentSetting.ts | 14 +- src/settings/designSetting.ts | 66 +- src/settings/encryptionSetting.ts | 6 +- src/settings/localeSetting.ts | 12 +- src/settings/projectSetting.ts | 14 +- src/settings/siteSetting.ts | 6 +- src/store/index.ts | 4 +- src/store/modules/app.ts | 24 +- src/store/modules/errorLog.ts | 20 +- src/store/modules/locale.ts | 16 +- src/store/modules/lock.ts | 14 +- src/store/modules/multipleTab.ts | 30 +- src/store/modules/permission.ts | 48 +- src/store/modules/user.ts | 50 +- src/utils/auth/index.ts | 8 +- src/utils/cache/index.ts | 8 +- src/utils/cache/persistent.ts | 22 +- src/utils/cache/storageCache.ts | 12 +- src/utils/cipher.ts | 14 +- src/utils/color.ts | 20 +- src/utils/dateUtil.ts | 6 +- src/utils/domUtils.ts | 22 +- src/utils/env.ts | 12 +- src/utils/event/index.ts | 10 +- src/utils/factory/createAsyncComponent.tsx | 10 +- src/utils/file/base64Conver.ts | 10 +- src/utils/file/download.ts | 38 +- src/utils/helper/treeHelper.ts | 8 +- src/utils/helper/tsxHelper.tsx | 6 +- src/utils/http/axios/Axios.ts | 46 +- src/utils/http/axios/axiosCancel.ts | 8 +- src/utils/http/axios/axiosTransform.ts | 4 +- src/utils/http/axios/checkStatus.ts | 44 +- src/utils/http/axios/helper.ts | 8 +- src/utils/http/axios/index.ts | 76 +- src/utils/index.ts | 24 +- src/utils/is.ts | 24 +- src/utils/lib/echarts.ts | 8 +- src/utils/mitt.ts | 8 +- src/utils/propTypes.ts | 8 +- src/utils/uuid.ts | 10 +- .../analysis/components/GrowCard.vue | 8 +- .../analysis/components/SalesProductPie.vue | 36 +- .../analysis/components/SiteAnalysis.vue | 18 +- .../analysis/components/VisitAnalysis.vue | 66 +- .../analysis/components/VisitAnalysisBar.vue | 42 +- .../analysis/components/VisitRadar.vue | 38 +- .../analysis/components/VisitSource.vue | 44 +- .../dashboard/analysis/components/props.ts | 6 +- src/views/dashboard/analysis/data.ts | 32 +- src/views/dashboard/analysis/index.vue | 12 +- .../workbench/components/DynamicInfo.vue | 6 +- .../workbench/components/ProjectCard.vue | 8 +- .../workbench/components/QuickNav.vue | 6 +- .../workbench/components/SaleRadar.vue | 38 +- .../workbench/components/WorkbenchHeader.vue | 8 +- .../dashboard/workbench/components/data.ts | 156 +- src/views/dashboard/workbench/index.vue | 16 +- .../practice/practice-record/index.vue | 30 + .../practice-lecture-record/index.vue | 82 + .../practice-lesson-plan/index.vue | 11 + .../teaching-research-summary/index.vue | 11 + src/views/sys/about/index.vue | 48 +- src/views/sys/error-log/DetailModal.vue | 12 +- src/views/sys/error-log/data.tsx | 46 +- src/views/sys/error-log/index.vue | 40 +- src/views/sys/exception/Exception.vue | 60 +- src/views/sys/exception/index.ts | 2 +- src/views/sys/iframe/FrameBlank.vue | 4 +- src/views/sys/iframe/index.vue | 20 +- src/views/sys/lock/LockPage.vue | 52 +- src/views/sys/lock/index.vue | 6 +- src/views/sys/lock/useNow.ts | 28 +- src/views/sys/login/ForgetPasswordForm.vue | 22 +- src/views/sys/login/Login.vue | 62 +- src/views/sys/login/LoginForm.vue | 48 +- src/views/sys/login/LoginFormTitle.vue | 16 +- src/views/sys/login/MobileForm.vue | 20 +- src/views/sys/login/QrCodeForm.vue | 18 +- src/views/sys/login/RegisterForm.vue | 30 +- src/views/sys/login/SessionTimeoutLogin.vue | 20 +- src/views/sys/login/useLogin.ts | 28 +- src/views/sys/redirect/index.vue | 16 +- stylelint.config.js | 92 + tests/__mocks__/fileMock.ts | 1 + tests/__mocks__/styleMock.ts | 1 + tests/__mocks__/workerMock.ts | 5 + tests/server/README.md | 15 + tests/server/controller/FileController.ts | 18 + tests/server/controller/UserController.ts | 15 + tests/server/ecosystem.config.js | 18 + tests/server/index.ts | 63 + tests/server/nodemon.json | 8 + tests/server/package.json | 36 + tests/server/routes.ts | 23 + tests/server/service/FileService.ts | 54 + tests/server/service/UserService.ts | 25 + tests/server/tsconfig.json | 15 + tests/server/utils.ts | 9 + tests/server/yarn.lock | 2955 ++++ tests/test.spec.ts | 16 + tsconfig.json | 4 +- yarn.lock | 11448 ++++++++++++++++ 543 files changed, 22929 insertions(+), 14367 deletions(-) create mode 100644 .editorconfig create mode 100644 .env.test create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .github/ISSUE_TEMPLATE/1-bug.md create mode 100644 .github/ISSUE_TEMPLATE/2-feature.md create mode 100644 .github/ISSUE_TEMPLATE/3-bug-cn.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/commit-convention.md create mode 100644 .github/contributing.md create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/ftp-schedule.yml create mode 100644 .github/workflows/issue-close-require.yml create mode 100644 .github/workflows/issue-labeled.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitpod.yml create mode 100644 .husky/commit-msg create mode 100644 .husky/common.sh create mode 100644 .husky/lintstagedrc.js create mode 100644 .husky/pre-commit create mode 100644 .prettierignore create mode 100644 .stylelintignore create mode 100644 .yarnclean create mode 100644 commitlint.config.js create mode 100644 jest.config.mjs create mode 100644 mock/student/practice.ts delete mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.js create mode 100644 prettier.config.js create mode 100644 public/resource/img/pwa-192x192.png create mode 100644 public/resource/img/pwa-512x512.png create mode 100644 src/api/student/model/practice-model.ts create mode 100644 src/api/student/practice.ts create mode 100644 src/locales/lang/zh-CN/routes/practice.ts create mode 100644 src/router/routes/modules/practice.ts create mode 100644 src/views/student/practice/practice-record/index.vue create mode 100644 src/views/student/practice/practice-record/practice-lecture-record/index.vue create mode 100644 src/views/student/practice/practice-record/practice-lesson-plan/index.vue create mode 100644 src/views/student/practice/practice-record/teaching-research-summary/index.vue create mode 100644 stylelint.config.js create mode 100644 tests/__mocks__/fileMock.ts create mode 100644 tests/__mocks__/styleMock.ts create mode 100644 tests/__mocks__/workerMock.ts create mode 100644 tests/server/README.md create mode 100644 tests/server/controller/FileController.ts create mode 100644 tests/server/controller/UserController.ts create mode 100644 tests/server/ecosystem.config.js create mode 100644 tests/server/index.ts create mode 100644 tests/server/nodemon.json create mode 100644 tests/server/package.json create mode 100644 tests/server/routes.ts create mode 100644 tests/server/service/FileService.ts create mode 100644 tests/server/service/UserService.ts create mode 100644 tests/server/tsconfig.json create mode 100644 tests/server/utils.ts create mode 100644 tests/server/yarn.lock create mode 100644 tests/test.spec.ts create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dccf841 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=true +indent_style=space +indent_size=2 +max_line_length = 100 + +[*.{yml,yaml,json}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..d4b06f1 --- /dev/null +++ b/.env.test @@ -0,0 +1,36 @@ +NODE_ENV=production +# Whether to open mock +VITE_USE_MOCK = false + +# public path +VITE_PUBLIC_PATH = / + +# Delete console +VITE_DROP_CONSOLE = true + +# Whether to enable gzip or brotli compression +# Optional: gzip | brotli | none +# If you need multiple forms, you can use `,` to separate +VITE_BUILD_COMPRESS = 'none' + +# Whether to delete origin files when using compress, default false +VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false + +# Basic interface address SPA +VITE_GLOB_API_URL=/test-api + +# File upload address, optional +# It can be forwarded by nginx or write the actual address directly +VITE_GLOB_UPLOAD_URL=/upload + +# Interface prefix +VITE_GLOB_API_URL_PREFIX= + +# Whether to enable image compression +VITE_USE_IMAGEMIN= true + +# use pwa +VITE_USE_PWA = false + +# Is it compatible with older browsers +VITE_LEGACY = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..348631b --- /dev/null +++ b/.eslintignore @@ -0,0 +1,15 @@ + +*.sh +node_modules +*.md +*.woff +*.ttf +.vscode +.idea +dist +/public +/docs +.husky +.local +/bin +Dockerfile diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..7633bbe --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,80 @@ +// @ts-check +const { defineConfig } = require('eslint-define-config'); +module.exports = defineConfig({ + root: true, + env: { + browser: true, + node: true, + es6: true, + }, + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser', + ecmaVersion: 2020, + sourceType: 'module', + jsxPragma: 'React', + ecmaFeatures: { + jsx: true, + }, + }, + extends: [ + 'plugin:vue/vue3-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + 'plugin:prettier/recommended', + 'plugin:jest/recommended', + ], + rules: { + 'vue/script-setup-uses-vars': 'error', + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-function': 'off', + 'vue/custom-event-name-casing': 'off', + 'no-use-before-define': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + 'space-before-function-paren': 'off', + + 'vue/attributes-order': 'off', + 'vue/v-on-event-hyphenation': 'off', + 'vue/multi-word-component-names': 'off', + 'vue/one-component-per-file': 'off', + 'vue/html-closing-bracket-newline': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/multiline-html-element-content-newline': 'off', + 'vue/singleline-html-element-content-newline': 'off', + 'vue/attribute-hyphenation': 'off', + 'vue/require-default-prop': 'off', + 'vue/html-self-closing': [ + 'error', + { + html: { + void: 'always', + normal: 'never', + component: 'always', + }, + svg: 'always', + math: 'always', + }, + ], + }, +}); diff --git a/.github/ISSUE_TEMPLATE/1-bug.md b/.github/ISSUE_TEMPLATE/1-bug.md new file mode 100644 index 0000000..0f5e1e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug.md @@ -0,0 +1,39 @@ +--- +name: 🐛 Bug report +about: Create a report to help us improve +title: '' +labels: 'bug: pending triage' +assignees: '' +--- + +<!-- +抱歉,您遇到了一个错误。感谢您抽出宝贵的时间进行举报! + +请尽可能填写以下模板。 + +Ouch, sorry you’ve run into a bug. Thank for taking the time to report it! + +Please fill in as much of the template below as you’re able. + +P.S. have you seen our support and contributing docs? +--> + +**⚠️ IMPORTANT ⚠️ Please check the following list before proceeding. If you ignore this issue template, your issue will be directly closed.** + +- [ ] Read [the docs](https://anncwb.github.io/vue-vben-admin-doc/). +- [ ] Make sure the code is up to date. (Some bugs have been fixed in the latest code) +- [ ] This is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/anncwb/vue-vben-admin/discussions) or join our [Discord](https://discord.gg/8GuAdwDhj6) Chat Server. + +### Describe the bug + +A clear and concise description of what the bug is.. + +### Reproduction + +Please describe the steps of the problem in detail to ensure that we can restore the correct problem + +## System Info + +- Operating System: +- Node version: +- Package manager (npm/yarn/pnpm) and version: diff --git a/.github/ISSUE_TEMPLATE/2-feature.md b/.github/ISSUE_TEMPLATE/2-feature.md new file mode 100644 index 0000000..cbe4164 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature.md @@ -0,0 +1,32 @@ +--- +name: 🚀 Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' +--- + +<!-- +感谢您提出使这个项目更好的想法! +请尽可能填写以下模板。 + +Thank you for suggesting an idea to make this project better! +Please fill in as much of the template below as you’re able. + +--> + +### Subject of the feature + +Describe your issue here. + +### Problem + +If the feature requests relates to a problem, please describe the problem you are trying to solve here. + +### Expected behaviour + +What should happen? Please describe the desired behaviour. + +### Alternatives + +What are the alternative solutions? Please describe what else you have considered? diff --git a/.github/ISSUE_TEMPLATE/3-bug-cn.md b/.github/ISSUE_TEMPLATE/3-bug-cn.md new file mode 100644 index 0000000..fade42a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-bug-cn.md @@ -0,0 +1,28 @@ +--- +name: 🐛 Bug 报告 +about: 向我们报告一个Bug以帮助我们改进 +title: '' +labels: 'bug: pending triage' +assignees: '' +--- + +**⚠️ 重要 ⚠️ 在进一步操作之前,请检查下列选项。如果您忽视此模板或者没有提供关键信息,您的 Issue 将直接被关闭** + +- [ ] 已阅读 [文档](https://anncwb.github.io/vue-vben-admin-doc/). +- [ ] 确保您的代码已是最新或者所报告的 Bug 在最新版本中可以重现. (部分 Bug 可能已经在最近的代码中修复) +- [ ] 已在 Issues 中搜索了相关的关键词 +- [ ] 不是 ant design vue 组件库的 Bug + +### 描述 Bug + +请清晰地描述此 Bug 的具体表现。 + +### 复现 Bug + +请描述在演示页面中复现 Bug 的详细步骤,以确保我们可以理解并定位问题。部分 Bug 如果未在 Demo 中涉及,请务必提供关键代码 + +## 系统信息 + +- 操作系统: +- Node 版本: +- 包管理器 (npm/yarn/pnpm) 及其版本: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..b83ccbf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Discord Chat + url: https://discord.gg/8GuAdwDhj6 + about: Ask questions and discuss with other Vben users in real time. + - name: Questions & Discussions + url: https://github.com/anncwb/vue-vben-admin/discussions + about: Use GitHub discussions for message-board style questions and discussions. diff --git a/.github/commit-convention.md b/.github/commit-convention.md new file mode 100644 index 0000000..a1a969e --- /dev/null +++ b/.github/commit-convention.md @@ -0,0 +1,89 @@ +## Git Commit Message Convention + +> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular). + +#### TL;DR: + +Messages must be matched by the following regex: + +```js +/^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|build|ci|chore|types|wip): .{1,50}/; +``` + +#### Examples + +Appears under "Features" header, `dev` subheader: + +``` +feat(dev): add 'comments' option +``` + +Appears under "Bug Fixes" header, `dev` subheader, with a link to issue #28: + +``` +fix(dev): fix dev error + +close #28 +``` + +Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation: + +``` +perf(build): remove 'foo' option + +BREAKING CHANGE: The 'foo' option has been removed. +``` + +The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header. + +``` +revert: feat(compiler): add 'comments' option + +This reverts commit 667ecc1654a317a13331b17617d973392f415f02. +``` + +### Full Message Format + +A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**: + +``` +<type>(<scope>): <subject> +<BLANK LINE> +<body> +<BLANK LINE> +<footer> +``` + +The **header** is mandatory and the **scope** of the header is optional. + +### Revert + +If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body, it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted. + +### Type + +If the prefix is `feat`, `fix` or `perf`, it will appear in the changelog. However, if there is any [BREAKING CHANGE](#footer), the commit will always appear in the changelog. + +Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks. + +### Scope + +The scope could be anything specifying the place of the commit change. For example `dev`, `build`, `workflow`, `cli` etc... + +### Subject + +The subject contains a succinct description of the change: + +- use the imperative, present tense: "change" not "changed" nor "changes" +- don't capitalize the first letter +- no dot (.) at the end + +### Body + +Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes". The body should include the motivation for the change and contrast this with previous behavior. + +### Footer + +The footer should contain any information about **Breaking Changes** and is also the place to reference GitHub issues that this commit **Closes**. + +**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this. diff --git a/.github/contributing.md b/.github/contributing.md new file mode 100644 index 0000000..9a5211b --- /dev/null +++ b/.github/contributing.md @@ -0,0 +1,5 @@ +# Contributing Guide + +1. Make sure you put things in the right category! +2. Always add your items to the end of a list. To be fair, the order is first-come-first-serve. +3. If you think something belongs in the wrong category, or think there needs to be a new category, feel free to edit things too. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..8269211 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,34 @@ +### `General` + +> ✏️ Mark the necessary items without changing the structure of the PR template. + +- [ ] Pull request template structure not broken + +### `Type` + +> ℹ️ What types of changes does your code introduce? + +> 👉 _Put an `x` in the boxes that apply_ + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] This change requires a documentation update + +### `Checklist` + +> ℹ️ Check all checkboxes - this will indicate that you have done everything in accordance with the rules in [CONTRIBUTING](contributing.md). + +> 👉 _Put an `x` in the boxes that apply._ + +- [ ] My code follows the style guidelines of this project +- [ ] Is the code format correct +- [ ] Is the git submission information standard? +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have been merged and published in downstream modules diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..e231ff9 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,118 @@ +name: deploy + +on: + push: + branches: + - main + +jobs: + # push-to-ftp: + # if: "contains(github.event.head_commit.message, '[deploy]')" + # runs-on: ubuntu-latest + # steps: + # - name: Checkout + # uses: actions/checkout@v2 + + # - name: Sed Config Base + # shell: bash + # run: | + # sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /next/#g' ./.env.production + # sed -i "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production + # cat ./.env.production + + # - name: use Node.js 14 + # uses: actions/setup-node@v2.1.2 + # with: + # node-version: '14.x' + + # - name: Get yarn cache + # id: yarn-cache + # run: echo "::set-output name=dir::$(yarn cache dir)" + + # - name: Cache dependencies + # uses: actions/cache@v2 + # with: + # path: ${{ steps.yarn-cache.outputs.dir }} + # key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + # restore-keys: | + # ${{ runner.os }}-yarn- + + # - name: Build + # run: | + # yarn install + # yarn run build + + # - name: Deploy + # uses: SamKirkland/FTP-Deploy-Action@2.0.0 + # env: + # FTP_SERVER: ${{ secrets.FTP_SERVER }} + # FTP_USERNAME: ${{ secrets.FTP_USERNAME }} + # FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + # METHOD: sftp + # PORT: ${{ secrets.FTP_PORT }} + # LOCAL_DIR: dist + # REMOTE_DIR: /srv/www/vben-admin + # ARGS: --delete --verbose --parallel=80 + + push-to-gh-pages: + if: "contains(github.event.head_commit.message, '[release]')" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Sed Config Base + shell: bash + run: | + sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /vben-admin-thin-next/#g' ./.env.production + sed -i "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production + cat ./.env.production + + - name: use Node.js 16 + uses: actions/setup-node@v2.1.2 + with: + node-version: '16.x' + + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Set SSH Environment + env: + DOCS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} + run: | + mkdir -p ~/.ssh/ + echo "$ACTIONS_DEPLOY_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan github.com > ~/.ssh/known_hosts + chmod 700 ~/.ssh && chmod 600 ~/.ssh/* + git config --local user.email "vbenadmin@163.com" + git config --local user.name "vbenAdmin" + + - name: Delete gh-pages branch + run: | + git push origin --delete gh-pages + + - name: Build + run: | + yarn install + yarn run build + touch dist/.nojekyll + cp dist/index.html dist/404.html + + - name: Deploy + uses: peaceiris/actions-gh-pages@v2.5.0 + env: + ACTIONS_DEPLOY_KEY: ${{secrets.ACTIONS_DEPLOY_KEY}} + PUBLISH_BRANCH: gh-pages + PUBLISH_DIR: ./dist + with: + forceOrphan: true diff --git a/.github/workflows/ftp-schedule.yml b/.github/workflows/ftp-schedule.yml new file mode 100644 index 0000000..1681a24 --- /dev/null +++ b/.github/workflows/ftp-schedule.yml @@ -0,0 +1,56 @@ +name: schedule-push-to-ftp + +# Timed deployment project +on: + push: + schedule: + - cron: '0 20 * * *' + +jobs: + schedule-push-to-ftp: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Sed Config Base + shell: bash + run: | + sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /thin/next/#g' ./.env.production + sed -i "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production + sed -i "s#VITE_DROP_CONSOLE\s*=.*#VITE_DROP_CONSOLE = true#g" ./.env.production + cat ./.env.production + + - name: use Node.js 16 + uses: actions/setup-node@v2.1.2 + with: + node-version: '16.x' + + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Build + run: | + yarn install + yarn run build + + - name: Deploy + uses: SamKirkland/FTP-Deploy-Action@2.0.0 + env: + FTP_SERVER: ${{ secrets.FTP_SERVER }} + FTP_USERNAME: ${{ secrets.FTP_USERNAME }} + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + METHOD: sftp + PORT: ${{ secrets.FTP_PORT }} + LOCAL_DIR: dist + REMOTE_DIR: /srv/www/vben-admin-thin + ARGS: --delete --verbose --parallel=80 diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml new file mode 100644 index 0000000..a5fb0a4 --- /dev/null +++ b/.github/workflows/issue-close-require.yml @@ -0,0 +1,17 @@ +name: Issue Close Require + +on: + schedule: + - cron: '0 0 * * *' + +jobs: + close-issues: + runs-on: ubuntu-latest + steps: + - name: need reproduction + uses: actions-cool/issues-helper@v2.1.1 + with: + actions: 'close-issues' + token: ${{ secrets.OPER_TOKEN }} + labels: 'need reproduction' + inactive-day: 3 diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml new file mode 100644 index 0000000..43a7a62 --- /dev/null +++ b/.github/workflows/issue-labeled.yml @@ -0,0 +1,29 @@ +name: Issue Labeled + +on: + issues: + types: [labeled] + +jobs: + reply-labeled: + runs-on: ubuntu-latest + steps: + - name: remove pending + if: github.event.label.name == 'enhancement' || github.event.label.name == 'bug' + uses: actions-cool/issues-helper@v2.1.1 + with: + actions: 'remove-labels' + token: ${{ secrets.OPER_TOKEN }} + issue-number: ${{ github.event.issue.number }} + labels: 'bug: pending triage' + + - name: need reproduction + if: github.event.label.name == 'need reproduction' + uses: actions-cool/issues-helper@v2.1.1 + with: + actions: 'create-comment, remove-labels' + token: ${{ secrets.OPER_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + Hello @${{ github.event.issue.user.login }}. Please provide the complete reproduction steps and code. Issues labeled by `need reproduction` will be closed if no activities in 3 days. + labels: 'bug: pending triage' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..74ab4a3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,24 @@ +name: Create Release + +on: + push: + tags: + - v* + +jobs: + build: + name: Create Release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@master + + - name: Create Release for Tag + id: release_tag + uses: yyx990803/release-tag@master + env: + GITHUB_TOKEN: ${{ secrets.OPER_TOKEN }} + with: + tag_name: ${{ github.ref }} + body: | + Please refer to [CHANGELOG.md](https://github.com/anncwb/vue-vben-admin/blob/main/CHANGELOG.md) for details. diff --git a/.gitignore b/.gitignore index 76add87..e73e570 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,30 @@ node_modules -dist \ No newline at end of file +.DS_Store +dist +.npmrc +.cache + +tests/server/static +tests/server/static/upload + +.local +# local env files +.env.local +.env.*.local +.eslintcache + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +# .vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..2191895 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,6 @@ +ports: + - port: 3344 + onOpen: open-preview +tasks: + - init: yarn + command: yarn dev diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..567ff71 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,6 @@ +#!/bin/sh + +# shellcheck source=./_/husky.sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit "$1" diff --git a/.husky/common.sh b/.husky/common.sh new file mode 100644 index 0000000..9d5129b --- /dev/null +++ b/.husky/common.sh @@ -0,0 +1,9 @@ +#!/bin/sh +command_exists () { + command -v "$1" >/dev/null 2>&1 +} + +# Workaround for Windows 10, Git Bash and Yarn +if command_exists winpty && test -t 1; then + exec < /dev/tty +fi diff --git a/.husky/lintstagedrc.js b/.husky/lintstagedrc.js new file mode 100644 index 0000000..08d8c9e --- /dev/null +++ b/.husky/lintstagedrc.js @@ -0,0 +1,8 @@ +module.exports = { + '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'], + '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': ['prettier --write--parser json'], + 'package.json': ['prettier --write'], + '*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix'], + '*.{scss,less,styl,html}': ['stylelint --fix', 'prettier --write'], + '*.md': ['prettier --write'], +}; diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..35f9242 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,8 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/common.sh" + +[ -n "$CI" ] && exit 0 + +# Format and submit code according to lintstagedrc.js configuration +npm run lint:lint-staged diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f7e39e6 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +/dist/* +.local +.output.js +/node_modules/** + +**/*.svg +**/*.sh + +/public/* diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..0517076 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,3 @@ +/dist/* +/public/* +public/* diff --git a/.yarnclean b/.yarnclean new file mode 100644 index 0000000..3e556ef --- /dev/null +++ b/.yarnclean @@ -0,0 +1,48 @@ +# test directories +__tests__ +test +tests +powered-test + +# asset directories +docs +doc +website +images +assets + +# examples +example +examples + +# code coverage directories +coverage +.nyc_output + +# build scripts +Makefile +Gulpfile.js +Gruntfile.js + +# configs +appveyor.yml +circle.yml +codeship-services.yml +codeship-steps.yml +wercker.yml +.tern-project +.gitattributes +.editorconfig +.*ignore +.eslintrc +.jshintrc +.flowconfig +.documentup.json +.yarn-metadata.json +.travis.yml + +# misc +*.md + +!istanbul-reports/lib/html/assets +!istanbul-api/node_modules/istanbul-reports/lib/html/assets diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..5459887 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,33 @@ +module.exports = { + ignores: [(commit) => commit.includes('init')], + extends: ['@commitlint/config-conventional'], + rules: { + 'body-leading-blank': [2, 'always'], + 'footer-leading-blank': [1, 'always'], + 'header-max-length': [2, 'always', 108], + 'subject-empty': [2, 'never'], + 'type-empty': [2, 'never'], + 'subject-case': [0], + 'type-enum': [ + 2, + 'always', + [ + 'feat', + 'fix', + 'perf', + 'style', + 'docs', + 'test', + 'refactor', + 'build', + 'ci', + 'chore', + 'revert', + 'wip', + 'workflow', + 'types', + 'release', + ], + ], + }, +}; diff --git a/jest.config.mjs b/jest.config.mjs new file mode 100644 index 0000000..162e72b --- /dev/null +++ b/jest.config.mjs @@ -0,0 +1,36 @@ +export default { + preset: 'ts-jest', + roots: ['<rootDir>/tests/'], + clearMocks: true, + moduleDirectories: ['node_modules', 'src'], + moduleFileExtensions: ['js', 'ts', 'vue', 'tsx', 'jsx', 'json', 'node'], + modulePaths: ['<rootDir>/src', '<rootDir>/node_modules'], + testMatch: [ + '**/tests/**/*.[jt]s?(x)', + '**/?(*.)+(spec|test).[tj]s?(x)', + '(/__tests__/.*|(\\.|/)(test|spec))\\.(js|ts)$', + ], + testPathIgnorePatterns: [ + '<rootDir>/tests/server/', + '<rootDir>/tests/__mocks__/', + '/node_modules/', + ], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + transformIgnorePatterns: ['<rootDir>/tests/__mocks__/', '/node_modules/'], + // A map from regular expressions to module names that allow to stub out resources with a single module + moduleNameMapper: { + '\\.(vs|fs|vert|frag|glsl|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '<rootDir>/tests/__mocks__/fileMock.ts', + '\\.(sass|s?css|less)$': '<rootDir>/tests/__mocks__/styleMock.ts', + '\\?worker$': '<rootDir>/tests/__mocks__/workerMock.ts', + '^/@/(.*)$': '<rootDir>/src/$1', + }, + testEnvironment: 'jsdom', + verbose: true, + collectCoverage: false, + coverageDirectory: 'coverage', + collectCoverageFrom: ['src/**/*.{js,ts,vue}'], + coveragePathIgnorePatterns: ['^.+\\.d\\.ts$'], +}; diff --git a/mock/_createProductionServer.ts b/mock/_createProductionServer.ts index a44310b..86baae4 100644 --- a/mock/_createProductionServer.ts +++ b/mock/_createProductionServer.ts @@ -1,10 +1,10 @@ -import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer'; +import { createProdMockServer } from "vite-plugin-mock/es/createProdMockServer"; -const modules = import.meta.globEager('./**/*.ts'); +const modules = import.meta.globEager("./**/*.ts"); const mockModules: any[] = []; Object.keys(modules).forEach((key) => { - if (key.includes('/_')) { + if (key.includes("/_")) { return; } mockModules.push(...modules[key].default); diff --git a/mock/_util.ts b/mock/_util.ts index 97c8756..6bc4a3a 100644 --- a/mock/_util.ts +++ b/mock/_util.ts @@ -1,11 +1,11 @@ // Interface data format used to return a unified format -export function resultSuccess<T = Recordable>(result: T, { message = 'ok' } = {}) { +export function resultSuccess<T = Recordable>(result: T, { message = "ok" } = {}) { return { code: 0, result, message, - type: 'success', + type: "success", }; } @@ -13,7 +13,7 @@ export function resultPageSuccess<T = any>( page: number, pageSize: number, list: T[], - { message = 'ok' } = {}, + { message = "ok" } = {}, ) { const pageData = pagination(page, pageSize, list); @@ -26,12 +26,12 @@ export function resultPageSuccess<T = any>( }; } -export function resultError(message = 'Request failed', { code = -1, result = null } = {}) { +export function resultError(message = "Request failed", { code = -1, result = null } = {}) { return { code, result, message, - type: 'error', + type: "error", }; } diff --git a/mock/demo/account.ts b/mock/demo/account.ts index a392493..ef993b9 100644 --- a/mock/demo/account.ts +++ b/mock/demo/account.ts @@ -1,71 +1,71 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess, resultError } from '../_util'; -import { ResultEnum } from '../../src/enums/httpEnum'; +import { MockMethod } from "vite-plugin-mock"; +import { resultSuccess, resultError } from "../_util"; +import { ResultEnum } from "../../src/enums/httpEnum"; const userInfo = { - name: 'Vben', - userid: '00000001', - email: 'test@gmail.com', - signature: '海纳百川,有容乃大', - introduction: '微笑着,努力着,欣赏着', - title: '交互专家', - group: '某某某事业群-某某平台部-某某技术部-UED', + name: "Vben", + userid: "00000001", + email: "test@gmail.com", + signature: "海纳百川,有容乃大", + introduction: "微笑着,努力着,欣赏着", + title: "交互专家", + group: "某某某事业群-某某平台部-某某技术部-UED", tags: [ { - key: '0', - label: '很有想法的', + key: "0", + label: "很有想法的", }, { - key: '1', - label: '专注设计', + key: "1", + label: "专注设计", }, { - key: '2', - label: '辣~', + key: "2", + label: "辣~", }, { - key: '3', - label: '大长腿', + key: "3", + label: "大长腿", }, { - key: '4', - label: '川妹子', + key: "4", + label: "川妹子", }, { - key: '5', - label: '海纳百川', + key: "5", + label: "海纳百川", }, ], notifyCount: 12, unreadCount: 11, - country: 'China', - address: 'Xiamen City 77', - phone: '0592-268888888', + country: "China", + address: "Xiamen City 77", + phone: "0592-268888888", }; export default [ { - url: '/basic-api/account/getAccountInfo', + url: "/basic-api/account/getAccountInfo", timeout: 1000, - method: 'get', + method: "get", response: () => { return resultSuccess(userInfo); }, }, { - url: '/basic-api/user/sessionTimeout', - method: 'post', + url: "/basic-api/user/sessionTimeout", + method: "post", statusCode: 401, response: () => { return resultError(); }, }, { - url: '/basic-api/user/tokenExpired', - method: 'post', + url: "/basic-api/user/tokenExpired", + method: "post", statusCode: 200, response: () => { - return resultError('Token Expired!', { code: ResultEnum.TIMEOUT as number }); + return resultError("Token Expired!", { code: ResultEnum.TIMEOUT as number }); }, }, ] as MockMethod[]; diff --git a/mock/student/practice.ts b/mock/student/practice.ts new file mode 100644 index 0000000..acac9d4 --- /dev/null +++ b/mock/student/practice.ts @@ -0,0 +1,36 @@ +import { PracticeLectureRecordItem } from "/@/api/student/model/practice-model"; +import { resultPageSuccess } from "mock/_util"; +import { MockMethod } from "vite-plugin-mock"; + +function getLectureRecordList() { + const list: PracticeLectureRecordItem[] = []; + for (let i = 0; i < 30; i++) { + const item: PracticeLectureRecordItem = { + className: `${i}班`, + date: "2022/8/20", + docLink: "", + experience: `体会与建议——${i}`, + groupEvaluation: `小组评价——${i}`, + lectureType: "类型1", + personalSummary: `个人总结——${i}`, + teacherName: `宋浩--${i}`, + teachingProcess: `听课过程——${i}`, + recordId: i, + lectureContent: `这是一条听课内容——${i}`, + }; + list.push(item); + } + return list; +} + +export default [ + { + url: "/dev-api/practice/record", + timeout: 100, + method: "get", + response: ({ query }) => { + const { page = 1, pageSize = 10 } = query; + return resultPageSuccess(page, pageSize, getLectureRecordList()); + }, + }, +] as MockMethod[]; diff --git a/mock/sys/menu.ts b/mock/sys/menu.ts index 1c47e66..49438fd 100644 --- a/mock/sys/menu.ts +++ b/mock/sys/menu.ts @@ -1,235 +1,235 @@ -import { resultSuccess, resultError, getRequestToken, requestParams } from '../_util'; -import { MockMethod } from 'vite-plugin-mock'; -import { createFakeUserList } from './user'; +import { resultSuccess, resultError, getRequestToken, requestParams } from "../_util"; +import { MockMethod } from "vite-plugin-mock"; +import { createFakeUserList } from "./user"; // single const dashboardRoute = { - path: '/dashboard', - name: 'Dashboard', - component: 'LAYOUT', - redirect: '/dashboard/analysis', + path: "/dashboard", + name: "Dashboard", + component: "LAYOUT", + redirect: "/dashboard/analysis", meta: { - title: 'routes.dashboard.dashboard', + title: "routes.dashboard.dashboard", hideChildrenInMenu: true, - icon: 'bx:bx-home', + icon: "bx:bx-home", }, children: [ { - path: 'analysis', - name: 'Analysis', - component: '/dashboard/analysis/index', + path: "analysis", + name: "Analysis", + component: "/dashboard/analysis/index", meta: { hideMenu: true, hideBreadcrumb: true, - title: 'routes.dashboard.analysis', - currentActiveMenu: '/dashboard', - icon: 'bx:bx-home', + title: "routes.dashboard.analysis", + currentActiveMenu: "/dashboard", + icon: "bx:bx-home", }, }, { - path: 'workbench', - name: 'Workbench', - component: '/dashboard/workbench/index', + path: "workbench", + name: "Workbench", + component: "/dashboard/workbench/index", meta: { hideMenu: true, hideBreadcrumb: true, - title: 'routes.dashboard.workbench', - currentActiveMenu: '/dashboard', - icon: 'bx:bx-home', + title: "routes.dashboard.workbench", + currentActiveMenu: "/dashboard", + icon: "bx:bx-home", }, }, ], }; const backRoute = { - path: 'back', - name: 'PermissionBackDemo', + path: "back", + name: "PermissionBackDemo", meta: { - title: 'routes.demo.permission.back', + title: "routes.demo.permission.back", }, children: [ { - path: 'page', - name: 'BackAuthPage', - component: '/demo/permission/back/index', + path: "page", + name: "BackAuthPage", + component: "/demo/permission/back/index", meta: { - title: 'routes.demo.permission.backPage', + title: "routes.demo.permission.backPage", }, }, { - path: 'btn', - name: 'BackAuthBtn', - component: '/demo/permission/back/Btn', + path: "btn", + name: "BackAuthBtn", + component: "/demo/permission/back/Btn", meta: { - title: 'routes.demo.permission.backBtn', + title: "routes.demo.permission.backBtn", }, }, ], }; const authRoute = { - path: '/permission', - name: 'Permission', - component: 'LAYOUT', - redirect: '/permission/front/page', + path: "/permission", + name: "Permission", + component: "LAYOUT", + redirect: "/permission/front/page", meta: { - icon: 'carbon:user-role', - title: 'routes.demo.permission.permission', + icon: "carbon:user-role", + title: "routes.demo.permission.permission", }, children: [backRoute], }; const levelRoute = { - path: '/level', - name: 'Level', - component: 'LAYOUT', - redirect: '/level/menu1/menu1-1', + path: "/level", + name: "Level", + component: "LAYOUT", + redirect: "/level/menu1/menu1-1", meta: { - icon: 'carbon:user-role', - title: 'routes.demo.level.level', + icon: "carbon:user-role", + title: "routes.demo.level.level", }, children: [ { - path: 'menu1', - name: 'Menu1Demo', + path: "menu1", + name: "Menu1Demo", meta: { - title: 'Menu1', + title: "Menu1", }, children: [ { - path: 'menu1-1', - name: 'Menu11Demo', + path: "menu1-1", + name: "Menu11Demo", meta: { - title: 'Menu1-1', + title: "Menu1-1", }, children: [ { - path: 'menu1-1-1', - name: 'Menu111Demo', - component: '/demo/level/Menu111', + path: "menu1-1-1", + name: "Menu111Demo", + component: "/demo/level/Menu111", meta: { - title: 'Menu111', + title: "Menu111", }, }, ], }, { - path: 'menu1-2', - name: 'Menu12Demo', - component: '/demo/level/Menu12', + path: "menu1-2", + name: "Menu12Demo", + component: "/demo/level/Menu12", meta: { - title: 'Menu1-2', + title: "Menu1-2", }, }, ], }, { - path: 'menu2', - name: 'Menu2Demo', - component: '/demo/level/Menu2', + path: "menu2", + name: "Menu2Demo", + component: "/demo/level/Menu2", meta: { - title: 'Menu2', + title: "Menu2", }, }, ], }; const sysRoute = { - path: '/system', - name: 'System', - component: 'LAYOUT', - redirect: '/system/account', + path: "/system", + name: "System", + component: "LAYOUT", + redirect: "/system/account", meta: { - icon: 'ion:settings-outline', - title: 'routes.demo.system.moduleName', + icon: "ion:settings-outline", + title: "routes.demo.system.moduleName", }, children: [ { - path: 'account', - name: 'AccountManagement', + path: "account", + name: "AccountManagement", meta: { - title: 'routes.demo.system.account', + title: "routes.demo.system.account", ignoreKeepAlive: true, }, - component: '/demo/system/account/index', + component: "/demo/system/account/index", }, { - path: 'account_detail/:id', - name: 'AccountDetail', + path: "account_detail/:id", + name: "AccountDetail", meta: { hideMenu: true, - title: 'routes.demo.system.account_detail', + title: "routes.demo.system.account_detail", ignoreKeepAlive: true, showMenu: false, - currentActiveMenu: '/system/account', + currentActiveMenu: "/system/account", }, - component: '/demo/system/account/AccountDetail', + component: "/demo/system/account/AccountDetail", }, { - path: 'role', - name: 'RoleManagement', + path: "role", + name: "RoleManagement", meta: { - title: 'routes.demo.system.role', + title: "routes.demo.system.role", ignoreKeepAlive: true, }, - component: '/demo/system/role/index', + component: "/demo/system/role/index", }, { - path: 'menu', - name: 'MenuManagement', + path: "menu", + name: "MenuManagement", meta: { - title: 'routes.demo.system.menu', + title: "routes.demo.system.menu", ignoreKeepAlive: true, }, - component: '/demo/system/menu/index', + component: "/demo/system/menu/index", }, { - path: 'dept', - name: 'DeptManagement', + path: "dept", + name: "DeptManagement", meta: { - title: 'routes.demo.system.dept', + title: "routes.demo.system.dept", ignoreKeepAlive: true, }, - component: '/demo/system/dept/index', + component: "/demo/system/dept/index", }, { - path: 'changePassword', - name: 'ChangePassword', + path: "changePassword", + name: "ChangePassword", meta: { - title: 'routes.demo.system.password', + title: "routes.demo.system.password", ignoreKeepAlive: true, }, - component: '/demo/system/password/index', + component: "/demo/system/password/index", }, ], }; const linkRoute = { - path: '/link', - name: 'Link', - component: 'LAYOUT', + path: "/link", + name: "Link", + component: "LAYOUT", meta: { - icon: 'ion:tv-outline', - title: 'routes.demo.iframe.frame', + icon: "ion:tv-outline", + title: "routes.demo.iframe.frame", }, children: [ { - path: 'doc', - name: 'Doc', + path: "doc", + name: "Doc", meta: { - title: 'routes.demo.iframe.doc', - frameSrc: 'https://vvbin.cn/doc-next/', + title: "routes.demo.iframe.doc", + frameSrc: "https://vvbin.cn/doc-next/", }, }, { - path: 'https://vvbin.cn/doc-next/', - name: 'DocExternal', - component: 'LAYOUT', + path: "https://vvbin.cn/doc-next/", + name: "DocExternal", + component: "LAYOUT", meta: { - title: 'routes.demo.iframe.docExternal', + title: "routes.demo.iframe.docExternal", }, }, ], @@ -237,27 +237,27 @@ const linkRoute = { export default [ { - url: '/basic-api/getMenuList', + url: "/basic-api/getMenuList", timeout: 1000, - method: 'get', + method: "get", response: (request: requestParams) => { const token = getRequestToken(request); if (!token) { - return resultError('Invalid token!'); + return resultError("Invalid token!"); } const checkUser = createFakeUserList().find((item) => item.token === token); if (!checkUser) { - return resultError('Invalid user token!'); + return resultError("Invalid user token!"); } const id = checkUser.userId; let menu: Object[]; switch (id) { - case '1': - dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[0].path; + case "1": + dashboardRoute.redirect = dashboardRoute.path + "/" + dashboardRoute.children[0].path; menu = [dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute]; break; - case '2': - dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[1].path; + case "2": + dashboardRoute.redirect = dashboardRoute.path + "/" + dashboardRoute.children[1].path; menu = [dashboardRoute, authRoute, levelRoute, linkRoute]; break; default: diff --git a/mock/sys/user.ts b/mock/sys/user.ts index 8b8989f..cd4c394 100644 --- a/mock/sys/user.ts +++ b/mock/sys/user.ts @@ -1,37 +1,37 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultError, resultSuccess, getRequestToken, requestParams } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { resultError, resultSuccess, getRequestToken, requestParams } from "../_util"; export function createFakeUserList() { return [ { - userId: '1', - username: 'vben', - realName: 'Vben Admin', - avatar: 'https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640', - desc: 'manager', - password: '123456', - token: 'fakeToken1', - homePath: '/dashboard/analysis', + userId: "1", + username: "vben", + realName: "Vben Admin", + avatar: "https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640", + desc: "manager", + password: "123456", + token: "fakeToken1", + homePath: "/dashboard/analysis", roles: [ { - roleName: 'Super Admin', - value: 'super', + roleName: "Super Admin", + value: "super", }, ], }, { - userId: '2', - username: 'test', - password: '123456', - realName: 'test user', - avatar: 'https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640', - desc: 'tester', - token: 'fakeToken2', - homePath: '/dashboard/workbench', + userId: "2", + username: "test", + password: "123456", + realName: "test user", + avatar: "https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640", + desc: "tester", + token: "fakeToken2", + homePath: "/dashboard/workbench", roles: [ { - roleName: 'Tester', - value: 'test', + roleName: "Tester", + value: "test", }, ], }, @@ -39,23 +39,23 @@ export function createFakeUserList() { } const fakeCodeList: any = { - '1': ['1000', '3000', '5000'], + "1": ["1000", "3000", "5000"], - '2': ['2000', '4000', '6000'], + "2": ["2000", "4000", "6000"], }; export default [ // mock user login { - url: '/basic-api/login', + url: "/basic-api/login", timeout: 200, - method: 'post', + method: "post", response: ({ body }) => { const { username, password } = body; const checkUser = createFakeUserList().find( (item) => item.username === username && password === item.password, ); if (!checkUser) { - return resultError('Incorrect account or password!'); + return resultError("Incorrect account or password!"); } const { userId, username: _username, token, realName, desc, roles } = checkUser; return resultSuccess({ @@ -69,28 +69,28 @@ export default [ }, }, { - url: '/basic-api/getUserInfo', - method: 'get', + url: "/basic-api/getUserInfo", + method: "get", response: (request: requestParams) => { const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); + if (!token) return resultError("Invalid token"); const checkUser = createFakeUserList().find((item) => item.token === token); if (!checkUser) { - return resultError('The corresponding user information was not obtained!'); + return resultError("The corresponding user information was not obtained!"); } return resultSuccess(checkUser); }, }, { - url: '/basic-api/getPermCode', + url: "/basic-api/getPermCode", timeout: 200, - method: 'get', + method: "get", response: (request: requestParams) => { const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); + if (!token) return resultError("Invalid token"); const checkUser = createFakeUserList().find((item) => item.token === token); if (!checkUser) { - return resultError('Invalid token!'); + return resultError("Invalid token!"); } const codeList = fakeCodeList[checkUser.userId]; @@ -98,17 +98,17 @@ export default [ }, }, { - url: '/basic-api/logout', + url: "/basic-api/logout", timeout: 200, - method: 'get', + method: "get", response: (request: requestParams) => { const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); + if (!token) return resultError("Invalid token"); const checkUser = createFakeUserList().find((item) => item.token === token); if (!checkUser) { - return resultError('Invalid token!'); + return resultError("Invalid token!"); } - return resultSuccess(undefined, { message: 'Token has been destroyed' }); + return resultSuccess(undefined, { message: "Token has been destroyed" }); }, }, ] as MockMethod[]; diff --git a/package.json b/package.json index 649e8bf..7b0eabf 100644 --- a/package.json +++ b/package.json @@ -7,18 +7,38 @@ "url": "https://gitee.com/Suomm" }, "scripts": { + "bootstrap": "yarn install", + "serve": "npm run dev", "dev": "vite", - "bootstrap": "pnpm install", "build": "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts", - "preview": "pnpm run build && vite preview" + "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", + "build:no-cache": "yarn clean:cache && npm run build", + "report": "cross-env REPORT=true npm run build", + "type:check": "vue-tsc --noEmit --skipLibCheck", + "preview": "npm run build && vite preview", + "preview:dist": "vite preview", + "log": "conventional-changelog -p angular -i CHANGELOG.md -s", + "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", + "clean:lib": "rimraf node_modules", + "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix", + "lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"", + "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", + "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js", + "test:unit": "jest", + "test:unit-coverage": "jest --coverage", + "test:gzip": "npx http-server dist --cors --gzip -c-1", + "test:br": "npx http-server dist --cors --brotli -c-1", + "reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", + "prepare": "husky install", + "gen:icon": "esno ./build/generate/icon/index.ts" }, "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-vue": "^6.0.1", - "@iconify/iconify": "^2.1.0", - "@vueuse/core": "^6.9.2", - "@vueuse/shared": "^6.9.2", - "@zxcvbn-ts/core": "^1.2.0", + "@iconify/iconify": "^2.0.4", + "@vueuse/core": "^6.7.4", + "@vueuse/shared": "^6.7.4", + "@zxcvbn-ts/core": "^1.0.0-beta.0", "ant-design-vue": "2.2.8", "axios": "^0.24.0", "crypto-js": "^4.1.1", @@ -29,60 +49,93 @@ "nprogress": "^0.2.0", "path-to-regexp": "^6.2.0", "pinia": "2.0.0", - "qrcode": "^1.5.0", - "qs": "^6.10.2", + "qrcode": "^1.4.4", + "qs": "^6.10.1", "resize-observer-polyfill": "^1.5.1", "sortablejs": "^1.14.0", - "vue": "^3.2.26", + "vue": "^3.2.21", "vue-i18n": "^9.1.9", "vue-router": "^4.0.12", "vue-types": "^4.1.1" }, "devDependencies": { - "@iconify/json": "^1.1.446", + "@commitlint/cli": "^14.1.0", + "@commitlint/config-conventional": "^14.1.0", + "@iconify/json": "^1.1.422", "@purge-icons/generated": "^0.7.0", "@types/codemirror": "^5.60.5", "@types/crypto-js": "^4.0.2", "@types/fs-extra": "^9.0.13", "@types/inquirer": "^8.1.3", "@types/intro.js": "^3.0.2", + "@types/jest": "^27.0.2", "@types/lodash-es": "^4.17.5", "@types/mockjs": "^1.0.4", - "@types/node": "^16.11.15", + "@types/node": "^16.11.6", "@types/nprogress": "^0.2.0", - "@types/qrcode": "^1.4.2", + "@types/qrcode": "^1.4.1", "@types/qs": "^6.9.7", "@types/showdown": "^1.9.4", "@types/sortablejs": "^1.10.7", - "@vitejs/plugin-legacy": "^1.6.4", - "@vitejs/plugin-vue": "^1.10.2", - "@vitejs/plugin-vue-jsx": "^1.3.3", + "@typescript-eslint/eslint-plugin": "^5.3.0", + "@typescript-eslint/parser": "^5.3.0", + "@vitejs/plugin-legacy": "^1.6.2", + "@vitejs/plugin-vue": "^1.9.4", + "@vitejs/plugin-vue-jsx": "^1.2.0", "@vue/compiler-sfc": "3.2.21", + "@vue/test-utils": "^2.0.0-rc.16", + "autoprefixer": "^10.4.0", + "commitizen": "^4.2.4", + "conventional-changelog-cli": "^2.1.1", "cross-env": "^7.0.3", "dotenv": "^10.0.0", + "eslint": "^8.1.0", + "eslint-config-prettier": "^8.3.0", + "eslint-define-config": "^1.1.2", + "eslint-plugin-jest": "^25.2.2", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-vue": "^8.0.3", "esno": "^0.10.1", "fs-extra": "^10.0.0", + "husky": "^7.0.4", "inquirer": "^8.2.0", + "jest": "^27.3.1", "less": "^4.1.2", + "lint-staged": "11.2.6", + "npm-run-all": "^4.1.5", + "postcss": "^8.3.11", + "postcss-html": "^1.2.0", + "postcss-less": "^5.0.0", + "prettier": "^2.4.1", + "rimraf": "^3.0.2", "rollup-plugin-visualizer": "^5.5.2", - "typescript": "^4.5.4", - "vite": "^2.7.6", - "vite-plugin-compression": "^0.3.6", + "stylelint": "^14.0.1", + "stylelint-config-html": "^1.0.0", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-standard": "^23.0.0", + "stylelint-order": "^5.0.0", + "ts-jest": "^27.0.7", + "ts-node": "^10.4.0", + "typescript": "^4.4.4", + "vite": "^2.6.13", + "vite-plugin-compression": "^0.3.5", "vite-plugin-html": "^2.1.1", "vite-plugin-imagemin": "^0.4.6", "vite-plugin-mock": "^2.9.6", "vite-plugin-purge-icons": "^0.7.0", - "vite-plugin-pwa": "^0.11.12", - "vite-plugin-style-import": "^1.4.0", + "vite-plugin-pwa": "^0.11.3", + "vite-plugin-style-import": "^1.3.0", "vite-plugin-svg-icons": "^1.0.5", "vite-plugin-theme": "^0.8.1", "vite-plugin-vue-setup-extend": "^0.1.0", - "vite-plugin-windicss": "^1.6.1" + "vite-plugin-windicss": "^1.4.12", + "vue-eslint-parser": "^8.0.1", + "vue-tsc": "^0.28.10" }, "resolutions": { "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it", "bin-wrapper": "npm:bin-wrapper-china", - "rollup": "^2.61.1" + "rollup": "^2.56.3" }, "repository": { "type": "git", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0588f33..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,7419 +0,0 @@ -lockfileVersion: 5.3 - -overrides: - //: Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it - bin-wrapper: npm:bin-wrapper-china - rollup: ^2.61.1 - -specifiers: - '@ant-design/colors': ^6.0.0 - '@ant-design/icons-vue': ^6.0.1 - '@iconify/iconify': ^2.1.0 - '@iconify/json': ^1.1.446 - '@purge-icons/generated': ^0.7.0 - '@types/codemirror': ^5.60.5 - '@types/crypto-js': ^4.0.2 - '@types/fs-extra': ^9.0.13 - '@types/inquirer': ^8.1.3 - '@types/intro.js': ^3.0.2 - '@types/lodash-es': ^4.17.5 - '@types/mockjs': ^1.0.4 - '@types/node': ^16.11.15 - '@types/nprogress': ^0.2.0 - '@types/qrcode': ^1.4.2 - '@types/qs': ^6.9.7 - '@types/showdown': ^1.9.4 - '@types/sortablejs': ^1.10.7 - '@vitejs/plugin-legacy': ^1.6.4 - '@vitejs/plugin-vue': ^1.10.2 - '@vitejs/plugin-vue-jsx': ^1.3.3 - '@vue/compiler-sfc': 3.2.21 - '@vueuse/core': ^6.9.2 - '@vueuse/shared': ^6.9.2 - '@zxcvbn-ts/core': ^1.2.0 - ant-design-vue: 2.2.8 - axios: ^0.24.0 - cross-env: ^7.0.3 - crypto-js: ^4.1.1 - dotenv: ^10.0.0 - echarts: ^5.2.2 - esno: ^0.10.1 - fs-extra: ^10.0.0 - inquirer: ^8.2.0 - less: ^4.1.2 - lodash-es: ^4.17.21 - mockjs: ^1.1.0 - moment: ^2.29.1 - nprogress: ^0.2.0 - path-to-regexp: ^6.2.0 - pinia: 2.0.0 - qrcode: ^1.5.0 - qs: ^6.10.2 - resize-observer-polyfill: ^1.5.1 - rollup-plugin-visualizer: ^5.5.2 - sortablejs: ^1.14.0 - typescript: ^4.5.4 - vite: ^2.7.6 - vite-plugin-compression: ^0.3.6 - vite-plugin-html: ^2.1.1 - vite-plugin-imagemin: ^0.4.6 - vite-plugin-mock: ^2.9.6 - vite-plugin-purge-icons: ^0.7.0 - vite-plugin-pwa: ^0.11.12 - vite-plugin-style-import: ^1.4.0 - vite-plugin-svg-icons: ^1.0.5 - vite-plugin-theme: ^0.8.1 - vite-plugin-vue-setup-extend: ^0.1.0 - vite-plugin-windicss: ^1.6.1 - vue: ^3.2.26 - vue-i18n: ^9.1.9 - vue-router: ^4.0.12 - vue-types: ^4.1.1 - -dependencies: - '@ant-design/colors': 6.0.0 - '@ant-design/icons-vue': 6.0.1_vue@3.2.26 - '@iconify/iconify': 2.1.0 - '@vueuse/core': 6.9.2_vue@3.2.26 - '@vueuse/shared': 6.9.2_vue@3.2.26 - '@zxcvbn-ts/core': 1.2.0 - ant-design-vue: 2.2.8_095859896ec76c1f97b322e01cbf47cb - axios: 0.24.0 - crypto-js: 4.1.1 - echarts: 5.2.2 - lodash-es: 4.17.21 - mockjs: 1.1.0 - moment: 2.29.1 - nprogress: 0.2.0 - path-to-regexp: 6.2.0 - pinia: 2.0.0_typescript@4.5.4+vue@3.2.26 - qrcode: 1.5.0 - qs: 6.10.2 - resize-observer-polyfill: 1.5.1 - sortablejs: 1.14.0 - vue: 3.2.26 - vue-i18n: 9.1.9_vue@3.2.26 - vue-router: 4.0.12_vue@3.2.26 - vue-types: 4.1.1_vue@3.2.26 - -devDependencies: - '@iconify/json': 1.1.446 - '@purge-icons/generated': 0.7.0 - '@types/codemirror': 5.60.5 - '@types/crypto-js': 4.0.2 - '@types/fs-extra': 9.0.13 - '@types/inquirer': 8.1.3 - '@types/intro.js': 3.0.2 - '@types/lodash-es': 4.17.5 - '@types/mockjs': 1.0.4 - '@types/node': 16.11.15 - '@types/nprogress': 0.2.0 - '@types/qrcode': 1.4.2 - '@types/qs': 6.9.7 - '@types/showdown': 1.9.4 - '@types/sortablejs': 1.10.7 - '@vitejs/plugin-legacy': 1.6.4_vite@2.7.6 - '@vitejs/plugin-vue': 1.10.2_vite@2.7.6 - '@vitejs/plugin-vue-jsx': 1.3.3 - '@vue/compiler-sfc': 3.2.21 - cross-env: 7.0.3 - dotenv: 10.0.0 - esno: 0.10.1 - fs-extra: 10.0.0 - inquirer: 8.2.0 - less: 4.1.2 - rollup-plugin-visualizer: 5.5.2 - typescript: 4.5.4 - vite: 2.7.6_less@4.1.2 - vite-plugin-compression: 0.3.6_vite@2.7.6 - vite-plugin-html: 2.1.1_vite@2.7.6 - vite-plugin-imagemin: 0.4.6_vite@2.7.6 - vite-plugin-mock: 2.9.6_mockjs@1.1.0+vite@2.7.6 - vite-plugin-purge-icons: 0.7.0_vite@2.7.6 - vite-plugin-pwa: 0.11.12_vite@2.7.6 - vite-plugin-style-import: 1.4.0_vite@2.7.6 - vite-plugin-svg-icons: 1.0.5_vite@2.7.6 - vite-plugin-theme: 0.8.1_vite@2.7.6 - vite-plugin-vue-setup-extend: 0.1.0_vite@2.7.6 - vite-plugin-windicss: 1.6.1_vite@2.7.6 - -packages: - - /@ant-design/colors/5.1.1: - resolution: {integrity: sha1-gAshhrHifmZDLmfQPtlq8+IdiUA=, tarball: '@ant-design/colors/download/@ant-design/colors-5.1.1.tgz'} - dependencies: - '@ctrl/tinycolor': 3.4.0 - dev: false - - /@ant-design/colors/6.0.0: - resolution: {integrity: sha1-m5NmJXz/zEfbQrnQIDu1ksE8Apg=, tarball: '@ant-design/colors/download/@ant-design/colors-6.0.0.tgz'} - dependencies: - '@ctrl/tinycolor': 3.4.0 - dev: false - - /@ant-design/icons-svg/4.2.1: - resolution: {integrity: sha1-hjDajrRHGkqr2u19H/apfcss8Fo=, tarball: '@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz'} - dev: false - - /@ant-design/icons-vue/6.0.1_vue@3.2.26: - resolution: {integrity: sha1-nYBMPHTSz6+XyxjlgtO5QAk09f0=, tarball: '@ant-design/icons-vue/download/@ant-design/icons-vue-6.0.1.tgz'} - peerDependencies: - vue: '>=3.0.3' - dependencies: - '@ant-design/colors': 5.1.1 - '@ant-design/icons-svg': 4.2.1 - '@types/lodash': 4.14.178 - lodash: 4.17.21 - vue: 3.2.26 - dev: false - - /@antfu/utils/0.3.0: - resolution: {integrity: sha1-YwbEO1Kog72Olz4+2N1kJIQYvMQ=, tarball: '@antfu/utils/download/@antfu/utils-0.3.0.tgz'} - dependencies: - '@types/throttle-debounce': 2.1.0 - dev: true - - /@apideck/better-ajv-errors/0.3.1_ajv@8.8.2: - resolution: {integrity: sha512-6RMV31esAxqlDIvVCG/CJxY/s8dFNVOI5w8RWIfDMhjg/iwqnawko9tJXau/leqC4+T1Bu8et99QVWCwU5wk+g==, tarball: '@apideck/better-ajv-errors/download/@apideck/better-ajv-errors-0.3.1.tgz'} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.8.2 - json-schema: 0.4.0 - jsonpointer: 5.0.0 - leven: 3.1.0 - dev: true - - /@babel/code-frame/7.16.0: - resolution: {integrity: sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE=, tarball: '@babel/code-frame/download/@babel/code-frame-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.16.0 - dev: true - - /@babel/compat-data/7.16.4: - resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==, tarball: '@babel/compat-data/download/@babel/compat-data-7.16.4.tgz'} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core/7.16.5: - resolution: {integrity: sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==, tarball: '@babel/core/download/@babel/core-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helpers': 7.16.5 - '@babel/parser': 7.16.6 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - convert-source-map: 1.8.0 - debug: 4.3.3 - gensync: 1.0.0-beta.2 - json5: 2.2.0 - semver: 6.3.0 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator/7.16.5: - resolution: {integrity: sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==, tarball: '@babel/generator/download/@babel/generator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - - /@babel/helper-annotate-as-pure/7.16.0: - resolution: {integrity: sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=, tarball: '@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-builder-binary-assignment-operator-visitor/7.16.5: - resolution: {integrity: sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==, tarball: '@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-explode-assignable-expression': 7.16.0 - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-compilation-targets/7.16.3_@babel+core@7.16.5: - resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==, tarball: '@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.3.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - browserslist: 4.19.1 - semver: 6.3.0 - dev: true - - /@babel/helper-create-class-features-plugin/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==, tarball: '@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-member-expression-to-functions': 7.16.5 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/helper-replace-supers': 7.16.5 - '@babel/helper-split-export-declaration': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-create-regexp-features-plugin/7.16.0_@babel+core@7.16.5: - resolution: {integrity: sha1-BrI0jON/zMT14Y3NjXUFPyp8RP8=, tarball: '@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - regexpu-core: 4.8.0 - dev: true - - /@babel/helper-define-polyfill-provider/0.3.0_@babel+core@7.16.5: - resolution: {integrity: sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==, tarball: '@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.0.tgz'} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/traverse': 7.16.5 - debug: 4.3.3 - lodash.debounce: 4.0.8 - resolve: 1.20.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-environment-visitor/7.16.5: - resolution: {integrity: sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==, tarball: '@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-explode-assignable-expression/7.16.0: - resolution: {integrity: sha1-dTAXM3oV9G+cCfZ0z/EM7pudd3g=, tarball: '@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-function-name/7.16.0: - resolution: {integrity: sha1-t90Hl9ALv+5PB+nE6lsOMMi7FIE=, tarball: '@babel/helper-function-name/download/@babel/helper-function-name-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-get-function-arity': 7.16.0 - '@babel/template': 7.16.0 - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-get-function-arity/7.16.0: - resolution: {integrity: sha1-AIjHSGspqctdlIsaHeRttm4InPo=, tarball: '@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-hoist-variables/7.16.0: - resolution: {integrity: sha1-TJAjwvHe9+KP9G/B2802o5vqqBo=, tarball: '@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-member-expression-to-functions/7.16.5: - resolution: {integrity: sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==, tarball: '@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-module-imports/7.16.0: - resolution: {integrity: sha1-kFOOYLZy7PG0SPX09UM9N+eaPsM=, tarball: '@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-module-transforms/7.16.5: - resolution: {integrity: sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==, tarball: '@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-simple-access': 7.16.0 - '@babel/helper-split-export-declaration': 7.16.0 - '@babel/helper-validator-identifier': 7.15.7 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression/7.16.0: - resolution: {integrity: sha1-zs2xRdcMVAlrFWT46fEM19GTszg=, tarball: '@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-plugin-utils/7.16.5: - resolution: {integrity: sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==, tarball: '@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-remap-async-to-generator/7.16.5: - resolution: {integrity: sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==, tarball: '@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-wrap-function': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-replace-supers/7.16.5: - resolution: {integrity: sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==, tarball: '@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-member-expression-to-functions': 7.16.5 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-simple-access/7.16.0: - resolution: {integrity: sha1-IdaidiDjg+N1NM9sELugGab5BRc=, tarball: '@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers/7.16.0: - resolution: {integrity: sha1-DuM4gHAUfDrgUeSH7KPrsOLouwk=, tarball: '@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-split-export-declaration/7.16.0: - resolution: {integrity: sha1-KWcvQ2Y+k23zcKrrIr7ds7rsdDg=, tarball: '@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.0 - dev: true - - /@babel/helper-validator-identifier/7.15.7: - resolution: {integrity: sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=, tarball: '@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz'} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option/7.14.5: - resolution: {integrity: sha1-bnKh//GNXfy4eOHmLxoCHEty1aM=, tarball: '@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz'} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-wrap-function/7.16.5: - resolution: {integrity: sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==, tarball: '@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.16.0 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers/7.16.5: - resolution: {integrity: sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==, tarball: '@babel/helpers/download/@babel/helpers-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight/7.16.0: - resolution: {integrity: sha1-bOsysspLj182H7f9gh4/3fShclo=, tarball: '@babel/highlight/download/@babel/highlight-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.15.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser/7.16.6: - resolution: {integrity: sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==, tarball: '@babel/parser/download/@babel/parser-7.16.6.tgz'} - engines: {node: '>=6.0.0'} - hasBin: true - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.2_@babel+core@7.16.5: - resolution: {integrity: sha1-KXf8qbIS2xU8GVZ05Xz6uAdzMYM=, tarball: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.0_@babel+core@7.16.5: - resolution: {integrity: sha1-NYly6qsAb16wgmGDsMk8vK8T4eI=, tarball: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-proposal-optional-chaining': 7.16.5_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-async-generator-functions/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==, tarball: '@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-remap-async-to-generator': 7.16.5 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-properties/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==, tarball: '@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-static-block/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==, tarball: '@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-dynamic-import/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==, tarball: '@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-export-namespace-from/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==, tarball: '@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-json-strings/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==, tarball: '@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-logical-assignment-operators/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==, tarball: '@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==, tarball: '@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-numeric-separator/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==, tarball: '@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-object-rest-spread/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==, tarball: '@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-transform-parameters': 7.16.5_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-optional-catch-binding/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==, tarball: '@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-optional-chaining/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==, tarball: '@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.5 - dev: true - - /@babel/plugin-proposal-private-methods/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==, tarball: '@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-private-property-in-object/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==, tarball: '@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-create-class-features-plugin': 7.16.5_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-unicode-property-regex/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==, tarball: '@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.5.tgz'} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.5: - resolution: {integrity: sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=, tarball: '@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.16.5: - resolution: {integrity: sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=, tarball: '@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.5: - resolution: {integrity: sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=, tarball: '@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=, tarball: '@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz?cache=0&sync_timestamp=1632822771523&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-syntax-dynamic-import%2Fdownload%2F%40babel%2Fplugin-syntax-dynamic-import-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-AolkqbqA28CUyRXEh618TnpmRlo=, tarball: '@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.16.5: - resolution: {integrity: sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=, tarball: '@babel/plugin-syntax-import-meta/download/@babel/plugin-syntax-import-meta-7.10.4.tgz?cache=0&sync_timestamp=1632822771791&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-syntax-import-meta%2Fdownload%2F%40babel%2Fplugin-syntax-import-meta-7.10.4.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=, tarball: '@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-jsx/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==, tarball: '@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.5: - resolution: {integrity: sha1-ypHvRjA1MESLkGZSusLp/plB9pk=, tarball: '@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=, tarball: '@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.5: - resolution: {integrity: sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=, tarball: '@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=, tarball: '@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=, tarball: '@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.5: - resolution: {integrity: sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=, tarball: '@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.5: - resolution: {integrity: sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=, tarball: '@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.16.5: - resolution: {integrity: sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=, tarball: '@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-syntax-typescript/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==, tarball: '@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-arrow-functions/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==, tarball: '@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-async-to-generator/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==, tarball: '@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-remap-async-to-generator': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-block-scoped-functions/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==, tarball: '@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-block-scoping/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==, tarball: '@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-classes/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==, tarball: '@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-annotate-as-pure': 7.16.0 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-optimise-call-expression': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-replace-supers': 7.16.5 - '@babel/helper-split-export-declaration': 7.16.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-computed-properties/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==, tarball: '@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-destructuring/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==, tarball: '@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-dotall-regex/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==, tarball: '@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-duplicate-keys/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==, tarball: '@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-exponentiation-operator/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==, tarball: '@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-for-of/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==, tarball: '@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-function-name/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==, tarball: '@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-literals/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==, tarball: '@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==, tarball: '@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-modules-amd/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==, tarball: '@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==, tarball: '@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-simple-access': 7.16.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-systemjs/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==, tarball: '@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-hoist-variables': 7.16.0 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-identifier': 7.15.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-umd/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==, tarball: '@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-transforms': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==, tarball: '@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - dev: true - - /@babel/plugin-transform-new-target/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==, tarball: '@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-object-super/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==, tarball: '@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-replace-supers': 7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-parameters/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==, tarball: '@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-property-literals/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==, tarball: '@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-regenerator/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==, tarball: '@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - regenerator-transform: 0.14.5 - dev: true - - /@babel/plugin-transform-reserved-words/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==, tarball: '@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-shorthand-properties/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==, tarball: '@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-spread/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==, tarball: '@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - dev: true - - /@babel/plugin-transform-sticky-regex/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==, tarball: '@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-template-literals/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==, tarball: '@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-typeof-symbol/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==, tarball: '@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-typescript/7.16.1_@babel+core@7.16.5: - resolution: {integrity: sha1-zAZwsoIrAzg1W8Gz0iRqQrgWZAk=, tarball: '@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.1.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-class-features-plugin': 7.16.5_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-syntax-typescript': 7.16.5_@babel+core@7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-unicode-escapes/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==, tarball: '@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/plugin-transform-unicode-regex/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==, tarball: '@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - dev: true - - /@babel/preset-env/7.16.5_@babel+core@7.16.5: - resolution: {integrity: sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==, tarball: '@babel/preset-env/download/@babel/preset-env-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.2_@babel+core@7.16.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.0_@babel+core@7.16.5 - '@babel/plugin-proposal-async-generator-functions': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-class-properties': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-class-static-block': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-dynamic-import': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-export-namespace-from': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-json-strings': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-numeric-separator': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-object-rest-spread': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-optional-catch-binding': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-optional-chaining': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-private-methods': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-private-property-in-object': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-proposal-unicode-property-regex': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.5 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.16.5 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.5 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.5 - '@babel/plugin-transform-arrow-functions': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-async-to-generator': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-block-scoped-functions': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-block-scoping': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-classes': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-computed-properties': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-destructuring': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-dotall-regex': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-duplicate-keys': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-exponentiation-operator': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-for-of': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-function-name': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-literals': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-member-expression-literals': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-modules-amd': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-modules-commonjs': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-modules-systemjs': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-modules-umd': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-new-target': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-object-super': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-parameters': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-property-literals': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-regenerator': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-reserved-words': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-shorthand-properties': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-spread': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-sticky-regex': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-template-literals': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-typeof-symbol': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-unicode-escapes': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-unicode-regex': 7.16.5_@babel+core@7.16.5 - '@babel/preset-modules': 0.1.5_@babel+core@7.16.5 - '@babel/types': 7.16.0 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.5 - babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.16.5 - babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.5 - core-js-compat: 3.20.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-modules/0.1.5_@babel+core@7.16.5: - resolution: {integrity: sha1-75Odbn8miCfhhBY43G/5VRXhFdk=, tarball: '@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/plugin-proposal-unicode-property-regex': 7.16.5_@babel+core@7.16.5 - '@babel/plugin-transform-dotall-regex': 7.16.5_@babel+core@7.16.5 - '@babel/types': 7.16.0 - esutils: 2.0.3 - dev: true - - /@babel/runtime/7.16.5: - resolution: {integrity: sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==, tarball: '@babel/runtime/download/@babel/runtime-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.9 - - /@babel/standalone/7.16.6: - resolution: {integrity: sha512-wjildVe951w1IPEPN4G76j+y5JFZfJN9gdyP8o9zd61qbiVEecAgORKskK1D/7VrJZrZS+nxDbhj2akEFU2RJw==, tarball: '@babel/standalone/download/@babel/standalone-7.16.6.tgz'} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/template/7.16.0: - resolution: {integrity: sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=, tarball: '@babel/template/download/@babel/template-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/parser': 7.16.6 - '@babel/types': 7.16.0 - dev: true - - /@babel/traverse/7.16.5: - resolution: {integrity: sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==, tarball: '@babel/traverse/download/@babel/traverse-7.16.5.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.0 - '@babel/generator': 7.16.5 - '@babel/helper-environment-visitor': 7.16.5 - '@babel/helper-function-name': 7.16.0 - '@babel/helper-hoist-variables': 7.16.0 - '@babel/helper-split-export-declaration': 7.16.0 - '@babel/parser': 7.16.6 - '@babel/types': 7.16.0 - debug: 4.3.3 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types/7.16.0: - resolution: {integrity: sha1-2zsxOAT5aq3Qt3bEgj4SetZyibo=, tarball: '@babel/types/download/@babel/types-7.16.0.tgz'} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.15.7 - to-fast-properties: 2.0.0 - dev: true - - /@ctrl/tinycolor/3.4.0: - resolution: {integrity: sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8=, tarball: '@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz'} - engines: {node: '>=10'} - dev: false - - /@iconify/iconify/2.0.0-rc.6: - resolution: {integrity: sha1-4/U3a2O0QdyzaWMXeEuY4uZ4z0Y=, tarball: '@iconify/iconify/download/@iconify/iconify-2.0.0-rc.6.tgz'} - dependencies: - cross-fetch: 3.1.4 - dev: true - - /@iconify/iconify/2.1.0: - resolution: {integrity: sha512-YXKrDVXIGUeFIRqr6QC/l6MRj9kDOlES4sWx/ty8SXUk0pCZnBwsj0/to9Q3g79TAyh2wG3/yzrkf6fHKichwA==, tarball: '@iconify/iconify/download/@iconify/iconify-2.1.0.tgz'} - dependencies: - cross-fetch: 3.1.4 - - /@iconify/json/1.1.446: - resolution: {integrity: sha512-d/ki5FC3UTrYFWPceQ/EDu/qCKQZFSTuPR6nWHUmTx6ywEgOhnOaak8RQIxxc1lMr3Dzp1KC2X4D8/kcqiGmvA==, tarball: '@iconify/json/download/@iconify/json-1.1.446.tgz'} - dev: true - - /@intlify/core-base/9.1.9: - resolution: {integrity: sha1-5OjJUQEHKOSvOg0T10zz+eet1/Y=, tarball: '@intlify/core-base/download/@intlify/core-base-9.1.9.tgz'} - engines: {node: '>= 10'} - dependencies: - '@intlify/devtools-if': 9.1.9 - '@intlify/message-compiler': 9.1.9 - '@intlify/message-resolver': 9.1.9 - '@intlify/runtime': 9.1.9 - '@intlify/shared': 9.1.9 - '@intlify/vue-devtools': 9.1.9 - dev: false - - /@intlify/devtools-if/9.1.9: - resolution: {integrity: sha1-ow4d0SVv8sXJjY110HU4T7qJjl0=, tarball: '@intlify/devtools-if/download/@intlify/devtools-if-9.1.9.tgz'} - engines: {node: '>= 10'} - dependencies: - '@intlify/shared': 9.1.9 - dev: false - - /@intlify/message-compiler/9.1.9: - resolution: {integrity: sha1-EZPL0iSnHC+5gUVbhTSjx2bSlI0=, tarball: '@intlify/message-compiler/download/@intlify/message-compiler-9.1.9.tgz'} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-resolver': 9.1.9 - '@intlify/shared': 9.1.9 - source-map: 0.6.1 - dev: false - - /@intlify/message-resolver/9.1.9: - resolution: {integrity: sha1-MVXM0vXm0NwWyti38djpf82gW/w=, tarball: '@intlify/message-resolver/download/@intlify/message-resolver-9.1.9.tgz'} - engines: {node: '>= 10'} - dev: false - - /@intlify/runtime/9.1.9: - resolution: {integrity: sha1-LBLOKVGKB1Yp7+0KjtKT7nQMsoU=, tarball: '@intlify/runtime/download/@intlify/runtime-9.1.9.tgz'} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-compiler': 9.1.9 - '@intlify/message-resolver': 9.1.9 - '@intlify/shared': 9.1.9 - dev: false - - /@intlify/shared/9.1.9: - resolution: {integrity: sha1-C6r5YSi4VWBma+x4T/sB9mI8wXo=, tarball: '@intlify/shared/download/@intlify/shared-9.1.9.tgz'} - engines: {node: '>= 10'} - dev: false - - /@intlify/vue-devtools/9.1.9: - resolution: {integrity: sha1-K+j02+f37UEVZ26zI0gUHUEeQms=, tarball: '@intlify/vue-devtools/download/@intlify/vue-devtools-9.1.9.tgz'} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-resolver': 9.1.9 - '@intlify/runtime': 9.1.9 - '@intlify/shared': 9.1.9 - dev: false - - /@nodelib/fs.scandir/2.1.5: - resolution: {integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=, tarball: '@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz'} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat/2.0.5: - resolution: {integrity: sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=, tarball: '@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz'} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk/1.2.8: - resolution: {integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=, tarball: '@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1632822730231&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz'} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: true - - /@purge-icons/core/0.7.0: - resolution: {integrity: sha1-CXuo1Ni36NZi32h70jkeuLg8q6A=, tarball: '@purge-icons/core/download/@purge-icons/core-0.7.0.tgz'} - dependencies: - '@iconify/iconify': 2.0.0-rc.6 - axios: 0.21.4_debug@4.3.3 - debug: 4.3.3 - fast-glob: 3.2.7 - fs-extra: 9.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@purge-icons/generated/0.7.0: - resolution: {integrity: sha1-2H27MUXouaZOLhL/ZgqjyxPL61Y=, tarball: '@purge-icons/generated/download/@purge-icons/generated-0.7.0.tgz'} - dependencies: - '@iconify/iconify': 2.1.0 - dev: true - - /@rollup/plugin-babel/5.3.0_@babel+core@7.16.5+rollup@2.61.1: - resolution: {integrity: sha1-nLHFFG3daklorZbyCcUMYvkvmHk=, tarball: '@rollup/plugin-babel/download/@rollup/plugin-babel-5.3.0.tgz'} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-module-imports': 7.16.0 - '@rollup/pluginutils': 3.1.0_rollup@2.61.1 - rollup: 2.61.1 - dev: true - - /@rollup/plugin-node-resolve/11.2.1_rollup@2.61.1: - resolution: {integrity: sha1-gqpZOXopzU4TJIsQbmpKGIA2KmA=, tarball: '@rollup/plugin-node-resolve/download/@rollup/plugin-node-resolve-11.2.1.tgz'} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.61.1 - '@types/resolve': 1.17.1 - builtin-modules: 3.2.0 - deepmerge: 4.2.2 - is-module: 1.0.0 - resolve: 1.20.0 - rollup: 2.61.1 - dev: true - - /@rollup/plugin-node-resolve/13.1.1: - resolution: {integrity: sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw==, tarball: '@rollup/plugin-node-resolve/download/@rollup/plugin-node-resolve-13.1.1.tgz'} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^2.42.0 - dependencies: - '@rollup/pluginutils': 3.1.0 - '@types/resolve': 1.17.1 - builtin-modules: 3.2.0 - deepmerge: 4.2.2 - is-module: 1.0.0 - resolve: 1.20.0 - dev: true - - /@rollup/plugin-replace/2.4.2_rollup@2.61.1: - resolution: {integrity: sha1-otU5MU+8d8JEhY+qUjASglBoUQo=, tarball: '@rollup/plugin-replace/download/@rollup/plugin-replace-2.4.2.tgz'} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.61.1 - magic-string: 0.25.7 - rollup: 2.61.1 - dev: true - - /@rollup/pluginutils/3.1.0: - resolution: {integrity: sha1-cGtFJO5tyLEDs8mVUz5a1oDAK5s=, tarball: '@rollup/pluginutils/download/@rollup/pluginutils-3.1.0.tgz'} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.0 - dev: true - - /@rollup/pluginutils/3.1.0_rollup@2.61.1: - resolution: {integrity: sha1-cGtFJO5tyLEDs8mVUz5a1oDAK5s=, tarball: '@rollup/pluginutils/download/@rollup/pluginutils-3.1.0.tgz'} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.0 - rollup: 2.61.1 - dev: true - - /@rollup/pluginutils/4.1.2: - resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==, tarball: '@rollup/pluginutils/download/@rollup/pluginutils-4.1.2.tgz'} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.0 - dev: true - - /@simonwep/pickr/1.8.2: - resolution: {integrity: sha1-ltyGZ1lA18rWPWnCIIPdHLuXl8s=, tarball: '@simonwep/pickr/download/@simonwep/pickr-1.8.2.tgz'} - dependencies: - core-js: 3.20.0 - nanopop: 2.1.0 - dev: false - - /@sindresorhus/is/0.7.0: - resolution: {integrity: sha1-mgb08TfuhNffBGDB/bETX/psUP0=, tarball: '@sindresorhus/is/download/@sindresorhus/is-0.7.0.tgz'} - engines: {node: '>=4'} - dev: true - - /@surma/rollup-plugin-off-main-thread/2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==, tarball: '@surma/rollup-plugin-off-main-thread/download/@surma/rollup-plugin-off-main-thread-2.2.3.tgz'} - dependencies: - ejs: 3.1.6 - json5: 2.2.0 - magic-string: 0.25.7 - string.prototype.matchall: 4.0.6 - dev: true - - /@trysound/sax/0.2.0: - resolution: {integrity: sha1-zMqrdYr1Z2Hre/N69vA/Mm3XmK0=, tarball: '@trysound/sax/download/@trysound/sax-0.2.0.tgz'} - engines: {node: '>=10.13.0'} - dev: true - - /@types/codemirror/5.60.5: - resolution: {integrity: sha1-W5iaO0u+ZXRYzzcskra/2mBhorc=, tarball: '@types/codemirror/download/@types/codemirror-5.60.5.tgz'} - dependencies: - '@types/tern': 0.23.4 - dev: true - - /@types/crypto-js/4.0.2: - resolution: {integrity: sha1-RSQyWhdb+Bn+xuQlYMOJzh+5LJc=, tarball: '@types/crypto-js/download/@types/crypto-js-4.0.2.tgz'} - dev: true - - /@types/estree/0.0.39: - resolution: {integrity: sha1-4Xfmme4bjCLSMXTKqnQiZEOJUJ8=, tarball: '@types/estree/download/@types/estree-0.0.39.tgz'} - dev: true - - /@types/estree/0.0.50: - resolution: {integrity: sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=, tarball: '@types/estree/download/@types/estree-0.0.50.tgz'} - dev: true - - /@types/fs-extra/9.0.13: - resolution: {integrity: sha1-dZT7rgT+fxkYzos9IT90/0SsH0U=, tarball: '@types/fs-extra/download/@types/fs-extra-9.0.13.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/glob/7.2.0: - resolution: {integrity: sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=, tarball: '@types/glob/download/@types/glob-7.2.0.tgz'} - dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 16.11.15 - dev: true - - /@types/imagemin-gifsicle/7.0.1: - resolution: {integrity: sha1-CESpajOEOLuY93spis8hcmDQ1Ak=, tarball: '@types/imagemin-gifsicle/download/@types/imagemin-gifsicle-7.0.1.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - dev: true - - /@types/imagemin-jpegtran/5.0.1: - resolution: {integrity: sha1-eYsqZs1Jt+xlUPtzPAWluHVfIR8=, tarball: '@types/imagemin-jpegtran/download/@types/imagemin-jpegtran-5.0.1.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - dev: true - - /@types/imagemin-mozjpeg/8.0.1: - resolution: {integrity: sha1-6vLweuo6MXoXEO8sdj7FPzvPzcU=, tarball: '@types/imagemin-mozjpeg/download/@types/imagemin-mozjpeg-8.0.1.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - dev: true - - /@types/imagemin-optipng/5.2.1: - resolution: {integrity: sha1-bvAz87FdKBAJ3k4L0srfbL0udBo=, tarball: '@types/imagemin-optipng/download/@types/imagemin-optipng-5.2.1.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - dev: true - - /@types/imagemin-svgo/9.0.1: - resolution: {integrity: sha1-Yp68jQGAJAWp8HZn5z5zlDuij/c=, tarball: '@types/imagemin-svgo/download/@types/imagemin-svgo-9.0.1.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - '@types/svgo': 1.3.6 - dev: true - - /@types/imagemin-webp/5.1.2: - resolution: {integrity: sha1-tCb5PHAZ83mVeMiOKM5pSdlbFpA=, tarball: '@types/imagemin-webp/download/@types/imagemin-webp-5.1.2.tgz'} - dependencies: - '@types/imagemin': 7.0.1 - dev: true - - /@types/imagemin/7.0.1: - resolution: {integrity: sha1-EcoeZcyzhxqEadmyMDO5XTg47aA=, tarball: '@types/imagemin/download/@types/imagemin-7.0.1.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/inquirer/8.1.3: - resolution: {integrity: sha1-39pMl82+ME5NzrN4qA95RI6lyP4=, tarball: '@types/inquirer/download/@types/inquirer-8.1.3.tgz'} - dependencies: - '@types/through': 0.0.30 - rxjs: 7.4.0 - dev: true - - /@types/intro.js/3.0.2: - resolution: {integrity: sha1-y/m2nwVbd1gsws6+I26aQFsw770=, tarball: '@types/intro.js/download/@types/intro.js-3.0.2.tgz'} - dev: true - - /@types/lodash-es/4.17.5: - resolution: {integrity: sha1-HD/dFoSdhK6kOJCxxg2jeftQE1M=, tarball: '@types/lodash-es/download/@types/lodash-es-4.17.5.tgz'} - dependencies: - '@types/lodash': 4.14.178 - dev: true - - /@types/lodash/4.14.178: - resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==, tarball: '@types/lodash/download/@types/lodash-4.14.178.tgz'} - - /@types/minimatch/3.0.5: - resolution: {integrity: sha1-EAHMXmo3BLg8I2An538vWOoBD0A=, tarball: '@types/minimatch/download/@types/minimatch-3.0.5.tgz'} - dev: true - - /@types/mockjs/1.0.4: - resolution: {integrity: sha1-5waVHV4ztPCku3Ox+LEk4m8IHeA=, tarball: '@types/mockjs/download/@types/mockjs-1.0.4.tgz'} - dev: true - - /@types/node/14.18.2: - resolution: {integrity: sha512-fqtSN5xn/bBzDxMT77C1rJg6CsH/R49E7qsGuvdPJa20HtV5zSTuLJPNfnlyVH3wauKnkHdLggTVkOW/xP9oQg==, tarball: '@types/node/download/@types/node-14.18.2.tgz'} - dev: true - - /@types/node/16.11.15: - resolution: {integrity: sha512-LMGR7iUjwZRxoYnfc9+YELxwqkaLmkJlo4/HUvOMyGvw9DaHO0gtAbH2FUdoFE6PXBTYZIT7x610r7kdo8o1fQ==, tarball: '@types/node/download/@types/node-16.11.15.tgz'} - dev: true - - /@types/nprogress/0.2.0: - resolution: {integrity: sha1-hsWTaC1BmSEqBQnMPE1WK7vW5F8=, tarball: '@types/nprogress/download/@types/nprogress-0.2.0.tgz'} - dev: true - - /@types/qrcode/1.4.2: - resolution: {integrity: sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==, tarball: '@types/qrcode/download/@types/qrcode-1.4.2.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/qs/6.9.7: - resolution: {integrity: sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=, tarball: '@types/qs/download/@types/qs-6.9.7.tgz'} - dev: true - - /@types/resolve/1.17.1: - resolution: {integrity: sha1-Ov1q2JZ8d+Q3bFmKgt3Vj0bsRdY=, tarball: '@types/resolve/download/@types/resolve-1.17.1.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/showdown/1.9.4: - resolution: {integrity: sha1-U4Wt80FDq62TCVYWYfpseB0quWI=, tarball: '@types/showdown/download/@types/showdown-1.9.4.tgz'} - dev: true - - /@types/sortablejs/1.10.7: - resolution: {integrity: sha1-q5A5yFQp8FFpVextvAuyATlBexU=, tarball: '@types/sortablejs/download/@types/sortablejs-1.10.7.tgz'} - dev: true - - /@types/svgo/1.3.6: - resolution: {integrity: sha1-nbAKfd+bJq0v62uDS+8YGGd4ReE=, tarball: '@types/svgo/download/@types/svgo-1.3.6.tgz'} - dev: true - - /@types/svgo/2.6.0: - resolution: {integrity: sha1-8MUO7ShkIvY7TjNG2KMJsOpn1Yo=, tarball: '@types/svgo/download/@types/svgo-2.6.0.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/tern/0.23.4: - resolution: {integrity: sha1-A5JusT2+rzrg05DK9wayZDoBJ/s=, tarball: '@types/tern/download/@types/tern-0.23.4.tgz'} - dependencies: - '@types/estree': 0.0.50 - dev: true - - /@types/throttle-debounce/2.1.0: - resolution: {integrity: sha1-HD32JL/Eti+ZLTASuExW1B6rN3Y=, tarball: '@types/throttle-debounce/download/@types/throttle-debounce-2.1.0.tgz'} - dev: true - - /@types/through/0.0.30: - resolution: {integrity: sha1-4OQs536Je9aurW9upirrE1uKOJU=, tarball: '@types/through/download/@types/through-0.0.30.tgz'} - dependencies: - '@types/node': 16.11.15 - dev: true - - /@types/tinycolor2/1.4.3: - resolution: {integrity: sha1-7UoJAflUsSbmqRS0g5x3Ri1W5wY=, tarball: '@types/tinycolor2/download/@types/tinycolor2-1.4.3.tgz'} - dev: true - - /@types/trusted-types/2.0.2: - resolution: {integrity: sha1-/CWtmUO8rBHM64Fo208nXg5y51Y=, tarball: '@types/trusted-types/download/@types/trusted-types-2.0.2.tgz'} - dev: true - - /@vitejs/plugin-legacy/1.6.4_vite@2.7.6: - resolution: {integrity: sha512-geH2F3hTRN++E4n9NZ0JFumxIWUKqW4FA9PAgM7Q6RvUOUUYW4tlURhEmCBYfZSN24H/yX3mEolX+wFVErsAYQ==, tarball: '@vitejs/plugin-legacy/download/@vitejs/plugin-legacy-1.6.4.tgz'} - engines: {node: '>=12.0.0'} - peerDependencies: - vite: ^2.0.0 - dependencies: - '@babel/standalone': 7.16.6 - core-js: 3.20.0 - magic-string: 0.25.7 - regenerator-runtime: 0.13.9 - systemjs: 6.11.0 - vite: 2.7.6_less@4.1.2 - dev: true - - /@vitejs/plugin-vue-jsx/1.3.3: - resolution: {integrity: sha512-VSBXVqMcxbgX85rgJC1eMWuZ9hzOJhWPvGYlKxyymPokE/i3Gykh5ljkCoNdxnKgIyFqv4WutYoYY93fgjbTxA==, tarball: '@vitejs/plugin-vue-jsx/download/@vitejs/plugin-vue-jsx-1.3.3.tgz'} - engines: {node: '>=12.0.0'} - dependencies: - '@babel/core': 7.16.5 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.16.5 - '@babel/plugin-transform-typescript': 7.16.1_@babel+core@7.16.5 - '@rollup/pluginutils': 4.1.2 - '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.16.5 - hash-sum: 2.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@vitejs/plugin-vue/1.10.2_vite@2.7.6: - resolution: {integrity: sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==, tarball: '@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.10.2.tgz'} - engines: {node: '>=12.0.0'} - peerDependencies: - vite: ^2.5.10 - dependencies: - vite: 2.7.6_less@4.1.2 - dev: true - - /@vue/babel-helper-vue-transform-on/1.0.2: - resolution: {integrity: sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=, tarball: '@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz'} - dev: true - - /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.16.5: - resolution: {integrity: sha1-DFusJ4gNI/iYlM0Daje1XvYd38E=, tarball: '@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.1.1.tgz'} - dependencies: - '@babel/helper-module-imports': 7.16.0 - '@babel/plugin-syntax-jsx': 7.16.5_@babel+core@7.16.5 - '@babel/template': 7.16.0 - '@babel/traverse': 7.16.5 - '@babel/types': 7.16.0 - '@vue/babel-helper-vue-transform-on': 1.0.2 - camelcase: 6.2.1 - html-tags: 3.1.0 - svg-tags: 1.0.0 - transitivePeerDependencies: - - '@babel/core' - - supports-color - dev: true - - /@vue/compiler-core/3.2.21: - resolution: {integrity: sha1-JlZsMrKtg4GZ1HHvXfYgqDhG8k4=, tarball: '@vue/compiler-core/download/@vue/compiler-core-3.2.21.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/shared': 3.2.21 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: true - - /@vue/compiler-core/3.2.26: - resolution: {integrity: sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==, tarball: '@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/shared': 3.2.26 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: false - - /@vue/compiler-dom/3.2.21: - resolution: {integrity: sha1-1vbIU2TviIj5xOkSK/uhHnj7OYw=, tarball: '@vue/compiler-dom/download/@vue/compiler-dom-3.2.21.tgz'} - dependencies: - '@vue/compiler-core': 3.2.21 - '@vue/shared': 3.2.21 - dev: true - - /@vue/compiler-dom/3.2.26: - resolution: {integrity: sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg==, tarball: '@vue/compiler-dom/download/@vue/compiler-dom-3.2.26.tgz'} - dependencies: - '@vue/compiler-core': 3.2.26 - '@vue/shared': 3.2.26 - dev: false - - /@vue/compiler-sfc/3.2.21: - resolution: {integrity: sha1-QmOe5J5yWvt9jx0ZQOddwXpWACw=, tarball: '@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.21.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/compiler-core': 3.2.21 - '@vue/compiler-dom': 3.2.21 - '@vue/compiler-ssr': 3.2.21 - '@vue/ref-transform': 3.2.21 - '@vue/shared': 3.2.21 - estree-walker: 2.0.2 - magic-string: 0.25.7 - postcss: 8.4.5 - source-map: 0.6.1 - dev: true - - /@vue/compiler-sfc/3.2.26: - resolution: {integrity: sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==, tarball: '@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.26.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/compiler-core': 3.2.26 - '@vue/compiler-dom': 3.2.26 - '@vue/compiler-ssr': 3.2.26 - '@vue/reactivity-transform': 3.2.26 - '@vue/shared': 3.2.26 - estree-walker: 2.0.2 - magic-string: 0.25.7 - postcss: 8.4.5 - source-map: 0.6.1 - dev: false - - /@vue/compiler-ssr/3.2.21: - resolution: {integrity: sha1-N9Ek+J6K3vn9VrhXdd5LUxCgQ24=, tarball: '@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.21.tgz'} - dependencies: - '@vue/compiler-dom': 3.2.21 - '@vue/shared': 3.2.21 - dev: true - - /@vue/compiler-ssr/3.2.26: - resolution: {integrity: sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag==, tarball: '@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.26.tgz'} - dependencies: - '@vue/compiler-dom': 3.2.26 - '@vue/shared': 3.2.26 - dev: false - - /@vue/devtools-api/6.0.0-beta.21.1: - resolution: {integrity: sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw==, tarball: '@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.21.1.tgz'} - dev: false - - /@vue/reactivity-transform/3.2.26: - resolution: {integrity: sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==, tarball: '@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.26.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/compiler-core': 3.2.26 - '@vue/shared': 3.2.26 - estree-walker: 2.0.2 - magic-string: 0.25.7 - dev: false - - /@vue/reactivity/3.2.26: - resolution: {integrity: sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ==, tarball: '@vue/reactivity/download/@vue/reactivity-3.2.26.tgz'} - dependencies: - '@vue/shared': 3.2.26 - dev: false - - /@vue/ref-transform/3.2.21: - resolution: {integrity: sha1-sMVUyfZAw/AF935nYGaqD6upCYQ=, tarball: '@vue/ref-transform/download/@vue/ref-transform-3.2.21.tgz'} - dependencies: - '@babel/parser': 7.16.6 - '@vue/compiler-core': 3.2.21 - '@vue/shared': 3.2.21 - estree-walker: 2.0.2 - magic-string: 0.25.7 - dev: true - - /@vue/runtime-core/3.2.26: - resolution: {integrity: sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ==, tarball: '@vue/runtime-core/download/@vue/runtime-core-3.2.26.tgz'} - dependencies: - '@vue/reactivity': 3.2.26 - '@vue/shared': 3.2.26 - dev: false - - /@vue/runtime-dom/3.2.26: - resolution: {integrity: sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ==, tarball: '@vue/runtime-dom/download/@vue/runtime-dom-3.2.26.tgz'} - dependencies: - '@vue/runtime-core': 3.2.26 - '@vue/shared': 3.2.26 - csstype: 2.6.19 - dev: false - - /@vue/server-renderer/3.2.26_vue@3.2.26: - resolution: {integrity: sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w==, tarball: '@vue/server-renderer/download/@vue/server-renderer-3.2.26.tgz'} - peerDependencies: - vue: 3.2.26 - dependencies: - '@vue/compiler-ssr': 3.2.26 - '@vue/shared': 3.2.26 - vue: 3.2.26 - dev: false - - /@vue/shared/3.2.21: - resolution: {integrity: sha1-TNgMDmLPZaetqyRJ6GtvDLM6Ews=, tarball: '@vue/shared/download/@vue/shared-3.2.21.tgz'} - dev: true - - /@vue/shared/3.2.26: - resolution: {integrity: sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA==, tarball: '@vue/shared/download/@vue/shared-3.2.26.tgz'} - dev: false - - /@vueuse/core/6.9.2_vue@3.2.26: - resolution: {integrity: sha512-FRwl4ccSFuHZBHLGgS9TMv/+Dd6XFaL4o9nph2qtgQIV+z29RBFokw08XjHfykiENRzB01MjYHJ7iRUnsIFQXg==, tarball: '@vueuse/core/download/@vueuse/core-6.9.2.tgz'} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - '@vueuse/shared': 6.9.2_vue@3.2.26 - vue: 3.2.26 - vue-demi: 0.12.1_vue@3.2.26 - dev: false - - /@vueuse/shared/6.9.2_vue@3.2.26: - resolution: {integrity: sha512-lAiMh6XROs0kSKVd0Yb/6GKoQMxC1fYrFDi6opvQWISPtcqRNluRrQxLUZ3WTI78ovtoKRLktjhkFAtydcfFDg==, tarball: '@vueuse/shared/download/@vueuse/shared-6.9.2.tgz'} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - vue: 3.2.26 - vue-demi: 0.12.1_vue@3.2.26 - dev: false - - /@windicss/config/1.6.1: - resolution: {integrity: sha512-E4FKtWdYl5HwFknBQ+Z2JIF58TZiR4/ZiP8B30sfRxNlG6clh4agn5MJqTb4ER0MLkDb30Hugl2tGun0AQNbFw==, tarball: '@windicss/config/download/@windicss/config-1.6.1.tgz'} - dependencies: - debug: 4.3.3 - jiti: 1.12.9 - windicss: 3.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@windicss/plugin-utils/1.6.1: - resolution: {integrity: sha512-hFQY27bOr9SSpekIvSwBpIX25nR4cwrU5/1kJFqCwAzqyazvd7U9c/iI1E2sTEQOkPbpTTJkY2Act21Q70oSDQ==, tarball: '@windicss/plugin-utils/download/@windicss/plugin-utils-1.6.1.tgz'} - dependencies: - '@antfu/utils': 0.3.0 - '@windicss/config': 1.6.1 - debug: 4.3.3 - fast-glob: 3.2.7 - magic-string: 0.25.7 - micromatch: 4.0.4 - windicss: 3.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@zxcvbn-ts/core/1.2.0: - resolution: {integrity: sha512-zaGUGolat04MB1ImVMbP8o7uDytKRLahZO6VSWeW6tK+tko6vHMl/eNsdKWSSWG7OR45BeUy7nBvFg79HYSdGA==, tarball: '@zxcvbn-ts/core/download/@zxcvbn-ts/core-1.2.0.tgz'} - dev: false - - /ajv/8.8.2: - resolution: {integrity: sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==, tarball: ajv/download/ajv-8.8.2.tgz} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-escapes/4.3.2: - resolution: {integrity: sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=, tarball: ansi-escapes/download/ansi-escapes-4.3.2.tgz} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - - /ansi-regex/2.1.1: - resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=, tarball: ansi-regex/download/ansi-regex-2.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-regex/5.0.1: - resolution: {integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=, tarball: ansi-regex/download/ansi-regex-5.0.1.tgz} - engines: {node: '>=8'} - - /ansi-styles/2.2.1: - resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=, tarball: ansi-styles/download/ansi-styles-2.2.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-styles/3.2.1: - resolution: {integrity: sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=, tarball: ansi-styles/download/ansi-styles-3.2.1.tgz} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc=, tarball: ansi-styles/download/ansi-styles-4.3.0.tgz} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ant-design-vue/2.2.8_095859896ec76c1f97b322e01cbf47cb: - resolution: {integrity: sha1-+ofPaELY7poNivOT/0CZ7MQHLys=, tarball: ant-design-vue/download/ant-design-vue-2.2.8.tgz} - peerDependencies: - '@vue/compiler-sfc': '>=3.1.0' - vue: '>=3.1.0' - dependencies: - '@ant-design/icons-vue': 6.0.1_vue@3.2.26 - '@babel/runtime': 7.16.5 - '@simonwep/pickr': 1.8.2 - '@vue/compiler-sfc': 3.2.21 - array-tree-filter: 2.1.0 - async-validator: 3.5.2 - dom-align: 1.12.2 - dom-scroll-into-view: 2.0.1 - lodash: 4.17.21 - lodash-es: 4.17.21 - moment: 2.29.1 - omit.js: 2.0.2 - resize-observer-polyfill: 1.5.1 - scroll-into-view-if-needed: 2.2.28 - shallow-equal: 1.2.1 - vue: 3.2.26 - vue-types: 3.0.2_vue@3.2.26 - warning: 4.0.3 - dev: false - - /anymatch/3.1.2: - resolution: {integrity: sha1-wFV8CWrzLxBhmPT04qODU343hxY=, tarball: anymatch/download/anymatch-3.1.2.tgz} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.0 - dev: true - - /arch/2.2.0: - resolution: {integrity: sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE=, tarball: arch/download/arch-2.2.0.tgz} - dev: true - - /archive-type/4.0.0: - resolution: {integrity: sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=, tarball: archive-type/download/archive-type-4.0.0.tgz} - engines: {node: '>=4'} - dependencies: - file-type: 4.4.0 - dev: true - - /arr-diff/4.0.0: - resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=, tarball: arr-diff/download/arr-diff-4.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /arr-flatten/1.1.0: - resolution: {integrity: sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=, tarball: arr-flatten/download/arr-flatten-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /arr-union/3.1.0: - resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=, tarball: arr-union/download/arr-union-3.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /array-find-index/1.0.2: - resolution: {integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=, tarball: array-find-index/download/array-find-index-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /array-tree-filter/2.1.0: - resolution: {integrity: sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA=, tarball: array-tree-filter/download/array-tree-filter-2.1.0.tgz} - dev: false - - /array-union/2.1.0: - resolution: {integrity: sha1-t5hCCtvrHego2ErNii4j0+/oXo0=, tarball: array-union/download/array-union-2.1.0.tgz} - engines: {node: '>=8'} - dev: true - - /array-unique/0.3.2: - resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=, tarball: array-unique/download/array-unique-0.3.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /assign-symbols/1.0.0: - resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=, tarball: assign-symbols/download/assign-symbols-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /async-validator/3.5.2: - resolution: {integrity: sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA=, tarball: async-validator/download/async-validator-3.5.2.tgz} - dev: false - - /async/0.9.2: - resolution: {integrity: sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=, tarball: async/download/async-0.9.2.tgz} - dev: true - - /at-least-node/1.0.0: - resolution: {integrity: sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=, tarball: at-least-node/download/at-least-node-1.0.0.tgz} - engines: {node: '>= 4.0.0'} - dev: true - - /atob/2.1.2: - resolution: {integrity: sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=, tarball: atob/download/atob-2.1.2.tgz} - engines: {node: '>= 4.5.0'} - hasBin: true - dev: true - - /axios/0.21.4_debug@4.3.3: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, tarball: axios/download/axios-0.21.4.tgz} - dependencies: - follow-redirects: 1.14.6 - transitivePeerDependencies: - - debug - dev: true - - /axios/0.24.0: - resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==, tarball: axios/download/axios-0.24.0.tgz} - dependencies: - follow-redirects: 1.14.6 - transitivePeerDependencies: - - debug - dev: false - - /babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=, tarball: babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1632822778823&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz} - dependencies: - object.assign: 4.1.2 - dev: true - - /babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.16.5: - resolution: {integrity: sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==, tarball: babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.0.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.16.4 - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0_@babel+core@7.16.5 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3/0.4.0_@babel+core@7.16.5: - resolution: {integrity: sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==, tarball: babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.4.0.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0_@babel+core@7.16.5 - core-js-compat: 3.20.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator/0.3.0_@babel+core@7.16.5: - resolution: {integrity: sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==, tarball: babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.3.0.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.5 - '@babel/helper-define-polyfill-provider': 0.3.0_@babel+core@7.16.5 - transitivePeerDependencies: - - supports-color - dev: true - - /balanced-match/1.0.2: - resolution: {integrity: sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=, tarball: balanced-match/download/balanced-match-1.0.2.tgz} - dev: true - - /base/0.11.2: - resolution: {integrity: sha1-e95c7RRbbVUakNuH+DxVi060io8=, tarball: base/download/base-0.11.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.3.0 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.2 - pascalcase: 0.1.1 - dev: true - - /base64-js/1.5.1: - resolution: {integrity: sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=, tarball: base64-js/download/base64-js-1.5.1.tgz} - dev: true - - /big.js/5.2.2: - resolution: {integrity: sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=, tarball: big.js/download/big.js-5.2.2.tgz} - dev: true - - /bin-build/3.0.0: - resolution: {integrity: sha1-xXgKJaip+WbYJEIX5sH1CCoUOGE=, tarball: bin-build/download/bin-build-3.0.0.tgz} - engines: {node: '>=4'} - dependencies: - decompress: 4.2.1 - download: 6.2.5 - execa: 0.7.0 - p-map-series: 1.0.0 - tempfile: 2.0.0 - dev: true - - /bin-check/4.1.0: - resolution: {integrity: sha1-/ElZcL3Ii7HVo1/BfmXEoUn8Skk=, tarball: bin-check/download/bin-check-4.1.0.tgz} - engines: {node: '>=4'} - dependencies: - execa: 0.7.0 - executable: 4.1.1 - dev: true - - /bin-version-check/4.0.0: - resolution: {integrity: sha1-fYGcYklpkfgNiT5uAqMDI2Fgj3E=, tarball: bin-version-check/download/bin-version-check-4.0.0.tgz} - engines: {node: '>=6'} - dependencies: - bin-version: 3.1.0 - semver: 5.7.1 - semver-truncate: 1.1.2 - dev: true - - /bin-version/3.1.0: - resolution: {integrity: sha1-WwnrKAdSsb0o8MnbP5by9DtsCDk=, tarball: bin-version/download/bin-version-3.1.0.tgz} - engines: {node: '>=6'} - dependencies: - execa: 1.0.0 - find-versions: 3.2.0 - dev: true - - /bin-wrapper-china/0.1.0: - resolution: {integrity: sha1-wuyVtNDq727VrRCVT5In2OXvNyU=, tarball: bin-wrapper-china/download/bin-wrapper-china-0.1.0.tgz} - engines: {node: '>=8.3'} - hasBin: true - dependencies: - bin-check: 4.1.0 - bin-version-check: 4.0.0 - binary-mirror-config: 1.34.0 - download: 7.1.0 - import-lazy: 4.0.0 - os-filter-obj: 2.0.0 - pify: 4.0.1 - dev: true - - /binary-extensions/2.2.0: - resolution: {integrity: sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=, tarball: binary-extensions/download/binary-extensions-2.2.0.tgz} - engines: {node: '>=8'} - dev: true - - /binary-mirror-config/1.34.0: - resolution: {integrity: sha512-EGn/L4iVcWohGu5GE7GDe6ZrcNWmCFhMqj+h7D7aVmN1+dKuHjSrD/QIal6/1l4tdBv5iVR5NFBIPqf+NZM25A==, tarball: binary-mirror-config/download/binary-mirror-config-1.34.0.tgz} - dev: true - - /bl/1.2.3: - resolution: {integrity: sha1-Ho3YAULqyA1xWMnczAR/tiDgNec=, tarball: bl/download/bl-1.2.3.tgz} - dependencies: - readable-stream: 2.3.7 - safe-buffer: 5.2.1 - dev: true - - /bl/4.1.0: - resolution: {integrity: sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=, tarball: bl/download/bl-4.1.0.tgz} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /bluebird/3.7.2: - resolution: {integrity: sha1-nyKcFb4nJFT/qXOs4NvueaGww28=, tarball: bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1632822780713&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz} - dev: true - - /boolbase/1.0.0: - resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=, tarball: boolbase/download/boolbase-1.0.0.tgz} - dev: true - - /brace-expansion/1.1.11: - resolution: {integrity: sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=, tarball: brace-expansion/download/brace-expansion-1.1.11.tgz} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces/2.3.2: - resolution: {integrity: sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=, tarball: braces/download/braces-2.3.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - dev: true - - /braces/3.0.2: - resolution: {integrity: sha1-NFThpGLujVmeI23zNs2epPiv4Qc=, tarball: braces/download/braces-3.0.2.tgz} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist/4.19.1: - resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==, tarball: browserslist/download/browserslist-4.19.1.tgz} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001292 - electron-to-chromium: 1.4.26 - escalade: 3.1.1 - node-releases: 2.0.1 - picocolors: 1.0.0 - dev: true - - /buffer-alloc-unsafe/1.1.0: - resolution: {integrity: sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=, tarball: buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz} - dev: true - - /buffer-alloc/1.2.0: - resolution: {integrity: sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=, tarball: buffer-alloc/download/buffer-alloc-1.2.0.tgz} - dependencies: - buffer-alloc-unsafe: 1.1.0 - buffer-fill: 1.0.0 - dev: true - - /buffer-crc32/0.2.13: - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=, tarball: buffer-crc32/download/buffer-crc32-0.2.13.tgz} - dev: true - - /buffer-fill/1.0.0: - resolution: {integrity: sha1-+PeLdniYiO858gXNY39o5wISKyw=, tarball: buffer-fill/download/buffer-fill-1.0.0.tgz} - dev: true - - /buffer-from/1.1.2: - resolution: {integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=, tarball: buffer-from/download/buffer-from-1.1.2.tgz} - dev: true - - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, tarball: buffer/download/buffer-5.7.1.tgz} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /builtin-modules/3.2.0: - resolution: {integrity: sha1-RdXbmefuXmvE82LgCL+RerUEmIc=, tarball: builtin-modules/download/builtin-modules-3.2.0.tgz} - engines: {node: '>=6'} - dev: true - - /cache-base/1.0.1: - resolution: {integrity: sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=, tarball: cache-base/download/cache-base-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - collection-visit: 1.0.0 - component-emitter: 1.3.0 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.1 - to-object-path: 0.3.0 - union-value: 1.0.1 - unset-value: 1.0.0 - dev: true - - /cacheable-request/2.1.4: - resolution: {integrity: sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=, tarball: cacheable-request/download/cacheable-request-2.1.4.tgz} - dependencies: - clone-response: 1.0.2 - get-stream: 3.0.0 - http-cache-semantics: 3.8.1 - keyv: 3.0.0 - lowercase-keys: 1.0.0 - normalize-url: 2.0.1 - responselike: 1.0.2 - dev: true - - /call-bind/1.0.2: - resolution: {integrity: sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=, tarball: call-bind/download/call-bind-1.0.2.tgz} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - - /camel-case/4.1.2: - resolution: {integrity: sha1-lygHKpVPgFIoIlpt7qazhGHhvVo=, tarball: camel-case/download/camel-case-4.1.2.tgz} - dependencies: - pascal-case: 3.1.2 - tslib: 2.3.1 - dev: true - - /camelcase-keys/2.1.0: - resolution: {integrity: sha1-MIvur/3ygRkFHvodkyITyRuPkuc=, tarball: camelcase-keys/download/camelcase-keys-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - camelcase: 2.1.1 - map-obj: 1.0.1 - dev: true - - /camelcase/2.1.1: - resolution: {integrity: sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=, tarball: camelcase/download/camelcase-2.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /camelcase/5.3.1: - resolution: {integrity: sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=, tarball: camelcase/download/camelcase-5.3.1.tgz} - engines: {node: '>=6'} - dev: false - - /camelcase/6.2.1: - resolution: {integrity: sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==, tarball: camelcase/download/camelcase-6.2.1.tgz} - engines: {node: '>=10'} - dev: true - - /caniuse-lite/1.0.30001292: - resolution: {integrity: sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==, tarball: caniuse-lite/download/caniuse-lite-1.0.30001292.tgz} - dev: true - - /capital-case/1.0.4: - resolution: {integrity: sha1-nRMCkjU8kkn2sA+lhSvuOKcX5mk=, tarball: capital-case/download/capital-case-1.0.4.tgz} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - upper-case-first: 2.0.2 - dev: true - - /caw/2.0.1: - resolution: {integrity: sha1-bDygcfwZRyCIPC3F2psHS/x+npU=, tarball: caw/download/caw-2.0.1.tgz} - engines: {node: '>=4'} - dependencies: - get-proxy: 2.1.0 - isurl: 1.0.0 - tunnel-agent: 0.6.0 - url-to-options: 1.0.1 - dev: true - - /chalk/1.1.3: - resolution: {integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=, tarball: chalk/download/chalk-1.1.3.tgz} - engines: {node: '>=0.10.0'} - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - dev: true - - /chalk/2.4.2: - resolution: {integrity: sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=, tarball: chalk/download/chalk-2.4.2.tgz} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk/4.1.2: - resolution: {integrity: sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=, tarball: chalk/download/chalk-4.1.2.tgz} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /change-case/4.1.2: - resolution: {integrity: sha1-/t/F8TYEXiOYwEEO5EH5VwRkHhI=, tarball: change-case/download/change-case-4.1.2.tgz} - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /chardet/0.7.0: - resolution: {integrity: sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=, tarball: chardet/download/chardet-0.7.0.tgz} - dev: true - - /chokidar/3.5.2: - resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==, tarball: chokidar/download/chokidar-3.5.2.tgz} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /class-utils/0.3.6: - resolution: {integrity: sha1-+TNprouafOAv1B+q0MqDAzGQxGM=, tarball: class-utils/download/class-utils-0.3.6.tgz} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 - dev: true - - /clean-css/4.2.4: - resolution: {integrity: sha1-czv0brpOYHxokepXwkqYk1aDEXg=, tarball: clean-css/download/clean-css-4.2.4.tgz} - engines: {node: '>= 4.0'} - dependencies: - source-map: 0.6.1 - dev: true - - /clean-css/5.2.2: - resolution: {integrity: sha1-06fG7iURAR4FFxmDi9z4MU3EVI0=, tarball: clean-css/download/clean-css-5.2.2.tgz} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: true - - /cli-cursor/3.1.0: - resolution: {integrity: sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=, tarball: cli-cursor/download/cli-cursor-3.1.0.tgz} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-spinners/2.6.1: - resolution: {integrity: sha1-rclU6+KBw3pjGb+kAebdJIj/tw0=, tarball: cli-spinners/download/cli-spinners-2.6.1.tgz} - engines: {node: '>=6'} - dev: true - - /cli-width/3.0.0: - resolution: {integrity: sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=, tarball: cli-width/download/cli-width-3.0.0.tgz} - engines: {node: '>= 10'} - dev: true - - /cliui/6.0.0: - resolution: {integrity: sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=, tarball: cliui/download/cliui-6.0.0.tgz} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: false - - /cliui/7.0.4: - resolution: {integrity: sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=, tarball: cliui/download/cliui-7.0.4.tgz} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone-response/1.0.2: - resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=, tarball: clone-response/download/clone-response-1.0.2.tgz} - dependencies: - mimic-response: 1.0.1 - dev: true - - /clone/1.0.4: - resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=, tarball: clone/download/clone-1.0.4.tgz} - engines: {node: '>=0.8'} - dev: true - - /clone/2.1.2: - resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=, tarball: clone/download/clone-2.1.2.tgz} - engines: {node: '>=0.8'} - dev: true - - /collection-visit/1.0.0: - resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=, tarball: collection-visit/download/collection-visit-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - dev: true - - /color-convert/1.9.3: - resolution: {integrity: sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=, tarball: color-convert/download/color-convert-1.9.3.tgz} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=, tarball: color-convert/download/color-convert-2.0.1.tgz} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name/1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=, tarball: color-name/download/color-name-1.1.3.tgz} - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=, tarball: color-name/download/color-name-1.1.4.tgz} - - /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: commander/download/commander-2.20.3.tgz} - dev: true - - /commander/4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, tarball: commander/download/commander-4.1.1.tgz} - engines: {node: '>= 6'} - dev: true - - /commander/7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, tarball: commander/download/commander-7.2.0.tgz} - engines: {node: '>= 10'} - dev: true - - /commander/8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: commander/download/commander-8.3.0.tgz} - engines: {node: '>= 12'} - dev: false - - /common-tags/1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, tarball: common-tags/download/common-tags-1.8.2.tgz} - engines: {node: '>=4.0.0'} - dev: true - - /component-emitter/1.3.0: - resolution: {integrity: sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=, tarball: component-emitter/download/component-emitter-1.3.0.tgz} - dev: true - - /compute-scroll-into-view/1.0.17: - resolution: {integrity: sha1-aojxis2dQunPS6pr7H4FImB6t6s=, tarball: compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz} - dev: false - - /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=, tarball: concat-map/download/concat-map-0.0.1.tgz} - dev: true - - /config-chain/1.1.13: - resolution: {integrity: sha1-+tB5Wqamza/57Rto6d/5Q3LCMvQ=, tarball: config-chain/download/config-chain-1.1.13.tgz} - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: true - - /connect/3.7.0: - resolution: {integrity: sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg=, tarball: connect/download/connect-3.7.0.tgz} - engines: {node: '>= 0.10.0'} - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - dev: true - - /console-stream/0.1.1: - resolution: {integrity: sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=, tarball: console-stream/download/console-stream-0.1.1.tgz} - dev: true - - /constant-case/3.0.4: - resolution: {integrity: sha1-O4Sprq9M8x7EXmv13pG9+wWJ+vE=, tarball: constant-case/download/constant-case-3.0.4.tgz} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - upper-case: 2.0.2 - dev: true - - /content-disposition/0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, tarball: content-disposition/download/content-disposition-0.5.4.tgz} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /convert-source-map/1.8.0: - resolution: {integrity: sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=, tarball: convert-source-map/download/convert-source-map-1.8.0.tgz} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /copy-anything/2.0.3: - resolution: {integrity: sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=, tarball: copy-anything/download/copy-anything-2.0.3.tgz} - dependencies: - is-what: 3.14.1 - dev: true - - /copy-descriptor/0.1.1: - resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=, tarball: copy-descriptor/download/copy-descriptor-0.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /core-js-compat/3.20.0: - resolution: {integrity: sha512-relrah5h+sslXssTTOkvqcC/6RURifB0W5yhYBdBkaPYa5/2KBMiog3XiD+s3TwEHWxInWVv4Jx2/Lw0vng+IQ==, tarball: core-js-compat/download/core-js-compat-3.20.0.tgz} - dependencies: - browserslist: 4.19.1 - semver: 7.0.0 - dev: true - - /core-js/3.20.0: - resolution: {integrity: sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ==, tarball: core-js/download/core-js-3.20.0.tgz} - requiresBuild: true - - /core-util-is/1.0.3: - resolution: {integrity: sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=, tarball: core-util-is/download/core-util-is-1.0.3.tgz} - dev: true - - /cors/2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, tarball: cors/download/cors-2.8.5.tgz} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: true - - /cross-env/7.0.3: - resolution: {integrity: sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=, tarball: cross-env/download/cross-env-7.0.3.tgz} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - dev: true - - /cross-fetch/3.1.4: - resolution: {integrity: sha1-lyPzo6JHv4uJA586OAqSROj6Lzk=, tarball: cross-fetch/download/cross-fetch-3.1.4.tgz} - dependencies: - node-fetch: 2.6.1 - - /cross-spawn/5.1.0: - resolution: {integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=, tarball: cross-spawn/download/cross-spawn-5.1.0.tgz} - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - - /cross-spawn/6.0.5: - resolution: {integrity: sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=, tarball: cross-spawn/download/cross-spawn-6.0.5.tgz} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - - /cross-spawn/7.0.3: - resolution: {integrity: sha1-9zqFudXUHQRVUcF34ogtSshXKKY=, tarball: cross-spawn/download/cross-spawn-7.0.3.tgz} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /crypto-js/4.1.1: - resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==, tarball: crypto-js/download/crypto-js-4.1.1.tgz} - dev: false - - /crypto-random-string/2.0.0: - resolution: {integrity: sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU=, tarball: crypto-random-string/download/crypto-random-string-2.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /css-select/4.2.0: - resolution: {integrity: sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==, tarball: css-select/download/css-select-4.2.0.tgz} - dependencies: - boolbase: 1.0.0 - css-what: 5.1.0 - domhandler: 4.3.0 - domutils: 2.8.0 - nth-check: 2.0.1 - dev: true - - /css-tree/1.1.3: - resolution: {integrity: sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=, tarball: css-tree/download/css-tree-1.1.3.tgz} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: true - - /css-what/5.1.0: - resolution: {integrity: sha1-P3tweq32M7r2LCzrhXm1RbtA9/4=, tarball: css-what/download/css-what-5.1.0.tgz} - engines: {node: '>= 6'} - dev: true - - /csso/4.2.0: - resolution: {integrity: sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=, tarball: csso/download/csso-4.2.0.tgz} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: true - - /csstype/2.6.19: - resolution: {integrity: sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==, tarball: csstype/download/csstype-2.6.19.tgz} - dev: false - - /currently-unhandled/0.4.1: - resolution: {integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=, tarball: currently-unhandled/download/currently-unhandled-0.4.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - array-find-index: 1.0.2 - dev: true - - /cwebp-bin/5.1.0: - resolution: {integrity: sha1-1b6ofBJzWFWOe/epCm1EDULcsHQ=, tarball: cwebp-bin/download/cwebp-bin-5.1.0.tgz} - engines: {node: '>=6'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - logalot: 2.1.0 - dev: true - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, tarball: debug/download/debug-2.6.9.tgz} - dependencies: - ms: 2.0.0 - dev: true - - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, tarball: debug/download/debug-3.2.7.tgz} - dependencies: - ms: 2.1.3 - dev: true - optional: true - - /debug/4.3.3: - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==, tarball: debug/download/debug-4.3.3.tgz} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /decamelize/1.2.0: - resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=, tarball: decamelize/download/decamelize-1.2.0.tgz} - engines: {node: '>=0.10.0'} - - /decode-uri-component/0.2.0: - resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=, tarball: decode-uri-component/download/decode-uri-component-0.2.0.tgz} - engines: {node: '>=0.10'} - dev: true - - /decompress-response/3.3.0: - resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=, tarball: decompress-response/download/decompress-response-3.3.0.tgz} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: true - - /decompress-tar/4.1.1: - resolution: {integrity: sha1-cYy9P8sWIJcW5womuE57pFkuWvE=, tarball: decompress-tar/download/decompress-tar-4.1.1.tgz} - engines: {node: '>=4'} - dependencies: - file-type: 5.2.0 - is-stream: 1.1.0 - tar-stream: 1.6.2 - dev: true - - /decompress-tarbz2/4.1.1: - resolution: {integrity: sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=, tarball: decompress-tarbz2/download/decompress-tarbz2-4.1.1.tgz} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 6.2.0 - is-stream: 1.1.0 - seek-bzip: 1.0.6 - unbzip2-stream: 1.4.3 - dev: true - - /decompress-targz/4.1.1: - resolution: {integrity: sha1-wJvDXE0R894J8tLaU+neI+fOHu4=, tarball: decompress-targz/download/decompress-targz-4.1.1.tgz} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 5.2.0 - is-stream: 1.1.0 - dev: true - - /decompress-unzip/4.0.1: - resolution: {integrity: sha1-3qrM39FK6vhVePczroIQ+bSEj2k=, tarball: decompress-unzip/download/decompress-unzip-4.0.1.tgz} - engines: {node: '>=4'} - dependencies: - file-type: 3.9.0 - get-stream: 2.3.1 - pify: 2.3.0 - yauzl: 2.10.0 - dev: true - - /decompress/4.2.1: - resolution: {integrity: sha1-AH9VzGpiwFWvo3wH62pO4bdz8Rg=, tarball: decompress/download/decompress-4.2.1.tgz} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - decompress-tarbz2: 4.1.1 - decompress-targz: 4.1.1 - decompress-unzip: 4.0.1 - graceful-fs: 4.2.8 - make-dir: 1.3.0 - pify: 2.3.0 - strip-dirs: 2.1.0 - dev: true - - /deepmerge/4.2.2: - resolution: {integrity: sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=, tarball: deepmerge/download/deepmerge-4.2.2.tgz?cache=0&sync_timestamp=1632822781299&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdeepmerge%2Fdownload%2Fdeepmerge-4.2.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /defaults/1.0.3: - resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=, tarball: defaults/download/defaults-1.0.3.tgz} - dependencies: - clone: 1.0.4 - dev: true - - /define-properties/1.1.3: - resolution: {integrity: sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=, tarball: define-properties/download/define-properties-1.1.3.tgz} - engines: {node: '>= 0.4'} - dependencies: - object-keys: 1.1.1 - dev: true - - /define-property/0.2.5: - resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=, tarball: define-property/download/define-property-0.2.5.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 0.1.6 - dev: true - - /define-property/1.0.0: - resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=, tarball: define-property/download/define-property-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - dev: true - - /define-property/2.0.2: - resolution: {integrity: sha1-1Flono1lS6d+AqgX+HENcCyxbp0=, tarball: define-property/download/define-property-2.0.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - isobject: 3.0.1 - dev: true - - /dijkstrajs/1.0.2: - resolution: {integrity: sha1-LkjA07glRir+datK1egpyOzjYlc=, tarball: dijkstrajs/download/dijkstrajs-1.0.2.tgz} - dev: false - - /dir-glob/3.0.1: - resolution: {integrity: sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=, tarball: dir-glob/download/dir-glob-3.0.1.tgz} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dom-align/1.12.2: - resolution: {integrity: sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs=, tarball: dom-align/download/dom-align-1.12.2.tgz} - dev: false - - /dom-scroll-into-view/2.0.1: - resolution: {integrity: sha1-DezIUigB/Y0/HGujVadNOCxfmJs=, tarball: dom-scroll-into-view/download/dom-scroll-into-view-2.0.1.tgz} - dev: false - - /dom-serializer/0.2.2: - resolution: {integrity: sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=, tarball: dom-serializer/download/dom-serializer-0.2.2.tgz} - dependencies: - domelementtype: 2.2.0 - entities: 2.2.0 - dev: true - - /dom-serializer/1.3.2: - resolution: {integrity: sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=, tarball: dom-serializer/download/dom-serializer-1.3.2.tgz} - dependencies: - domelementtype: 2.2.0 - domhandler: 4.3.0 - entities: 2.2.0 - dev: true - - /domelementtype/1.3.1: - resolution: {integrity: sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=, tarball: domelementtype/download/domelementtype-1.3.1.tgz} - dev: true - - /domelementtype/2.2.0: - resolution: {integrity: sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=, tarball: domelementtype/download/domelementtype-2.2.0.tgz} - dev: true - - /domhandler/2.4.2: - resolution: {integrity: sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=, tarball: domhandler/download/domhandler-2.4.2.tgz} - dependencies: - domelementtype: 1.3.1 - dev: true - - /domhandler/4.3.0: - resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==, tarball: domhandler/download/domhandler-4.3.0.tgz} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.2.0 - dev: true - - /domutils/1.7.0: - resolution: {integrity: sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=, tarball: domutils/download/domutils-1.7.0.tgz} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: true - - /domutils/2.8.0: - resolution: {integrity: sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=, tarball: domutils/download/domutils-2.8.0.tgz} - dependencies: - dom-serializer: 1.3.2 - domelementtype: 2.2.0 - domhandler: 4.3.0 - dev: true - - /dot-case/3.0.4: - resolution: {integrity: sha1-mytnDQCkMWZ6inW6Kc0bmICc51E=, tarball: dot-case/download/dot-case-3.0.4.tgz} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /dotenv-expand/5.1.0: - resolution: {integrity: sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=, tarball: dotenv-expand/download/dotenv-expand-5.1.0.tgz} - dev: true - - /dotenv/10.0.0: - resolution: {integrity: sha1-PUInuPuV+BCWzdK2ZlP7LHCFuoE=, tarball: dotenv/download/dotenv-10.0.0.tgz?cache=0&sync_timestamp=1632822785154&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdotenv%2Fdownload%2Fdotenv-10.0.0.tgz} - engines: {node: '>=10'} - dev: true - - /download/6.2.5: - resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==, tarball: download/download/download-6.2.5.tgz} - engines: {node: '>=4'} - dependencies: - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 5.2.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 7.1.0 - make-dir: 1.3.0 - p-event: 1.3.0 - pify: 3.0.0 - dev: true - - /download/7.1.0: - resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==, tarball: download/download/download-7.1.0.tgz} - engines: {node: '>=6'} - dependencies: - archive-type: 4.0.0 - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 8.1.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 8.3.2 - make-dir: 1.3.0 - p-event: 2.3.1 - pify: 3.0.0 - dev: true - - /duplexer3/0.1.4: - resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=, tarball: duplexer3/download/duplexer3-0.1.4.tgz} - dev: true - - /echarts/5.2.2: - resolution: {integrity: sha512-yxuBfeIH5c+0FsoRP60w4De6omXhA06c7eUYBsC1ykB6Ys2yK5fSteIYWvkJ4xJVLQgCvAdO8C4mN6MLeJpBaw==, tarball: echarts/download/echarts-5.2.2.tgz} - dependencies: - tslib: 2.3.0 - zrender: 5.2.1 - dev: false - - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=, tarball: ee-first/download/ee-first-1.1.1.tgz} - dev: true - - /ejs/3.1.6: - resolution: {integrity: sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==, tarball: ejs/download/ejs-3.1.6.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.2 - dev: true - - /electron-to-chromium/1.4.26: - resolution: {integrity: sha512-cA1YwlRzO6TGp7yd3+KAqh9Tt6Z4CuuKqsAJP6uF/H5MQryjAGDhMhnY5cEXo8MaRCczpzSBhMPdqRIodkbZYw==, tarball: electron-to-chromium/download/electron-to-chromium-1.4.26.tgz} - dev: true - - /emoji-regex/8.0.0: - resolution: {integrity: sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=, tarball: emoji-regex/download/emoji-regex-8.0.0.tgz} - - /emojis-list/3.0.0: - resolution: {integrity: sha1-VXBmIEatKeLpFucariYKvf9Pang=, tarball: emojis-list/download/emojis-list-3.0.0.tgz} - engines: {node: '>= 4'} - dev: true - - /encode-utf8/1.0.3: - resolution: {integrity: sha1-8w/dMdoH+1lvKBvrL2sCeFGZTNo=, tarball: encode-utf8/download/encode-utf8-1.0.3.tgz} - dev: false - - /encodeurl/1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=, tarball: encodeurl/download/encodeurl-1.0.2.tgz} - engines: {node: '>= 0.8'} - dev: true - - /end-of-stream/1.4.4: - resolution: {integrity: sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=, tarball: end-of-stream/download/end-of-stream-1.4.4.tgz} - dependencies: - once: 1.4.0 - dev: true - - /entities/1.1.2: - resolution: {integrity: sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=, tarball: entities/download/entities-1.1.2.tgz} - dev: true - - /entities/2.2.0: - resolution: {integrity: sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=, tarball: entities/download/entities-2.2.0.tgz} - dev: true - - /errno/0.1.8: - resolution: {integrity: sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=, tarball: errno/download/errno-0.1.8.tgz} - hasBin: true - requiresBuild: true - dependencies: - prr: 1.0.1 - dev: true - optional: true - - /error-ex/1.3.2: - resolution: {integrity: sha1-tKxAZIEH/c3PriQvQovqihTU8b8=, tarball: error-ex/download/error-ex-1.3.2.tgz} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-abstract/1.19.1: - resolution: {integrity: sha1-1IhXlodpFpWd547aoN9FZicRXsM=, tarball: es-abstract/download/es-abstract-1.19.1.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-symbols: 1.0.2 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.1 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.0 - object-keys: 1.1.1 - object.assign: 4.1.2 - string.prototype.trimend: 1.0.4 - string.prototype.trimstart: 1.0.4 - unbox-primitive: 1.0.1 - dev: true - - /es-module-lexer/0.9.3: - resolution: {integrity: sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=, tarball: es-module-lexer/download/es-module-lexer-0.9.3.tgz} - dev: true - - /es-to-primitive/1.2.1: - resolution: {integrity: sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=, tarball: es-to-primitive/download/es-to-primitive-1.2.1.tgz} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.4 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /esbuild-android-arm64/0.13.15: - resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==, tarball: esbuild-android-arm64/download/esbuild-android-arm64-0.13.15.tgz} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.13.15: - resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==, tarball: esbuild-darwin-64/download/esbuild-darwin-64-0.13.15.tgz} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.13.15: - resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==, tarball: esbuild-darwin-arm64/download/esbuild-darwin-arm64-0.13.15.tgz} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.13.15: - resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==, tarball: esbuild-freebsd-64/download/esbuild-freebsd-64-0.13.15.tgz} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.13.15: - resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==, tarball: esbuild-freebsd-arm64/download/esbuild-freebsd-arm64-0.13.15.tgz} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.13.15: - resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==, tarball: esbuild-linux-32/download/esbuild-linux-32-0.13.15.tgz} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.13.15: - resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==, tarball: esbuild-linux-64/download/esbuild-linux-64-0.13.15.tgz} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.13.15: - resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==, tarball: esbuild-linux-arm/download/esbuild-linux-arm-0.13.15.tgz} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.13.15: - resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==, tarball: esbuild-linux-arm64/download/esbuild-linux-arm64-0.13.15.tgz} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.13.15: - resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==, tarball: esbuild-linux-mips64le/download/esbuild-linux-mips64le-0.13.15.tgz} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.13.15: - resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==, tarball: esbuild-linux-ppc64le/download/esbuild-linux-ppc64le-0.13.15.tgz} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.13.15: - resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==, tarball: esbuild-netbsd-64/download/esbuild-netbsd-64-0.13.15.tgz} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-node-loader/0.4.3: - resolution: {integrity: sha1-QaG0VZsE3Av1VOSpYw2vl1nWF9M=, tarball: esbuild-node-loader/download/esbuild-node-loader-0.4.3.tgz} - dependencies: - esbuild: 0.13.15 - dev: true - - /esbuild-openbsd-64/0.13.15: - resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==, tarball: esbuild-openbsd-64/download/esbuild-openbsd-64-0.13.15.tgz} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-plugin-alias/0.1.2: - resolution: {integrity: sha1-EjL73oB8DIrUTETshZgZ60kuEqg=, tarball: esbuild-plugin-alias/download/esbuild-plugin-alias-0.1.2.tgz} - dev: true - - /esbuild-register/3.2.1_esbuild@0.13.15: - resolution: {integrity: sha512-LFgzsqCHsFUpTZdYJFTl1o5p60+C4nZ65BzFYPS1jKGwiKk6JLH8tuLwuydvpgreNUAeDUhTPJgJNjmpZKSOpQ==, tarball: esbuild-register/download/esbuild-register-3.2.1.tgz} - peerDependencies: - esbuild: '>=0.12 <1' - dependencies: - esbuild: 0.13.15 - jsonc-parser: 3.0.0 - dev: true - - /esbuild-sunos-64/0.13.15: - resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==, tarball: esbuild-sunos-64/download/esbuild-sunos-64-0.13.15.tgz} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.13.15: - resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==, tarball: esbuild-windows-32/download/esbuild-windows-32-0.13.15.tgz} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.13.15: - resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==, tarball: esbuild-windows-64/download/esbuild-windows-64-0.13.15.tgz} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.13.15: - resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==, tarball: esbuild-windows-arm64/download/esbuild-windows-arm64-0.13.15.tgz} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==, tarball: esbuild/download/esbuild-0.11.23.tgz} - hasBin: true - requiresBuild: true - dev: true - - /esbuild/0.11.3: - resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==, tarball: esbuild/download/esbuild-0.11.3.tgz} - hasBin: true - requiresBuild: true - dev: true - - /esbuild/0.13.15: - resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==, tarball: esbuild/download/esbuild-0.13.15.tgz} - hasBin: true - requiresBuild: true - optionalDependencies: - esbuild-android-arm64: 0.13.15 - esbuild-darwin-64: 0.13.15 - esbuild-darwin-arm64: 0.13.15 - esbuild-freebsd-64: 0.13.15 - esbuild-freebsd-arm64: 0.13.15 - esbuild-linux-32: 0.13.15 - esbuild-linux-64: 0.13.15 - esbuild-linux-arm: 0.13.15 - esbuild-linux-arm64: 0.13.15 - esbuild-linux-mips64le: 0.13.15 - esbuild-linux-ppc64le: 0.13.15 - esbuild-netbsd-64: 0.13.15 - esbuild-openbsd-64: 0.13.15 - esbuild-sunos-64: 0.13.15 - esbuild-windows-32: 0.13.15 - esbuild-windows-64: 0.13.15 - esbuild-windows-arm64: 0.13.15 - dev: true - - /escalade/3.1.1: - resolution: {integrity: sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=, tarball: escalade/download/escalade-3.1.1.tgz} - engines: {node: '>=6'} - dev: true - - /escape-html/1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=, tarball: escape-html/download/escape-html-1.0.3.tgz} - dev: true - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=, tarball: escape-string-regexp/download/escape-string-regexp-1.0.5.tgz} - engines: {node: '>=0.8.0'} - dev: true - - /esno/0.10.1: - resolution: {integrity: sha1-KPmtsw/cxZYEddA0pPIjEdM01s0=, tarball: esno/download/esno-0.10.1.tgz} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - esbuild: 0.13.15 - esbuild-node-loader: 0.4.3 - esbuild-register: 3.2.1_esbuild@0.13.15 - dev: true - - /estree-walker/1.0.1: - resolution: {integrity: sha1-MbxdYSyWtwQQa0d+bdXYqhOMtwA=, tarball: estree-walker/download/estree-walker-1.0.1.tgz} - dev: true - - /estree-walker/2.0.2: - resolution: {integrity: sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw=, tarball: estree-walker/download/estree-walker-2.0.2.tgz} - - /esutils/2.0.3: - resolution: {integrity: sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=, tarball: esutils/download/esutils-2.0.3.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /etag/1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=, tarball: etag/download/etag-1.8.1.tgz} - engines: {node: '>= 0.6'} - dev: true - - /exec-buffer/3.2.0: - resolution: {integrity: sha1-sWhtvZBMfPmC5lLB9aebHlVzCCs=, tarball: exec-buffer/download/exec-buffer-3.2.0.tgz} - engines: {node: '>=4'} - dependencies: - execa: 0.7.0 - p-finally: 1.0.0 - pify: 3.0.0 - rimraf: 2.7.1 - tempfile: 2.0.0 - dev: true - - /execa/0.7.0: - resolution: {integrity: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=, tarball: execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz} - engines: {node: '>=4'} - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.6 - strip-eof: 1.0.0 - dev: true - - /execa/1.0.0: - resolution: {integrity: sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=, tarball: execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz} - engines: {node: '>=6'} - dependencies: - cross-spawn: 6.0.5 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.6 - strip-eof: 1.0.0 - dev: true - - /execa/4.1.0: - resolution: {integrity: sha1-TlSRrRVy8vF6d9OIxshXE1sihHo=, tarball: execa/download/execa-4.1.0.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-4.1.0.tgz} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.6 - strip-final-newline: 2.0.0 - dev: true - - /execa/5.1.1: - resolution: {integrity: sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=, tarball: execa/download/execa-5.1.1.tgz?cache=0&sync_timestamp=1637200719230&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-5.1.1.tgz} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.6 - strip-final-newline: 2.0.0 - dev: true - - /executable/4.1.1: - resolution: {integrity: sha1-QVMr/zYdPlevTXY7cFgtsY9dEzw=, tarball: executable/download/executable-4.1.1.tgz} - engines: {node: '>=4'} - dependencies: - pify: 2.3.0 - dev: true - - /expand-brackets/2.1.4: - resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=, tarball: expand-brackets/download/expand-brackets-2.1.4.tgz} - engines: {node: '>=0.10.0'} - dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - - /ext-list/2.2.2: - resolution: {integrity: sha1-C5jmTtgvWs8PKTG6v2khLvUt3Tc=, tarball: ext-list/download/ext-list-2.2.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - mime-db: 1.51.0 - dev: true - - /ext-name/5.0.0: - resolution: {integrity: sha1-cHgZgdGD7hXROZPIgiBFxQbI8KY=, tarball: ext-name/download/ext-name-5.0.0.tgz} - engines: {node: '>=4'} - dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - dev: true - - /extend-shallow/2.0.1: - resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=, tarball: extend-shallow/download/extend-shallow-2.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 - dev: true - - /extend-shallow/3.0.2: - resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=, tarball: extend-shallow/download/extend-shallow-3.0.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: true - - /external-editor/3.1.0: - resolution: {integrity: sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=, tarball: external-editor/download/external-editor-3.1.0.tgz} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - - /extglob/2.0.4: - resolution: {integrity: sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=, tarball: extglob/download/extglob-2.0.4.tgz} - engines: {node: '>=0.10.0'} - dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=, tarball: fast-deep-equal/download/fast-deep-equal-3.1.3.tgz} - dev: true - - /fast-glob/3.2.7: - resolution: {integrity: sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE=, tarball: fast-glob/download/fast-glob-3.2.7.tgz} - engines: {node: '>=8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 - dev: true - - /fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=, tarball: fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz} - dev: true - - /fast-xml-parser/3.21.1: - resolution: {integrity: sha1-FSodUdRFOA9wRrMEZy3VXRXJ5zY=, tarball: fast-xml-parser/download/fast-xml-parser-3.21.1.tgz} - hasBin: true - dependencies: - strnum: 1.0.5 - dev: true - - /fastq/1.13.0: - resolution: {integrity: sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=, tarball: fastq/download/fastq-1.13.0.tgz?cache=0&sync_timestamp=1632822735358&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffastq%2Fdownload%2Ffastq-1.13.0.tgz} - dependencies: - reusify: 1.0.4 - dev: true - - /fd-slicer/1.1.0: - resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=, tarball: fd-slicer/download/fd-slicer-1.1.0.tgz} - dependencies: - pend: 1.2.0 - dev: true - - /figures/1.7.0: - resolution: {integrity: sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=, tarball: figures/download/figures-1.7.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - object-assign: 4.1.1 - dev: true - - /figures/3.2.0: - resolution: {integrity: sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=, tarball: figures/download/figures-3.2.0.tgz} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /file-type/10.11.0: - resolution: {integrity: sha1-KWHQnkZ1ufuaPua2npzSP0P9GJA=, tarball: file-type/download/file-type-10.11.0.tgz} - engines: {node: '>=6'} - dev: true - - /file-type/12.4.2: - resolution: {integrity: sha1-o0TqVmSh0BRH7n+xtjX3L+thadk=, tarball: file-type/download/file-type-12.4.2.tgz} - engines: {node: '>=8'} - dev: true - - /file-type/3.9.0: - resolution: {integrity: sha1-JXoHg4TR24CHvESdEH1SpSZyuek=, tarball: file-type/download/file-type-3.9.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /file-type/4.4.0: - resolution: {integrity: sha1-G2AOX8ofvcboDApwxxyNul95BsU=, tarball: file-type/download/file-type-4.4.0.tgz} - engines: {node: '>=4'} - dev: true - - /file-type/5.2.0: - resolution: {integrity: sha1-LdvqfHP/42No365J3DOMBYwritY=, tarball: file-type/download/file-type-5.2.0.tgz} - engines: {node: '>=4'} - dev: true - - /file-type/6.2.0: - resolution: {integrity: sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=, tarball: file-type/download/file-type-6.2.0.tgz} - engines: {node: '>=4'} - dev: true - - /file-type/8.1.0: - resolution: {integrity: sha1-JE87fvZBu+DMoZbHJ25LMyOZ9ow=, tarball: file-type/download/file-type-8.1.0.tgz} - engines: {node: '>=6'} - dev: true - - /filelist/1.0.2: - resolution: {integrity: sha1-gCAvIUYtTRwuIUEZsYB8G8A4Dls=, tarball: filelist/download/filelist-1.0.2.tgz} - dependencies: - minimatch: 3.0.4 - dev: true - - /filename-reserved-regex/2.0.0: - resolution: {integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik=, tarball: filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /filenamify/2.1.0: - resolution: {integrity: sha1-iPr0lfsbR6v9YSMAACoWIoxnfuk=, tarball: filenamify/download/filenamify-2.1.0.tgz} - engines: {node: '>=4'} - dependencies: - filename-reserved-regex: 2.0.0 - strip-outer: 1.0.1 - trim-repeated: 1.0.0 - dev: true - - /fill-range/4.0.0: - resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=, tarball: fill-range/download/fill-range-4.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - - /fill-range/7.0.1: - resolution: {integrity: sha1-GRmmp8df44ssfHflGYU12prN2kA=, tarball: fill-range/download/fill-range-7.0.1.tgz} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /finalhandler/1.1.2: - resolution: {integrity: sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=, tarball: finalhandler/download/finalhandler-1.1.2.tgz} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - dev: true - - /find-up/1.1.2: - resolution: {integrity: sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=, tarball: find-up/download/find-up-1.1.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - path-exists: 2.1.0 - pinkie-promise: 2.0.1 - dev: true - - /find-up/4.1.0: - resolution: {integrity: sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=, tarball: find-up/download/find-up-4.1.0.tgz} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: false - - /find-versions/3.2.0: - resolution: {integrity: sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=, tarball: find-versions/download/find-versions-3.2.0.tgz} - engines: {node: '>=6'} - dependencies: - semver-regex: 2.0.0 - dev: true - - /follow-redirects/1.14.6: - resolution: {integrity: sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==, tarball: follow-redirects/download/follow-redirects-1.14.6.tgz} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - /for-in/1.0.2: - resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=, tarball: for-in/download/for-in-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /fragment-cache/0.2.1: - resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=, tarball: fragment-cache/download/fragment-cache-0.2.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - map-cache: 0.2.2 - dev: true - - /from2/2.3.0: - resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=, tarball: from2/download/from2-2.3.0.tgz} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.7 - dev: true - - /fs-constants/1.0.0: - resolution: {integrity: sha1-a+Dem+mYzhavivwkSXue6bfM2a0=, tarball: fs-constants/download/fs-constants-1.0.0.tgz} - dev: true - - /fs-extra/10.0.0: - resolution: {integrity: sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=, tarball: fs-extra/download/fs-extra-10.0.0.tgz?cache=0&sync_timestamp=1632822706452&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-10.0.0.tgz} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.8 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - - /fs-extra/9.1.0: - resolution: {integrity: sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=, tarball: fs-extra/download/fs-extra-9.1.0.tgz?cache=0&sync_timestamp=1632822706452&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-9.1.0.tgz} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.8 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - - /fs.realpath/1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=, tarball: fs.realpath/download/fs.realpath-1.0.0.tgz} - dev: true - - /fsevents/2.3.2: - resolution: {integrity: sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=, tarball: fsevents/download/fsevents-2.3.2.tgz} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=, tarball: function-bind/download/function-bind-1.1.1.tgz} - - /gensync/1.0.0-beta.2: - resolution: {integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=, tarball: gensync/download/gensync-1.0.0-beta.2.tgz} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file/2.0.5: - resolution: {integrity: sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=, tarball: get-caller-file/download/get-caller-file-2.0.5.tgz} - engines: {node: 6.* || 8.* || >= 10.*} - - /get-intrinsic/1.1.1: - resolution: {integrity: sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=, tarball: get-intrinsic/download/get-intrinsic-1.1.1.tgz} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.2 - - /get-own-enumerable-property-symbols/3.0.2: - resolution: {integrity: sha1-tf3nfyLL4185C04ImSLFC85u9mQ=, tarball: get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz} - dev: true - - /get-proxy/2.1.0: - resolution: {integrity: sha1-NJ8rTZHUTE1NTpy6KtkBQ/rF75M=, tarball: get-proxy/download/get-proxy-2.1.0.tgz} - engines: {node: '>=4'} - dependencies: - npm-conf: 1.1.3 - dev: true - - /get-stdin/4.0.1: - resolution: {integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=, tarball: get-stdin/download/get-stdin-4.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /get-stream/2.3.1: - resolution: {integrity: sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=, tarball: get-stream/download/get-stream-2.3.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - object-assign: 4.1.1 - pinkie-promise: 2.0.1 - dev: true - - /get-stream/3.0.0: - resolution: {integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=, tarball: get-stream/download/get-stream-3.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /get-stream/4.1.0: - resolution: {integrity: sha1-wbJVV189wh1Zv8ec09K0axw6VLU=, tarball: get-stream/download/get-stream-4.1.0.tgz} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha1-SWaheV7lrOZecGxLe+txJX1uItM=, tarball: get-stream/download/get-stream-5.2.0.tgz} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/6.0.1: - resolution: {integrity: sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=, tarball: get-stream/download/get-stream-6.0.1.tgz} - engines: {node: '>=10'} - dev: true - - /get-symbol-description/1.0.0: - resolution: {integrity: sha1-f9uByQAQH71WTdXxowr1qtweWNY=, tarball: get-symbol-description/download/get-symbol-description-1.0.0.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.1 - dev: true - - /get-value/2.0.6: - resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=, tarball: get-value/download/get-value-2.0.6.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /gifsicle/5.2.1: - resolution: {integrity: sha1-762rJmpJPvC0F440WXSTNJk3Np4=, tarball: gifsicle/download/gifsicle-5.2.1.tgz} - engines: {node: '>=10'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - execa: 5.1.1 - dev: true - - /glob-parent/5.1.2: - resolution: {integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=, tarball: glob-parent/download/glob-parent-5.1.2.tgz} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob/7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, tarball: glob/download/glob-7.2.0.tgz} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals/11.12.0: - resolution: {integrity: sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=, tarball: globals/download/globals-11.12.0.tgz} - engines: {node: '>=4'} - dev: true - - /globby/10.0.2: - resolution: {integrity: sha1-J3WT50WsqkZGw6tBEonsR6A5JUM=, tarball: globby/download/globby-10.0.2.tgz} - engines: {node: '>=8'} - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.7 - glob: 7.2.0 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /got/7.1.0: - resolution: {integrity: sha1-BUUP2ECU5rvqVvRRpDqcKJFmOFo=, tarball: got/download/got-7.1.0.tgz} - engines: {node: '>=4'} - dependencies: - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 3.0.0 - is-plain-obj: 1.1.0 - is-retry-allowed: 1.2.0 - is-stream: 1.1.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - p-cancelable: 0.3.0 - p-timeout: 1.2.1 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 1.0.0 - url-to-options: 1.0.1 - dev: true - - /got/8.3.2: - resolution: {integrity: sha1-HSP2Q5Dpf3dsrFLluTbl9RTS6Tc=, tarball: got/download/got-8.3.2.tgz} - engines: {node: '>=4'} - dependencies: - '@sindresorhus/is': 0.7.0 - cacheable-request: 2.1.4 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 3.0.0 - into-stream: 3.1.0 - is-retry-allowed: 1.2.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 0.4.1 - p-timeout: 2.0.1 - pify: 3.0.0 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 3.0.0 - url-to-options: 1.0.1 - dev: true - - /graceful-fs/4.2.8: - resolution: {integrity: sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=, tarball: graceful-fs/download/graceful-fs-4.2.8.tgz} - dev: true - - /has-ansi/2.0.0: - resolution: {integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=, tarball: has-ansi/download/has-ansi-2.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - ansi-regex: 2.1.1 - dev: true - - /has-bigints/1.0.1: - resolution: {integrity: sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=, tarball: has-bigints/download/has-bigints-1.0.1.tgz} - dev: true - - /has-flag/1.0.0: - resolution: {integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=, tarball: has-flag/download/has-flag-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=, tarball: has-flag/download/has-flag-3.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /has-flag/4.0.0: - resolution: {integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=, tarball: has-flag/download/has-flag-4.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /has-symbol-support-x/1.4.2: - resolution: {integrity: sha1-FAn5i8ACR9pF2mfO4KNvKC/yZFU=, tarball: has-symbol-support-x/download/has-symbol-support-x-1.4.2.tgz} - dev: true - - /has-symbols/1.0.2: - resolution: {integrity: sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=, tarball: has-symbols/download/has-symbols-1.0.2.tgz} - engines: {node: '>= 0.4'} - - /has-to-string-tag-x/1.4.1: - resolution: {integrity: sha1-oEWrOD17SyASoAFIqwql8pAETU0=, tarball: has-to-string-tag-x/download/has-to-string-tag-x-1.4.1.tgz} - dependencies: - has-symbol-support-x: 1.4.2 - dev: true - - /has-tostringtag/1.0.0: - resolution: {integrity: sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=, tarball: has-tostringtag/download/has-tostringtag-1.0.0.tgz} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.2 - dev: true - - /has-value/0.3.1: - resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=, tarball: has-value/download/has-value-0.3.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - dev: true - - /has-value/1.0.0: - resolution: {integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=, tarball: has-value/download/has-value-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - dev: true - - /has-values/0.1.4: - resolution: {integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=, tarball: has-values/download/has-values-0.1.4.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /has-values/1.0.0: - resolution: {integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=, tarball: has-values/download/has-values-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - dev: true - - /has/1.0.3: - resolution: {integrity: sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=, tarball: has/download/has-1.0.3.tgz} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - - /hash-sum/2.0.0: - resolution: {integrity: sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=, tarball: hash-sum/download/hash-sum-2.0.0.tgz} - dev: true - - /he/1.2.0: - resolution: {integrity: sha1-hK5l+n6vsWX922FWauFLrwVmTw8=, tarball: he/download/he-1.2.0.tgz?cache=0&sync_timestamp=1632822734781&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhe%2Fdownload%2Fhe-1.2.0.tgz} - hasBin: true - dev: true - - /header-case/2.0.4: - resolution: {integrity: sha1-WkLmO1UXc0nPQFvrjXdayruSwGM=, tarball: header-case/download/header-case-2.0.4.tgz} - dependencies: - capital-case: 1.0.4 - tslib: 2.3.1 - dev: true - - /hosted-git-info/2.8.9: - resolution: {integrity: sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=, tarball: hosted-git-info/download/hosted-git-info-2.8.9.tgz} - dev: true - - /html-minifier-terser/5.1.1: - resolution: {integrity: sha1-ki6W8fO7YIMsJjS3mIQJY4mx8FQ=, tarball: html-minifier-terser/download/html-minifier-terser-5.1.1.tgz} - engines: {node: '>=6'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 4.2.4 - commander: 4.1.1 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 4.8.0 - dev: true - - /html-tags/3.1.0: - resolution: {integrity: sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=, tarball: html-tags/download/html-tags-3.1.0.tgz} - engines: {node: '>=8'} - dev: true - - /htmlparser2/3.10.1: - resolution: {integrity: sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=, tarball: htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1636640925909&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz} - dependencies: - domelementtype: 1.3.1 - domhandler: 2.4.2 - domutils: 1.7.0 - entities: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /http-cache-semantics/3.8.1: - resolution: {integrity: sha1-ObDhat2bYFvwqe89nar0hDtMrNI=, tarball: http-cache-semantics/download/http-cache-semantics-3.8.1.tgz} - dev: true - - /human-signals/1.1.1: - resolution: {integrity: sha1-xbHNFPUK6uCatsWf5jujOV/k36M=, tarball: human-signals/download/human-signals-1.1.1.tgz} - engines: {node: '>=8.12.0'} - dev: true - - /human-signals/2.1.0: - resolution: {integrity: sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=, tarball: human-signals/download/human-signals-2.1.0.tgz} - engines: {node: '>=10.17.0'} - dev: true - - /iconv-lite/0.4.24: - resolution: {integrity: sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=, tarball: iconv-lite/download/iconv-lite-0.4.24.tgz} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /idb/6.1.5: - resolution: {integrity: sha1-28U+et8ax8Wfmyv1bgC06k/OjHs=, tarball: idb/download/idb-6.1.5.tgz} - dev: true - - /ieee754/1.2.1: - resolution: {integrity: sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=, tarball: ieee754/download/ieee754-1.2.1.tgz} - dev: true - - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, tarball: ignore/download/ignore-5.2.0.tgz} - engines: {node: '>= 4'} - dev: true - - /image-size/0.5.5: - resolution: {integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=, tarball: image-size/download/image-size-0.5.5.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - dev: true - - /imagemin-gifsicle/7.0.0: - resolution: {integrity: sha1-GnqxNqFExGeGV7o7bEEvgIBdJrA=, tarball: imagemin-gifsicle/download/imagemin-gifsicle-7.0.0.tgz} - engines: {node: '>=10'} - dependencies: - execa: 1.0.0 - gifsicle: 5.2.1 - is-gif: 3.0.0 - dev: true - - /imagemin-jpegtran/7.0.0: - resolution: {integrity: sha1-dyj4SHY2LUibmhZW4MyOIAlAbm8=, tarball: imagemin-jpegtran/download/imagemin-jpegtran-7.0.0.tgz} - engines: {node: '>=10'} - dependencies: - exec-buffer: 3.2.0 - is-jpg: 2.0.0 - jpegtran-bin: 5.0.2 - dev: true - - /imagemin-mozjpeg/9.0.0: - resolution: {integrity: sha1-0a8m0LQ9daQcIRBRwZENpZ2dIyQ=, tarball: imagemin-mozjpeg/download/imagemin-mozjpeg-9.0.0.tgz} - engines: {node: '>=10'} - dependencies: - execa: 4.1.0 - is-jpg: 2.0.0 - mozjpeg: 7.1.1 - dev: true - - /imagemin-optipng/8.0.0: - resolution: {integrity: sha1-uI5c9tolzIR54HzfOMOuBHnffvI=, tarball: imagemin-optipng/download/imagemin-optipng-8.0.0.tgz} - engines: {node: '>=10'} - dependencies: - exec-buffer: 3.2.0 - is-png: 2.0.0 - optipng-bin: 7.0.1 - dev: true - - /imagemin-pngquant/9.0.2: - resolution: {integrity: sha1-OBVXArDMT2D2cbp8Kwhuo4BdlWc=, tarball: imagemin-pngquant/download/imagemin-pngquant-9.0.2.tgz} - engines: {node: '>=10'} - dependencies: - execa: 4.1.0 - is-png: 2.0.0 - is-stream: 2.0.1 - ow: 0.17.0 - pngquant-bin: 6.0.1 - dev: true - - /imagemin-svgo/9.0.0: - resolution: {integrity: sha1-dJNwgEYIkXpn1P9ZDweod1auwAY=, tarball: imagemin-svgo/download/imagemin-svgo-9.0.0.tgz} - engines: {node: '>=10'} - dependencies: - is-svg: 4.3.2 - svgo: 2.8.0 - dev: true - - /imagemin-webp/6.0.0: - resolution: {integrity: sha1-uy13urgY/WEz35Z1MmSXuHfnvk0=, tarball: imagemin-webp/download/imagemin-webp-6.0.0.tgz} - engines: {node: '>=10'} - dependencies: - cwebp-bin: 5.1.0 - exec-buffer: 3.2.0 - is-cwebp-readable: 3.0.0 - dev: true - - /imagemin/7.0.1: - resolution: {integrity: sha1-9kQcpkcZdjLiPbfZcf/71TDIfb8=, tarball: imagemin/download/imagemin-7.0.1.tgz} - engines: {node: '>=8'} - dependencies: - file-type: 12.4.2 - globby: 10.0.2 - graceful-fs: 4.2.8 - junk: 3.1.0 - make-dir: 3.1.0 - p-pipe: 3.1.0 - replace-ext: 1.0.1 - dev: true - - /import-lazy/4.0.0: - resolution: {integrity: sha1-6OtidIOgpD2jwD8+NVSL5csMwVM=, tarball: import-lazy/download/import-lazy-4.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /indent-string/2.1.0: - resolution: {integrity: sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=, tarball: indent-string/download/indent-string-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - repeating: 2.0.1 - dev: true - - /inflight/1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=, tarball: inflight/download/inflight-1.0.6.tgz} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits/2.0.4: - resolution: {integrity: sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=, tarball: inherits/download/inherits-2.0.4.tgz} - dev: true - - /ini/1.3.8: - resolution: {integrity: sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=, tarball: ini/download/ini-1.3.8.tgz} - dev: true - - /inquirer/8.2.0: - resolution: {integrity: sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==, tarball: inquirer/download/inquirer-8.2.0.tgz} - engines: {node: '>=8.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.4.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - dev: true - - /internal-slot/1.0.3: - resolution: {integrity: sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=, tarball: internal-slot/download/internal-slot-1.0.3.tgz} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.1 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - - /into-stream/3.1.0: - resolution: {integrity: sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=, tarball: into-stream/download/into-stream-3.1.0.tgz} - engines: {node: '>=4'} - dependencies: - from2: 2.3.0 - p-is-promise: 1.1.0 - dev: true - - /is-accessor-descriptor/0.1.6: - resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=, tarball: is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-accessor-descriptor/1.0.0: - resolution: {integrity: sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=, tarball: is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - - /is-arrayish/0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=, tarball: is-arrayish/download/is-arrayish-0.2.1.tgz} - dev: true - - /is-bigint/1.0.4: - resolution: {integrity: sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=, tarball: is-bigint/download/is-bigint-1.0.4.tgz} - dependencies: - has-bigints: 1.0.1 - dev: true - - /is-binary-path/2.1.0: - resolution: {integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=, tarball: is-binary-path/download/is-binary-path-2.1.0.tgz} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object/1.1.2: - resolution: {integrity: sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=, tarball: is-boolean-object/download/is-boolean-object-1.1.2.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-buffer/1.1.6: - resolution: {integrity: sha1-76ouqdqg16suoTqXsritUf776L4=, tarball: is-buffer/download/is-buffer-1.1.6.tgz} - dev: true - - /is-callable/1.2.4: - resolution: {integrity: sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=, tarball: is-callable/download/is-callable-1.2.4.tgz} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module/2.8.0: - resolution: {integrity: sha1-AyEzbD0JJeSX/Zf12VyxFKXM1Ug=, tarball: is-core-module/download/is-core-module-2.8.0.tgz} - dependencies: - has: 1.0.3 - dev: true - - /is-cwebp-readable/3.0.0: - resolution: {integrity: sha1-BVSqpACXei/E3jZtjAJE8TzeWMs=, tarball: is-cwebp-readable/download/is-cwebp-readable-3.0.0.tgz} - dependencies: - file-type: 10.11.0 - dev: true - - /is-data-descriptor/0.1.4: - resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=, tarball: is-data-descriptor/download/is-data-descriptor-0.1.4.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-data-descriptor/1.0.0: - resolution: {integrity: sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=, tarball: is-data-descriptor/download/is-data-descriptor-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - - /is-date-object/1.0.5: - resolution: {integrity: sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=, tarball: is-date-object/download/is-date-object-1.0.5.tgz} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-descriptor/0.1.6: - resolution: {integrity: sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=, tarball: is-descriptor/download/is-descriptor-0.1.6.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 - dev: true - - /is-descriptor/1.0.2: - resolution: {integrity: sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=, tarball: is-descriptor/download/is-descriptor-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.3 - dev: true - - /is-docker/2.2.1: - resolution: {integrity: sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=, tarball: is-docker/download/is-docker-2.2.1.tgz} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-extendable/0.1.1: - resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=, tarball: is-extendable/download/is-extendable-0.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-extendable/1.0.1: - resolution: {integrity: sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=, tarball: is-extendable/download/is-extendable-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-object: 2.0.4 - dev: true - - /is-extglob/2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=, tarball: is-extglob/download/is-extglob-2.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-finite/1.1.0: - resolution: {integrity: sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=, tarball: is-finite/download/is-finite-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=, tarball: is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz} - engines: {node: '>=8'} - - /is-gif/3.0.0: - resolution: {integrity: sha1-xL5gsmowHWlbuDOyDZtdZsbPg7E=, tarball: is-gif/download/is-gif-3.0.0.tgz} - engines: {node: '>=6'} - dependencies: - file-type: 10.11.0 - dev: true - - /is-glob/4.0.3: - resolution: {integrity: sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=, tarball: is-glob/download/is-glob-4.0.3.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-interactive/1.0.0: - resolution: {integrity: sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=, tarball: is-interactive/download/is-interactive-1.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /is-jpg/2.0.0: - resolution: {integrity: sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=, tarball: is-jpg/download/is-jpg-2.0.0.tgz} - engines: {node: '>=6'} - dev: true - - /is-module/1.0.0: - resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=, tarball: is-module/download/is-module-1.0.0.tgz} - dev: true - - /is-natural-number/4.0.1: - resolution: {integrity: sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=, tarball: is-natural-number/download/is-natural-number-4.0.1.tgz} - dev: true - - /is-negative-zero/2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, tarball: is-negative-zero/download/is-negative-zero-2.0.2.tgz} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object/1.0.6: - resolution: {integrity: sha1-anqvg4x/BoalC0VT9+VKlklOifA=, tarball: is-number-object/download/is-number-object-1.0.6.tgz} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number/3.0.0: - resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=, tarball: is-number/download/is-number-3.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-number/7.0.0: - resolution: {integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=, tarball: is-number/download/is-number-7.0.0.tgz} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj/1.0.1: - resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=, tarball: is-obj/download/is-obj-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-object/1.0.2: - resolution: {integrity: sha1-pWVS4cZlyelQtKAlRh2ofnL4b88=, tarball: is-object/download/is-object-1.0.2.tgz} - dev: true - - /is-plain-obj/1.1.0: - resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=, tarball: is-plain-obj/download/is-plain-obj-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-plain-object/2.0.4: - resolution: {integrity: sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=, tarball: is-plain-object/download/is-plain-object-2.0.4.tgz} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /is-plain-object/3.0.1: - resolution: {integrity: sha1-Zi2S0kwKpDAkB7DUXSHyJRyF+Fs=, tarball: is-plain-object/download/is-plain-object-3.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: false - - /is-plain-object/5.0.0: - resolution: {integrity: sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q=, tarball: is-plain-object/download/is-plain-object-5.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: false - - /is-png/2.0.0: - resolution: {integrity: sha1-7oy8npsFBCXO3utKb7dKZJsKSo0=, tarball: is-png/download/is-png-2.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /is-regex/1.1.4: - resolution: {integrity: sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=, tarball: is-regex/download/is-regex-1.1.4.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-regexp/1.0.0: - resolution: {integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk=, tarball: is-regexp/download/is-regexp-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-retry-allowed/1.2.0: - resolution: {integrity: sha1-13hIi9CkZmo76KFIK58rqv7eqLQ=, tarball: is-retry-allowed/download/is-retry-allowed-1.2.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-shared-array-buffer/1.0.1: - resolution: {integrity: sha1-l7DIX72stZycRG/mU7gs8rW3z+Y=, tarball: is-shared-array-buffer/download/is-shared-array-buffer-1.0.1.tgz} - dev: true - - /is-stream/1.1.0: - resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=, tarball: is-stream/download/is-stream-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-stream/2.0.1: - resolution: {integrity: sha1-+sHj1TuXrVqdCunO8jifWBClwHc=, tarball: is-stream/download/is-stream-2.0.1.tgz} - engines: {node: '>=8'} - dev: true - - /is-string/1.0.7: - resolution: {integrity: sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=, tarball: is-string/download/is-string-1.0.7.tgz} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-svg/4.3.2: - resolution: {integrity: sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw==, tarball: is-svg/download/is-svg-4.3.2.tgz} - engines: {node: '>=6'} - dependencies: - fast-xml-parser: 3.21.1 - dev: true - - /is-symbol/1.0.4: - resolution: {integrity: sha1-ptrJO2NbBjymhyI23oiRClevE5w=, tarball: is-symbol/download/is-symbol-1.0.4.tgz} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.2 - dev: true - - /is-unicode-supported/0.1.0: - resolution: {integrity: sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=, tarball: is-unicode-supported/download/is-unicode-supported-0.1.0.tgz} - engines: {node: '>=10'} - dev: true - - /is-utf8/0.2.1: - resolution: {integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=, tarball: is-utf8/download/is-utf8-0.2.1.tgz} - dev: true - - /is-weakref/1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, tarball: is-weakref/download/is-weakref-1.0.2.tgz} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-what/3.14.1: - resolution: {integrity: sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=, tarball: is-what/download/is-what-3.14.1.tgz} - dev: true - - /is-windows/1.0.2: - resolution: {integrity: sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=, tarball: is-windows/download/is-windows-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /is-wsl/2.2.0: - resolution: {integrity: sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=, tarball: is-wsl/download/is-wsl-2.2.0.tgz} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=, tarball: isarray/download/isarray-1.0.0.tgz} - dev: true - - /isexe/2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=, tarball: isexe/download/isexe-2.0.0.tgz} - dev: true - - /isobject/2.1.0: - resolution: {integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=, tarball: isobject/download/isobject-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - isarray: 1.0.0 - dev: true - - /isobject/3.0.1: - resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=, tarball: isobject/download/isobject-3.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /isurl/1.0.0: - resolution: {integrity: sha1-sn9PSfPNqj6kSgpbfzRi5u3DnWc=, tarball: isurl/download/isurl-1.0.0.tgz} - engines: {node: '>= 4'} - dependencies: - has-to-string-tag-x: 1.4.1 - is-object: 1.0.2 - dev: true - - /jake/10.8.2: - resolution: {integrity: sha1-68nehVgWCmbYLQ6txqLlj7xQCns=, tarball: jake/download/jake-10.8.2.tgz} - hasBin: true - dependencies: - async: 0.9.2 - chalk: 2.4.2 - filelist: 1.0.2 - minimatch: 3.0.4 - dev: true - - /jest-worker/26.6.2: - resolution: {integrity: sha1-f3LLxNZDw2Xie5/XdfnQ6qnHqO0=, tarball: jest-worker/download/jest-worker-26.6.2.tgz} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 16.11.15 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: true - - /jiti/1.12.9: - resolution: {integrity: sha1-LORbJlz8jckevXClIEgHz5FSkbw=, tarball: jiti/download/jiti-1.12.9.tgz?cache=0&sync_timestamp=1636940166702&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjiti%2Fdownload%2Fjiti-1.12.9.tgz} - hasBin: true - dev: true - - /jpegtran-bin/5.0.2: - resolution: {integrity: sha1-WHD9fmgxe9IDoclFcr0GrncyysM=, tarball: jpegtran-bin/download/jpegtran-bin-5.0.2.tgz} - engines: {node: '>=10'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - logalot: 2.1.0 - dev: true - - /js-base64/2.6.4: - resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==, tarball: js-base64/download/js-base64-2.6.4.tgz} - dev: true - - /js-tokens/4.0.0: - resolution: {integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk=, tarball: js-tokens/download/js-tokens-4.0.0.tgz} - - /jsesc/0.5.0: - resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=, tarball: jsesc/download/jsesc-0.5.0.tgz} - hasBin: true - dev: true - - /jsesc/2.5.2: - resolution: {integrity: sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=, tarball: jsesc/download/jsesc-2.5.2.tgz} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-buffer/3.0.0: - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=, tarball: json-buffer/download/json-buffer-3.0.0.tgz} - dev: true - - /json-schema-traverse/1.0.0: - resolution: {integrity: sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=, tarball: json-schema-traverse/download/json-schema-traverse-1.0.0.tgz} - dev: true - - /json-schema/0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, tarball: json-schema/download/json-schema-0.4.0.tgz?cache=0&sync_timestamp=1636559101924&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.4.0.tgz} - dev: true - - /json5/1.0.1: - resolution: {integrity: sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=, tarball: json5/download/json5-1.0.1.tgz} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true - - /json5/2.2.0: - resolution: {integrity: sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=, tarball: json5/download/json5-2.2.0.tgz} - engines: {node: '>=6'} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true - - /jsonc-parser/3.0.0: - resolution: {integrity: sha1-q914VwHH5+rKip7IzwcMpRp0WiI=, tarball: jsonc-parser/download/jsonc-parser-3.0.0.tgz} - dev: true - - /jsonfile/6.1.0: - resolution: {integrity: sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=, tarball: jsonfile/download/jsonfile-6.1.0.tgz} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.8 - dev: true - - /jsonpointer/5.0.0: - resolution: {integrity: sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==, tarball: jsonpointer/download/jsonpointer-5.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /junk/3.1.0: - resolution: {integrity: sha1-MUmQmNkCt+mMXZucgPQ0V6iKv6E=, tarball: junk/download/junk-3.1.0.tgz} - engines: {node: '>=8'} - dev: true - - /keyv/3.0.0: - resolution: {integrity: sha1-RJI7o55osSp87H32wyaMAx8u83M=, tarball: keyv/download/keyv-3.0.0.tgz} - dependencies: - json-buffer: 3.0.0 - dev: true - - /kind-of/3.2.2: - resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=, tarball: kind-of/download/kind-of-3.2.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/4.0.0: - resolution: {integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=, tarball: kind-of/download/kind-of-4.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/5.1.0: - resolution: {integrity: sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=, tarball: kind-of/download/kind-of-5.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /kind-of/6.0.3: - resolution: {integrity: sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=, tarball: kind-of/download/kind-of-6.0.3.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /kolorist/1.5.1: - resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==, tarball: kolorist/download/kolorist-1.5.1.tgz} - dev: true - - /less/4.1.2: - resolution: {integrity: sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==, tarball: less/download/less-4.1.2.tgz} - engines: {node: '>=6'} - hasBin: true - dependencies: - copy-anything: 2.0.3 - parse-node-version: 1.0.1 - tslib: 2.3.1 - optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.8 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 2.9.1 - source-map: 0.6.1 - dev: true - - /leven/3.1.0: - resolution: {integrity: sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=, tarball: leven/download/leven-3.1.0.tgz} - engines: {node: '>=6'} - dev: true - - /load-json-file/1.1.0: - resolution: {integrity: sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=, tarball: load-json-file/download/load-json-file-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - graceful-fs: 4.2.8 - parse-json: 2.2.0 - pify: 2.3.0 - pinkie-promise: 2.0.1 - strip-bom: 2.0.0 - dev: true - - /loader-utils/1.4.0: - resolution: {integrity: sha1-xXm140yzSxp07cbB+za/o3HVphM=, tarball: loader-utils/download/loader-utils-1.4.0.tgz} - engines: {node: '>=4.0.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 1.0.1 - dev: true - - /locate-path/5.0.0: - resolution: {integrity: sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=, tarball: locate-path/download/locate-path-5.0.0.tgz} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: false - - /lodash-es/4.17.21: - resolution: {integrity: sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4=, tarball: lodash-es/download/lodash-es-4.17.21.tgz?cache=0&sync_timestamp=1632822762695&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flodash-es%2Fdownload%2Flodash-es-4.17.21.tgz} - dev: false - - /lodash.debounce/4.0.8: - resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=, tarball: lodash.debounce/download/lodash.debounce-4.0.8.tgz} - dev: true - - /lodash.sortby/4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, tarball: lodash.sortby/download/lodash.sortby-4.7.0.tgz} - dev: true - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, tarball: lodash/download/lodash-4.17.21.tgz} - - /log-symbols/4.1.0: - resolution: {integrity: sha1-P727lbRoOsn8eFER55LlWNSr1QM=, tarball: log-symbols/download/log-symbols-4.1.0.tgz} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - - /logalot/2.1.0: - resolution: {integrity: sha1-X46MkNME7fElMJUaVVSruMXj9VI=, tarball: logalot/download/logalot-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - figures: 1.7.0 - squeak: 1.3.0 - dev: true - - /longest/1.0.1: - resolution: {integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=, tarball: longest/download/longest-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /loose-envify/1.4.0: - resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=, tarball: loose-envify/download/loose-envify-1.4.0.tgz?cache=0&sync_timestamp=1632822742309&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /loud-rejection/1.6.0: - resolution: {integrity: sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=, tarball: loud-rejection/download/loud-rejection-1.6.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - currently-unhandled: 0.4.1 - signal-exit: 3.0.6 - dev: true - - /lower-case/2.0.2: - resolution: {integrity: sha1-b6I3xj29xKgsoP2ILkci3F5jTig=, tarball: lower-case/download/lower-case-2.0.2.tgz} - dependencies: - tslib: 2.3.1 - dev: true - - /lowercase-keys/1.0.0: - resolution: {integrity: sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=, tarball: lowercase-keys/download/lowercase-keys-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /lowercase-keys/1.0.1: - resolution: {integrity: sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=, tarball: lowercase-keys/download/lowercase-keys-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /lpad-align/1.1.2: - resolution: {integrity: sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=, tarball: lpad-align/download/lpad-align-1.1.2.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - get-stdin: 4.0.1 - indent-string: 2.1.0 - longest: 1.0.1 - meow: 3.7.0 - dev: true - - /lru-cache/4.1.5: - resolution: {integrity: sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=, tarball: lru-cache/download/lru-cache-4.1.5.tgz} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true - - /magic-string/0.25.7: - resolution: {integrity: sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=, tarball: magic-string/download/magic-string-0.25.7.tgz} - dependencies: - sourcemap-codec: 1.4.8 - - /make-dir/1.3.0: - resolution: {integrity: sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=, tarball: make-dir/download/make-dir-1.3.0.tgz} - engines: {node: '>=4'} - dependencies: - pify: 3.0.0 - dev: true - - /make-dir/2.1.0: - resolution: {integrity: sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=, tarball: make-dir/download/make-dir-2.1.0.tgz} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - pify: 4.0.1 - semver: 5.7.1 - dev: true - optional: true - - /make-dir/3.1.0: - resolution: {integrity: sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=, tarball: make-dir/download/make-dir-3.1.0.tgz} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /map-cache/0.2.2: - resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=, tarball: map-cache/download/map-cache-0.2.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj/1.0.1: - resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=, tarball: map-obj/download/map-obj-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /map-visit/1.0.0: - resolution: {integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=, tarball: map-visit/download/map-visit-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - object-visit: 1.0.1 - dev: true - - /mdn-data/2.0.14: - resolution: {integrity: sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=, tarball: mdn-data/download/mdn-data-2.0.14.tgz} - dev: true - - /meow/3.7.0: - resolution: {integrity: sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=, tarball: meow/download/meow-3.7.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - camelcase-keys: 2.1.0 - decamelize: 1.2.0 - loud-rejection: 1.6.0 - map-obj: 1.0.1 - minimist: 1.2.5 - normalize-package-data: 2.5.0 - object-assign: 4.1.1 - read-pkg-up: 1.0.1 - redent: 1.0.0 - trim-newlines: 1.0.0 - dev: true - - /merge-options/1.0.1: - resolution: {integrity: sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI=, tarball: merge-options/download/merge-options-1.0.1.tgz} - engines: {node: '>=4'} - dependencies: - is-plain-obj: 1.1.0 - dev: true - - /merge-stream/2.0.0: - resolution: {integrity: sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=, tarball: merge-stream/download/merge-stream-2.0.0.tgz} - dev: true - - /merge2/1.4.1: - resolution: {integrity: sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=, tarball: merge2/download/merge2-1.4.1.tgz} - engines: {node: '>= 8'} - dev: true - - /micromatch/3.1.0: - resolution: {integrity: sha1-UQLU6vILaZfWAI46z+HESj+oFeI=, tarball: micromatch/download/micromatch-3.1.0.tgz?cache=0&sync_timestamp=1632822666893&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 1.0.0 - extend-shallow: 2.0.1 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 5.1.0 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - - /micromatch/4.0.4: - resolution: {integrity: sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=, tarball: micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1632822666893&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.0 - dev: true - - /mime-db/1.51.0: - resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==, tarball: mime-db/download/mime-db-1.51.0.tgz} - engines: {node: '>= 0.6'} - dev: true - - /mime/1.6.0: - resolution: {integrity: sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=, tarball: mime/download/mime-1.6.0.tgz} - engines: {node: '>=4'} - hasBin: true - requiresBuild: true - dev: true - optional: true - - /mimic-fn/2.1.0: - resolution: {integrity: sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=, tarball: mimic-fn/download/mimic-fn-2.1.0.tgz} - engines: {node: '>=6'} - dev: true - - /mimic-response/1.0.1: - resolution: {integrity: sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=, tarball: mimic-response/download/mimic-response-1.0.1.tgz} - engines: {node: '>=4'} - dev: true - - /minimatch/3.0.4: - resolution: {integrity: sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=, tarball: minimatch/download/minimatch-3.0.4.tgz} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist/1.2.5: - resolution: {integrity: sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=, tarball: minimist/download/minimist-1.2.5.tgz} - dev: true - - /mixin-deep/1.3.2: - resolution: {integrity: sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=, tarball: mixin-deep/download/mixin-deep-1.3.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 - dev: true - - /mockjs/1.1.0: - resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==, tarball: mockjs/download/mockjs-1.1.0.tgz} - hasBin: true - dependencies: - commander: 8.3.0 - dev: false - - /moment/2.29.1: - resolution: {integrity: sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=, tarball: moment/download/moment-2.29.1.tgz} - dev: false - - /mozjpeg/7.1.1: - resolution: {integrity: sha1-37YZU1NuZvyr1K55XnoxLUKlHxg=, tarball: mozjpeg/download/mozjpeg-7.1.1.tgz} - engines: {node: '>=10'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - dev: true - - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=, tarball: ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1632822734970&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.0.0.tgz} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=, tarball: ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1632822734970&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.2.tgz} - dev: true - - /ms/2.1.3: - resolution: {integrity: sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=, tarball: ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1632822734970&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.3.tgz} - dev: true - optional: true - - /mute-stream/0.0.8: - resolution: {integrity: sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=, tarball: mute-stream/download/mute-stream-0.0.8.tgz} - dev: true - - /nanoid/3.1.30: - resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==, tarball: nanoid/download/nanoid-3.1.30.tgz} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - /nanomatch/1.2.13: - resolution: {integrity: sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=, tarball: nanomatch/download/nanomatch-1.2.13.tgz} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - - /nanopop/2.1.0: - resolution: {integrity: sha1-I0dlE87iQFiIr9LopLVAZrcLnmA=, tarball: nanopop/download/nanopop-2.1.0.tgz} - dev: false - - /needle/2.9.1: - resolution: {integrity: sha1-ItHf++NJDCuD4wH3cJtnNs2PJoQ=, tarball: needle/download/needle-2.9.1.tgz} - engines: {node: '>= 4.4.x'} - hasBin: true - requiresBuild: true - dependencies: - debug: 3.2.7 - iconv-lite: 0.4.24 - sax: 1.2.4 - dev: true - optional: true - - /nice-try/1.0.5: - resolution: {integrity: sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=, tarball: nice-try/download/nice-try-1.0.5.tgz} - dev: true - - /no-case/3.0.4: - resolution: {integrity: sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0=, tarball: no-case/download/no-case-3.0.4.tgz} - dependencies: - lower-case: 2.0.2 - tslib: 2.3.1 - dev: true - - /node-fetch/2.6.1: - resolution: {integrity: sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI=, tarball: node-fetch/download/node-fetch-2.6.1.tgz} - engines: {node: 4.x || >=6.0.0} - - /node-releases/2.0.1: - resolution: {integrity: sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=, tarball: node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634808436743&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz} - dev: true - - /normalize-package-data/2.5.0: - resolution: {integrity: sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=, tarball: normalize-package-data/download/normalize-package-data-2.5.0.tgz} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.20.0 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path/3.0.0: - resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, tarball: normalize-path/download/normalize-path-3.0.0.tgz?cache=0&sync_timestamp=1632822667884&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnormalize-path%2Fdownload%2Fnormalize-path-3.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url/2.0.1: - resolution: {integrity: sha1-g1qdoVUfom9w6SMpBpojqmV01+Y=, tarball: normalize-url/download/normalize-url-2.0.1.tgz} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 - query-string: 5.1.1 - sort-keys: 2.0.0 - dev: true - - /npm-conf/1.1.3: - resolution: {integrity: sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=, tarball: npm-conf/download/npm-conf-1.1.3.tgz} - engines: {node: '>=4'} - dependencies: - config-chain: 1.1.13 - pify: 3.0.0 - dev: true - - /npm-run-path/2.0.2: - resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=, tarball: npm-run-path/download/npm-run-path-2.0.2.tgz} - engines: {node: '>=4'} - dependencies: - path-key: 2.0.1 - dev: true - - /npm-run-path/4.0.1: - resolution: {integrity: sha1-t+zR5e1T2o43pV4cImnguX7XSOo=, tarball: npm-run-path/download/npm-run-path-4.0.1.tgz} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /nprogress/0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, tarball: nprogress/download/nprogress-0.2.0.tgz} - dev: false - - /nth-check/2.0.1: - resolution: {integrity: sha1-Lv4WL1w9oGoolZ+9PbddvuqfD8I=, tarball: nth-check/download/nth-check-2.0.1.tgz} - dependencies: - boolbase: 1.0.0 - dev: true - - /object-assign/4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, tarball: object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1632822742534&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /object-copy/0.1.0: - resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=, tarball: object-copy/download/object-copy-0.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - dev: true - - /object-inspect/1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==, tarball: object-inspect/download/object-inspect-1.12.0.tgz} - - /object-keys/1.1.1: - resolution: {integrity: sha1-HEfyct8nfzsdrwYWd9nILiMixg4=, tarball: object-keys/download/object-keys-1.1.1.tgz} - engines: {node: '>= 0.4'} - dev: true - - /object-visit/1.0.1: - resolution: {integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=, tarball: object-visit/download/object-visit-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /object.assign/4.1.2: - resolution: {integrity: sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=, tarball: object.assign/download/object.assign-4.1.2.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - has-symbols: 1.0.2 - object-keys: 1.1.1 - dev: true - - /object.pick/1.3.0: - resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=, tarball: object.pick/download/object.pick-1.3.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /omit.js/2.0.2: - resolution: {integrity: sha1-3ZuENvq5R6Xz/yFMslOGMeMT7C8=, tarball: omit.js/download/omit.js-2.0.2.tgz} - dev: false - - /on-finished/2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=, tarball: on-finished/download/on-finished-2.3.0.tgz} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: true - - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=, tarball: once/download/once-1.4.0.tgz} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime/5.1.2: - resolution: {integrity: sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=, tarball: onetime/download/onetime-5.1.2.tgz} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /open/7.4.2: - resolution: {integrity: sha1-uBR+Jtzz5CYxbHMAif1x7dKcIyE=, tarball: open/download/open-7.4.2.tgz} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - - /optipng-bin/7.0.1: - resolution: {integrity: sha1-vrjlWlL4om+IXuV6tE/PYjl9aXI=, tarball: optipng-bin/download/optipng-bin-7.0.1.tgz} - engines: {node: '>=10'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - dev: true - - /ora/5.4.1: - resolution: {integrity: sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=, tarball: ora/download/ora-5.4.1.tgz} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.6.1 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true - - /os-filter-obj/2.0.0: - resolution: {integrity: sha1-HAti1fOiRCdJotE55t3e5ugdjRY=, tarball: os-filter-obj/download/os-filter-obj-2.0.0.tgz} - engines: {node: '>=4'} - dependencies: - arch: 2.2.0 - dev: true - - /os-tmpdir/1.0.2: - resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=, tarball: os-tmpdir/download/os-tmpdir-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /ow/0.17.0: - resolution: {integrity: sha1-T5OJmf7WJkyQSM1iVDVuDx5/aIw=, tarball: ow/download/ow-0.17.0.tgz} - engines: {node: '>=10'} - dependencies: - type-fest: 0.11.0 - dev: true - - /p-cancelable/0.3.0: - resolution: {integrity: sha1-ueEjgAvOu3rBOkeb4ZW1B7mNMPo=, tarball: p-cancelable/download/p-cancelable-0.3.0.tgz} - engines: {node: '>=4'} - dev: true - - /p-cancelable/0.4.1: - resolution: {integrity: sha1-NfNj1n1SCByNlYXje8zrfgu8sqA=, tarball: p-cancelable/download/p-cancelable-0.4.1.tgz} - engines: {node: '>=4'} - dev: true - - /p-event/1.3.0: - resolution: {integrity: sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=, tarball: p-event/download/p-event-1.3.0.tgz} - engines: {node: '>=4'} - dependencies: - p-timeout: 1.2.1 - dev: true - - /p-event/2.3.1: - resolution: {integrity: sha1-WWJ57xaassPgyuiMHPuwgHmZPvY=, tarball: p-event/download/p-event-2.3.1.tgz} - engines: {node: '>=6'} - dependencies: - p-timeout: 2.0.1 - dev: true - - /p-finally/1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=, tarball: p-finally/download/p-finally-1.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /p-is-promise/1.1.0: - resolution: {integrity: sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=, tarball: p-is-promise/download/p-is-promise-1.1.0.tgz} - engines: {node: '>=4'} - dev: true - - /p-limit/2.3.0: - resolution: {integrity: sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=, tarball: p-limit/download/p-limit-2.3.0.tgz} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: false - - /p-locate/4.1.0: - resolution: {integrity: sha1-o0KLtwiLOmApL2aRkni3wpetTwc=, tarball: p-locate/download/p-locate-4.1.0.tgz} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-map-series/1.0.0: - resolution: {integrity: sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=, tarball: p-map-series/download/p-map-series-1.0.0.tgz} - engines: {node: '>=4'} - dependencies: - p-reduce: 1.0.0 - dev: true - - /p-pipe/3.1.0: - resolution: {integrity: sha1-SLV8kiqi4a9qZATLfGvw65zI5g4=, tarball: p-pipe/download/p-pipe-3.1.0.tgz} - engines: {node: '>=8'} - dev: true - - /p-reduce/1.0.0: - resolution: {integrity: sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=, tarball: p-reduce/download/p-reduce-1.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /p-timeout/1.2.1: - resolution: {integrity: sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=, tarball: p-timeout/download/p-timeout-1.2.1.tgz} - engines: {node: '>=4'} - dependencies: - p-finally: 1.0.0 - dev: true - - /p-timeout/2.0.1: - resolution: {integrity: sha1-2N0ZeVldLcATnh/ka4tkbLPN8Dg=, tarball: p-timeout/download/p-timeout-2.0.1.tgz} - engines: {node: '>=4'} - dependencies: - p-finally: 1.0.0 - dev: true - - /p-try/2.2.0: - resolution: {integrity: sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=, tarball: p-try/download/p-try-2.2.0.tgz} - engines: {node: '>=6'} - dev: false - - /param-case/3.0.4: - resolution: {integrity: sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU=, tarball: param-case/download/param-case-3.0.4.tgz} - dependencies: - dot-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /parse-json/2.2.0: - resolution: {integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=, tarball: parse-json/download/parse-json-2.2.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - error-ex: 1.3.2 - dev: true - - /parse-node-version/1.0.1: - resolution: {integrity: sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=, tarball: parse-node-version/download/parse-node-version-1.0.1.tgz} - engines: {node: '>= 0.10'} - dev: true - - /parseurl/1.3.3: - resolution: {integrity: sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=, tarball: parseurl/download/parseurl-1.3.3.tgz} - engines: {node: '>= 0.8'} - dev: true - - /pascal-case/3.1.2: - resolution: {integrity: sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs=, tarball: pascal-case/download/pascal-case-3.1.2.tgz} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /pascalcase/0.1.1: - resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=, tarball: pascalcase/download/pascalcase-0.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /path-case/3.0.4: - resolution: {integrity: sha1-kWhkUzTrlCZYN1xW+AtMDLX4LG8=, tarball: path-case/download/path-case-3.0.4.tgz} - dependencies: - dot-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /path-exists/2.1.0: - resolution: {integrity: sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=, tarball: path-exists/download/path-exists-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - pinkie-promise: 2.0.1 - dev: true - - /path-exists/4.0.0: - resolution: {integrity: sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=, tarball: path-exists/download/path-exists-4.0.0.tgz} - engines: {node: '>=8'} - dev: false - - /path-is-absolute/1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=, tarball: path-is-absolute/download/path-is-absolute-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /path-key/2.0.1: - resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=, tarball: path-key/download/path-key-2.0.1.tgz} - engines: {node: '>=4'} - dev: true - - /path-key/3.1.1: - resolution: {integrity: sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=, tarball: path-key/download/path-key-3.1.1.tgz} - engines: {node: '>=8'} - dev: true - - /path-parse/1.0.7: - resolution: {integrity: sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=, tarball: path-parse/download/path-parse-1.0.7.tgz} - dev: true - - /path-to-regexp/6.2.0: - resolution: {integrity: sha1-97OAMzYQTDRoia3s5hRmkjBkXzg=, tarball: path-to-regexp/download/path-to-regexp-6.2.0.tgz?cache=0&sync_timestamp=1632822736183&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-6.2.0.tgz} - - /path-type/1.1.0: - resolution: {integrity: sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=, tarball: path-type/download/path-type-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - graceful-fs: 4.2.8 - pify: 2.3.0 - pinkie-promise: 2.0.1 - dev: true - - /path-type/4.0.0: - resolution: {integrity: sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=, tarball: path-type/download/path-type-4.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /pend/1.2.0: - resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=, tarball: pend/download/pend-1.2.0.tgz} - dev: true - - /picocolors/1.0.0: - resolution: {integrity: sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=, tarball: picocolors/download/picocolors-1.0.0.tgz?cache=0&sync_timestamp=1634097134444&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpicocolors%2Fdownload%2Fpicocolors-1.0.0.tgz} - - /picomatch/2.3.0: - resolution: {integrity: sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=, tarball: picomatch/download/picomatch-2.3.0.tgz} - engines: {node: '>=8.6'} - dev: true - - /pify/2.3.0: - resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=, tarball: pify/download/pify-2.3.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /pify/3.0.0: - resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=, tarball: pify/download/pify-3.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /pify/4.0.1: - resolution: {integrity: sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=, tarball: pify/download/pify-4.0.1.tgz} - engines: {node: '>=6'} - dev: true - - /pinia/2.0.0_typescript@4.5.4+vue@3.2.26: - resolution: {integrity: sha1-asd696T/LiyHpZZ7WqK+jgSGjzg=, tarball: pinia/download/pinia-2.0.0.tgz} - peerDependencies: - '@vue/composition-api': ^1.2.4 - typescript: ^4.4.4 - vue: ^2.6.14 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - typescript: - optional: true - dependencies: - '@vue/devtools-api': 6.0.0-beta.21.1 - typescript: 4.5.4 - vue: 3.2.26 - vue-demi: 0.12.1_vue@3.2.26 - dev: false - - /pinkie-promise/2.0.1: - resolution: {integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=, tarball: pinkie-promise/download/pinkie-promise-2.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - pinkie: 2.0.4 - dev: true - - /pinkie/2.0.4: - resolution: {integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=, tarball: pinkie/download/pinkie-2.0.4.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /pngjs/5.0.0: - resolution: {integrity: sha1-553SshV2f9nARWHAEjbflgvOf7s=, tarball: pngjs/download/pngjs-5.0.0.tgz} - engines: {node: '>=10.13.0'} - dev: false - - /pngquant-bin/6.0.1: - resolution: {integrity: sha1-K1eJyiGe602FCasa4IIJKAG38H4=, tarball: pngquant-bin/download/pngquant-bin-6.0.1.tgz} - engines: {node: '>=10'} - hasBin: true - requiresBuild: true - dependencies: - bin-build: 3.0.0 - bin-wrapper: /bin-wrapper-china/0.1.0 - execa: 4.1.0 - dev: true - - /posix-character-classes/0.1.1: - resolution: {integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=, tarball: posix-character-classes/download/posix-character-classes-0.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /postcss-prefix-selector/1.14.0_postcss@5.2.18: - resolution: {integrity: sha512-8d5fiBQZWMtGWH/7ewEeo6RnBNyT2kLD5wTIfV2oHYqH4hjiofg/rP5X3SUwnqOINzE4mM/K/UOAiNrIaKzd4w==, tarball: postcss-prefix-selector/download/postcss-prefix-selector-1.14.0.tgz} - peerDependencies: - postcss: 7.x || 8.x - dependencies: - postcss: 5.2.18 - dev: true - - /postcss/5.2.18: - resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==, tarball: postcss/download/postcss-5.2.18.tgz} - engines: {node: '>=0.12'} - dependencies: - chalk: 1.1.3 - js-base64: 2.6.4 - source-map: 0.5.7 - supports-color: 3.2.3 - dev: true - - /postcss/8.4.5: - resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==, tarball: postcss/download/postcss-8.4.5.tgz} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.1.30 - picocolors: 1.0.0 - source-map-js: 1.0.1 - - /posthtml-parser/0.2.1: - resolution: {integrity: sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=, tarball: posthtml-parser/download/posthtml-parser-0.2.1.tgz} - dependencies: - htmlparser2: 3.10.1 - isobject: 2.1.0 - dev: true - - /posthtml-rename-id/1.0.12: - resolution: {integrity: sha1-z39us3FGvxr6wx5o8YxswZrmFDM=, tarball: posthtml-rename-id/download/posthtml-rename-id-1.0.12.tgz} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /posthtml-render/1.4.0: - resolution: {integrity: sha1-QBFAcMRYgcrLkzR9rj7/U6+8/xM=, tarball: posthtml-render/download/posthtml-render-1.4.0.tgz} - engines: {node: '>=10'} - dev: true - - /posthtml-svg-mode/1.0.3: - resolution: {integrity: sha1-q9VU+s6BIjyrDLNn4Y5O/SpOdLA=, tarball: posthtml-svg-mode/download/posthtml-svg-mode-1.0.3.tgz} - dependencies: - merge-options: 1.0.1 - posthtml: 0.9.2 - posthtml-parser: 0.2.1 - posthtml-render: 1.4.0 - dev: true - - /posthtml/0.9.2: - resolution: {integrity: sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=, tarball: posthtml/download/posthtml-0.9.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - posthtml-parser: 0.2.1 - posthtml-render: 1.4.0 - dev: true - - /prepend-http/1.0.4: - resolution: {integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=, tarball: prepend-http/download/prepend-http-1.0.4.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /prepend-http/2.0.0: - resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=, tarball: prepend-http/download/prepend-http-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /pretty-bytes/5.6.0: - resolution: {integrity: sha1-NWJW9kOAR3PIL2RyP+eMksYr6us=, tarball: pretty-bytes/download/pretty-bytes-5.6.0.tgz} - engines: {node: '>=6'} - dev: true - - /process-nextick-args/2.0.1: - resolution: {integrity: sha1-eCDZsWEgzFXKmud5JoCufbptf+I=, tarball: process-nextick-args/download/process-nextick-args-2.0.1.tgz} - dev: true - - /proto-list/1.2.4: - resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=, tarball: proto-list/download/proto-list-1.2.4.tgz} - dev: true - - /prr/1.0.1: - resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=, tarball: prr/download/prr-1.0.1.tgz} - dev: true - optional: true - - /pseudomap/1.0.2: - resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=, tarball: pseudomap/download/pseudomap-1.0.2.tgz} - dev: true - - /pump/3.0.0: - resolution: {integrity: sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=, tarball: pump/download/pump-3.0.0.tgz} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /punycode/2.1.1: - resolution: {integrity: sha1-tYsBCsQMIsVldhbI0sLALHv0eew=, tarball: punycode/download/punycode-2.1.1.tgz} - engines: {node: '>=6'} - dev: true - - /qrcode/1.5.0: - resolution: {integrity: sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==, tarball: qrcode/download/qrcode-1.5.0.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - dijkstrajs: 1.0.2 - encode-utf8: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - dev: false - - /qs/6.10.2: - resolution: {integrity: sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==, tarball: qs/download/qs-6.10.2.tgz} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - - /query-string/4.3.4: - resolution: {integrity: sha1-u7aTucqRXCMlFbIosaArYJBD2+s=, tarball: query-string/download/query-string-4.3.4.tgz} - engines: {node: '>=0.10.0'} - dependencies: - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true - - /query-string/5.1.1: - resolution: {integrity: sha1-p4wBK3HBfgXy4/ojGd0zBoLvs8s=, tarball: query-string/download/query-string-5.1.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - decode-uri-component: 0.2.0 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true - - /queue-microtask/1.2.3: - resolution: {integrity: sha1-SSkii7xyTfrEPg77BYyve2z7YkM=, tarball: queue-microtask/download/queue-microtask-1.2.3.tgz} - dev: true - - /randombytes/2.1.0: - resolution: {integrity: sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=, tarball: randombytes/download/randombytes-2.1.0.tgz} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /read-pkg-up/1.0.1: - resolution: {integrity: sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=, tarball: read-pkg-up/download/read-pkg-up-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - find-up: 1.1.2 - read-pkg: 1.1.0 - dev: true - - /read-pkg/1.1.0: - resolution: {integrity: sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=, tarball: read-pkg/download/read-pkg-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - load-json-file: 1.1.0 - normalize-package-data: 2.5.0 - path-type: 1.1.0 - dev: true - - /readable-stream/2.3.7: - resolution: {integrity: sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=, tarball: readable-stream/download/readable-stream-2.3.7.tgz} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream/3.6.0: - resolution: {integrity: sha1-M3u9o63AcGvT4CRCaihtS0sskZg=, tarball: readable-stream/download/readable-stream-3.6.0.tgz} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp/3.6.0: - resolution: {integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=, tarball: readdirp/download/readdirp-3.6.0.tgz} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.0 - dev: true - - /redent/1.0.0: - resolution: {integrity: sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=, tarball: redent/download/redent-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - indent-string: 2.1.0 - strip-indent: 1.0.1 - dev: true - - /regenerate-unicode-properties/9.0.0: - resolution: {integrity: sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY=, tarball: regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - - /regenerate/1.4.2: - resolution: {integrity: sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=, tarball: regenerate/download/regenerate-1.4.2.tgz} - dev: true - - /regenerator-runtime/0.13.9: - resolution: {integrity: sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=, tarball: regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1632822710900&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz} - - /regenerator-transform/0.14.5: - resolution: {integrity: sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=, tarball: regenerator-transform/download/regenerator-transform-0.14.5.tgz} - dependencies: - '@babel/runtime': 7.16.5 - dev: true - - /regex-not/1.0.2: - resolution: {integrity: sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=, tarball: regex-not/download/regex-not-1.0.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - dev: true - - /regexp.prototype.flags/1.3.1: - resolution: {integrity: sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=, tarball: regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - dev: true - - /regexpu-core/4.8.0: - resolution: {integrity: sha1-5WBbo2G2excYR4UBMnUC9EeamPA=, tarball: regexpu-core/download/regexpu-core-4.8.0.tgz} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 9.0.0 - regjsgen: 0.5.2 - regjsparser: 0.7.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.0.0 - dev: true - - /regjsgen/0.5.2: - resolution: {integrity: sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=, tarball: regjsgen/download/regjsgen-0.5.2.tgz} - dev: true - - /regjsparser/0.7.0: - resolution: {integrity: sha1-prZntUyIXhi1JVTLSWDvcRh+mWg=, tarball: regjsparser/download/regjsparser-0.7.0.tgz} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true - - /relateurl/0.2.7: - resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=, tarball: relateurl/download/relateurl-0.2.7.tgz} - engines: {node: '>= 0.10'} - dev: true - - /repeat-element/1.1.4: - resolution: {integrity: sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=, tarball: repeat-element/download/repeat-element-1.1.4.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string/1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=, tarball: repeat-string/download/repeat-string-1.6.1.tgz} - engines: {node: '>=0.10'} - dev: true - - /repeating/2.0.1: - resolution: {integrity: sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=, tarball: repeating/download/repeating-2.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-finite: 1.1.0 - dev: true - - /replace-ext/1.0.1: - resolution: {integrity: sha1-LW2ZbQShWFXZZ0Q2Md1fd4JbAWo=, tarball: replace-ext/download/replace-ext-1.0.1.tgz} - engines: {node: '>= 0.10'} - dev: true - - /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=, tarball: require-directory/download/require-directory-2.1.1.tgz} - engines: {node: '>=0.10.0'} - - /require-from-string/2.0.2: - resolution: {integrity: sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=, tarball: require-from-string/download/require-from-string-2.0.2.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /require-main-filename/2.0.0: - resolution: {integrity: sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=, tarball: require-main-filename/download/require-main-filename-2.0.0.tgz} - dev: false - - /resize-observer-polyfill/1.5.1: - resolution: {integrity: sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=, tarball: resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz} - dev: false - - /resolve-url/0.2.1: - resolution: {integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=, tarball: resolve-url/download/resolve-url-0.2.1.tgz} - deprecated: https://github.com/lydell/resolve-url#deprecated - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=, tarball: resolve/download/resolve-1.20.0.tgz} - dependencies: - is-core-module: 2.8.0 - path-parse: 1.0.7 - dev: true - - /responselike/1.0.2: - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=, tarball: responselike/download/responselike-1.0.2.tgz} - dependencies: - lowercase-keys: 1.0.1 - dev: true - - /restore-cursor/3.1.0: - resolution: {integrity: sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=, tarball: restore-cursor/download/restore-cursor-3.1.0.tgz} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.6 - dev: true - - /ret/0.1.15: - resolution: {integrity: sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=, tarball: ret/download/ret-0.1.15.tgz} - engines: {node: '>=0.12'} - dev: true - - /reusify/1.0.4: - resolution: {integrity: sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=, tarball: reusify/download/reusify-1.0.4.tgz} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf/2.7.1: - resolution: {integrity: sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=, tarball: rimraf/download/rimraf-2.7.1.tgz} - hasBin: true - dependencies: - glob: 7.2.0 - dev: true - - /rollup-plugin-purge-icons/0.7.0: - resolution: {integrity: sha1-RBm4ENXXXxu6OvcqI45wtKZ18Dw=, tarball: rollup-plugin-purge-icons/download/rollup-plugin-purge-icons-0.7.0.tgz} - engines: {node: '>= 12'} - dependencies: - '@purge-icons/core': 0.7.0 - '@purge-icons/generated': 0.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /rollup-plugin-terser/7.0.2_rollup@2.61.1: - resolution: {integrity: sha1-6Pu6SGmYGy3DWufopQLVxsBNMk0=, tarball: rollup-plugin-terser/download/rollup-plugin-terser-7.0.2.tgz} - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.16.0 - jest-worker: 26.6.2 - rollup: 2.61.1 - serialize-javascript: 4.0.0 - terser: 5.10.0 - transitivePeerDependencies: - - acorn - dev: true - - /rollup-plugin-visualizer/5.5.2: - resolution: {integrity: sha1-riEw7lrkotkB52TkkrcTV8uV7tc=, tarball: rollup-plugin-visualizer/download/rollup-plugin-visualizer-5.5.2.tgz} - engines: {node: '>=10.16'} - hasBin: true - peerDependencies: - rollup: ^2.0.0 - dependencies: - nanoid: 3.1.30 - open: 7.4.2 - source-map: 0.7.3 - yargs: 16.2.0 - dev: true - - /rollup/2.61.1: - resolution: {integrity: sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA==, tarball: rollup/download/rollup-2.61.1.tgz} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /run-async/2.4.1: - resolution: {integrity: sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=, tarball: run-async/download/run-async-2.4.1.tgz} - engines: {node: '>=0.12.0'} - dev: true - - /run-parallel/1.2.0: - resolution: {integrity: sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=, tarball: run-parallel/download/run-parallel-1.2.0.tgz} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /rxjs/7.4.0: - resolution: {integrity: sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg=, tarball: rxjs/download/rxjs-7.4.0.tgz} - dependencies: - tslib: 2.1.0 - dev: true - - /safe-buffer/5.1.2: - resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, tarball: safe-buffer/download/safe-buffer-5.1.2.tgz} - dev: true - - /safe-buffer/5.2.1: - resolution: {integrity: sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=, tarball: safe-buffer/download/safe-buffer-5.2.1.tgz} - dev: true - - /safe-regex/1.1.0: - resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=, tarball: safe-regex/download/safe-regex-1.1.0.tgz} - dependencies: - ret: 0.1.15 - dev: true - - /safer-buffer/2.1.2: - resolution: {integrity: sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=, tarball: safer-buffer/download/safer-buffer-2.1.2.tgz} - dev: true - - /sax/1.2.4: - resolution: {integrity: sha1-KBYjTiN4vdxOU1T6tcqold9xANk=, tarball: sax/download/sax-1.2.4.tgz} - dev: true - optional: true - - /scroll-into-view-if-needed/2.2.28: - resolution: {integrity: sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo=, tarball: scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz} - dependencies: - compute-scroll-into-view: 1.0.17 - dev: false - - /seek-bzip/1.0.6: - resolution: {integrity: sha1-NcQXH1WmgJFrUqB4WezztYV/IcQ=, tarball: seek-bzip/download/seek-bzip-1.0.6.tgz} - hasBin: true - dependencies: - commander: 2.20.3 - dev: true - - /semver-regex/2.0.0: - resolution: {integrity: sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=, tarball: semver-regex/download/semver-regex-2.0.0.tgz} - engines: {node: '>=6'} - dev: true - - /semver-truncate/1.1.2: - resolution: {integrity: sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=, tarball: semver-truncate/download/semver-truncate-1.1.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - semver: 5.7.1 - dev: true - - /semver/5.7.1: - resolution: {integrity: sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=, tarball: semver/download/semver-5.7.1.tgz} - hasBin: true - dev: true - - /semver/6.3.0: - resolution: {integrity: sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=, tarball: semver/download/semver-6.3.0.tgz} - hasBin: true - dev: true - - /semver/7.0.0: - resolution: {integrity: sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=, tarball: semver/download/semver-7.0.0.tgz} - hasBin: true - dev: true - - /sentence-case/3.0.4: - resolution: {integrity: sha1-NkWnuMEXx4f96HAgViJbtipFEx8=, tarball: sentence-case/download/sentence-case-3.0.4.tgz} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - upper-case-first: 2.0.2 - dev: true - - /serialize-javascript/4.0.0: - resolution: {integrity: sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=, tarball: serialize-javascript/download/serialize-javascript-4.0.0.tgz} - dependencies: - randombytes: 2.1.0 - dev: true - - /set-blocking/2.0.0: - resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=, tarball: set-blocking/download/set-blocking-2.0.0.tgz} - dev: false - - /set-value/2.0.1: - resolution: {integrity: sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=, tarball: set-value/download/set-value-2.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 - dev: true - - /shallow-equal/1.2.1: - resolution: {integrity: sha1-TBar+lYEOqINBQMk76aJQLDaedo=, tarball: shallow-equal/download/shallow-equal-1.2.1.tgz} - dev: false - - /shebang-command/1.2.0: - resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=, tarball: shebang-command/download/shebang-command-1.2.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - dev: true - - /shebang-command/2.0.0: - resolution: {integrity: sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=, tarball: shebang-command/download/shebang-command-2.0.0.tgz} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex/1.0.0: - resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=, tarball: shebang-regex/download/shebang-regex-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /shebang-regex/3.0.0: - resolution: {integrity: sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=, tarball: shebang-regex/download/shebang-regex-3.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /side-channel/1.0.4: - resolution: {integrity: sha1-785cj9wQTudRslxY1CkAEfpeos8=, tarball: side-channel/download/side-channel-1.0.4.tgz} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.1 - object-inspect: 1.12.0 - - /signal-exit/3.0.6: - resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==, tarball: signal-exit/download/signal-exit-3.0.6.tgz?cache=0&sync_timestamp=1637292968320&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.6.tgz} - dev: true - - /slash/3.0.0: - resolution: {integrity: sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=, tarball: slash/download/slash-3.0.0.tgz?cache=0&sync_timestamp=1632822671385&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fslash%2Fdownload%2Fslash-3.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /snake-case/3.0.4: - resolution: {integrity: sha1-Tyu9Vo6ZNavf1ZPzTGkdrbScRSw=, tarball: snake-case/download/snake-case-3.0.4.tgz} - dependencies: - dot-case: 3.0.4 - tslib: 2.3.1 - dev: true - - /snapdragon-node/2.1.1: - resolution: {integrity: sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=, tarball: snapdragon-node/download/snapdragon-node-2.1.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util/3.0.1: - resolution: {integrity: sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=, tarball: snapdragon-util/download/snapdragon-util-3.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /snapdragon/0.8.2: - resolution: {integrity: sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=, tarball: snapdragon/download/snapdragon-0.8.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - dev: true - - /sort-keys-length/1.0.1: - resolution: {integrity: sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=, tarball: sort-keys-length/download/sort-keys-length-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - sort-keys: 1.1.2 - dev: true - - /sort-keys/1.1.2: - resolution: {integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=, tarball: sort-keys/download/sort-keys-1.1.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-obj: 1.1.0 - dev: true - - /sort-keys/2.0.0: - resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=, tarball: sort-keys/download/sort-keys-2.0.0.tgz} - engines: {node: '>=4'} - dependencies: - is-plain-obj: 1.1.0 - dev: true - - /sortablejs/1.14.0: - resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==, tarball: sortablejs/download/sortablejs-1.14.0.tgz} - dev: false - - /source-map-js/1.0.1: - resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==, tarball: source-map-js/download/source-map-js-1.0.1.tgz} - engines: {node: '>=0.10.0'} - - /source-map-resolve/0.5.3: - resolution: {integrity: sha1-GQhmvs51U+H48mei7oLGBrVQmho=, tarball: source-map-resolve/download/source-map-resolve-0.5.3.tgz} - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.0 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 - dev: true - - /source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: source-map-support/download/source-map-support-0.5.21.tgz} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map-url/0.4.1: - resolution: {integrity: sha1-CvZmBadFpaL5HPG7+KevvCg97FY=, tarball: source-map-url/download/source-map-url-0.4.1.tgz} - dev: true - - /source-map/0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, tarball: source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.6.1: - resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=, tarball: source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz} - engines: {node: '>=0.10.0'} - - /source-map/0.7.3: - resolution: {integrity: sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=, tarball: source-map/download/source-map-0.7.3.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.7.3.tgz} - engines: {node: '>= 8'} - dev: true - - /source-map/0.8.0-beta.0: - resolution: {integrity: sha1-1MG7QsP37pJfAFknuhBwng0dHxE=, tarball: source-map/download/source-map-0.8.0-beta.0.tgz?cache=0&sync_timestamp=1632822727980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map%2Fdownload%2Fsource-map-0.8.0-beta.0.tgz} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: true - - /sourcemap-codec/1.4.8: - resolution: {integrity: sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=, tarball: sourcemap-codec/download/sourcemap-codec-1.4.8.tgz} - - /spdx-correct/3.1.1: - resolution: {integrity: sha1-3s6BrJweZxPl99G28X1Gj6U9iak=, tarball: spdx-correct/download/spdx-correct-3.1.1.tgz} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true - - /spdx-exceptions/2.3.0: - resolution: {integrity: sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=, tarball: spdx-exceptions/download/spdx-exceptions-2.3.0.tgz} - dev: true - - /spdx-expression-parse/3.0.1: - resolution: {integrity: sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=, tarball: spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 - dev: true - - /spdx-license-ids/3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==, tarball: spdx-license-ids/download/spdx-license-ids-3.0.11.tgz} - dev: true - - /split-string/3.1.0: - resolution: {integrity: sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=, tarball: split-string/download/split-string-3.1.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - dev: true - - /squeak/1.3.0: - resolution: {integrity: sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=, tarball: squeak/download/squeak-1.3.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - chalk: 1.1.3 - console-stream: 0.1.1 - lpad-align: 1.1.2 - dev: true - - /stable/0.1.8: - resolution: {integrity: sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=, tarball: stable/download/stable-0.1.8.tgz} - dev: true - - /static-extend/0.1.2: - resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=, tarball: static-extend/download/static-extend-0.1.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 - dev: true - - /statuses/1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=, tarball: statuses/download/statuses-1.5.0.tgz} - engines: {node: '>= 0.6'} - dev: true - - /strict-uri-encode/1.1.0: - resolution: {integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=, tarball: strict-uri-encode/download/strict-uri-encode-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /string-width/4.2.3: - resolution: {integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=, tarball: string-width/download/string-width-4.2.3.tgz} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - /string.prototype.matchall/4.0.6: - resolution: {integrity: sha1-Wrtdq8lMew6iOA9lumELOlRLFfo=, tarball: string.prototype.matchall/download/string.prototype.matchall-4.0.6.tgz} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - get-intrinsic: 1.1.1 - has-symbols: 1.0.2 - internal-slot: 1.0.3 - regexp.prototype.flags: 1.3.1 - side-channel: 1.0.4 - dev: true - - /string.prototype.trimend/1.0.4: - resolution: {integrity: sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=, tarball: string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - dev: true - - /string.prototype.trimstart/1.0.4: - resolution: {integrity: sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=, tarball: string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - dev: true - - /string_decoder/1.1.1: - resolution: {integrity: sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=, tarball: string_decoder/download/string_decoder-1.1.1.tgz} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder/1.3.0: - resolution: {integrity: sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=, tarball: string_decoder/download/string_decoder-1.3.0.tgz} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /stringify-object/3.3.0: - resolution: {integrity: sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=, tarball: stringify-object/download/stringify-object-3.3.0.tgz} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: true - - /strip-ansi/3.0.1: - resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=, tarball: strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1632822728166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - ansi-regex: 2.1.1 - dev: true - - /strip-ansi/6.0.1: - resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=, tarball: strip-ansi/download/strip-ansi-6.0.1.tgz?cache=0&sync_timestamp=1632822728166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.1.tgz} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - - /strip-bom/2.0.0: - resolution: {integrity: sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=, tarball: strip-bom/download/strip-bom-2.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-utf8: 0.2.1 - dev: true - - /strip-comments/2.0.1: - resolution: {integrity: sha1-StEcP7ysF3pnpArCJMoznKHBups=, tarball: strip-comments/download/strip-comments-2.0.1.tgz} - engines: {node: '>=10'} - dev: true - - /strip-dirs/2.1.0: - resolution: {integrity: sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=, tarball: strip-dirs/download/strip-dirs-2.1.0.tgz} - dependencies: - is-natural-number: 4.0.1 - dev: true - - /strip-eof/1.0.0: - resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=, tarball: strip-eof/download/strip-eof-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /strip-final-newline/2.0.0: - resolution: {integrity: sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=, tarball: strip-final-newline/download/strip-final-newline-2.0.0.tgz} - engines: {node: '>=6'} - dev: true - - /strip-indent/1.0.1: - resolution: {integrity: sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=, tarball: strip-indent/download/strip-indent-1.0.1.tgz} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - get-stdin: 4.0.1 - dev: true - - /strip-outer/1.0.1: - resolution: {integrity: sha1-sv0qv2YEudHmATBXGV34Nrip1jE=, tarball: strip-outer/download/strip-outer-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /strnum/1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, tarball: strnum/download/strnum-1.0.5.tgz} - dev: true - - /supports-color/2.0.0: - resolution: {integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=, tarball: supports-color/download/supports-color-2.0.0.tgz} - engines: {node: '>=0.8.0'} - dev: true - - /supports-color/3.2.3: - resolution: {integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=, tarball: supports-color/download/supports-color-3.2.3.tgz} - engines: {node: '>=0.8.0'} - dependencies: - has-flag: 1.0.0 - dev: true - - /supports-color/5.5.0: - resolution: {integrity: sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=, tarball: supports-color/download/supports-color-5.5.0.tgz} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color/7.2.0: - resolution: {integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=, tarball: supports-color/download/supports-color-7.2.0.tgz} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /svg-baker/1.7.0: - resolution: {integrity: sha1-g2f3jYdVUMUv5HVvcwPVxdfC6ac=, tarball: svg-baker/download/svg-baker-1.7.0.tgz} - dependencies: - bluebird: 3.7.2 - clone: 2.1.2 - he: 1.2.0 - image-size: 0.5.5 - loader-utils: 1.4.0 - merge-options: 1.0.1 - micromatch: 3.1.0 - postcss: 5.2.18 - postcss-prefix-selector: 1.14.0_postcss@5.2.18 - posthtml-rename-id: 1.0.12 - posthtml-svg-mode: 1.0.3 - query-string: 4.3.4 - traverse: 0.6.6 - dev: true - - /svg-tags/1.0.0: - resolution: {integrity: sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=, tarball: svg-tags/download/svg-tags-1.0.0.tgz} - dev: true - - /svgo/2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, tarball: svgo/download/svgo-2.8.0.tgz} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.2.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: true - - /systemjs/6.11.0: - resolution: {integrity: sha1-jfjnT8BYIubEAXCqQJucpkgzMV8=, tarball: systemjs/download/systemjs-6.11.0.tgz} - dev: true - - /tar-stream/1.6.2: - resolution: {integrity: sha1-jqVdqzeXIlPZqa+Q/c1VmuQ1xVU=, tarball: tar-stream/download/tar-stream-1.6.2.tgz} - engines: {node: '>= 0.8.0'} - dependencies: - bl: 1.2.3 - buffer-alloc: 1.2.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - readable-stream: 2.3.7 - to-buffer: 1.1.1 - xtend: 4.0.2 - dev: true - - /temp-dir/1.0.0: - resolution: {integrity: sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=, tarball: temp-dir/download/temp-dir-1.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /temp-dir/2.0.0: - resolution: {integrity: sha1-vekrBb3+sVFugEycAK1FF38xMh4=, tarball: temp-dir/download/temp-dir-2.0.0.tgz} - engines: {node: '>=8'} - dev: true - - /tempfile/2.0.0: - resolution: {integrity: sha1-awRGhWqbERTRhW/8vlCczLCXcmU=, tarball: tempfile/download/tempfile-2.0.0.tgz} - engines: {node: '>=4'} - dependencies: - temp-dir: 1.0.0 - uuid: 3.4.0 - dev: true - - /tempy/0.6.0: - resolution: {integrity: sha1-ZeLDWrwG8RJKl/OHsIMDRCveWfM=, tarball: tempy/download/tempy-0.6.0.tgz} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - - /terser/4.8.0: - resolution: {integrity: sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=, tarball: terser/download/terser-4.8.0.tgz} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - commander: 2.20.3 - source-map: 0.6.1 - source-map-support: 0.5.21 - dev: true - - /terser/5.10.0: - resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==, tarball: terser/download/terser-5.10.0.tgz} - engines: {node: '>=10'} - hasBin: true - peerDependencies: - acorn: ^8.5.0 - peerDependenciesMeta: - acorn: - optional: true - dependencies: - commander: 2.20.3 - source-map: 0.7.3 - source-map-support: 0.5.21 - dev: true - - /through/2.3.8: - resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, tarball: through/download/through-2.3.8.tgz?cache=0&sync_timestamp=1632822694437&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fthrough%2Fdownload%2Fthrough-2.3.8.tgz} - dev: true - - /timed-out/4.0.1: - resolution: {integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=, tarball: timed-out/download/timed-out-4.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /tinycolor2/1.4.2: - resolution: {integrity: sha1-P2pNEHGtB2dtf6Ry4frECnGdiAM=, tarball: tinycolor2/download/tinycolor2-1.4.2.tgz} - dev: true - - /tmp/0.0.33: - resolution: {integrity: sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=, tarball: tmp/download/tmp-0.0.33.tgz} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true - - /to-buffer/1.1.1: - resolution: {integrity: sha1-STvUj2LXxD/N7TE6A9ytsuEhOoA=, tarball: to-buffer/download/to-buffer-1.1.1.tgz} - dev: true - - /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=, tarball: to-fast-properties/download/to-fast-properties-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /to-object-path/0.3.0: - resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=, tarball: to-object-path/download/to-object-path-0.3.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /to-regex-range/2.1.1: - resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=, tarball: to-regex-range/download/to-regex-range-2.1.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - - /to-regex-range/5.0.1: - resolution: {integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=, tarball: to-regex-range/download/to-regex-range-5.0.1.tgz} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /to-regex/3.0.2: - resolution: {integrity: sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=, tarball: to-regex/download/to-regex-3.0.2.tgz} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - dev: true - - /tr46/1.0.1: - resolution: {integrity: sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=, tarball: tr46/download/tr46-1.0.1.tgz} - dependencies: - punycode: 2.1.1 - dev: true - - /traverse/0.6.6: - resolution: {integrity: sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=, tarball: traverse/download/traverse-0.6.6.tgz} - dev: true - - /trim-newlines/1.0.0: - resolution: {integrity: sha1-WIeWa7WCpFA6QetST301ARgVphM=, tarball: trim-newlines/download/trim-newlines-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /trim-repeated/1.0.0: - resolution: {integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE=, tarball: trim-repeated/download/trim-repeated-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /tslib/2.1.0: - resolution: {integrity: sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo=, tarball: tslib/download/tslib-2.1.0.tgz} - dev: true - - /tslib/2.3.0: - resolution: {integrity: sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=, tarball: tslib/download/tslib-2.3.0.tgz} - dev: false - - /tslib/2.3.1: - resolution: {integrity: sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE=, tarball: tslib/download/tslib-2.3.1.tgz} - dev: true - - /tunnel-agent/0.6.0: - resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=, tarball: tunnel-agent/download/tunnel-agent-0.6.0.tgz} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /type-fest/0.11.0: - resolution: {integrity: sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=, tarball: type-fest/download/type-fest-0.11.0.tgz} - engines: {node: '>=8'} - dev: true - - /type-fest/0.16.0: - resolution: {integrity: sha1-MkC4kaeLDerpENvrhlU+VSoUiGA=, tarball: type-fest/download/type-fest-0.16.0.tgz} - engines: {node: '>=10'} - dev: true - - /type-fest/0.21.3: - resolution: {integrity: sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=, tarball: type-fest/download/type-fest-0.21.3.tgz} - engines: {node: '>=10'} - dev: true - - /typescript/4.5.4: - resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==, tarball: typescript/download/typescript-4.5.4.tgz} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - - /unbox-primitive/1.0.1: - resolution: {integrity: sha1-CF4hViXsMWJXTciFmr7nilmxRHE=, tarball: unbox-primitive/download/unbox-primitive-1.0.1.tgz} - dependencies: - function-bind: 1.1.1 - has-bigints: 1.0.1 - has-symbols: 1.0.2 - which-boxed-primitive: 1.0.2 - dev: true - - /unbzip2-stream/1.4.3: - resolution: {integrity: sha1-sNoExDcTEd93HNwhXofyEwmRrOc=, tarball: unbzip2-stream/download/unbzip2-stream-1.4.3.tgz} - dependencies: - buffer: 5.7.1 - through: 2.3.8 - dev: true - - /unicode-canonical-property-names-ecmascript/2.0.0: - resolution: {integrity: sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=, tarball: unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /unicode-match-property-ecmascript/2.0.0: - resolution: {integrity: sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM=, tarball: unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.0.0 - dev: true - - /unicode-match-property-value-ecmascript/2.0.0: - resolution: {integrity: sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ=, tarball: unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /unicode-property-aliases-ecmascript/2.0.0: - resolution: {integrity: sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g=, tarball: unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /union-value/1.0.1: - resolution: {integrity: sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=, tarball: union-value/download/union-value-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 2.0.1 - dev: true - - /unique-string/2.0.0: - resolution: {integrity: sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0=, tarball: unique-string/download/unique-string-2.0.0.tgz} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - - /universalify/2.0.0: - resolution: {integrity: sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=, tarball: universalify/download/universalify-2.0.0.tgz} - engines: {node: '>= 10.0.0'} - dev: true - - /unpipe/1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=, tarball: unpipe/download/unpipe-1.0.0.tgz} - engines: {node: '>= 0.8'} - dev: true - - /unset-value/1.0.0: - resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=, tarball: unset-value/download/unset-value-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - dev: true - - /upath/1.2.0: - resolution: {integrity: sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=, tarball: upath/download/upath-1.2.0.tgz} - engines: {node: '>=4'} - dev: true - - /upper-case-first/2.0.2: - resolution: {integrity: sha1-mSwyc/iCq9GdHgKJTMFHEX+EQyQ=, tarball: upper-case-first/download/upper-case-first-2.0.2.tgz} - dependencies: - tslib: 2.3.1 - dev: true - - /upper-case/2.0.2: - resolution: {integrity: sha1-2JgQgj+qsd8VSbfZenb4Ziuub3o=, tarball: upper-case/download/upper-case-2.0.2.tgz} - dependencies: - tslib: 2.3.1 - dev: true - - /uri-js/4.4.1: - resolution: {integrity: sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=, tarball: uri-js/download/uri-js-4.4.1.tgz} - dependencies: - punycode: 2.1.1 - dev: true - - /urix/0.1.0: - resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=, tarball: urix/download/urix-0.1.0.tgz} - deprecated: Please see https://github.com/lydell/urix#deprecated - dev: true - - /url-parse-lax/1.0.0: - resolution: {integrity: sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=, tarball: url-parse-lax/download/url-parse-lax-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - prepend-http: 1.0.4 - dev: true - - /url-parse-lax/3.0.0: - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=, tarball: url-parse-lax/download/url-parse-lax-3.0.0.tgz} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 - dev: true - - /url-to-options/1.0.1: - resolution: {integrity: sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=, tarball: url-to-options/download/url-to-options-1.0.1.tgz} - engines: {node: '>= 4'} - dev: true - - /use/3.1.1: - resolution: {integrity: sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=, tarball: use/download/use-3.1.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=, tarball: util-deprecate/download/util-deprecate-1.0.2.tgz} - dev: true - - /utils-merge/1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=, tarball: utils-merge/download/utils-merge-1.0.1.tgz} - engines: {node: '>= 0.4.0'} - dev: true - - /uuid/3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, tarball: uuid/download/uuid-3.4.0.tgz} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - dev: true - - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha1-/JH2uce6FchX9MssXe/uw51PQQo=, tarball: validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true - - /vary/1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=, tarball: vary/download/vary-1.1.2.tgz} - engines: {node: '>= 0.8'} - dev: true - - /vite-plugin-compression/0.3.6_vite@2.7.6: - resolution: {integrity: sha512-aSskQCJsP3VQ8PsnY+vO7UfD5qoFMOEuzg0PG2E9Zqyx+ARmc3wr9KCgOFraZOFW1Y4UAa5BR0SMTjoxHRMJoQ==, tarball: vite-plugin-compression/download/vite-plugin-compression-0.3.6.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - chalk: 4.1.2 - debug: 4.3.3 - fs-extra: 10.0.0 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-html/2.1.1_vite@2.7.6: - resolution: {integrity: sha1-AUtEEmpy1FnNRgvRVoAMIl0STL4=, tarball: vite-plugin-html/download/vite-plugin-html-2.1.1.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - '@rollup/pluginutils': 4.1.2 - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - ejs: 3.1.6 - fs-extra: 10.0.0 - html-minifier-terser: 5.1.1 - vite: 2.7.6_less@4.1.2 - dev: true - - /vite-plugin-imagemin/0.4.6_vite@2.7.6: - resolution: {integrity: sha1-9VHaywUpyjJ6gNL1gwtcwMy1Z3o=, tarball: vite-plugin-imagemin/download/vite-plugin-imagemin-0.4.6.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - '@types/imagemin': 7.0.1 - '@types/imagemin-gifsicle': 7.0.1 - '@types/imagemin-jpegtran': 5.0.1 - '@types/imagemin-mozjpeg': 8.0.1 - '@types/imagemin-optipng': 5.2.1 - '@types/imagemin-svgo': 9.0.1 - '@types/imagemin-webp': 5.1.2 - '@types/svgo': 2.6.0 - chalk: 4.1.2 - debug: 4.3.3 - esbuild: 0.13.15 - fs-extra: 10.0.0 - imagemin: 7.0.1 - imagemin-gifsicle: 7.0.0 - imagemin-jpegtran: 7.0.0 - imagemin-mozjpeg: 9.0.0 - imagemin-optipng: 8.0.0 - imagemin-pngquant: 9.0.2 - imagemin-svgo: 9.0.0 - imagemin-webp: 6.0.0 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-mock/2.9.6_mockjs@1.1.0+vite@2.7.6: - resolution: {integrity: sha1-BN0j3muqBS+qW5rTF1FMkNYgXiU=, tarball: vite-plugin-mock/download/vite-plugin-mock-2.9.6.tgz} - engines: {node: '>=12.0.0'} - peerDependencies: - mockjs: '>=1.1.0' - vite: '>=2.0.0' - dependencies: - '@rollup/plugin-node-resolve': 13.1.1 - '@types/mockjs': 1.0.4 - chalk: 4.1.2 - chokidar: 3.5.2 - connect: 3.7.0 - debug: 4.3.3 - esbuild: 0.11.3 - fast-glob: 3.2.7 - mockjs: 1.1.0 - path-to-regexp: 6.2.0 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /vite-plugin-purge-icons/0.7.0_vite@2.7.6: - resolution: {integrity: sha1-xGADdDj9cTchUzYMy559l7Aw+1g=, tarball: vite-plugin-purge-icons/download/vite-plugin-purge-icons-0.7.0.tgz} - engines: {node: '>= 12'} - peerDependencies: - vite: ^2.0.0-beta.3 - dependencies: - '@purge-icons/core': 0.7.0 - '@purge-icons/generated': 0.7.0 - rollup-plugin-purge-icons: 0.7.0 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-pwa/0.11.12_vite@2.7.6: - resolution: {integrity: sha512-XqFmA4y9C4RBb5osSsa26GVwOSwbzf2GNVcT5+06KYYdguqLpuI9FW7iV/akZqg0OUNUpH4tHfme8SnHA4PIXA==, tarball: vite-plugin-pwa/download/vite-plugin-pwa-0.11.12.tgz} - peerDependencies: - vite: ^2.0.0 - dependencies: - debug: 4.3.3 - fast-glob: 3.2.7 - pretty-bytes: 5.6.0 - rollup: 2.61.1 - vite: 2.7.6_less@4.1.2 - workbox-build: 6.4.2 - workbox-window: 6.4.2 - transitivePeerDependencies: - - '@types/babel__core' - - acorn - - supports-color - dev: true - - /vite-plugin-style-import/1.4.0_vite@2.7.6: - resolution: {integrity: sha512-EGAx0zVGUkwAwvDaC66zxgzXyHE0CwAXp4O1xGKnpMcrDT9L1nlojiCjjLRQzL8C3zwY1jn9ilq+m0VABKiiLg==, tarball: vite-plugin-style-import/download/vite-plugin-style-import-1.4.0.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - '@rollup/pluginutils': 4.1.2 - change-case: 4.1.2 - debug: 4.3.3 - es-module-lexer: 0.9.3 - fs-extra: 10.0.0 - magic-string: 0.25.7 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-svg-icons/1.0.5_vite@2.7.6: - resolution: {integrity: sha1-gHHj2nxQ1WFOk3JlW5uR+vkd9ZE=, tarball: vite-plugin-svg-icons/download/vite-plugin-svg-icons-1.0.5.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - '@types/svgo': 2.6.0 - cors: 2.8.5 - debug: 4.3.3 - etag: 1.8.1 - fs-extra: 10.0.0 - svg-baker: 1.7.0 - svgo: 2.8.0 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-theme/0.8.1_vite@2.7.6: - resolution: {integrity: sha1-kAglalilfcqBAE/6HeY86fYL+es=, tarball: vite-plugin-theme/download/vite-plugin-theme-0.8.1.tgz} - peerDependencies: - vite: '>=2.0.0-beta.49' - dependencies: - '@types/node': 14.18.2 - '@types/tinycolor2': 1.4.3 - chalk: 4.1.2 - clean-css: 5.2.2 - debug: 4.3.3 - esbuild: 0.11.23 - esbuild-plugin-alias: 0.1.2 - tinycolor2: 1.4.2 - vite: 2.7.6_less@4.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /vite-plugin-vue-setup-extend/0.1.0_vite@2.7.6: - resolution: {integrity: sha1-nwjvu8Ku0QP1SbNpbe5dRi2yPzg=, tarball: vite-plugin-vue-setup-extend/download/vite-plugin-vue-setup-extend-0.1.0.tgz} - peerDependencies: - vite: '>=2.0.0' - dependencies: - '@vue/compiler-sfc': 3.2.21 - magic-string: 0.25.7 - vite: 2.7.6_less@4.1.2 - dev: true - - /vite-plugin-windicss/1.6.1_vite@2.7.6: - resolution: {integrity: sha512-63uv4HqBxtSZB0WOtrZS8yhyfQPgGQwYgcBald+/BpLSlYJREcDKgX9Xd/qDgTAjpDRozxKQj/JWreIlyIahGg==, tarball: vite-plugin-windicss/download/vite-plugin-windicss-1.6.1.tgz} - peerDependencies: - vite: ^2.0.1 - dependencies: - '@windicss/plugin-utils': 1.6.1 - debug: 4.3.3 - kolorist: 1.5.1 - vite: 2.7.6_less@4.1.2 - windicss: 3.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /vite/2.7.6_less@4.1.2: - resolution: {integrity: sha512-PBNoc87rDYLtkpFU9dbVeGdbcyKzz6c34oScqivE3FEa3BhVa4ASupCzcz0eDIiSECovfLcQnLUJt9vhiEU08g==, tarball: vite/download/vite-2.7.6.tgz} - engines: {node: '>=12.2.0'} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true - dependencies: - esbuild: 0.13.15 - less: 4.1.2 - postcss: 8.4.5 - resolve: 1.20.0 - rollup: 2.61.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /vue-demi/0.12.1_vue@3.2.26: - resolution: {integrity: sha1-9+GO++z/0RqwadFHLXoG4xm0F0w=, tarball: vue-demi/download/vue-demi-0.12.1.tgz} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - dependencies: - vue: 3.2.26 - dev: false - - /vue-i18n/9.1.9_vue@3.2.26: - resolution: {integrity: sha1-y1PgarXMW37tWTMvFRyvSNR76bs=, tarball: vue-i18n/download/vue-i18n-9.1.9.tgz} - engines: {node: '>= 10'} - peerDependencies: - vue: ^3.0.0 - dependencies: - '@intlify/core-base': 9.1.9 - '@intlify/shared': 9.1.9 - '@intlify/vue-devtools': 9.1.9 - '@vue/devtools-api': 6.0.0-beta.21.1 - vue: 3.2.26 - dev: false - - /vue-router/4.0.12_vue@3.2.26: - resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==, tarball: vue-router/download/vue-router-4.0.12.tgz} - peerDependencies: - vue: ^3.0.0 - dependencies: - '@vue/devtools-api': 6.0.0-beta.21.1 - vue: 3.2.26 - dev: false - - /vue-types/3.0.2_vue@3.2.26: - resolution: {integrity: sha1-7BbgXUEsA4Ji/B76TOuWR+f7YB0=, tarball: vue-types/download/vue-types-3.0.2.tgz} - engines: {node: '>=10.15.0'} - peerDependencies: - vue: ^3.0.0 - dependencies: - is-plain-object: 3.0.1 - vue: 3.2.26 - dev: false - - /vue-types/4.1.1_vue@3.2.26: - resolution: {integrity: sha1-fXpOSgEkmlG22j+qMBJIwupfW5c=, tarball: vue-types/download/vue-types-4.1.1.tgz} - engines: {node: '>=12.16.0'} - peerDependencies: - vue: ^2.0.0 || ^3.0.0 - dependencies: - is-plain-object: 5.0.0 - vue: 3.2.26 - dev: false - - /vue/3.2.26: - resolution: {integrity: sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg==, tarball: vue/download/vue-3.2.26.tgz} - dependencies: - '@vue/compiler-dom': 3.2.26 - '@vue/compiler-sfc': 3.2.26 - '@vue/runtime-dom': 3.2.26 - '@vue/server-renderer': 3.2.26_vue@3.2.26 - '@vue/shared': 3.2.26 - dev: false - - /warning/4.0.3: - resolution: {integrity: sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=, tarball: warning/download/warning-4.0.3.tgz} - dependencies: - loose-envify: 1.4.0 - dev: false - - /wcwidth/1.0.1: - resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=, tarball: wcwidth/download/wcwidth-1.0.1.tgz} - dependencies: - defaults: 1.0.3 - dev: true - - /webidl-conversions/4.0.2: - resolution: {integrity: sha1-qFWYCx8LazWbodXZ+zmulB+qY60=, tarball: webidl-conversions/download/webidl-conversions-4.0.2.tgz} - dev: true - - /whatwg-url/7.1.0: - resolution: {integrity: sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=, tarball: whatwg-url/download/whatwg-url-7.1.0.tgz} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - - /which-boxed-primitive/1.0.2: - resolution: {integrity: sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=, tarball: which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.6 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-module/2.0.0: - resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=, tarball: which-module/download/which-module-2.0.0.tgz} - dev: false - - /which/1.3.1: - resolution: {integrity: sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=, tarball: which/download/which-1.3.1.tgz} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which/2.0.2: - resolution: {integrity: sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=, tarball: which/download/which-2.0.2.tgz} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /windicss/3.4.0: - resolution: {integrity: sha512-X+9Y1/FPxX253Xo4Hk/qfVuvoAxgKx686Z6yHxmBFMH7wRCPdRO42na9k/yEnrW6EqCFJP/GcMIHn3QENaE42g==, tarball: windicss/download/windicss-3.4.0.tgz} - engines: {node: '>= 12'} - hasBin: true - dev: true - - /workbox-background-sync/6.4.2: - resolution: {integrity: sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==, tarball: workbox-background-sync/download/workbox-background-sync-6.4.2.tgz} - dependencies: - idb: 6.1.5 - workbox-core: 6.4.2 - dev: true - - /workbox-broadcast-update/6.4.2: - resolution: {integrity: sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==, tarball: workbox-broadcast-update/download/workbox-broadcast-update-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-build/6.4.2: - resolution: {integrity: sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==, tarball: workbox-build/download/workbox-build-6.4.2.tgz} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.1_ajv@8.8.2 - '@babel/core': 7.16.5 - '@babel/preset-env': 7.16.5_@babel+core@7.16.5 - '@babel/runtime': 7.16.5 - '@rollup/plugin-babel': 5.3.0_@babel+core@7.16.5+rollup@2.61.1 - '@rollup/plugin-node-resolve': 11.2.1_rollup@2.61.1 - '@rollup/plugin-replace': 2.4.2_rollup@2.61.1 - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.8.2 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.0 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.61.1 - rollup-plugin-terser: 7.0.2_rollup@2.61.1 - source-map: 0.8.0-beta.0 - source-map-url: 0.4.1 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.4.2 - workbox-broadcast-update: 6.4.2 - workbox-cacheable-response: 6.4.2 - workbox-core: 6.4.2 - workbox-expiration: 6.4.2 - workbox-google-analytics: 6.4.2 - workbox-navigation-preload: 6.4.2 - workbox-precaching: 6.4.2 - workbox-range-requests: 6.4.2 - workbox-recipes: 6.4.2 - workbox-routing: 6.4.2 - workbox-strategies: 6.4.2 - workbox-streams: 6.4.2 - workbox-sw: 6.4.2 - workbox-window: 6.4.2 - transitivePeerDependencies: - - '@types/babel__core' - - acorn - - supports-color - dev: true - - /workbox-cacheable-response/6.4.2: - resolution: {integrity: sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==, tarball: workbox-cacheable-response/download/workbox-cacheable-response-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-core/6.4.2: - resolution: {integrity: sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==, tarball: workbox-core/download/workbox-core-6.4.2.tgz} - dev: true - - /workbox-expiration/6.4.2: - resolution: {integrity: sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==, tarball: workbox-expiration/download/workbox-expiration-6.4.2.tgz} - dependencies: - idb: 6.1.5 - workbox-core: 6.4.2 - dev: true - - /workbox-google-analytics/6.4.2: - resolution: {integrity: sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==, tarball: workbox-google-analytics/download/workbox-google-analytics-6.4.2.tgz} - dependencies: - workbox-background-sync: 6.4.2 - workbox-core: 6.4.2 - workbox-routing: 6.4.2 - workbox-strategies: 6.4.2 - dev: true - - /workbox-navigation-preload/6.4.2: - resolution: {integrity: sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==, tarball: workbox-navigation-preload/download/workbox-navigation-preload-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-precaching/6.4.2: - resolution: {integrity: sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==, tarball: workbox-precaching/download/workbox-precaching-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - workbox-routing: 6.4.2 - workbox-strategies: 6.4.2 - dev: true - - /workbox-range-requests/6.4.2: - resolution: {integrity: sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==, tarball: workbox-range-requests/download/workbox-range-requests-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-recipes/6.4.2: - resolution: {integrity: sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==, tarball: workbox-recipes/download/workbox-recipes-6.4.2.tgz} - dependencies: - workbox-cacheable-response: 6.4.2 - workbox-core: 6.4.2 - workbox-expiration: 6.4.2 - workbox-precaching: 6.4.2 - workbox-routing: 6.4.2 - workbox-strategies: 6.4.2 - dev: true - - /workbox-routing/6.4.2: - resolution: {integrity: sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==, tarball: workbox-routing/download/workbox-routing-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-strategies/6.4.2: - resolution: {integrity: sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==, tarball: workbox-strategies/download/workbox-strategies-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - dev: true - - /workbox-streams/6.4.2: - resolution: {integrity: sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==, tarball: workbox-streams/download/workbox-streams-6.4.2.tgz} - dependencies: - workbox-core: 6.4.2 - workbox-routing: 6.4.2 - dev: true - - /workbox-sw/6.4.2: - resolution: {integrity: sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==, tarball: workbox-sw/download/workbox-sw-6.4.2.tgz} - dev: true - - /workbox-window/6.4.2: - resolution: {integrity: sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==, tarball: workbox-window/download/workbox-window-6.4.2.tgz} - dependencies: - '@types/trusted-types': 2.0.2 - workbox-core: 6.4.2 - dev: true - - /wrap-ansi/6.2.0: - resolution: {integrity: sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=, tarball: wrap-ansi/download/wrap-ansi-6.2.0.tgz} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false - - /wrap-ansi/7.0.0: - resolution: {integrity: sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=, tarball: wrap-ansi/download/wrap-ansi-7.0.0.tgz} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=, tarball: wrappy/download/wrappy-1.0.2.tgz} - dev: true - - /xtend/4.0.2: - resolution: {integrity: sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=, tarball: xtend/download/xtend-4.0.2.tgz} - engines: {node: '>=0.4'} - dev: true - - /y18n/4.0.3: - resolution: {integrity: sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=, tarball: y18n/download/y18n-4.0.3.tgz} - dev: false - - /y18n/5.0.8: - resolution: {integrity: sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=, tarball: y18n/download/y18n-5.0.8.tgz} - engines: {node: '>=10'} - dev: true - - /yallist/2.1.2: - resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=, tarball: yallist/download/yallist-2.1.2.tgz} - dev: true - - /yargs-parser/18.1.3: - resolution: {integrity: sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=, tarball: yargs-parser/download/yargs-parser-18.1.3.tgz} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: false - - /yargs-parser/20.2.9: - resolution: {integrity: sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=, tarball: yargs-parser/download/yargs-parser-20.2.9.tgz} - engines: {node: '>=10'} - dev: true - - /yargs/15.4.1: - resolution: {integrity: sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=, tarball: yargs/download/yargs-15.4.1.tgz} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: false - - /yargs/16.2.0: - resolution: {integrity: sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=, tarball: yargs/download/yargs-16.2.0.tgz} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - - /yauzl/2.10.0: - resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=, tarball: yauzl/download/yauzl-2.10.0.tgz} - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - dev: true - - /zrender/5.2.1: - resolution: {integrity: sha1-X0u9qRW6bUErCxncJDG+qtBUF7s=, tarball: zrender/download/zrender-5.2.1.tgz} - dependencies: - tslib: 2.3.0 - dev: false diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..a47ef4f --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {}, + }, +}; diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..bcaa5c5 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,10 @@ +module.exports = { + printWidth: 100, + semi: true, + vueIndentScriptAndStyle: true, + singleQuote: false, + trailingComma: 'all', + proseWrap: 'never', + htmlWhitespaceSensitivity: 'strict', + endOfLine: 'auto', +}; diff --git a/public/resource/img/pwa-192x192.png b/public/resource/img/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..00fb815215e1fcb171d1c62fca6c54018663cb72 GIT binary patch literal 12205 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 T8d1~#s@^3;WQD7Q^!)!1H*Tu% literal 0 HcmV?d00001 diff --git a/public/resource/img/pwa-512x512.png b/public/resource/img/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..a41707331ae71ba92e29e379848fcc7f0981025d GIT binary patch literal 52656 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%0D7hT>&zg3df1F99%CWq#S|Q{H}GYQT}R9 z-4w^T^jMrY30ml#25rJ4)U<O_W?4%ZxB&b~tc*+l$1oZ3OEQ7C!YRd#iLOF~A-Dp@ zS(UP>9S4THf>f09KZZ|cFS|Zl@#*^S8MFonmzeOTNYyC}XBpC}l*ssr`FG`&DEVUx z?za-k4GeH<ds*p{Vj;!svTPc)(wbAPH$H;VrKaZ%#+h$#IFJv+IgTg4@OZOoHRWiT zi$PLM<WIVw^F{leo&)jk^Dd+9TT<FQY>`qnlXtB0zr{lMYnCvpnl!4SwlV7;#_sE- z#?&)y<jkadG|K703&=tQ(Ejt(_b}JQ`&?&M_K*VRj>>4SsG}yIIyXqgG7YGs6wGwU z;D}87wC={_lgZvN^7PtK<zrJ?tJu$0pQRT|%H>md%$CF~t_F%4sm-)XP%6ShOqeLB zTf`dv`_8`BA7iaTD@V4l=McNtBi43N8?P5$(<RO$>}p}9U3GW#DgP&bl5&Hz=NhAP z;EdPs-+Jp!F?H>x72Rlr(yStDY%AWXJ*wWy`+cKo*;jKw`hb(bO|@&y$Man-jC-Z3 zT3JW|9*q~D-z|POu9`nRAR87Sp{Bdzf$%61eF(2YJf&SWNbntS${P5~x!cmS0jr~g zcG9ILY2DvVZ5+;x9gUv{omFI(q!mof84fA<aXY8jgue<VUe9+FZ5m~1vPAqgIimeQ zQa~~l^u3*dD~9R!XQwxs;2Oarg8eXHoiN*UiHBkSuO@j8S#1wLhS7eQwd_yr8e(-u z2OMtuytZXxV;daOaLp2}Lo}np)qC4mC)5XO=MaG@sIH-S+(SqwejOGmKy(5G8;gK! zl5I>vCqMy%NS)yGFa?FS*|3wue19d4n^*!cJ|$tNaGvLPaQ_!#%5%|UbicI~KH1`N zC_|ndQ{hzB{Bm&$5q9D~MN)0X-BgeL?J*9fq<2qeaa#&o9y^ikhr?Do<q3B@y;<dQ zb%t{~IF**w2Jt&QA054D);^OKwVE5fdd_lCBSuE6$T^M*&dZe&z2DNLS_Slh!b4O; z*uJri5Bq7^Z(vWmC5%#_7<QNe|NXJ{bD|>(bZT1SK$&+U7@3fB$atvlXo42}_fTCA zh_2B)edo<u<jj(H-)8_+>;HZW;edn>dH9WO%LVaYpM*J*XG^|THKe7(Ay?AIrNmI} zKqoO4crI_Bfk*k=Y8U(-K+B`0DQDH(F83uan_{{S10LXYa2^l$S&c_v5;_|sKaY>4 z-mJAdtv8$we|alOLSUf4+}z4sXwN#Vz4ZcnTaHX>Q0z^>@@D?w?z6jF><klizZ2J1 z<yx+^8yRu{;d6<xF#}615#F<=6yUD|lr89L?-U1hnHCg8<+&O|P$qd4Z+_z7;t|KX z04B$>E4DY_gV=bqe5P_Tr4iFavb^eLX(h3=xS@NcKO{a@@msI6Ht{Jo14o8~t_)13 zEGy;G)1`{Yt;*zh>(@nYBDdNWl^bzCE{!2Sp<Y+&zS4O`k89AOfb*}&ypg@njs_)8 z-Z^+HH>PGOGMYEQQ>0WHa}YI;Y7?t@i1A?NIiup;HSpJ6A_ib03DVZ2imVcrnPCgQ z&zsxB%Bp_a5+-sEXAA5j4%11@R{&=@a~<<>n%oi3uYQ2mO5a~gp=Yx{>yLm;Qkdwr zyy3lyxwI+LrLSZ!a8&KfTKq&#%i4JBU0xl_)LjXMF4~m*AS%nf1D*!hWFC)WT1mB+ z9pmHvb>9Jg>8_(+>(?WbkD$-MA9zAclaBKhx|PNo1j~qawjH)OOjTlbEaMz|HwL<g z%E<Zr7{xL1sIXBRGU-DN+#izf0N+LZ5yYi-vyY{II;RkIuGnHIMhV~N*juur@Bx<3 zzjm0`%CR#QWRoV*Ak*$=p3nt?)Epgtmk16CF4#EJ1uJ`#T@VqMYL}|tw7OY7rWWCn zqP2Tj9%Z`JW_@dVOw2g=c<)L4HR+Q^*eknzX(Qn@X|EEq)~{sezEdMv!PZ~O%tC1s zwcT?}`8AU@j087`t3FTN@G7W@hT>37lD>0Ha5ARL1V`RpzW9r04yAbMgGL9Z3G>0i z%l@2gX9?QN;hb$>U;}t(v5mVsO_-?|w=h3nJMllyd%>|cE_lqy#UBF>C49xHeV;YO zT|GX<;ZvB90GV-kwxCkoGnqcW3Qm`yUARq6C$9-f2-{0Ai)GUIgnNYIUTFmHogHMS zJgs1vtf9;DqBID;6VApIug`z;n^KyhLv3BL?7MME<fpY}UOID)^Qxg!*09(L)g$e} z9A@BR@_18WJPz}0J~qlv6#Tf!`~?Lv>S6<!$tn+?@skJUA)lx&7@gIh)U7?`#|(06 zS{QWx0hxu=Ko>D<PU~La&50{c&?cR}X-2{Vd@(IlSr6%_^1R~nu=oC*2$-F^%bkvz zV!oC3um82C`$)ldrAWD5CqYpx>_sqHxM~6MP~n}-1^PvjjN6|ppx^wO^p{mB4MGQ~ zkFvC(mn@GnFp0j=)W7WCZdSOiWKc~9jya6u&e0D_rXE+sWT+>-<~AEJRpeeTC9~$K zf{Qg8H#m}J8`p^;)QLj2A?@cTIj`q@xp&U}d4KZy<**u0n8k4p=Zq*W@)_h!uNlVJ z!JsXo*-F&xZUPWz#yynH$?pSMh%hI;N_p>xN(cO_KQXx+cy^g2Ou=D_dr2M7r}>Vu zKE{^|%o>zavN3t+WEag<quHkoCs;a%d$6Rkh`h>s(fCD2b$&Ev@`TA-mlpK{R_*sF zDOKh%c<?9X!J|QD9FN2264%_S3_BeE+qKvz_dX5`>`(RJ(01NDA<qQ=(zv$6+{$?0 zK*s<Ez57p%_kxf13F&k4P7kgWuD3bWi|rKu?ZNtGK_a8|ICZc!hmgQ$hiX-ymazxR zdH)al{>C~4Xe6}be)etP>Z0>($psO`*I9C{1zo=&lLxd?=xRX_#+2PAiLj*(7rm?t zE*z4n6aQ}k8VjA|bDj3VQI)ULaD$X|ln$-nGdHNC>r6^TtPInZjQRWuGpW)hE&6&} zD@-&`Rh{R^uXmVb9+$az*UfYr?lp(;x$^U9vphDza)|I>Do?<ca(w`l@-WWnwC{+e z?vzr`G18v5vU7tBi(I0BN*nYO*f{1(Z!2DS@b=uDU68aRABs=%mQ$vDEa=vf5nKH` zX#%0tkL?}_Tj$`Uz*mH{Yv-YOqEEJofgjf5IcPQ`=O1csJ4-@v9o#v*?m*lJ<ziS* zMHJ6=IdX4+156mM6m0<rex=bY=^iyqgksvsOPU_h9gA*&C0a9z>sx)VoiEvuxb)=l z1{sam0|W2s`0*c?$J&tnuiFmcI!bqLee~m5U$vf<9DDm|wqC~L?`v%j#gx}&89GyS z20~dW7z7wvW1x!b3DeJW;jg(>$wkp(9Fq>@$TMf&GsFfeV90dS9GzsHmsed!Pj0!n zaz#`h{ncw|u8rlWFI2!6RvlMwd+=*Cp-MQlO5=--IkAjKb)fjyq%lm)R98Gqivo4m zscve+43;y;7gSo{vBTXFb|!50jHrJb?-FD$<-#;fhZTS}nmvq6mV-A}1OO-`T_r<U zbU65S$rWmC7R0IaIDM2jL8(0K5^8}RmN~g{wjw4}XHgyM*Od97_ID&4f@#?Ni-}Mz zs5eATn^uG_eoXQ%jFz5|+(p=xhL59h>#I@gA~8pO=)HE3uZ95Jr>Vq?)6rIaZmmB$ zf5`L)^RO-jeKC{H?fnVU!H0L-Db+^j0coA3h25wM$oV%|3X<_D>yWT|Bj;_<Ck4U3 z%`AZu2P@`q;{S)Ce|`BgS+&g1kUV>hu-^<LH8*uV$B7E!M{cIdW#u?wI_XQ|#Zi2M zO9Dx`#u_r*rra9I((fZ7eRNwWab-7xYjsATV8W?rb&+BtqLp0MU&|y7t&`{%%#jle zs>;OGO>9p_&kc61S{HFufKn^Y7IylD6q^}0-oj>Lh7vlPrW=N)03357fv7-j)TnJ# zpdFQgn=?(mz<$KSyJdTi0PYLyt8Mnc-&g^hqyL=@aghgx1;F5rW4i(IkKbs<yY&0S zb()HfX+ak8^D^#pJv5=~x94_x7o(=I+tANA1AC6R0POMC#>tQjOy+}FBTV;Ih<}Ec z%YRZZJHIs_e}6UJsF8+$^_x*vGie^KvacB$11?%*>gDeYEw%b#^;%cbgj19<%bNa3 z>DH{*w04z(RG#qLiDxg`U0c`Vr^4>wZWd?b&96~a`&Hr(V+tBw$=ootDpZmj|BNgw z$bR29^i^AA0gA2XT}jHJknqn8?P@w8u2fG|S4ANxIU4$Gsx#M8#Slg!>VwZjTWa(> zIrV+|`>X?&V99vYg&Ww)y4@e0G_mO_Z?&f6>hb*@Y4VoZbyuB^O+UID;96Qd`q0{C z-PS;6z^OGDd~l2S&M%@#A^U5%ul2m(Ok^Qhv+%vFC$c!S?^A;cS!HPh%o%zVAwTkZ zIR+$aX$4pmK1R{SEC5C`k>@zT^)jkDZsT}<-O!;eSAOaNEEr;{qcJ9y3`|aXZ>@dv zJughV;h*XK?S}Wm>)bv?mG~bJLp)WeW?A;|vtGXr+332*KHO_qF9EyMQ&#Kg+ibJz z_o$diHAnv)Zl>)~t~!YiPjKm|d|ghJNDjV2T$SCgT1qzg#770Jjl4@$KGot4r0;Qa z>~Ma+Z6sbpHE|lEKoezvf{0xsMwLt5-wqsmV0ULH9p#+IzD4#&EfC2Sj$0iJehglp z*6CmJfm$V^fQr&1)a?pH>4Z7jl;fKC_i(0I%yUecw@7`H2Cb>mch{%I?9an!@2)Xc zS?OnFd)f11nlp^;`$$xrf!hp?h0Vr+m^!PsLp*j@O`O_DCz$VFZeMB@IMVTk{wvB+ z(1<(<52SX2b}=?}@%zYHOX-rxMOLvIV{l*_!^~b{#rvSK12}Wd=S`>26i5LlX-EJP zkGR0IX*(<^quqKVCY1cOlr2bhGXH(Cq}tTG^7LX6U#r`Zo%`>A*aFjU%$7NY6zbmL z_`%wOFL3^_`dWQLh#y(OCa33~s~Ifm>qDbr-2UJZO-F~PmU&ZLXTL5}HM|kF$6d0) zwOy8Oy&{$JC&hVZ4Lhej%DjG|KUGyTDZG}@UCgpGEwAAS6QFW3CtaMTrXoNfQot^g zcmG!VQ3J(%hxELF9Q<83ETuz}$CtLxUvfK8g@BR0Kq;?S&lfvP&e0qZdmkrzk6@>C zYeEV%i47vR3pShIlq9DA3I($|=WQGACslyk5Kl5qxEx%>*<nPkr(erC3N)pUqLf3M zS3i}|M>SbgJ#D9c`x0y=zasaRFEsi{^H-6K7QJ<o$^OPE_nAlF!Wkd?l#1niARU7- zU`-Rgs<K&Ld+Fd$MCQ_c4rSr4DXm6@<QIY`n@&2d<+E;w@+E5fBx!*(-i*`6dfM;u z#KVW%-?Ii&zP41+j>UFWh^I=@;<rK^c*3s)FD4pf(s+gIooyDNmW=yD!m!h|%7-MD zyh>c3gGkSrl(FtU{+30#3m?qltL~R&eYZonbpmS>HA-@Y<&O(iYQOUeid<VtWqwQ3 z`w)86&gi=npyLDy1py~5au`u5M-HaF-0JR@{6qa21b(6|(OxN4UF{>4Z<*X$_88`A z;_$FmSmo5mIv*aFz4Ot0gHm~=Z?Z`^vg+A9b=^3_E<xK&@<E^6tu5^#8{kNHz6q&c zRhQW%zAwnp+tDda<`M2&b#s|ZbW6<o41ps<eZ0s_uv^~h0W@h{)U7JNGeae8NRA39 zKs9JhrF$V?8Otx5P~`sSOwmSJuV^ymDS-19wz0xVA+>*~i=v9zOll69>=CG&&D!0U zQ!lx^XixYhkyj+`{hBX3M-2_?R_i%=ch(7<x}##}kOgh8WJ${)VS!Ql5@_gep5P>v z0l|I&;|;>;e4>|aWWG)udIz$r?3joc{IfSq?zra1{^Eu5d;1_l^A7|sQ&m<L*~uvg z@bbjIwEgycLJ>H1Y~gaWs2Q_->0sZ4R}XvRWifJ!8AP7m^F9|vQGwg5q^zPWV?R3F z?bg&T05-7BNLzb0H&;2DM3RzztT!<fUc#uhvvhn?H{aBG6L4;HU!f;{>fCeT7R%_= zGI0u(JklazwlMUWjLhlD|M>({`yw1tA2pk6aR>Her9v4C-C4edw|!-vuMTTAuG}8~ z_Ad34u7GgvqNUslDZ*h}OBfWd-=e=zk|9#(lDpenGh<ObBedw6`Yd+R;(ssMjj~0I zbfAZ16Z*454++7$R5!_2cBs$a0FD~;5C+uqQH<c2q(UHoDq$Bt12MP%W?{y?v5i8V zT%THdlda<tb^JKI>Ek*8jG{j-%_EQ65EHijbMb)-HgjTyCdEp?g8sIMs#M<nqn<>5 zm>8M^rM0Srn&HRhoxZQ*^KlGp^L%W&j<5sLI^~-KA+5>DBeTYC(FnnKlL}Fr3XLq0 z&{YG04>v-FdeKY+R4&~DY8&D9H{Cwa1<H+y`!&L@O=sNZbMF?pP2&CyO9<H?2oRO* z*V#<O3^yQ7p$m6}1LE<hO?g66)!8M@)atgJnYQXPv#BLW=A79_umWHH*Mx^35-3#o zwM+(&-e_h?GMVS*ne%5Phlou8!pPEs?>8R_{N3X0otXm{`f-@0?PnamuXWO=AB-lw zy{%d{EaquU(F*DDTIy~VjmA3+RF9NqYv168@mhB_^56gBPb>~h!-4k)4FA?+CWDi1 zU-`{uf|HCk1LQyiO%L)yeGV*Lfmvn~%pkF1RbS$4TjURW;w#Rp3^q)z(%@lYS$=#M zb)bv4j%E}sAlseaAozp1hBD;kc$8rE7Muktde5P9>HcI-X^H;xed*+if_1uON{*uY zUXWksDZJ@B9nyxd;%w+>UHieTK%bO!#MVG8bdJhL@Dc}L`093&5`UHQwl$YrXF%1b z?6E0P#7FV_H(@HMquprS0wH}*IwAN1|0X3Wy88KJFD?S_$=Yk`5^PoPGLP|0BM0I~ z5OikqZA?5Cgk7W;y+aYDUpvGPG<$SNK%B*GY&yXvsW>|`?%O~&LQmP?d-H|Q6DZYz zU6}1SzAv6BwJxaZBb@vws|({-^CKBquXO{yyu#b+-(6j4?ZTs4?P%LU+w+SAZfL$` z+b#P!CT;N5BWMmIuQ$Riw_DMyM=Nk5wJRy4cEU<xd-|xRzSXoWwxdK!c<*$?Qv$H8 z4OXzR{x`9a*Z%C|eJXAYr+naO_JTBBG~5qdN(_JpB}OH>&FrEO5i_WPaorM7c{#uj z;r$h3wsDn2p0ss?rwIhZelw_rzB(h-TjM|nn)c506^Pv3__8T8z%gvQ&cGwVx=G@I zJ~6`P3jIL-mWdi<wVl7!Y}J8bEJrijP}nZf0*mSSy3}(-B*;hY7us?wdpf>>L*W8? z)ndO4_noQXrSPlcZfG9|{*vd=Gol1#UpJzg({(m~5^D?AtJ<#SoXiZLe|Mrc2xjaO zK}b0spIaR24W7`dK9J#qmjVLz3I?vz^DqDe5l_jspu2(1H3>h8PUp~l(AosvLUpu= zcp+>9u>Q{{MiFWqmih=5RlsOBAO2MaAFy3;vSk6#kNvvJYt#YT+2cGoTgGZ~<Wdhb z>l5Ts`1MhKH2aut-q%a~S>$O0U$w84XsPd@UzjoFPg)G_v1_$9?T|-F-Ls%+sASl= zO;B@O_EK>>>P?lo*+Dl%RR(L~HRj@7m*CCOu!|ZyxhNO%Y!lwYCHRDl5EW)VzjohR zj2`@*=yvjlYr)$c%@cSHfRE+fM$O>m;&p`E6+ZUiM~k(y$J38*vj%n1E5#NMdT=x@ zOD`p8tlG>Zrk|Yh5jOV;!4)sRkSM3u=)Welt1uhU#INOEF!?M1Ke=D<cBj-1t$sJp zQE4}+pV#h=BQ&+Epck{wIM<1_9NQSp-?h?nq`iO5eUGz<wT59r0Tp?g?J!ZT%Txb} z{^I3!PN_>Kb|p5H&iQQaUyI)B<kGkz-F+B!^>eY;CP5WA_7Wn}@Q7>b)4L|IJ#JJ7 zop`%vUcR<vWG)OAx)jd-2hyc-n9y3JTY~g_ua`VQ6`A4M@$YJ4IGBQ}EKs{~M(Kqb zvIC_h(2XjRZa!&KhE#m3#mZtuP!LRnEhuQL@y_OS5Ve@);VTs<=1a%2DVrB7z*g_T zqnCFV?e*#1$*2BVLmc<)ke}xfTjD9)CecT$V#`+jNx49PIO=wfcHeR)S9lG$()9^8 z+Q!ND#!F#)SuJJCtYXfrJVl_JGcX$qNqV+>ns9(zQBTvuc^Y7q2W%6Dh#v?0*H_vo zYkNP#_N6j0_I%pDTFO$h?e?@19{;dhdz0c?te#KV(o~O_U$itS;+#`yk^3=io9Rc# z*hdsGcVIGeW)?Q#{Y)KLN)?DL%-7ZbB&~;M%ID6UOR>>?Ic~PwDZiS%P3#x_?6JO$ z=vMZ>Q;a+3k;6r<+YF)Xg`ywx(Q+T@R9%foHGy@<RrRLxxOg?_WgAi7D{n)pXaA1i zPbeCqdM<w4cDMjrQnBs+&e#dba0JoYo;}4~ZEbLytU!9+=e(y52jytv^XkCK3Nwh^ zlIK**#0G6_5tY!~Mu}CKnES<%flw~Cf>qY!f`g)evrm_hB=OV*X2}nWB%)5x+FV>r zYQfcK4g4e9El|;XfG!7w>`EBW^_LS3DshmKM0I8zObYNvcQnh|VKr-SoM>~(lIrug zaH`U*TJC7cHXCf|Y!xo4-figG>dPKzVD*t%_I7NHa9**wG^RCxj?)h9OwmfAT-jbY z(RGnf(rjqM{8Aq}HCwFLnyDXi^#wlk)h0h^USh=K*Kx*F*0?-h9d<G@*5&F^da_lf zS$%T){kKc#0OsvQNq|X-)6E=~Mrq3FjQ6}=f#Jjc3coXSZF9mRe5KwZFfJRpQjAWx zz`74)f371^B-%RdUhU+Ib;#*PX+Tv5=Y6OqEG7dcO$7@z6k<@Im>O%uS|*bJ!J~!a zTl?e@$DMeSr5$mNK5gl7=J2qAsx=_=OV;05w@%t1)Un+OR^tQ<*W@?AgNS|9gE!@; zvDdyGie%y|NoMK~ExeiLWn+)dBxQIN$AVx~-9v+%O$LqYc+YL7B1JcE_4VF#g=zKr zI09;T(mlLUJ16u2{!yd^hzS9Z;eV-PvCF7?Q+jb1mz?CbW(%0G`LG3-3vDX9Y89Cf zx;{wYYoef_(wEUru>OoTC6@@49m*HZi_ZB@SehY&d2K7J?GOp4^qHc+6ZzifTLTJD zt+nJs=@3~<zDsO^df5r8Q@W=7Am`mv1)i|K#O?d??djMU$N6hQn)r2q`!g>zvKQ2M z$9jU+^nD|wtEFoosylnj2hIhe!5y!E-4++~-@E<0TJ5#nQkT&c5a+U6MuI3m7E6Y@ zLcZi=u|PEmowU72`pU!Whz>v5BKTj3v%zz-W%}!Bj{-}AY|f_malv5;KVO2Ee>&kx z=vJ}MwOpDh<s$*m@sE<9A{8IPO7h(hw^a5K2G^Wz_2*LMM9Ip@uC%EoRp^f_L`gD3 zjKEbqePPk_kAkaMj;QCjRbBsBJwtQht{^dRtl!DD+vYgq?ykgIJpjTA&F55;BQbMx zqt*gU%m#jQk<f`*G4%`EH-`Tb$*zLh{=<M&ETh)T^0R|~X(5KuD@ASN#49?Qm|+q( zFt5*65<iS94=xFXSg5>mgtdpTa822Op^hh?1pdYM7yR^6&+PA9f;oo9`0@o(H^AQQ zlyt0??wFR+hYFo;sOTWzirnNpA0Dput)~8pL4={E!FJiwcN|yqo%dq+UGWmVZ{;8! zo~n-?60hrxNAw_1@P7o*0Pq&phjitztrT%Gd}nU-w{6^6X%~^vxH#>>-l|`@C?<Ft zd#8xLQ)+!!mc+3;w^ym{$v>))CwE3Y%VmcfL3%o`X#b=>DE)~hWvrv_^H<`^o-cUX z;3rx6M}Ui<ESY<wY?&!i=~hj{xJ!=lgX{EJ!q$Xy#+oQKxUM_u^Dh9Wyf;lxy2NM) zK8R|3;>L;g0y794uk|dN>K}K0CDsX^UVzR{i&vNhfiKen*a2SW0kQk3*;X%8IM7Aj zh3FP$c|OZRbQH<ZIgiyZ7lM`^%l@c*STWEDXK~k^!?-Iw<usRp22!gAvID${pML^_ zOA_O7JT_X}YeA#)G5X|5ebYlns6L6WJ7S(Zp)J8*$tN{ss^rEMJ&eP@*lMkq(KlOZ zbkK?0o(FLmxMW*vDh1GW<MqJ22DiZ@0%>Y4e29GX&M-8X;w?;ke4(D<=+Cs=-3W9E zd`kuJ$e4#-jZD<kCU7uN#$h#_X?qXF;Np`}nqrQ>@C7WtYzFQ$Pv{`BxLUBHOLi3b zZQ&EHUD*|D6G<ah7aOzi5tH25)JxF8K*uCO-(zlFvPgyJpx@7O_{wP)$=)@1uHYe? ztN)v~YVDU?NBzNm(-ES>HEdt#KgjDoe*uimwwZoKr#Gvy&JsOGcw3L}Oj`-=&-Z)~ zj`;TmZbUa&23O@UG(e{^nd+lv77H>fkT5N~i}hsIPCR(eM=mg&O|(7Zc_BWBs<m82 z_S#atTDM7pkh&CbH#~FsYSXZI&nCVXW%|k%^u4Kf-@%1x?KrlAGz$3c@#6hS#ob@m z-CXK|<b=8Kq`=7?P*YS6AU~={#X_abqMDa&7Ek%B>NSJS=C7C45<&T0E`h)9WINH? zvEj^{tOI&<o#3=qte4Vu0|pu%fe*zIs}4i61IU6Fdy&53e|LZ-wZ=4n3;qKR615a! zGj4~BQ*f-i?(>CRA>%}#bmMfZ?rfv}zWN1uI1742&bo?=>yy^sj)-x4f^0iZ1`VJo zTk6!~m-;^8u)aW#d{*Lkik!xKr*~c&UtAx{6aLUA_!X{}k0=JjDskk+#&(F8QUkJQ zlp<{Fu7}(2H%zpusnx4dyeQ2Gv_Vw3h@{nhcFzZ2qO=d3e4WPy)mzN@7yz?apLy1S z?@cD^V-}SeuKNsOYC`S1pLGzQQ}zdDva=^AHede@>9dYah-mz<6ltki%WDg-0|-N% z@0%!Ax`Sf$l>7ZF^=k{GJuK=SYZT8n=*-7<okS>EU@rQ8n~u>8-!esFd~)Oc3NvOM zJmJ4F)76BN_!DsT1GB5|edAn@adt1&xc#A`p4%ThV0X23@P_t@yUVnP7JmwnHwfZl zl>70d&hX-BQUImJ+cdyS@h$Cs;~I0w_z^@h_3z(JO6X<%)xz-^JaO+Dq1Xj4{(&@m z`NjPaJ;uH9avcBQ^ZJtZEw6{sztr0e;c<5y{$c;*2g6*_J|gzLcgV}Ei8dL?rtuoR zLRt-Vz%_iXgs*HzwYR3m<$!%x)ii&UZ|PZ_W>k+JOJK4Tbz-Bi^O<V99QXRt<hivM zN+#5N_4ez7sVN6IB;gz~0X2H)V}w0sD=p`FMB6<r00cXJ=8f@)ylc9ZTNi5{u%5^= zZB}z&J8K0Pcf){_J_BjrN)ha?_J&E6S~P~YmS`O@S{q$uSYy+?aA5ZGeYmJMR-24m zrzRU~6wrZ7FRD<BNm18Nn{1HGwV@8do*T1=@fWXJiqDIscY4@&V7R6xKB;~Ar1<Ik zm{5{Y4xsR5@tJ0JmjcLxz!d!3wJn58%3#y4`pOr!y?Teh*cev(n02iTX0b&9Ko1dP z+Baq;C%#{0`{R`=Rq_1S9(YQ%kx&=+vsgtnfHQbJm@})MVDokN1rXU(paT;##&d9K zzkTz4tdaNK-h^715txv6FeNt>);g^TmW*g{agsdG+TYK#__;l;kj``%3(UF3$`M4j zXuTyZ`eMs}TT8_Ef?Zty?D4z3q`SAO;e|W3YBdw*+P@8joi>z8+7pV3wC|hX9m$RU zSOhlO3&CA8Z%EVHg0<>naF$Kh0{~Ko@b4Gf=6h{YF;t?;PuhpHH)^@B>W#v$-fqWl zAD*3PRksuIqZCxPs>>#v`IRI6kxpOY?%8W{8QwVj2NUOo<s5qo*LCkQX|MU(du5?P zC4x@pY+{5B&0?doSDA{|M7V!R&pbovo~g?TiCb|My2C2`n%?uBgQ*P$(BB%5Q`+bC zBGxHN6KZQy$UFZZvaoZZ_i7qNocpF5^JF#ekc$LJMlyMNi+6Vn20&p1<M)RXR0^!5 zeXthW%?0ZqwQb~KKz7GVie1meuXJ|krX_2Fa;EZi@)EJq)pQWBS>JiriIwd|sZ^H8 z!XF^EFGA5@T3EjPsZz?foTF^AXae~WP^A)_uM`IRGg$2Qx1uYlemzNcE#_eKn44AM zA5klq-Q867#E#`mpGA>32b={}kv-3g4V%2NOP`_r<%QlvfK_!-QV%ef3(p{kN3H#L z*o6O{Zoq5R2W1}*sur?tDU7q29%&F;G@8`;gYg$9*RuwVjmqS3J}?hMz#}}Xbe9_i z#nOR$5&vu;mF}uczsw^)3{+WTY&Q=0>=>w;*$?t%IfaA0W3A$coO*b@&ATuw?T8u5 zvPVJnS`O1s@^w7@uSYA4CWSK6ukq`@a^pNoIxkJ$_$9l%J`hYvg|2Wo@S?P9jzqeV zWfjjyw{5pdv%3oxyMUM0Hr)4Byt*LwLIV=3w+r6-&p}~yL8V0Y@0Wh5=F1C75&l6> z6?`}O2yY6btN#4uT<#pKPF{ZVsm4(grd1*p*6~f)mzOGa+qJ7%+fIFasDE`u@K)E2 zv0Ni_h4}gL3-oDc<4M}8MBt<)&@|$p0iWagpb$gYi|WQX3V)&Ls);ZVoW*%bn?klC z)lD~p3do2jYN%@Qf{DLcY;z;*7s%_KzNo9)L$E@s0TT}eR&%4E#<BXU&oSVh_d|-h zq6Q3a(J^@2LLYOtmtIS}07)-iKUG`abXKf3{Uk`PW!+QFJ^AY4`Q-LAS<`d}p_%#+ zB{5>slABoYC%Ya#fV4;sa|9<K(IO*gR3JBBB{V1#QV+q%#r?%Fzu*iSx{8vl$;LWC zMbJ38P;8Tjnr)^%kboWvICmoo-=Vx$Dvds-&{z0(T|3@+kC(eM$DFYrq=!*01ZO#5 z7?_yWMo^(qOfhUGzTS1;V|)4dUd`(J($xu+nf(UAbieA@r~yk8wdi!>IyVrgVvBKf zd5Hr=4sOcCyyJ+A0TpYHE9Ob+rGM?Z2UN*ZNf$)+jtl=T8nG$%2sq7U5P`|%5I@(5 za~Pn(y~h|;Asf|K*l%0!&M!bM|9r><m;nA%_d<*TFVuJ^i~&g8LWA}(mX7B0Z|{~b zG>`|<Bhxg$Q~JyvpQSZ3;I}6~Du1%s%xgZ;!u$5SYIGc_P)k~aYs*)Boba={n&w!a zIRPr12V-NgG}uC(x^C*FslxW~^c%K46NA$r6XTgbQ5I@euqDRiL&vIcW0gXBTYaX= zwAwFUTs|w!)u<%(Yw<z{IQ!la<Y>iqq5IBkf<pQ3O+)8IPN>_3Bu;%kXKz_QEF|80 zoLpvhZW+}J9v=H_dGDbHaz=^xv=4+<KYeiQigVFVFB6b-k_y1PrcBBNitsOq$7-kh z!Aa_GOA>6nwQ0Y;c}Gjhp+8ecZq#j(w30pd?GN$sz!d4HMo@j}Y4vSz->e4>et-#i z+;}@Qe+XKP86(6T*YUSmom`}k=)ic9arVU8kB-X=1G@uqzh5l*4FLG;r6?n%{hLIW z<W^GP`^FFFbF|t|{Re_E_YZ8#1}AjTQFg1YvpWpX+BvR5BlFi(kF94rut-`LlnO@% z65Y#+pN+cix=`M|)N;QksCKb`VId><mHr^G#E;4&yCg-v1&g78Auro7(5P=|UeMJ4 z#UQ0J#<5&opLs5I@K^j=@^oPiein~Yu|+Bpi;{j*yjDG0KOx&u#pDugG+eR>Yl|w< zNj2H|_9LjUGs?41?pm5+sdHHDARqoc;(`U7z$e!4h>J!QY0ZHK&3>No0$@jFwuDr? z53&~YyY;}!KW~1Tz1{bppE80}x4K~}I1FtNh3(({@{}q{$O(vRRIBYtO2=aVP%J?z ziRuKpTCpnoS~?gd?NMkyPr%GJUkf^6OI0oF*-xw_1&Ij@4;u?<R(&-=eQKEjo$VCn zvnEu%DUIAo8oRG^-oQPOv@SXiz*q&Cyma0bIvMx6JbZlTzktnoaoXNZ!Y!t}PLq9Y z2d4Ew?*1L<+6~};WCWUbzurp;S-BHz5LG#gaFqysiaIlP-uK8r{!6v!Z<jR<4&omA zK=2}3dRB6JScF1xo{+u(eVykmT=eucWFWHW1l%)-BhEDM;`wwu8?$B%+u#!7Zgw(+ z&yJf?rH)P7CO&(SHDJat*bZj?`14wbc|M0Ozr1w&z~Jq53=qm(<a5UW)q81r2HA__ z!5?q3?(SRh7ZG_BCWU)+-`$G?y0k?Y1Mt*d{y*Bfj;+x??nUbiC^KY=1MiM)Y-_Y; zAKU!`Fz)nRO#ceS)uB<6!EEhA@~7PC83(P)%@k@|PC2>Q;RCYP<OID|NF!|=4F>A) z8_Cj&ijjN|iv|vPTn6S@{QTY*Akq78wt@0JeAI2&N+gAtqF!J1f8r_IA~zxDfcB_l z?LM8{U5Y3p9T#=uV>1=xEIe*w?AyJceua6Q#1IOC+d8gdg@QW5`UBv8*6RdCePmWL zZ*j91#oz<Q0P(69%Z==+nMZYX>q6Q)34+e;#Le|s@unfUd&@Go*Jtk<q)Fybu)N3j z7U;RuO498IQI;8wb)adDZ%)-J-kP^LOudpK>Fbh4NyiQ@6#3Vgn5X&40{b>*I4eV> zORnI_;#d9Q|F<;8ZV5yay0aoC)oRm-d)#h{;5L+7`y=F(aaf`o7ukr7z@xmgCAy<T z<1WxD9_HXEfQ>?2#sKDQ@2p1vB<6oKon=^5U$n-DE(JwGY3VNMZbZ6UTBJK9h7u4F zknZm81_wkyx>I84?iyg2x#xeMdq12{^JPEt?7h!g@A|#(S@%VT<aUo|7ZV-(9BcgY zaQb+JdbihW=5wbm9k{w`hAz32$zvalyiHpjf5EBU%jfs=74dr`Um|p`#gda_!wdu! zbxr%mv!8e}Ln*_<9Tt-85kN=Qz&Bj={t|!xyfi2lmgbg+tstn7JB|F&?bWCC)K-`F zDzI6$SQ)y+3|cfPP^X5qQw4kUI6$$8*V$leWRT|+@YXIdRJiPMgZkXUt8NNqVgayU zPI~?KPjE?OG37b#M<tRr<UbcWpT48%?qAT4Yds^zr#Jjv5__lO6Myzj(HC_PnR@7% z{}A+{excsn9ACUEawVw*@GrG-A+!xLZ)7F$E$XRcA)F}<yA{ao@utT+rR;+uGsLUt zpdt1Cn0)l=50=@YbM;Iy+1~D(IylR2<^MkOiPJ?RQ@KT}PgM*-L4iGzUbznsUYB@+ zL!F~2(}sV7`ltlU0w|+gtRh_s=THLp#crm$cfYXp|KWNZXY2BPNCHt0hH&11dRKi` zkCdS<n>QScZ-&bck+P7}qT0QvossmXw0Sv7-{}nN(;-@E@q)1XV@S;X{Le7;7W-4$ ze<t@XESWb}P2l$=K$&3Yo+)Z_{m=irjH2<GN8x;r1|e2^V**ntM2EIK<Dva9SE=|S zeF7{G)#*1|Dedx$3AlIR`E@N`RnslE@|d{t?@=|YX1&)Rp=_|(vj84yT7{MS9-;-` z)taK^sfVvR_XI{B))0juH`W`r0Veqo?|cssb0ItDc2HDB6sb&jOMgkM478-Gj6eHi zYU%s<kD_8MW0hoN<|=ZA5$ughK}jo`nCzGGn%KTx$J*{#MiBjI0H`Xk&sK1%7hU`v z*HB4)HHPAO?pmlwShr-7isYZCsq=Grbe)fKA~Ht@S3C-e`|iaLN2q^tp<gdQhY#S3 zfM94V;=bWF_iq)DPVlq)7<lG?-OuZsWe_wM)~!9Yp8J&VU*)lLJ<g(1(Bc1G^T-57 ziiCpYjyJo4eTnyUp*FG0h>X?Q`SU_yr^CkyDnaL<mJ)56ip*CCfyZn~ha2^{NV*NV zT)c^ST(4>ag=oW+VXgW!nFDJt9M1|Zw(dpz&AN-<rb&d%?b^V~`($j6b(FJkExgj$ z7O($G{Ohe%wGFSBJlnA4)cm*{hIgjv%sC1EN}&NxHbB1cf%}|`-s3%c?K%wki~4$Z z-Ag}L;$Y<d&&4bzh<yH@eS~UM?_19qOtthLf|v>{f1z+_nEp{lf&;N>Q&N!Fpa0I( zD$|iH4_DzWxA2pfK<3lm7nq2=`2gc@R5?qHwy(fSImCy<)4ne{>J0>!XV1(?6Yk2q z+hi*JR`K0U8vVnwv|{ox2Uf~s@qkK0%^gDCn2R;dIRW#}>wCb8bPYbMDd$?r|Mg}v zQ1&qbpZ55Ud!@%K`A~BByoz8&e@vSkIJ_bxRs)oJm47TZ;1_2dvgL0{Y+Lm{;#SnA zxAin#Nsj1z>BwJI{AZO2uKD&-6Fam_j+f3T<7qr@{HavFvKxzFY+%pjs*tX-zoQHH zsm}JP!$|P@Lwl+{)^*<d#D^tLHBE+29*``51Y!STIXSTC*@e7)k6s71E}?B#YzpQ{ z>A+YeS{TTaz!R?xrz0rG0C9HAqlIyqJCra&VgCA!0gM#IpjoBot-2GaF8$hhjV){G zrLbtwgy0?g??3)oqty084B^}a_&eSp<?{+r+mKoBEMsWe^cg(nUAym(*K||7Q$Nab zXfl@(22f9(R<3*Tn7DCv{?>bGy-F=AS;?xcaX(^jy*Uzx#<bqUB9T3g8;DKG<HstK zstP;iUi(w)_C_$!6cu=AGu7F`R*<FE<Dl0tR9}4Nt1T*+>ZI4XDDgl*lf$ICJJhyJ z?#D$D*XFBXZBh{YoRmp*pZZIw>xJJ=rleDqg6A0s64>hMv#x6@S`5QWfKdHt4ZU}W z&FMSXGxMnW)OzvWQ4LW#SaKOeQ$|Q1O5%L@B3r{<tYveL<K2SkUom5L;cF}W==`r> zS3ugarq2yW6;S`YH(~tyrI-7Im2N>qg0=7xEfa_RWI=|&Nll5suG#NTtlZf6qB0X` zbgr`dXubWxHCes4XBrOZy#4RY230vPNF0XYUkAd(yij@~Adlp<E?uADsX=yfLJQ9N zzs^A8*_uXi;10cy3WyR>mkpB_zuX=j@Q^Kw>~Bv;?Ss;bLaf<D`Vu>aPU09QLt1l? zC!3=c9vRn&g_Oh3rUMUejRZeSAPFKxgCtEtmu;bM@6Yd}GP}r%=>dty?YMd*TPEsI zz$wU8=Y9dEwQKBt`gYo`m)W-;+8oS@?s+2cB`{~_DZY8#_5^S3lRT8F4&<DDEgyjT z#U3?yPKfw;5492ne2xc13DKof!@FBI?(u&$@A*7Mj3X9v$w_?(;KxNgV;Dfo_z~o7 z7r6ItXYv^9t*~aYHC^EAeHE2JB>BuMhw?qAE&Sovg`*3+W^75CJXrl*I_#SHoas8q z<B*5Oc~sc@(NB^zI%up)WTch`83V;hqK4UBoWCui%`3a$-zmt+alFwd@Varkc3oF5 zEX>h8>#S{`2`N|91_x$oU%9j)xsfpKVeQtf4=-~hIewjagj07KTz4X8M_jiQSCQAk z-GO61kIwFCm*opc{>hQHaUP7QF&#f+M-rr}+LCK1@fo|nOTRxG{gv>+!Kp;G{;3o7 zHFF!j{;Ry<0G)HR;tt#LV`Emsa=CE#54*PUxj82(OcUW_XP?DTX9C6e8%G>|?x|I! z0=*PTBxUrMe2uLDgRv6HmQ|P;W$f0_hGV!sURUx)BgR_Qd4RO?pbVysv*yw@WLhOm z@{jf_(6#2Zrl&<l7x-W86CPYN$bAfN0_8ejA})!KNG<a~9-4fAA?8YEFxu;rdEe5X zrLkLgqP|pEA`f}DKgu|U>|<E}N72R*;K4S+@IAbtCF!nu1S`c|llkQpC17=+%wj>C zTm<3_9Jh)77@!IJL`FzH)oG*_$~0pIf|s|ibhlLcx;)|cxGp;I8R9kO^Ddx6)_MC) z``NYjU#ZNG5~JE4=y?myXs%aG6Rrm-TZp@SAm>E=X<5_+@>G4{A5?IR%B9qW(seLi z8M^11avnVA_(<U#S-u}P<g%vf5Zd6viU>oM9ugFtSZ>LVi;cy-r=VY8zsZ!9{NYwl zRZSgMOkv&Zv0w7yhbnB&SEuB2%ka?aF!CcZ{#`YOJCcEqEKJ3g+TEJ}yaMQBect2l zQ%GW&xHh4lqUd9^VuTeozxrNZ(;Rb|x>Jq=f<L{x@);liTWpiBVV^gnAlLTz=9fDk zziiYFJ<XhU?Tm-t?;b#x8dn0~Wwg{h)#9IN7T?#&XrxsjlJWVGf|wsU;C_5?S+nOX zM23Qd56O}JWJe1I6i&{MjWLS_t?}z5_`{rf&c~!yx~R=X<?9f1lDYS>1tkRwvVFM& ziZUwl|7_E)<uRcoF!@M_SOuuW;&MJ!B9Y4soF^v(M6+-}NAw)LB&ho71#<OFoHE4I zCvN5_gw$hq>@WZmt_|f<Iu4E88arePq*UiKvxmL&oBVE#MNeEX8s_(dVRAyRaYhE+ z>6$uy>0|-L>hLkH*hr9&By7o&xQaSVrlnkGHBh9&84bzoSb-2UGa(Yx<F|*<Q*P6{ zTN~2uD(uaa^aXs3Ti%x>vNVDSI4qLEMfQoI4{#(ZEKo!A0m<SE+yV|hCD^smu&dJW zFitVsk(<A##hHke>PN&dB16z)L%Rnf%7bvV<aquc;%X{wKCv)YMNPw|@GiH?uPG<* z+kP);;x;=6<2n`oDQEk3xW>ZwFLiuv9bQe&-$*<nb;Atl%d)#1(H82x0=yqbgn52+ z53I0lTeB)uDMrtK5?o#jj<kK%#hKpF&V^Eo+u5&ae4%ST#|tvcDFu3rTyOy>5&hhw zH0G%}^2q1udWReVkMT$R?sq^8pNI!}{Y8BLbN|{PgS#AnafTJXDPzC-9>L^sHmXFZ zeKgZ_br+-Yqy*V7#g1p7CO-7zL>L<n&si#IUznZLFKbp4KRLb1)gzBI3Qq+Fs7rNL zZU#o9*;@Sasj(d#%UM^<j)a`3Z?s7lgnQYbcWKKV@6OxxZ11(NX3;@GUvNRzzaN31 zjeqt~71A#U=3{uN&U2|QE0tW;ia~2oPuve8(`$~y9>&(rK?zu|lnPp<sDBi3V}TSu zNnVnqN}`faRM?HK%8&7`w<g`m2-e65c4)-{O3r=Bp5$8sUkA~3Opk-&tqSLDG97m& z@|5{%ANDFA_SozP-l&gbA*q7>^@>|<pD|Q!K&9y-owsQ~P(<G8;<{bm(_3H*LL=96 zctNN#FHW7?>#R194TM@-D{N0|pGN(x6$_L-?qet^QTSSVbmptRv%K1-B7XmYUb+dt zZ+8Haf>^;!Tv$<H9s|l(gZcRw|9JwoBlkK3)LpxItur@6<tLZ;18~mlC;1vpVV{!v zR<J=v#K&^E8_vyC18csPa1?PErz;6j@Qikh{#NNGaAYNdimAXszBOm)G{QOd#U6L# z+04?5^iuzrE;jC6XX$lmUh(-gO(n+UJWKGBdlQ0>t%zu9`g^3g^!E-mfliZX<nyXf zME}ofV1lHo_iD184QICp;4oUg(ltbT#Tcc^4Rt#nCo?uud+C0cdQnzPPEFmIv02hq z%wPy6`|tl4SknY?i{`aQP3^D^Ee!D~XsWc~9Q5H74HWV&!87#aj9>D<(2e?(M%%bS z@B+Zs$o_4Vh0fW;_7_aXe0qAZ`y29g4jp&U`Bs3(8D{}NzQX2(?IfA5R#<k_%Fz>| z#|dJ<%Z^uRuI7_T2ngPah1Qc3CCDrU*vm8&_i1C@s&oCn`kbQ1cYI7c;$D9>@x2lY z(h=zNwOa;fV8$(%HU^52zyE~J!7U$2weQ+04El^WdFv|I|Mz>b(J;wFJ;Bq9YI4#3 zE>JG(#J_9^aV$Z;ax>;Yf<YW!bwoIicL|}Jpd(?Yy)CElZeJ-&7~|W#BPcbtGp`ru zhuN-hOggX<1NLB93_mP=;uW9!=lSO2&vl)L+V{r4Xe?~2Q>Ab1!HDTzF||sbInuDa zoCVOYs1Md6l@8Q@oa&;!$OG|IhvxO4l;u<0U048^C3)>F)Z5c~GBh|+0bG_vpQl$i zo0lcJli$jFTi{tiwawYgvU^eg#t3V^#|esi>re00&kLw5?uK|F<c$L~hr}G*;bi zv8B8UU7xq9OzHZliDsb{^ei)7$6qX+F5pz;R3$u9|3pRn66bDga~&Ak!m<RvjL|4W z-}G31WQkeoc<Cj~ni8uax}9yZJIHUl9C020Q+r29LE#yH!l0T2C(%GSA7e4E-AA#! z+XaO{2Z{wv0~DWt1e9OsU3)X9NJefd_4%ypXhhKkaImAP($=Bcr8KqYVZ>}+zC%Tu zCU?KF5}((3?;7uo=2Q7?z5O|{$Kj<WEt~W*S<Hy0EO#6sc(7N<lyl7%RItRp=KfRP z(A1dqu9_NOMpEZ!U|dFt_bixdHnjF+Q;NjeN1^Cu_QBTTxcN1}fHjvX+9IpBY#xP1 zvq@*ZAo-!+`-oN7&92%p^Pa=i$F$$EZ1akL2seXI1mGu6DKnDZc~u_^cf@*XPLtBF zrL?iysTW8*KoBathJW8<*!{teM$l?17kJ|=_Zyt&!IZXMrelFc_IW1&p@O6jY*KUk z+uh52m7A4hEJQ!@)#}Y`z`P`ikcLSWFhL6OQquFN<-2VW^%gOu?d+eur`MWM32KRZ zcYs{SFvT<_@>8D~N0Puy!=8c<KV8~&q?!$DC!+k_x}MjIltey)8B0I%IfI=|Ilkc6 z=q9ZWz<Mkeb~<&`M8PDU!xwzWjQNtsxrTUkLON-HA}L5-I&lek$t|KGdAHfZvx?dn z8cOj~hllIKmnP@ePCV8}3nhFq%%}uHyYCaFPm~}JrI>d^5cew0%7i43(zL`I2D?(s z8-C^oIL;C~!U;y5uF7b$bu5a#iph!7jfTjX^cp<FqYQQjt?yCbIk#RQdBylqddhb^ zS)A40Ku?>0pVGE-xL-6sf4khB(Y~o>_C2?J$*ipTm&s~w7#7|#xg>_!^qo4x=j)=d z_CxA~0xYjZlN(66go`5v<<gi4x1|ItiT-ej^N$Z!8X3!oEP~3X=GG01d)Kj|%r1ow zr%8k1JN2y^B8E60=4L5VNCorj2Sd`luh@E3^P@w#)C@t+!M7pxGD}$NJDlyweu0L- zU1ct)Di0dDit2V?tNXCv1Ln3C319KC;L0>Z3m2RBpxc?N-+#`9(DF)|aki_Ov-25N zkC~8e0~PvBN;RN~RCg!FJ4*kYr0@B&dkh&1{wFO2B!ayuOpn7QR&H<P!&GK4WbS;O zt)H>EP9j8fdS^H1mT3Q?eK0b7&caTDQ|{E7-yG5NY}y$<7?Ov*N@~J$eM$s!b;HFr zKq;mTN*|W69K%R45jjYGirOj{CWQ|<=)?Yd^ue52;@!|q_0yNKJ51n-pdT7fzk(`_ zBl9{t1KZYoyoDJ$DMD*3I?yO!E26&B3l~EJaj6&WnZyM#o&uwB@nxYKSM-Z=6I97u z&vQ&@*<i~u;u`E>{h^iz#KUj!ZmLFodi`?>Chnp(Jusnv0c1>WESraYbY7GsVvU{2 zZcPEUyX*35`1aiD)lYS&pw_RPcx&&jb1d|KxRSnp=O8$`0Q&aMWH)%it!Gc|fmcFP zjQ>q=(AHTHWpL1TD%>gS!7Pxg7V?EG{ptp?BiOi4yZ%s1`U~mfb!2w$;#S+S&fL!x zSNxHr>)G+B)s)+8>6%2RS?mG&ay)NHeA%&5^7u-k^v|)S7JweW%Z(KmT#Mr6`tIdq zx<+7HlQLk=!$ovR_+`TS2cc0ba{k;ZZqt%odTX%~A1~a(!s0l2xal#n<y?|6;EJ(I zs+AHl?1>0^(?<5qNAGw~N~2fIBOQb5CALnMb^r%=GbSJ7f3LPU#N2_?(?4W0_3l+J zgn)4UV#FWu_s-f?D2VYq@)rR+4^1aqawX=OvKRq-pb>n6w;7{l;w*LW<xbtD85xdy zfjj}Pik-xx%O1jbAg&oPWZ#^Gbu^gFF+cZU!E^NF1MQyB8gaT<$H)K6B1Bi`&6Cvg zv(WyOJ(iM3QKa?YSCB?|e!YA}A5=RTNt~}7Isz3$_g7BBiwgPvGFj*hEjjqFj=jI) zudk(?@}GGTt&k0yODJ4F$VTfvUT(ct5X=#<t8M+thrv|FkNo<}WM@JR-N}`?v3aLe zY+SGoeGIQ2Z#9u4eH!**Ns45)%(C?1XOy0lw6D7auSVSUhx;GA@JGUUj;jXhC>n}i zhKuNaa?F|W{d^6bitc><^3l0NKkPK6EG$dMgEqO$<~cjtVSsynCK&5Pwoaa+N%OH2 zy^F&a>sn%;@w0B(KKBJPE8W=D3EO|Qp5#TR`qeAQBVQ-a#U9dVcg)4e-Jfe~F24iG z6~qHy4mxN7ui2J0&nAlsu6`ldbLy36y!a;0=oW=Zp&Hz{UDd;5GdhnhO7ocpTSa`D z<&T~DP*Nz^{<K;h1cp(ik@jm<QGYO~5@(-xUJdTwOngHJ_S9Hb15t$wXF}dQX`xjT zE^@^`QM~!^$APA!%V(c5VJ3jH<?qGg0)}jlv*PiSoNp(c$uahV$T669_VL+reks#W zZuPA62@guys%t~NhhrtP8K&>0;DmXTS>y?FbMHWOOAv8NK6_Y*v6|dAT0|cBvTbym zmS18RayQG<&PG{@&}Xo}F5(|jC=ixbvP5Awx4Qqw*vnC`X+*(bHgssj6PMCpEctcv z`4CXH^3!ZnjF2?lLE|S)fKQAICX?y9*NU-M{pgNQlzIN)Jq~^#Cjj0(&qbpB#Bxlo zBgfn9H=QO`pD`6v?r@86Zl;+Hef03mV!VITkqEv}M^{&U4yY=Z*#{xHkegN;sYN_I zdbl7mapI~w$lFx?WMHoMd!`CTaB3Pas1<{Y_r!cg@u@Y}NI;nXZRq*ue$kQZ2qxvU z(8{4P2}X+ecmiB6AO)~r#DKLy!!Mk$xIrrC+$vPk>5U(~XV>wBD?u6kQd=GOu>o1? zeDb&!e?heCBI}|8*nuMZw~&l*-cydNl{7q$>Em&oGG;3!^(il`R5&hC_?`MH^*$;V zQ{c;7*PIRzw9j#~r}oPhg$x`Ea%cJxe4k`?U!&Z&fDFw2wKwhsy>z5?!|?q0f<m%y zD)jbPt$a`fx#Akinw_<_(g{+!tg9Eh(&Mjx9-F(4N9vVyAELF^>b(5KwwtHnr{kY` z_ggfLAvJeQ)XU#-8bO>|rpwAOJh=9|uBqQ|@UYHmb+Nvzq%U+~{<gt1fTY{?FUorK z{y>87!LwC=+x>Mj!kSNqtHHyR^9WqLtl%-Fm0Ym{JYUrR)bH9%$j6$Q!K=9iHDy9l zaIeGc@BNu}q$=a9sFBdU5RA_}cUqEtGY4paNMdb9EpeQ)(f0|8OB9SwsNR%_Szlkc zhS)sLN1~BsEr~j33XT}fe9yn6_@eHFe~s>zNYWw$NibMA6$A%{P8S>v3?w;itZH@8 zvSp<RB)TvDj$VBmDHZ;V(Lq_~AigndH$6vcup*}3fqe5Cl8DT5f$Hy%uArQ+!oMei zpVXhJ2ZGM&t`_jPPS4?XFg8gEzv`b_Qc81*)jypl-URzd*#=|4PMZoZZST2<_G-TU zV0p#o+cZ_kBaC3Nr2jg$;g^YQ3H{U^^j4VBC%XMB_^$=e_GDbICBDH4fBRE-pNX9n zxlm#h3>u;fG#5n~qK2mclwBj2Fu@spGO*4$81O2Kt~Xa1#Z+a{A8&K6vB)2S6%j=4 z8)Y`kmPKp1V&2b*!~pqsc}=HYM(w2wH&RA>oN)emVZcd?wS@E0l?T;lYCuEA1&x}< z8Lf|p&Bb?@(Li`WY7#}$pQ`yx6K!f+8t)Hbz0{wQf;NUvm5{A=Qp4n8cH?Kb(akcF zX<AVYWacT4UIM?~#VA^6yM59Te9pfNR$3m(zV#SPd&L^EJ^6(V?r-9VPxLO)d4jlC zG_>`3x66J>?_nk^3&{v&^}+rYsvRP(aBIYIr{Axgi?Zknn4CoBD`yH*J+7P?N`8g| z^2<+>9{hbinDVzqAyFFtPxA<@2Sj<ALMXo2QV7!sJs#DpdUX){3ml)VH@J+{f)ch; z7-{XsRnDe*`;o6n91MrEwebHs9Zo`}CjjMSw{FM9vf@GTxv(AotvB~|Nj-psv{_5c z;T(kQ2~s5!EErX%$J%nC=8`^yLeXSf)q7pT31EJ|BFy@wN*++s8RCP|0Pk6;+Jk)# z=)Z9u7jpc7FlYc$ht*R(l0LJCYB#ue@Mjp!Zd5kenNB1N&{{%kHW7r0BIW=-dQtCg z{rx!YyCV5}3whh*vRE3cirQnhpu@BL!SU3Tw0XPZZsu9(a%*M7`IzkD;}mzrvME8k zpwyfV-nkQKqkU)?dB1#3JkaIT>%Re{dAaQ0CR0CTsmZUdwL{RL5zr^4>%n!8HhhXM zb<XqXmy+c&7a`vnmjq8+SCRT-@7{eu{yAI6fF`f|1`>u}=kSPHcu}io>o+E=5+>@0 zj0ovVk@igRoH*wq>O~v_FX`UAdxh(+zDpnWIf7-}4!IaB+1gv;H6d8MO?=fH-k>+^ zplsFRT=iX;@B{rU{v3TSD>{DA*t>)xKlV|MJ$F_$Z=RGgk=q7~az0KX4=sI_DPf6y zj#EFCs&r4o8Wiea2!Y9S*E@NVEo3H_YX(={;66V656Q|MCCDyQY-y0@;|tMa(9iN< z*#(?Yt7081f;J2j3s&3!452ZiliW*Nr7dvdAWzii5bLP%tRguY+VB#=P8$I&h@K*b zWF6-^!Bblc*wagxC8b!#bTqtN)yJX}R&|qWQ32;t`hf>bM^_iwc8YBHy*OLFw<HBv zKZ776P5&UzOx!(-HwDLk-XfI|iKs!5A2%@kP{XG^5!4B`oPg8&UQ`t?OQ5?1Gx<jV zLEBq59N(9F*J5g#bzACBMMn~62)q&*?z=K6E%k(Nhm$Lh#~c@3&p+LKRsFDJlS6zp z{NT1u(ig&k*~ph6Bkq0ezW8No5kGN?xN6nFUxx+9y%ZQ=45$U-e8AUCFzVQ;=OINL zkii(B)7RanL_#pOuI!CHw2;>Jo)MEGD;}49GU{YtUA`b6&wY}OEWgu~b%>iYZ<cE} z0T|Pc^bW&yI6J3QbNANZVrKhxFFh~5Y^soVXtcBu8C;G=h-ku+p?;^EX+@d}s4fae z1HB|iQx9(qhZDq5hqB99{G3o0>0E{UBJCSz?Vm9$iTLPwxUk%%xKFF$99CjaV#0y6 z@L&q`R!URCTh7@#e&E9m3a=;Ja^|}B&hEuDSdOPq8zQ&TGykkV725jV#pMW-f%?X1 zu9F{ICzN&#H*5abyz8c$>Ex{ers0&oFD8(QK?{K}+>&hM_q<2BRi>rk!b8u~TB<4a zJ>=N2ql078-tN24Z=CZ1qDKbc=m&}n5~>ukT$%6x4IuM{Dcb1L9V#}2%K_OhU!ThV zD$AOmS?^^WtJU(<f|Zm?c+ey8oW1c=TzvfPjH{=-eP_@}YxSBkDg^SEk!2pXFZS;Z zNQm#O$=LNE>z=JRR>sE-@|C+i_p)N|MJ*JZbMP9<vT1<&pmCzkcIFtjhADy}&mmst z%5#Ev+oa@*H~O7PWcf*F+b~~Gd5Jxy+e@~I&zod~u*)O&0g+qde~#|@sXp9}U0f=r zqP<mwz51E*RlYull6#_2@s8C-+4^V87ah+Zr1qnG_MUgMd7>GZTJ3lcV)lty1dt=q zEBmZg2NZYGpM%z(=m2(h)TNyuIGgI8C^<QjjHKnVeuWUdRxHwYtp7Q{n+Vg0T}#51 zw%T@TKXtBuMjM*<6qq!;ETfW@`a>Wew5$Rv6Z5@Ju#sS$?Ui{$9Bnv?7jB7L+;@oj zEooP<k@8czjn7+M(snt(AVz=(c-!2$=0Kc2Z(XF%tZc`u|9a!Jecq>a)m;oMO_3^+ z70J7bk4IbEh}@;WmGAbRu6>HyP8UUmag!n|9jexZ^Jv$;bkhC32s0sldm5RSNvL0H zNd(z+UCs7~<?qiX#>Iw%wB9nm(%m0D2o+0zNo<0fNIAK2+o&25_j{mWVdoobWuc{T z9p{;`U`-Wyg_atwjiR2<Pp%$W@|)@nA>DCigHAhLTC3Ckwk9FY*_|RCM`zB#f9VUi z!k>J5QC!K}a05UOpyLV)ptXs^xRd)6e^>QV&^NthUy^mg5!1Zyz(q)&v*6R-Z*px` z7SGVNDRYPOf3ap>ZC|OIF;JCrB3h(!11Elb|C^TeS)oZzhrY~1JMx>y&V3@dpK0O~ zoiH9k=@b`Gqs6cR?@V;Fv7qPo_P)cCLrFeJxDzcFwKSUL$$&=T2er$rv<yzP!0c0h z$~yx`m!A1FF;alrbX~kHW$Sq!>5oP649}b8hYtP=QO~Rms?_%143n)n0QNQ|c7@V& z4++FU{YPEG(Y-x~!8;xM;g|8LQU|Rs>Ai5?ot=y?l~8|Tw!E80HY;){4Koy1I{veA zXjC5l4B`98KqSXK@-KxFbK8i0eNyCPEy3^c2O3WO1~7O351r>spk1dG>KLrBh3|YF zLd+#kWc(@g$wiz@H^S4YQhUty0&qLWY}GlWX^A()=PT#9BB)iWlA*LKVGqV;@tV$` z-Ip?W4sdh68c*!<b;96^wJkNSev8g+q1pA6TFVoQQPe!@%(95Z>#tZ6&0F(U@4Sbn zCs9z=ar~+OeI2o;Lntu;AW5!z;@XiKsMsQ%t{NFAa>r7#zkksjU3%b&?C)5#EIVvq zQ+dl0+to6ERb9u@nq^t16*kXcmz+2+Y{;U-8ZzELoqxyJ*5m}2T_@<F%qMu(ZM83+ ze<br5k(xt^8exHsnrUR1OC6(FxVreR(xbGFhCPk$q7o6KkDcEUs=(0cz+%!s^y@QE z7hPjzf`C)VAXBos#CTY(J}lrALc1i9Jx|}BNjs2mP)0X(n(U;#ZM_{<h5x<SKybK& zryNjCSBC7-1tmQn>@F4xX(atXI*EHlBAhyr;rENm0JSCMuDZ%;fA_TYCtNRLmHXI| zCgAOhwV1C*A+F|sa49$u5t=OOqdJfD=cDT@X0WGHCZ*;>1Ky-(@)xT}H`?0oR;=^k zk14;CCkLZbe#=LD%a@4Cps9~f2mR3m(KzCRN-B`V+0{y{=yuKtSra)=N?p_Hti*o- zB)FF7(5POgKY{2fw!gt4|MdM@{{6edYK*7&w6j&&KI$m4;uV%>c+p3c(S5(Q)IRVt zQ%PRAgdrB0W$w_tf$tPC{{9zo{*h({cabJbye9FRT&T}rM(w;`bn}|X!2<Hn6(D+0 zFkRz-FfOJY&?>{;ulIMElyrTxWn$(AMu7~%3*GanZe|ZfV+d&0MbwVL(aG$seiUm? z(t%S^qm+&XZ-#iql#>|Qpa>JC&ky#i<o=EZ9fjy6fX~(tH9X-yyAZx|@6v6&&~W_C zM8RDVtyK_k%u$s(U!6M8rjeVd#eZC8lK1>U;G*!tGan6FGFcqlO^SVn(}{ZV(dHz4 zO8s3_OL&WZAbS%C1Y0@Fb#5@bu`S8Ga)IxW3SaFi)1PT3QEwlc-Ueo?wXQy8*g}pC z^<UJ2M1^b#eCz`@kG5?wf_yZ30na!fzbFljhB4ZzF4qLHQJk*r^^$U46&TDPUJiHE z1CV^ZH}5(M$)(a4HE>$Jvl!}Cwh2FJSBD+5=9l9lw|uYxGvK32o4#m)40tbn`)Kd{ zSn0}NsGK+QqUJ2&)N~WP#_&02@ohb$N6OH_S;<G?17+U|K#br4Z$sK}rGg%=twU2m zSqPoYVzXc~q^2I@D(f`yAFNPPO2!ZpTdZ&DQe@`ykG4i|U~Z}#hbwnOmBcNwkoDl= zh?UER#7I!iZ}V#Z+RwdcX(}s;9xXiT6tp_<x(zT`$q_|*@mGJC)F}9muh3?Va;|vD z?UGmqdvrQ_f+;Ju3e{^WQ+p&q5WWKPh+D!vk3UPc;qMa#-=UGVyG^H_>rA5tTbaPs z%`l-cL6?M2?UeKzb5Y`+;+~y9jygNo+>|z*&fh_^8Q<EYdBf-zbcIx$f+Q@B?q_cW z39J3;zS@Pne=knKir{bg{*#p?I?|c>KQ!J}x0<@b%Mf>tLjRTV3V!56;BQJ|K|O{; z@B!bp8f*3g;hetq-cO2FS>uv{mW%Q|GoRA%TpuZyFbUVTjjuNe#8~vV!sZztvQ;)x zuWmr__QYSI|La28B1haPVgC)~q55HfuJlU`E9m47Qd)ceXy(KEs1iy{icxAC4Q*73 zMqVz~K3Y>?1e7nu(Zx6$y=<m6x+(isK4`#w@T5qif{Ehvav4*i^+`!+w;zafh;x22 zvZzlf*8Cpcw<}dzEgSc3x3A{@S-%4fb<2~N(VkkpT(SM%Qo1gXLFYm1uqRXqX<p~; zsk|T9_Y3>B#zNoE6G^eHY_dsy&zHN0fJ-xHS@sgR?-bQ;l@|eCpQ!tqr)VT!*99qw z*q!0wi4SAvhZQcA&Ym|=d8jbeH4e-g9W+=IrgZ9~4NFxL_&FMdi%w|SYh8UaG-fFl zui}wj)V{aA@WH0Znf@Ap=YNoRWXJ{aQ4%+8kLdkW4;|4ZB5g;%T&#SCcfS~&#Z7?j z*#>*pZx`dVK|Z8hhC_M1|A2qH7JBZj*!CJnFy*Um<N~=I7z7i(`g+|ye}pu!12!#U z7jh4E4R~_N<V8(rJ3mQ%8W(r%;x^V3`Gwcjlk~D}#QIY_jNW-wAXoaW%Fk_2z3z8R zWa!~byMh$`oKAF23>0)>|0k}98H_sDdp3|UoW&2)RjvyljC=SE*-77QS;Nq*YK7RX zt!iuNZ{`^5a|Jfz&?MR6%FJhZ-Fx-qwLc|%qhM>C8y|X4LkFmBq11|SUa0M;@{HMx zGE*RmIzI;phU;jgw+6R$wj6>@N!|)fbl+Gm1zOzEQ2!82_a2!*p$3ueo}taS_2kd9 zF;P8p%*bQX)GnZTbIs`YYKSrWIptY^z4k^S)ME|;+UC6fHW#S;Wxd0q&RLE{(eOaE zS#gbLRo&u>oGfmj3l`V&?X`X0wwi^>XC8K&K5JN`C*7EZo7ISl(H4H<+}W!3;tk#( zWy!?Tr`(~<uvF{?gzaT_YScYs7ZZ|=2d6u}qPv>DW>R}V&2j(FNVixOxq5(cI&Nv( z`*i1W|1chSHj!n-bMoNAEo@*a-PNP>qD@#4xy|jw%BH|rk)T4a>>1e^M42PmO0utL z`{BXE7u}xUnBC!M01apj0EB*<{%Xxau_k7DlZng!ntrqK6T3C(kx2T}?DWup+UjEY zNK{RP(gi^*=C9RT;|<urU<g`oHRbWL@*g%cMV}ke`nH=GPyZfRu1B0%PeLtSyd4>m znl!gc{_xcYkvY2Fhtm&MUU8!0-Y&^kw8vr29|AyK+phRi?}*V(#~C@9V(4`9REUve z-^dPBa@b!I)!nbGd#x0gT+}(b=fqN|j=}Xzc~T9}B#i|z`w2BvrS@u=(-P)mA}z@v zg%~U0`h~MSKLIx=*F<;63R`lKP1Iq4+S5@Vq_mzR>)`Ws$|M$^=LN+^_d=9DB>t2t zkrb5b3KpF>K+Q%z$3*ZQB?2i7=)lfkO`C3`<t*?i^^3U4a4i`e6nnq&Nd#3WPAF^< zWgHrLu#zZ_`-1p2cQuaDE2p$&gf+Uzk66RIE)K*$IfB=Jl{lm2^T|1`WwBQQX99EO zpkqoVVwA34_#op~GM;^2Qjy!SllUz#=Qb#)!o)DDKiaZ>6-Nw}*k|1@uy9el2FnPh z{|Tmmn(a9K%FUI|LGUgZU91nv;DLVOMs)Lkq^wn=#N$`z48=3X55qrgYePTARuv8M z#jig~jC&kh*Y(^duVevXlZk(hvwox>nMsF`ykBLvPI47o{@NyAQX;8Z5u{t+;U)YP zykA9K;3aFz!_>s{_;L*nrjCzs+~mue(@`$?fj83k`_d2adFd%@;dxP0Un%Ul2J82z zLJJBfLL|7Z5uvVlum7y0BVLa~`qs^_Ti+No$)?4{2y6slfZ;w0|2>BW=UPLlTw6!P z^?1DRZV#!nOy5GnVIa4czPaUW<^;@4Ex8`M{Mfr5NC03<s1`SR`<|2bl=3vwV^V;_ znLyEc6f3-=1#l^{7q1u(i+;CJDob37i#;<XCy1Fq>iT4DDsXDr9Pji^^Kq(pH11S2 zE@p60ze~1D4YDG6{36)r|E8wa+zft+n(ne|Hcg;){}J=HTrNwpniMwUw^3w<)K&*_ z3~;%+Wc1=Fs2Auu=N7r@$y%5^Dck-eJ#WKZ`D9ND_w_KOZh6f1M-p$-w=+rqSs?-@ z`T+@8A_p6R1xweb69w-Gb$7!oml~7Kj3ucI1of1yw3w9*O=;Dkfa5>?RzM6jHgTsa z1dSA!H4csg236Hhl126n?F(j^S4e?F<1JYHo(Xfcg9qqbI=r%UYSqPxM<giLY@)JD zX4`BJckez|?V(xH1F(ZvLh*v2d}c7T(l0l}dvp4M&c%ZGQX>ZU)ySzOenm<Y{a`@% zVd|y1mEN%e4`pVL(L<aPu<)p=3mex8MSfe9hQ?w%ccKbF51`vb19(POtogmime;4@ z;Kf$wQQUs(X4$o^4{O$Yt=}q2QXpu5K0ZHA&ExUGZJ(iK@>ZUlE`DzerzRcuJcS%2 zbYPlba+0=r2d_W)f5X~zd5Z}Bl^#oqjZk;Zfh3xZb4?|f73>tkA7kRADp6qACY=I- ztDmDIz6{=-fd`#beqB~{#@4hSp+V)dv{A3@QWyFLXNb8|6LiygdldwQHRFql6{E_i z>}udHdrtp)1Z{IUO->s!k}sDZHfY!vuq^5Yjt25H(5WtBj!d@lh4l`3gS-S|z6Hin z%;sqk=F{IW*c*nD%n^mqSXXbH)kAx*SFDD={*sie(P{Gv_d926*DUGYJA&(RUU6jY zN?P^asXs@FiHiq<3u$F&_8hzQT&|{ZJ@H_mg)isYjz*|VPQh_#xva?KrL-sd5ji~c z=rmd_8Tu}p;FbY2MXrj*RTumx?udR7V@bJa!v_0r(7z=~ArvmdjRa#nF>GHub;P)L z`C6a6J_)lX_xxrmKT?-*IGq_b(a%R|J2?-T>=dbpUWTZTaZS2q6T3`ayzz!bF6{(a zk2Uo7QHuh16n58@;yBuQ`B|GdGMB}lYP7wQbXy*6U*H_Yl5~$RQFHRkBtC5G&Dnom zzuqRs!{DM2dLXTUu`yTmU+(e}lH?-husqNFBgZH9m`|%etH=|Jvr0UWF>{x*=6=&$ zaHUT(4wy4N3m}G}tKY9lEst#&Uak_Eem!t$ejB9X=$V8sC5V28;zHhq)xlzL@}f-* z1(lS=#M+wl0%?<r{8*cFeH63{)Uk9HvF2V}@#DwB46*Nh(9b$wy)5kk_{{B7+w@oz z0Y^<z^TgnJ#^)JPMpH{v-Otz3zcf%15NcUovT++BkW)ekeEY;N`Q|w`#RlxS+H*l# zWTG;LxCxK!9kaglf8xio(5U31EKLkvd$ZSgZ*Tp!JSDOhTHBd+e&o39ksj@OgwVC2 z-?l*UBrs3~F)Cf?=h&VFoSwH+`+U*a65_yszv#N6&PF5rE2VIV+ae(^-%oT$-x+%? zp}p;o(-smd$JH`E&}9BWQdBzpGhKFdX{18IFx>fH(!)BR3SdV=@*)+9FsO-!hb^gy z8(C7q``wN7)JG2SFK1iwj6ZcC8>3AUUi*jNXsrTcmB~srO^evpE@FiEM+&odH&14S zCVa=@vii?Exss5qY!Z2>qV%+Nd6U0`6aPyJQeF;e>boR3+eGp6V6DKqr}5DRa38&5 zW&G5Y_E3+J(j0?DZyHyfL9>@{;(;D(v>VU2A!ess6}23(q1QXm$K8s!r(Zv65MkZX z-5*3d8f*q!JU~Fj@$eyMU0Pho@<Ssfh2{%1OI_7ULjKrp;ASGg<8T*je`=2%H(rLi zkPZf>m>UR#2QMmB4$G*qYtTLY$NbRm{t&*vyM296D|zMm!7&T{1RHA64qpWYT&#PH zBga&30>2W;p81=a1)7}UttLDYpO3_vfz&1px14a#98)fT13iEx;GHkq){Hlgl8T%m z$*tybVIgozVf)_vm9w_bQV2Ub-$;-%sli%;vU4;6asst+5VG_%(A~<z93b2gX4x*Q zk@K2+k1w5x)-bS@CnUjbmuo`Yu?e#|CnttLb_rte5W>9aqg18eRyG=Y;x4R+z*X5# zxvzn=27`~Va8MU~i|w=&W3^5=-jm(7!BK<5CwSyN>5kZ*Z>e3p#EA79xNAV$6OJy8 z)iZR3xM4ZKeul$KaQG>)AZFX;-;+y-thk{t?#JX0z;XY&^B=)(ASu@$y8XKpjBJ5P zk`Wj%;P~*(_ejSc@2JV1Vl&iN#cRmx@A;(yzX}NGBJU`WQu|I&%1Nvq4vQmGgbgm5 z00hIQZR`tY{GQVO8X&d2Q^5mKk>sjXqqC2o2pqLzUn~pybloiwfU3EjH@nVU$FnKV z`>P;9T?_|PxTwwX*>f4@XwnktPi1!iX)602x^ZsiAV#Pdhz!;)He%nkeA4)BS(Z<2 zy}FOvKb7?MX6dB#;`9FBi`sc9PU)kBrs3>?tfUXK1sS9AI*Dyyih#vKpBEhr*Ey4- z5#3D39h1K-yy9|!H;{5p?l}cl-Nd8>PA&*2OTP)3&qWDffp}}4g#Nr>%UK8o3`K!H zDW_ho9l6yoVIRrvFA`#Zp6v|gIH794U4~{?cjLWqlCGn-I+z)UsD}P41?gV0Us+5) zQrA0wn~y0mNYFv!RE>~ivckSk+E9tt@hWdCPXd&d(a3PVTM~C2*G!Ti$qEnqqp_65 zS&9i8V%^VXi(Y+e{Kt4#3z<D144&HIga{J-sVs;gPtG+1-zQ+5KmR-NsDN{;2}_C^ zP2%Ko@ylMV+fj0^s%?tuO1~G*{)f5t&6^#qqe|kSUm{PkT)3Gg4KE1MD?L*VoXqVX zD|xq_u&xc#NN6Sq3uP#YhmG>BqZtfFmBYzwyig?YIGu(kj9#4AjYc|h<}Pzky7L2h zR$DTwbygDWvwM7`2-SQy4<o;4j?1yn*dk6aemB4OlYFtx<EgaYvL(xS)z{T0Jg)H# zn}?UiytowrOLD##f$A7Y-i~6{X{^J9xBc(nv!|zNTEopmq+jck_9BKI=AOK=Qda_n zRkaddujq@*-q+V^uLm(yOd94B%=w2|lZTl}su)lQId2tSnG^QgNDLo-sIOw*ab)SV zR5MU*Sf)D*{#xQ=QBW;QFxGTam0^TX_))JgSFis%r6ubaJeU0UxBSX8FY=4QunFg& zh}928%29~!SOjo+eO>38&0s-LOn79N;v1m2=5{hYO_RR^&Y2u1BHk2)@Im(S^&t_t zqgf}kDRkC{Pr4T#wtZBFf{J&Q#j|Yfu7T_;HRD>Brimp^4_!*|1H69tqI*q)-6I{& znF{^8(67DuLjlIH)-d(y3GCc$@X<05vcgHKY^B58t>cqsFJ|dsv?4;x(@|doq-%UR zB^vk`c$y@TjLbMR%^0|}GH3Nq=bH@v7h#I`hmCSI8Dk{#WhbO0HohW$I5f6%WrJJ@ ztEa!^3i)ReHJIZ<H0bkpdv!0$emYY~A8Vg8ZkPGCLwdJG6S?esvDf^g)m-%HS|m-e zROGiv2Ft<A6tfg1H|H9-KI3QAy5n9s4Mh!lz?A{s7FhR1$M;8|eBDkECh@>o<sRto zh;V-PUD&d@uiL>2f)PtPG@702MF=<CDSCU?0EB`>8PG<n{-Y)+F(os$&MBGiQB^%a z+&z2j!CrXfjU@CL6cp|=<;8or=OTcA0bduH`EAJp=6_|A)l77b6w|?7_B<Wimm9^6 zt~U}^oE@gPsmeQ+99cf`qfw_>t66i@T-8tI@pRPO)#43|%>Eh-%xzP2gjxhtw%y2q zmU!iSbJGD5v=#%a=w9|uvOv)ABhgUv#yZuUE5UI4jGw`x-!U-|C{{39>Va%;EQxv8 z>WdqCy1a$Mr1tfKZ(3a=UbYQ<&jAYzxk8!LAHoGC<nTZ(f7b7Z@p||kf9Q04u~z4R z#sw~zZJs@aL-MN5#iKjO8rI%KtLf@<-N(M6oa_t=Z|T9>Yy56^orhLXEoS(Zc|00P zxbGH6kulEK67p!_7&%&L>2{<L-v0vs1Z*W-C2~gxp!BltLVlTksd)*Bmy5<!q{DqO zIihpzy~!l*;v^EYx24VJnLYC7T-+F-)R0b`OXQzUxWd}DlOGl{(XaH>doc)Eu#ftK zJy|4BX7gMe=;!IcsUMcktrj359<~=veSUvCyttPiE2n()=}IF^%wFT|DepM0ettNR zjZ7WCs0dPYFZ$3FZ|#sEtQ3+bgoE&nI|^Z`zjz_`BH}*ans%^@dA3(;XkOJR=!4;R zhM~jbzvyG<wrp*zpt%^6euIL`#gWKxp6dn*n>m5p*DmgmxK!L<6V_*sROh$H4?dIz zF&gR~DM7iC!{qQSrY9qE$>$uPMZ$IDnWRwC`a>jReje9aFyx5*mied=F|R!QY2#xJ zc*op&Z&y606C5Y#e0E>y&qh5clXV;}Sp7uJiY;ajA(nnIb})MIEa58)cXz2<q2|AN zgrfB;bQLTXd7!I#lXST}oyHMUlQxs|wT5yxep$!1H9~ubh(`1o=RAX!M=AHU(GOrS z@5$-t{LM-1qrzn1Ik}1=h&s3i^S3zN4?)9wn_qv6&IG&3&+Jm~)E;yNf3X9%gG#_| z^1&`rA3WxSc!VGbk%vJIgX<UkqFc_?rw~^X{DB4-oZ%zPIMtIS)!ia!?A}C7Xf31! zbJwbKqA*IejXqRP>wLW6F7)$DI+~@a@i}8u=u4p=trS1iKS}0O8Km9;-m+>S0yWXn zkQo-LbR{WMDd}$=>wb^%nnF+aSw9~z%=SKXuT4wrAe)=`kP0j+K<NJ`#(vZ=5d0yu z|EaO)QV>QVnq{@EulX+$`U>b6sa~yL9~>MJfH&A{#R(>|JI){{)Oh%_(F;yzr@z*D z@8>!n!8-%uofVxs_a@yQ??2TP5(jw12Kb_D*bGx`%V7Xu`YTN!D1g;dh+5hp?_y_4 z^B=Xl;TXvX>-83Rf5G8s@G}dOp(>QJCT3^`zC9r8(c}#T&;(VIHPystBw8vRdRS|s znP$@msjAxFyS=4B^Uovi(S<fl@+-FDd7V*$X_!7@e5VzU!e|aem$>-fJ)H`6%=m^l zb>aJU$`7N2oF;ulc*BQtzY2bw1YNA{7@Ht}?>zJtY>B_iuB@r);Ig;bAaGuz)ZxLE zM$<$aQb>p@%P9*!_-o-x_xNx3x8l|$ui^XV@$jIf4!0&S^E`ocecC7;MF&R<Ym?%( zbRTs)d9#W*^2p6%IJ-D2=|4-Hh~fYRdn<!&rK5XPa{0-bKw|${XWm^JYKT7_@Yw~C zc)3qwcH?Lqs9-{%fw0;P%bZydy?cw{d!VxIgQ#UQ|ID*l$yfCEgs7be?TmK3W6^D| z>2a3=X|Pir&qMk1xJQ)yeS{(&y4QP3%MX%*W5|;_P0<Tg3Px+<=zjJXp6fzmAexJi zA+GJX>{A`^z60{GQq=`KoXar(W(Sz0#VK2vyk}r(vlDR^HhDB&X|@r#b3?feap;ks z{09ZfS)wZMr5ocFbcu;j7wbrjH%#xcu8&;ceE<E!jh$cFd}!q1G3DAn*DtYne@194 zui{IeDKBGqONnMwh5E0k*RzNxR%AYxJDFJu^cz_-q+gm=Md48z-&DZsqR!q*cvADy zw8`PnBQV9!r}jUJAS$^+<_vi%v>9z6NhVEtSo6q|=p%}k>I&P|cw&_C7=~72*N*|9 zl6Ekb3dI0#w?#6L3Vt<nw-Q>nwzUS=ynhz^$l*-$qn}PFM^J(asDaX8eaKBuBDngK z+{PNp%GyL)uLs1UIup5M7pc2s-2bH2t_c;7d`CDT+QlkFaO`SA+VfYA{JnrLX#@55 zY(iH;Uw^LF{`xE19|cl+RfU!uDeiS?q$JTqAATRsx*v%6Ipd*Hq2yk1oF@LGZU<h; z#F54KbxASVS~!cldCJrx{GT21uyio6dQ>MFN@&byZd)a%iQS|WYx%=!4QFOhTvaEs zuQB+*WXDrM@>`W}|HwQWuZ8XQ)ZUx=_k@~VKX()BgyOr-O+9|Qd#N8HDs<HM?z1M( zJ(>}63RN4IFC?-=7=i)JaQgg|+u3HPv?Q<rYIe1*#n}@W(Irt<ozk4eOYXNV>J=*X zre`7MIq~f$D^z|<l99~Eb#r_us#Lsv6H4OYly22`z?Qbld`{4_j#Wd}A$obczd|#; zA*DW8-clM+@cC@sYIhI$!|oNbedJAW>V%HE^n1yH^7Zo)BotY1{1gOEGoEW_^d#QP zP-itRb)$btft!eKe_j?_bSN!eg8$3<!p>u(Z%gP>>1Z8bNe+SH#x~l*CK}~vK*?8+ zpNAL`uIF7ZZ$cb!GA&J9Y5#*kM(Iz&Y;yS_<jU@J8D`u3XT;kLNT5Jzdk%i?`KIj| zn6k~P$P22S$V4*5)}P&zA^64^XY`fq2q-}1m{KKfZ{pkf`G^P%%WOfp6ncbIKXSKP zzpHrUP}Oaw22s=0&^pte4Dr3-YkrVF@td>@_2wx-?5URIorqD#w+93{7bneGvee2# zK8E)n(y;4097Plue6`4fDmrLvy^Ws`hL@k$>dhFSVeub;)s{z;WYr2V6Qb8NvAz#R zbNnN()6KHGfD|fi-q9v5uiH#ILCvkpB3>w1q=nTz3jky}|1G*nUJ&)G%;tLsv*&;_ zn(|)Q>=i5oB6fKrDR{A!>Hw~>GMj$>jx+rt>jwiSFtk@Lpp~X%bh}<x@KkWZyWSVd zsDPpWRm~sP(%Z)h?_aK>4(-Uowpk8&$O>_8fDlaZSREO<X*z2Zi1}QuME_5F=N`}W z8prXaa!JT#Q(}k^InB&%VrQZf%gmhPoR`ihmzEZ0h2}EO>*NxO7&S3ugySfo#<6OL z9l1o5YgyJwudv)^JKOl3-@oUN^UwLazrKHc{&~LN=XpM_=leYGXXa2b+Xt%2X5HAF zX2h22yfmvB?p>arJ1kGwK4JJ%-K!cLFJ^5&od7mE1Othil0uBa0-Bg4*{^p@D@ES( z^mlqBG>?@jJr?#oHpfgo^WOZYMO2^%R>Q>3b$Xb?UqUP#>Fd(7J>>?H0WWW7Qi(Qx z19T3A9eJkxSyeBTh|MR6?ejpIB{|$vN+J#x@$v;Y-6=zEGkFC#5Tq*Pgi+R>h?4wc zn&6Ut=L$1$9y_eGVm!1Yu`=m~tRE=-(*=m>IVf`?wN{J8^2)y#y0t%ccn#A>W(?x1 zk$nx;P;_vS#;t%No?zp2k*Jl1*98CMa+c_^I0;0PhCJ|oIL3zAM!3(+HE2CVR5Jxl z-nmZv;B=Mq7REymY@6DSqt4WR1`k~uAB?xWd%y)3AkEjtPFxh^eHmYpk~FNkW$yY> zoH*fm(LXm`nqiljxLctdle@HSYLGOQ@RA@)V=3do*&ShH(E)O<k!c3V;v6s#evwg1 z9NkBaWp(L~#$6*YK(3Yu|3&}tB^%p%>kGbhqqHf>J(C+#<~Iv)m053Emt5B^;)~<n zdE=^)e=!};7K3cKdVHgoQ<K&GUSH-l+zXP9vfFu;WP+9l6*bB^pAL6|yM4JkIW)wG z8Re$yx5pDC!sh}7^yqeVVNF8Q6#@(A;eW0ZHlxe6qD{8=X^%(ivsLV7tN160FNpRN zur2E%7^EEH0*sneC=6Ab-?|BB?rUFPzQtQe1r}q|C^m(u<@6om<Y72=JNB2b=h{$} z(bC&uTZ*2tJ|(H^xHq)oVCeuqqVq#wl9%`UzDb+mww1J#o)@p2K?UD*tLBcCu*)op zZR`U3e6mKj1?qTqti&DN+XXKyOMx~FpPHypm$JpP^Pl5#OQ920_<e4|<aawb#aK}v zNCY%>1bTQ~{rh?3N{La(&v%)uXEA`de>WzV<)B`Pb5W+^)fO$98AIFrIA#pB0%3s_ zzujhY-Pp8ou;#$7q3pf4300TjqQ0of9PoL$f>7DxEC#b~$P#Jd!?{`4Iq^q=m?YLC zT3mMa`4drotobyV)VUi;y3~|cqqw@0yR%CxMfb648vYPy_^!FnggqngQnQ4033TqR zOHgny)#Z>U{%da%m7G@PIPja3-pm3r`V{q#jPk{}beO6<9Apqh=MLSFZgy~4OAmd0 z6e*T1Zj=hc0~k00)t-e}-jfgxq2e~igHUnAq>)SVU#ZIOZ~W~U3U()(&Q_G53w9g4 zP@0!*(F=K6W&SEg0dRYW>$dOGbQr*D0Ja5^ISvqCPP))}Fu`0c)0SlZ)-#m)W5%rD zbPUQ}BMRG}{3JFXW-SOLnyH+P2>UQ=wU(~R#=D;H1FY}7Atb1jlgj6nbIM0`v^wsZ z)2t{o$D)?l;4U7RW)JeG{bdd!N>>2mhta82nEGn6?uFQ1!QjZc=&7ZmRoIa*w)!gR z6?q>+pM7=bw}1;j-A=g7pQXqu>sh^=<e`N3ce>$AC#JjCSLOs;%9{_V{TfH3;32`z zyE5*eLnV;_K@{II5=mRer538GY*gvDD6Wd`kzz!;pjooMC3@aX86l&Ltg+YIjPj4y zjGRY(4PS@g|5bq~8^9cM#1D+<9hrqdAO~qaA+(5aS|s`$H4+REBm#-BcR<)9-G~Sz s+6jera<fAq&<I4Wr33k20!nNIIV$<T1!KuMuR#IC*XOi%vsYN=KihhAn*aa+ literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue index f8df489..008ac27 100644 --- a/src/App.vue +++ b/src/App.vue @@ -7,10 +7,10 @@ </template> <script lang="ts" setup> - import { ConfigProvider } from 'ant-design-vue'; - import { AppProvider } from '/@/components/Application'; - import { useTitle } from '/@/hooks/web/useTitle'; - import { useLocale } from '/@/locales/useLocale'; + import { ConfigProvider } from "ant-design-vue"; + import { AppProvider } from "/@/components/Application"; + import { useTitle } from "/@/hooks/web/useTitle"; + import { useLocale } from "/@/locales/useLocale"; // support Multi-language const { getAntdLocale } = useLocale(); diff --git a/src/api/demo/error.ts b/src/api/demo/error.ts index 3ce6072..7dc82b1 100644 --- a/src/api/demo/error.ts +++ b/src/api/demo/error.ts @@ -1,8 +1,8 @@ -import { defHttp } from '/@/utils/http/axios'; +import { defHttp } from "/@/utils/http/axios"; enum Api { // The address does not exist - Error = '/error', + Error = "/error", } /** diff --git a/src/api/student/model/practice-model.ts b/src/api/student/model/practice-model.ts new file mode 100644 index 0000000..16810e6 --- /dev/null +++ b/src/api/student/model/practice-model.ts @@ -0,0 +1,57 @@ +import { BasicFetchResult } from "../../model/baseModel"; + +interface BasePracticeModel { + //教学(教研)过程 + teachingProcess: string; + //个人总结 + personalSummary: string; + //小组评价 + groupEvaluation: string; + //日期 + date: string; + //文件链接 + docLink: string; +} + +//教育实习听课记录 +export interface PracticeLectureRecordItem extends BasePracticeModel { + recordId: number; + //听课内容 + lectureContent: string; + //任课教师名称 + teacherName: string; + //听课班级名称 + className: string; + //课程类型 + lectureType: string; + //听课体会与建议 + experience: string; +} + +export type PracticeLectureRecordListResultModel = BasicFetchResult<PracticeLectureRecordItem>; + +//教育实习教案信息 +export interface PracticeLessonPlanItem extends BasePracticeModel { + planId: number; + //课题名称 + subjectName: string; + //课程类型 + classType: string; + //课程设计思路 + designIdea: string; +} + +export type PracticeLessonPlanListResultModel = BasicFetchResult<PracticeLessonPlanItem>; + +//教研活动心得体会 +export interface ResearchActivityItem { + researchId: number; + //教研内容 + content: string; + //教研方式 + type: string; + //教研思路 + designIdea: string; +} + +export type ResearchActivityResultModel = BasicFetchResult<ResearchActivityItem>; diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts new file mode 100644 index 0000000..d4012d7 --- /dev/null +++ b/src/api/student/practice.ts @@ -0,0 +1,56 @@ +import { + PracticeLectureRecordListResultModel, + PracticeLessonPlanListResultModel, + ResearchActivityResultModel, +} from "./model/practice-model"; +import { UIdPageParams } from "../model/baseModel"; +import { defHttp } from "/@/utils/http/axios"; +enum Api { + LectureRecord = "/practice/record", + LessonPlan = "/practice/plan", + ResearchActivity = "/practice/research", +} + +/** + * @description 通过用户Id分页查询实习听课记录 + * @param params 查询参数 + */ +export const getLectureRecordPageById = (params: UIdPageParams) => + defHttp.get<PracticeLectureRecordListResultModel>({ + url: Api.LectureRecord, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); + +/** + * 通过用户Id分页查询实习教案信息 + * @param params 查询参数 + */ +export const getLessonPlanPageById = (params: UIdPageParams) => { + defHttp.get<PracticeLessonPlanListResultModel>({ + url: Api.LessonPlan, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); +}; + +/** + * 通过用户Id查询教研活动信息 + * @param params 查询参数)息信页分和di含包( + */ +export const getResearchActivity = (params: UIdPageParams) => { + defHttp.get<ResearchActivityResultModel>({ + url: Api.ResearchActivity, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); +}; diff --git a/src/api/sys/menu.ts b/src/api/sys/menu.ts index de9fa56..4c7062a 100644 --- a/src/api/sys/menu.ts +++ b/src/api/sys/menu.ts @@ -1,8 +1,8 @@ -import { defHttp } from '/@/utils/http/axios'; -import { getMenuListResultModel } from './model/menuModel'; +import { defHttp } from "/@/utils/http/axios"; +import { getMenuListResultModel } from "./model/menuModel"; enum Api { - GetMenuList = '/getMenuList', + GetMenuList = "/getMenuList", } /** diff --git a/src/api/sys/model/menuModel.ts b/src/api/sys/model/menuModel.ts index 8d19eea..8e00362 100644 --- a/src/api/sys/model/menuModel.ts +++ b/src/api/sys/model/menuModel.ts @@ -1,4 +1,4 @@ -import type { RouteMeta } from 'vue-router'; +import type { RouteMeta } from "vue-router"; export interface RouteItem { path: string; component: any; diff --git a/src/api/sys/upload.ts b/src/api/sys/upload.ts index c47baf4..c9fa505 100644 --- a/src/api/sys/upload.ts +++ b/src/api/sys/upload.ts @@ -1,9 +1,9 @@ -import { UploadApiResult } from './model/uploadModel'; -import { defHttp } from '/@/utils/http/axios'; -import { UploadFileParams } from '/#/axios'; -import { useGlobSetting } from '/@/hooks/setting'; +import { UploadApiResult } from "./model/uploadModel"; +import { defHttp } from "/@/utils/http/axios"; +import { UploadFileParams } from "/#/axios"; +import { useGlobSetting } from "/@/hooks/setting"; -const { uploadUrl = '' } = useGlobSetting(); +const { uploadUrl = "" } = useGlobSetting(); /** * @description: Upload interface diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts index 1e883b6..17fadaa 100644 --- a/src/api/sys/user.ts +++ b/src/api/sys/user.ts @@ -1,19 +1,19 @@ -import { defHttp } from '/@/utils/http/axios'; -import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel'; +import { defHttp } from "/@/utils/http/axios"; +import { LoginParams, LoginResultModel, GetUserInfoModel } from "./model/userModel"; -import { ErrorMessageMode } from '/#/axios'; +import { ErrorMessageMode } from "/#/axios"; enum Api { - Login = '/login', - Logout = '/logout', - GetUserInfo = '/getUserInfo', - GetPermCode = '/getPermCode', + Login = "/login", + Logout = "/logout", + GetUserInfo = "/getUserInfo", + GetPermCode = "/getPermCode", } /** * @description: user login api */ -export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') { +export function loginApi(params: LoginParams, mode: ErrorMessageMode = "modal") { return defHttp.post<LoginResultModel>( { url: Api.Login, @@ -29,7 +29,7 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') * @description: getUserInfo */ export function getUserInfo() { - return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' }); + return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, { errorMessageMode: "none" }); } export function getPermCode() { diff --git a/src/components/Application/index.ts b/src/components/Application/index.ts index d7c5133..fcc1c5f 100644 --- a/src/components/Application/index.ts +++ b/src/components/Application/index.ts @@ -1,12 +1,12 @@ -import { withInstall } from '/@/utils'; +import { withInstall } from "/@/utils"; -import appLogo from './src/AppLogo.vue'; -import appProvider from './src/AppProvider.vue'; -import appSearch from './src/search/AppSearch.vue'; -import appLocalePicker from './src/AppLocalePicker.vue'; -import appDarkModeToggle from './src/AppDarkModeToggle.vue'; +import appLogo from "./src/AppLogo.vue"; +import appProvider from "./src/AppProvider.vue"; +import appSearch from "./src/search/AppSearch.vue"; +import appLocalePicker from "./src/AppLocalePicker.vue"; +import appDarkModeToggle from "./src/AppDarkModeToggle.vue"; -export { useAppProviderContext } from './src/useAppContext'; +export { useAppProviderContext } from "./src/useAppContext"; export const AppLogo = withInstall(appLogo); export const AppProvider = withInstall(appProvider); diff --git a/src/components/Application/src/AppDarkModeToggle.vue b/src/components/Application/src/AppDarkModeToggle.vue index 19ba3b1..d284818 100644 --- a/src/components/Application/src/AppDarkModeToggle.vue +++ b/src/components/Application/src/AppDarkModeToggle.vue @@ -6,15 +6,15 @@ </div> </template> <script lang="ts" setup> - import { computed, unref } from 'vue'; - import { SvgIcon } from '/@/components/Icon'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground'; - import { updateDarkTheme } from '/@/logics/theme/dark'; - import { ThemeEnum } from '/@/enums/appEnum'; + import { computed, unref } from "vue"; + import { SvgIcon } from "/@/components/Icon"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { updateHeaderBgColor, updateSidebarBgColor } from "/@/logics/theme/updateBackground"; + import { updateDarkTheme } from "/@/logics/theme/dark"; + import { ThemeEnum } from "/@/enums/appEnum"; - const { prefixCls } = useDesign('dark-switch'); + const { prefixCls } = useDesign("dark-switch"); const { getDarkMode, setDarkMode, getShowDarkModeToggle } = useRootSetting(); const isDark = computed(() => getDarkMode.value === ThemeEnum.DARK); @@ -35,9 +35,9 @@ } </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-dark-switch'; + @prefix-cls: ~"@{namespace}-dark-switch"; - html[data-theme='dark'] { + html[data-theme="dark"] { .@{prefix-cls} { border: 1px solid rgb(196 188 188); } diff --git a/src/components/Application/src/AppLocalePicker.vue b/src/components/Application/src/AppLocalePicker.vue index 3d40a53..49fe8d4 100644 --- a/src/components/Application/src/AppLocalePicker.vue +++ b/src/components/Application/src/AppLocalePicker.vue @@ -18,13 +18,13 @@ </Dropdown> </template> <script lang="ts" setup> - import type { LocaleType } from '/#/config'; - import type { DropMenu } from '/@/components/Dropdown'; - import { ref, watchEffect, unref, computed } from 'vue'; - import { Dropdown } from '/@/components/Dropdown'; - import { Icon } from '/@/components/Icon'; - import { useLocale } from '/@/locales/useLocale'; - import { localeList } from '/@/settings/localeSetting'; + import type { LocaleType } from "/#/config"; + import type { DropMenu } from "/@/components/Dropdown"; + import { ref, watchEffect, unref, computed } from "vue"; + import { Dropdown } from "/@/components/Dropdown"; + import { Icon } from "/@/components/Icon"; + import { useLocale } from "/@/locales/useLocale"; + import { localeList } from "/@/settings/localeSetting"; const props = defineProps({ /** @@ -44,7 +44,7 @@ const getLocaleText = computed(() => { const key = selectedKeys.value[0]; if (!key) { - return ''; + return ""; } return localeList.find((item) => item.event === key)?.text; }); diff --git a/src/components/Application/src/AppLogo.vue b/src/components/Application/src/AppLogo.vue index 86aaf76..df22a9d 100644 --- a/src/components/Application/src/AppLogo.vue +++ b/src/components/Application/src/AppLogo.vue @@ -11,19 +11,19 @@ </div> </template> <script lang="ts" setup> - import { computed, unref } from 'vue'; - import { useGlobSetting } from '/@/hooks/setting'; - import { useGo } from '/@/hooks/web/usePage'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { PageEnum } from '/@/enums/pageEnum'; - import { useUserStore } from '/@/store/modules/user'; + import { computed, unref } from "vue"; + import { useGlobSetting } from "/@/hooks/setting"; + import { useGo } from "/@/hooks/web/usePage"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { PageEnum } from "/@/enums/pageEnum"; + import { useUserStore } from "/@/store/modules/user"; const props = defineProps({ /** * The theme of the current parent component */ - theme: { type: String, validator: (v: string) => ['light', 'dark'].includes(v) }, + theme: { type: String, validator: (v: string) => ["light", "dark"].includes(v) }, /** * Whether to show title */ @@ -34,7 +34,7 @@ alwaysShowTitle: { type: Boolean }, }); - const { prefixCls } = useDesign('app-logo'); + const { prefixCls } = useDesign("app-logo"); const { getCollapsedShowTitle } = useMenuSetting(); const userStore = useUserStore(); const { title } = useGlobSetting(); @@ -43,13 +43,13 @@ const getAppLogoClass = computed(() => [ prefixCls, props.theme, - { 'collapsed-show-title': unref(getCollapsedShowTitle) }, + { "collapsed-show-title": unref(getCollapsedShowTitle) }, ]); const getTitleClass = computed(() => [ `${prefixCls}__title`, { - 'xs:opacity-0': !props.alwaysShowTitle, + "xs:opacity-0": !props.alwaysShowTitle, }, ]); @@ -58,7 +58,7 @@ } </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-app-logo'; + @prefix-cls: ~"@{namespace}-app-logo"; .@{prefix-cls} { display: flex; diff --git a/src/components/Application/src/AppProvider.vue b/src/components/Application/src/AppProvider.vue index fe19a80..244470e 100644 --- a/src/components/Application/src/AppProvider.vue +++ b/src/components/Application/src/AppProvider.vue @@ -1,10 +1,10 @@ <script lang="ts"> - import { defineComponent, toRefs, ref, unref } from 'vue'; - import { createAppProviderContext } from './useAppContext'; - import { createBreakpointListen } from '/@/hooks/event/useBreakpoint'; - import { prefixCls } from '/@/settings/designSetting'; - import { useAppStore } from '/@/store/modules/app'; - import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; + import { defineComponent, toRefs, ref, unref } from "vue"; + import { createAppProviderContext } from "./useAppContext"; + import { createBreakpointListen } from "/@/hooks/event/useBreakpoint"; + import { prefixCls } from "/@/settings/designSetting"; + import { useAppStore } from "/@/store/modules/app"; + import { MenuModeEnum, MenuTypeEnum } from "/@/enums/menuEnum"; const props = { /** @@ -14,7 +14,7 @@ }; export default defineComponent({ - name: 'AppProvider', + name: "AppProvider", inheritAttrs: false, props, setup(props, { slots }) { diff --git a/src/components/Application/src/search/AppSearch.vue b/src/components/Application/src/search/AppSearch.vue index 63d346e..8075171 100644 --- a/src/components/Application/src/search/AppSearch.vue +++ b/src/components/Application/src/search/AppSearch.vue @@ -1,12 +1,12 @@ <script lang="tsx"> - import { defineComponent, ref, unref } from 'vue'; - import { Tooltip } from 'ant-design-vue'; - import { SearchOutlined } from '@ant-design/icons-vue'; - import AppSearchModal from './AppSearchModal.vue'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { defineComponent, ref, unref } from "vue"; + import { Tooltip } from "ant-design-vue"; + import { SearchOutlined } from "@ant-design/icons-vue"; + import AppSearchModal from "./AppSearchModal.vue"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ - name: 'AppSearch', + name: "AppSearch", setup() { const showModal = ref(false); const { t } = useI18n(); @@ -20,7 +20,7 @@ <div class="p-1" onClick={changeModal.bind(null, true)}> <Tooltip> {{ - title: () => t('common.searchText'), + title: () => t("common.searchText"), default: () => <SearchOutlined />, }} </Tooltip> diff --git a/src/components/Application/src/search/AppSearchFooter.vue b/src/components/Application/src/search/AppSearchFooter.vue index 97bd93a..612a712 100644 --- a/src/components/Application/src/search/AppSearchFooter.vue +++ b/src/components/Application/src/search/AppSearchFooter.vue @@ -1,24 +1,24 @@ <template> <div :class="`${prefixCls}`"> <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ant-design:enter-outlined" /> - <span>{{ t('component.app.toSearch') }}</span> + <span>{{ t("component.app.toSearch") }}</span> <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ion:arrow-up-outline" /> <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ion:arrow-down-outline" /> - <span>{{ t('component.app.toNavigate') }}</span> + <span>{{ t("component.app.toNavigate") }}</span> <AppSearchKeyItem :class="`${prefixCls}-item`" icon="mdi:keyboard-esc" /> - <span>{{ t('common.closeText') }}</span> + <span>{{ t("common.closeText") }}</span> </div> </template> <script lang="ts" setup> - import AppSearchKeyItem from './AppSearchKeyItem.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - const { prefixCls } = useDesign('app-search-footer'); + import AppSearchKeyItem from "./AppSearchKeyItem.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + const { prefixCls } = useDesign("app-search-footer"); const { t } = useI18n(); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-app-search-footer'; + @prefix-cls: ~"@{namespace}-app-search-footer"; .@{prefix-cls} { position: relative; diff --git a/src/components/Application/src/search/AppSearchKeyItem.vue b/src/components/Application/src/search/AppSearchKeyItem.vue index aba36a5..289b721 100644 --- a/src/components/Application/src/search/AppSearchKeyItem.vue +++ b/src/components/Application/src/search/AppSearchKeyItem.vue @@ -4,7 +4,7 @@ </span> </template> <script lang="ts" setup> - import { Icon } from '/@/components/Icon'; + import { Icon } from "/@/components/Icon"; defineProps({ icon: String, }); diff --git a/src/components/Application/src/search/AppSearchModal.vue b/src/components/Application/src/search/AppSearchModal.vue index 76b7882..c71453b 100644 --- a/src/components/Application/src/search/AppSearchModal.vue +++ b/src/components/Application/src/search/AppSearchModal.vue @@ -16,12 +16,12 @@ </template> </a-input> <span :class="`${prefixCls}-cancel`" @click="handleClose"> - {{ t('common.cancelText') }} + {{ t("common.cancelText") }} </span> </div> <div :class="`${prefixCls}-not-data`" v-show="getIsNotData"> - {{ t('component.app.searchNotData') }} + {{ t("component.app.searchNotData") }} </div> <ul :class="`${prefixCls}-list`" v-show="!getIsNotData" ref="scrollWrap"> @@ -58,29 +58,29 @@ </template> <script lang="ts" setup> - import { computed, unref, ref, watch, nextTick } from 'vue'; - import { SearchOutlined } from '@ant-design/icons-vue'; - import AppSearchFooter from './AppSearchFooter.vue'; - import Icon from '/@/components/Icon'; + import { computed, unref, ref, watch, nextTick } from "vue"; + import { SearchOutlined } from "@ant-design/icons-vue"; + import AppSearchFooter from "./AppSearchFooter.vue"; + import Icon from "/@/components/Icon"; // @ts-ignore - import vClickOutside from '/@/directives/clickOutside'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useRefs } from '/@/hooks/core/useRefs'; - import { useMenuSearch } from './useMenuSearch'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useAppInject } from '/@/hooks/web/useAppInject'; + import vClickOutside from "/@/directives/clickOutside"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useRefs } from "/@/hooks/core/useRefs"; + import { useMenuSearch } from "./useMenuSearch"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useAppInject } from "/@/hooks/web/useAppInject"; const props = defineProps({ visible: { type: Boolean }, }); - const emit = defineEmits(['close']); + const emit = defineEmits(["close"]); const scrollWrap = ref(null); const inputRef = ref<Nullable<HTMLElement>>(null); const { t } = useI18n(); - const { prefixCls } = useDesign('app-search-modal'); + const { prefixCls } = useDesign("app-search-modal"); const [refs, setRefs] = useRefs(); const { getIsMobile } = useAppInject(); @@ -110,12 +110,12 @@ function handleClose() { searchResult.value = []; - emit('close'); + emit("close"); } </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-app-search-modal'; - @footer-prefix-cls: ~'@{namespace}-app-search-footer'; + @prefix-cls: ~"@{namespace}-app-search-modal"; + @footer-prefix-cls: ~"@{namespace}-app-search-footer"; .@{prefix-cls} { position: fixed; top: 0; @@ -189,7 +189,7 @@ color: #1c1e21; border-radius: 6px; - span[role='img'] { + span[role="img"] { color: #999; } } diff --git a/src/components/Application/src/search/useMenuSearch.ts b/src/components/Application/src/search/useMenuSearch.ts index 9101b4a..b762b53 100644 --- a/src/components/Application/src/search/useMenuSearch.ts +++ b/src/components/Application/src/search/useMenuSearch.ts @@ -1,12 +1,12 @@ -import type { Menu } from '/@/router/types'; -import { ref, onBeforeMount, unref, Ref, nextTick } from 'vue'; -import { getMenus } from '/@/router/menus'; -import { cloneDeep } from 'lodash-es'; -import { filter, forEach } from '/@/utils/helper/treeHelper'; -import { useGo } from '/@/hooks/web/usePage'; -import { useScrollTo } from '/@/hooks/event/useScrollTo'; -import { onKeyStroke, useDebounceFn } from '@vueuse/core'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { Menu } from "/@/router/types"; +import { ref, onBeforeMount, unref, Ref, nextTick } from "vue"; +import { getMenus } from "/@/router/menus"; +import { cloneDeep } from "lodash-es"; +import { filter, forEach } from "/@/utils/helper/treeHelper"; +import { useGo } from "/@/hooks/web/usePage"; +import { useScrollTo } from "/@/hooks/event/useScrollTo"; +import { onKeyStroke, useDebounceFn } from "@vueuse/core"; +import { useI18n } from "/@/hooks/web/useI18n"; export interface SearchResult { name: string; @@ -16,19 +16,19 @@ export interface SearchResult { // Translate special characters function transform(c: string) { - const code: string[] = ['$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|']; + const code: string[] = ["$", "(", ")", "*", "+", ".", "[", "]", "?", "\\", "^", "{", "}", "|"]; return code.includes(c) ? `\\${c}` : c; } function createSearchReg(key: string) { const keys = [...key].map((item) => transform(item)); - const str = ['', ...keys, ''].join('.*'); + const str = ["", ...keys, ""].join(".*"); return new RegExp(str); } export function useMenuSearch(refs: Ref<HTMLElement[]>, scrollWrap: Ref<ElRef>, emit: EmitType) { const searchResult = ref<SearchResult[]>([]); - const keyword = ref(''); + const keyword = ref(""); const activeIndex = ref(-1); let menuList: Menu[] = []; @@ -151,16 +151,16 @@ export function useMenuSearch(refs: Ref<HTMLElement[]>, scrollWrap: Ref<ElRef>, // close search modal function handleClose() { searchResult.value = []; - emit('close'); + emit("close"); } // enter search - onKeyStroke('Enter', handleEnter); + onKeyStroke("Enter", handleEnter); // Monitor keyboard arrow keys - onKeyStroke('ArrowUp', handleUp); - onKeyStroke('ArrowDown', handleDown); + onKeyStroke("ArrowUp", handleUp); + onKeyStroke("ArrowDown", handleDown); // esc close - onKeyStroke('Escape', handleClose); + onKeyStroke("Escape", handleClose); return { handleSearch, searchResult, keyword, activeIndex, handleMouseenter, handleEnter }; } diff --git a/src/components/Application/src/useAppContext.ts b/src/components/Application/src/useAppContext.ts index 8bdfb4f..6e0f0fd 100644 --- a/src/components/Application/src/useAppContext.ts +++ b/src/components/Application/src/useAppContext.ts @@ -1,5 +1,5 @@ -import { InjectionKey, Ref } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import { InjectionKey, Ref } from "vue"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface AppProviderContextProps { prefixCls: Ref<string>; diff --git a/src/components/Authority/index.ts b/src/components/Authority/index.ts index 2f0eab7..02d5c3d 100644 --- a/src/components/Authority/index.ts +++ b/src/components/Authority/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import authority from './src/Authority.vue'; +import { withInstall } from "/@/utils"; +import authority from "./src/Authority.vue"; export const Authority = withInstall(authority); diff --git a/src/components/Authority/src/Authority.vue b/src/components/Authority/src/Authority.vue index 0d35938..100155a 100644 --- a/src/components/Authority/src/Authority.vue +++ b/src/components/Authority/src/Authority.vue @@ -2,14 +2,14 @@ Access control component for fine-grained access control. --> <script lang="ts"> - import type { PropType } from 'vue'; - import { defineComponent } from 'vue'; - import { RoleEnum } from '/@/enums/roleEnum'; - import { usePermission } from '/@/hooks/web/usePermission'; - import { getSlot } from '/@/utils/helper/tsxHelper'; + import type { PropType } from "vue"; + import { defineComponent } from "vue"; + import { RoleEnum } from "/@/enums/roleEnum"; + import { usePermission } from "/@/hooks/web/usePermission"; + import { getSlot } from "/@/utils/helper/tsxHelper"; export default defineComponent({ - name: 'Authority', + name: "Authority", props: { /** * Specified role is visible @@ -19,7 +19,7 @@ */ value: { type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>, - default: '', + default: "", }, }, setup(props, { slots }) { diff --git a/src/components/Basic/index.ts b/src/components/Basic/index.ts index 97a53a1..e4c65a5 100644 --- a/src/components/Basic/index.ts +++ b/src/components/Basic/index.ts @@ -1,7 +1,7 @@ -import { withInstall } from '/@/utils'; -import basicArrow from './src/BasicArrow.vue'; -import basicTitle from './src/BasicTitle.vue'; -import basicHelp from './src/BasicHelp.vue'; +import { withInstall } from "/@/utils"; +import basicArrow from "./src/BasicArrow.vue"; +import basicTitle from "./src/BasicTitle.vue"; +import basicHelp from "./src/BasicHelp.vue"; export const BasicArrow = withInstall(basicArrow); export const BasicTitle = withInstall(basicTitle); diff --git a/src/components/Basic/src/BasicArrow.vue b/src/components/Basic/src/BasicArrow.vue index 6a4cd01..a1381d6 100644 --- a/src/components/Basic/src/BasicArrow.vue +++ b/src/components/Basic/src/BasicArrow.vue @@ -8,9 +8,9 @@ </span> </template> <script lang="ts" setup> - import { computed } from 'vue'; - import { Icon } from '/@/components/Icon'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { computed } from "vue"; + import { Icon } from "/@/components/Icon"; + import { useDesign } from "/@/hooks/web/useDesign"; const props = defineProps({ /** @@ -31,7 +31,7 @@ inset: { type: Boolean }, }); - const { prefixCls } = useDesign('basic-arrow'); + const { prefixCls } = useDesign("basic-arrow"); // get component class const getClass = computed(() => { @@ -48,7 +48,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-basic-arrow'; + @prefix-cls: ~"@{namespace}-basic-arrow"; .@{prefix-cls} { display: inline-block; diff --git a/src/components/Basic/src/BasicHelp.vue b/src/components/Basic/src/BasicHelp.vue index 1a1debb..f04b67d 100644 --- a/src/components/Basic/src/BasicHelp.vue +++ b/src/components/Basic/src/BasicHelp.vue @@ -1,19 +1,19 @@ <script lang="tsx"> - import type { CSSProperties, PropType } from 'vue'; - import { defineComponent, computed, unref } from 'vue'; - import { Tooltip } from 'ant-design-vue'; - import { InfoCircleOutlined } from '@ant-design/icons-vue'; - import { getPopupContainer } from '/@/utils'; - import { isString, isArray } from '/@/utils/is'; - import { getSlot } from '/@/utils/helper/tsxHelper'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { CSSProperties, PropType } from "vue"; + import { defineComponent, computed, unref } from "vue"; + import { Tooltip } from "ant-design-vue"; + import { InfoCircleOutlined } from "@ant-design/icons-vue"; + import { getPopupContainer } from "/@/utils"; + import { isString, isArray } from "/@/utils/is"; + import { getSlot } from "/@/utils/helper/tsxHelper"; + import { useDesign } from "/@/hooks/web/useDesign"; const props = { /** * Help text max-width * @default: 600px */ - maxWidth: { type: String, default: '600px' }, + maxWidth: { type: String, default: "600px" }, /** * Whether to display the serial number * @default: false @@ -23,16 +23,16 @@ * Help text font color * @default: #ffffff */ - color: { type: String, default: '#ffffff' }, + color: { type: String, default: "#ffffff" }, /** * Help text font size * @default: 14px */ - fontSize: { type: String, default: '14px' }, + fontSize: { type: String, default: "14px" }, /** * Help text list */ - placement: { type: String, default: 'right' }, + placement: { type: String, default: "right" }, /** * Help text list */ @@ -40,11 +40,11 @@ }; export default defineComponent({ - name: 'BasicHelp', + name: "BasicHelp", components: { Tooltip }, props, setup(props, { slots }) { - const { prefixCls } = useDesign('basic-help'); + const { prefixCls } = useDesign("basic-help"); const getTooltipStyle = computed( (): CSSProperties => ({ color: props.color, fontSize: props.fontSize }), @@ -64,7 +64,7 @@ return ( <p key={text}> <> - {props.showIndex ? `${index + 1}. ` : ''} + {props.showIndex ? `${index + 1}. ` : ""} {text} </> </p> @@ -81,7 +81,7 @@ title={<div style={unref(getTooltipStyle)}>{renderTitle()}</div>} autoAdjustOverflow={true} overlayStyle={unref(getOverlayStyle)} - placement={props.placement as 'right'} + placement={props.placement as "right"} getPopupContainer={() => getPopupContainer()} > <span class={prefixCls}>{getSlot(slots) || <InfoCircleOutlined />}</span> @@ -92,7 +92,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-help'; + @prefix-cls: ~"@{namespace}-basic-help"; .@{prefix-cls} { display: inline-block; diff --git a/src/components/Basic/src/BasicTitle.vue b/src/components/Basic/src/BasicTitle.vue index 3b96328..bf0c902 100644 --- a/src/components/Basic/src/BasicTitle.vue +++ b/src/components/Basic/src/BasicTitle.vue @@ -5,10 +5,10 @@ </span> </template> <script lang="ts" setup> - import type { PropType } from 'vue'; - import { useSlots, computed } from 'vue'; - import BasicHelp from './BasicHelp.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { PropType } from "vue"; + import { useSlots, computed } from "vue"; + import BasicHelp from "./BasicHelp.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; const props = defineProps({ /** @@ -17,7 +17,7 @@ */ helpMessage: { type: [String, Array] as PropType<string | string[]>, - default: '', + default: "", }, /** * Whether the color block on the left side of the title @@ -31,7 +31,7 @@ normal: { type: Boolean }, }); - const { prefixCls } = useDesign('basic-title'); + const { prefixCls } = useDesign("basic-title"); const slots = useSlots(); const getClass = computed(() => [ prefixCls, @@ -40,7 +40,7 @@ ]); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-basic-title'; + @prefix-cls: ~"@{namespace}-basic-title"; .@{prefix-cls} { position: relative; @@ -66,7 +66,7 @@ height: 16px; margin-right: 4px; background-color: @primary-color; - content: ''; + content: ""; } &-help { diff --git a/src/components/Button/index.ts b/src/components/Button/index.ts index 98add5c..aaec6d0 100644 --- a/src/components/Button/index.ts +++ b/src/components/Button/index.ts @@ -1,8 +1,8 @@ -import { withInstall } from '/@/utils'; -import type { ExtractPropTypes } from 'vue'; -import button from './src/BasicButton.vue'; -import popConfirmButton from './src/PopConfirmButton.vue'; -import { buttonProps } from './src/props'; +import { withInstall } from "/@/utils"; +import type { ExtractPropTypes } from "vue"; +import button from "./src/BasicButton.vue"; +import popConfirmButton from "./src/PopConfirmButton.vue"; +import { buttonProps } from "./src/props"; export const Button = withInstall(button); export const PopConfirmButton = withInstall(popConfirmButton); diff --git a/src/components/Button/src/BasicButton.vue b/src/components/Button/src/BasicButton.vue index 73f0c44..a6fc16a 100644 --- a/src/components/Button/src/BasicButton.vue +++ b/src/components/Button/src/BasicButton.vue @@ -9,18 +9,18 @@ </template> <script lang="ts"> - import { defineComponent } from 'vue'; + import { defineComponent } from "vue"; export default defineComponent({ - name: 'AButton', + name: "AButton", inheritAttrs: false, }); </script> <script lang="ts" setup> - import { computed, unref } from 'vue'; - import { Button } from 'ant-design-vue'; - import Icon from '/@/components/Icon/src/Icon.vue'; - import { buttonProps } from './props'; - import { useAttrs } from '/@/hooks/core/useAttrs'; + import { computed, unref } from "vue"; + import { Button } from "ant-design-vue"; + import Icon from "/@/components/Icon/src/Icon.vue"; + import { buttonProps } from "./props"; + import { useAttrs } from "/@/hooks/core/useAttrs"; const props = defineProps(buttonProps); // get component class diff --git a/src/components/Button/src/PopConfirmButton.vue b/src/components/Button/src/PopConfirmButton.vue index b24225f..6aea610 100644 --- a/src/components/Button/src/PopConfirmButton.vue +++ b/src/components/Button/src/PopConfirmButton.vue @@ -1,11 +1,11 @@ <script lang="ts"> - import { computed, defineComponent, h, unref } from 'vue'; - import BasicButton from './BasicButton.vue'; - import { Popconfirm } from 'ant-design-vue'; - import { extendSlots } from '/@/utils/helper/tsxHelper'; - import { omit } from 'lodash-es'; - import { useAttrs } from '/@/hooks/core/useAttrs'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { computed, defineComponent, h, unref } from "vue"; + import BasicButton from "./BasicButton.vue"; + import { Popconfirm } from "ant-design-vue"; + import { extendSlots } from "/@/utils/helper/tsxHelper"; + import { omit } from "lodash-es"; + import { useAttrs } from "/@/hooks/core/useAttrs"; + import { useI18n } from "/@/hooks/web/useI18n"; const props = { /** @@ -19,7 +19,7 @@ }; export default defineComponent({ - name: 'PopButton', + name: "PopButton", inheritAttrs: false, props, setup(props, { slots }) { @@ -30,17 +30,17 @@ const getBindValues = computed(() => { return Object.assign( { - okText: t('common.okText'), - cancelText: t('common.cancelText'), + okText: t("common.okText"), + cancelText: t("common.cancelText"), }, { ...props, ...unref(attrs) }, ); }); return () => { - const bindValues = omit(unref(getBindValues), 'icon'); - const btnBind = omit(bindValues, 'title') as Recordable; - if (btnBind.disabled) btnBind.color = ''; + const bindValues = omit(unref(getBindValues), "icon"); + const btnBind = omit(bindValues, "title") as Recordable; + if (btnBind.disabled) btnBind.color = ""; const Button = h(BasicButton, btnBind, extendSlots(slots)); // If it is not enabled, it is a normal button diff --git a/src/components/Button/src/props.ts b/src/components/Button/src/props.ts index d79d378..c2b9727 100644 --- a/src/components/Button/src/props.ts +++ b/src/components/Button/src/props.ts @@ -1,5 +1,5 @@ export const buttonProps = { - color: { type: String, validator: (v) => ['error', 'warning', 'success', ''].includes(v) }, + color: { type: String, validator: (v) => ["error", "warning", "success", ""].includes(v) }, loading: { type: Boolean }, disabled: { type: Boolean }, /** diff --git a/src/components/CardList/index.ts b/src/components/CardList/index.ts index b977c1b..21acf89 100644 --- a/src/components/CardList/index.ts +++ b/src/components/CardList/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import cardList from './src/CardList.vue'; +import { withInstall } from "/@/utils"; +import cardList from "./src/CardList.vue"; export const CardList = withInstall(cardList); diff --git a/src/components/CardList/src/CardList.vue b/src/components/CardList/src/CardList.vue index 0000cd4..9bf651c 100644 --- a/src/components/CardList/src/CardList.vue +++ b/src/components/CardList/src/CardList.vue @@ -1,17 +1,17 @@ <script lang="ts" setup> - import { computed, onMounted, ref } from 'vue'; + import { computed, onMounted, ref } from "vue"; import { EditOutlined, EllipsisOutlined, RedoOutlined, TableOutlined, - } from '@ant-design/icons-vue'; - import { List, Card, Image, Typography, Tooltip, Slider, Avatar } from 'ant-design-vue'; - import { Dropdown } from '/@/components/Dropdown'; - import { BasicForm, useForm } from '/@/components/Form'; - import { Button } from '/@/components/Button'; - import { isFunction } from '/@/utils/is'; - import { useSlider, grid } from './data'; + } from "@ant-design/icons-vue"; + import { List, Card, Image, Typography, Tooltip, Slider, Avatar } from "ant-design-vue"; + import { Dropdown } from "/@/components/Dropdown"; + import { BasicForm, useForm } from "/@/components/Form"; + import { Button } from "/@/components/Button"; + import { isFunction } from "/@/utils/is"; + import { useSlider, grid } from "./data"; const ListItem = List.Item; const CardMeta = Card.Meta; const TypographyText = Typography.Text; @@ -31,7 +31,7 @@ }, }); //暴露内部方法 - const emit = defineEmits(['getMethod', 'delete']); + const emit = defineEmits(["getMethod", "delete"]); //数据 const data = ref([]); // 切换每行个数 @@ -43,7 +43,7 @@ }); //表单 const [registerForm, { validate }] = useForm({ - schemas: [{ field: 'type', component: 'Input', label: '类型' }], + schemas: [{ field: "type", component: "Input", label: "类型" }], labelWidth: 80, baseColProps: { span: 6 }, actionColOptions: { span: 24 }, @@ -63,7 +63,7 @@ // 自动请求并暴露内部方法 onMounted(() => { fetch(); - emit('getMethod', fetch); + emit("getMethod", fetch); }); async function fetch(p = {}) { @@ -100,7 +100,7 @@ } async function handleDelete(id) { - emit('delete', id); + emit("delete", id); } </script> diff --git a/src/components/CardList/src/data.ts b/src/components/CardList/src/data.ts index ac56cad..2dd2d24 100644 --- a/src/components/CardList/src/data.ts +++ b/src/components/CardList/src/data.ts @@ -1,4 +1,4 @@ -import { ref } from 'vue'; +import { ref } from "vue"; //每行个数 export const grid = ref(12); // slider属性 @@ -9,7 +9,7 @@ export const useSlider = (min = 6, max = 12) => { for (let i = min; i < max + 1; i++) { l[i] = { style: { - color: '#fff', + color: "#fff", }, label: i, }; diff --git a/src/components/ClickOutSide/index.ts b/src/components/ClickOutSide/index.ts index 5e7dd2d..06a0b8a 100644 --- a/src/components/ClickOutSide/index.ts +++ b/src/components/ClickOutSide/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import clickOutSide from './src/ClickOutSide.vue'; +import { withInstall } from "/@/utils"; +import clickOutSide from "./src/ClickOutSide.vue"; export const ClickOutSide = withInstall(clickOutSide); diff --git a/src/components/ClickOutSide/src/ClickOutSide.vue b/src/components/ClickOutSide/src/ClickOutSide.vue index c043cc1..0e81ccd 100644 --- a/src/components/ClickOutSide/src/ClickOutSide.vue +++ b/src/components/ClickOutSide/src/ClickOutSide.vue @@ -4,16 +4,16 @@ </div> </template> <script lang="ts" setup> - import { ref, onMounted } from 'vue'; - import { onClickOutside } from '@vueuse/core'; - const emit = defineEmits(['mounted', 'clickOutside']); + import { ref, onMounted } from "vue"; + import { onClickOutside } from "@vueuse/core"; + const emit = defineEmits(["mounted", "clickOutside"]); const wrap = ref<ElRef>(null); onClickOutside(wrap, () => { - emit('clickOutside'); + emit("clickOutside"); }); onMounted(() => { - emit('mounted'); + emit("mounted"); }); </script> diff --git a/src/components/CodeEditor/index.ts b/src/components/CodeEditor/index.ts index 872bfed..fa2fb43 100644 --- a/src/components/CodeEditor/index.ts +++ b/src/components/CodeEditor/index.ts @@ -1,8 +1,8 @@ -import { withInstall } from '/@/utils'; -import codeEditor from './src/CodeEditor.vue'; -import jsonPreview from './src/json-preview/JsonPreview.vue'; +import { withInstall } from "/@/utils"; +import codeEditor from "./src/CodeEditor.vue"; +import jsonPreview from "./src/json-preview/JsonPreview.vue"; export const CodeEditor = withInstall(codeEditor); export const JsonPreview = withInstall(jsonPreview); -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/CodeEditor/src/CodeEditor.vue b/src/components/CodeEditor/src/CodeEditor.vue index db9042b..82fd1af 100644 --- a/src/components/CodeEditor/src/CodeEditor.vue +++ b/src/components/CodeEditor/src/CodeEditor.vue @@ -9,10 +9,10 @@ </div> </template> <script lang="ts" setup> - import { computed } from 'vue'; - import CodeMirrorEditor from './codemirror/CodeMirror.vue'; - import { isString } from '/@/utils/is'; - import { MODE } from './typing'; + import { computed } from "vue"; + import CodeMirrorEditor from "./codemirror/CodeMirror.vue"; + import { isString } from "/@/utils/is"; + import { MODE } from "./typing"; const props = defineProps({ value: { type: [Object, String] as PropType<Record<string, any> | string> }, @@ -28,7 +28,7 @@ autoFormat: { type: Boolean, default: true }, }); - const emit = defineEmits(['change', 'update:value', 'format-error']); + const emit = defineEmits(["change", "update:value", "format-error"]); const getValue = computed(() => { const { value, mode, autoFormat } = props; @@ -40,7 +40,7 @@ try { result = JSON.parse(value); } catch (e) { - emit('format-error', value); + emit("format-error", value); return value as string; } } @@ -48,7 +48,7 @@ }); function handleValueChange(v) { - emit('update:value', v); - emit('change', v); + emit("update:value", v); + emit("change", v); } </script> diff --git a/src/components/CodeEditor/src/codemirror/CodeMirror.vue b/src/components/CodeEditor/src/codemirror/CodeMirror.vue index 426ac36..b2bed9f 100644 --- a/src/components/CodeEditor/src/codemirror/CodeMirror.vue +++ b/src/components/CodeEditor/src/codemirror/CodeMirror.vue @@ -3,20 +3,20 @@ </template> <script lang="ts" setup> - import { ref, onMounted, onUnmounted, watchEffect, watch, unref, nextTick } from 'vue'; - import { useDebounceFn } from '@vueuse/core'; - import { useAppStore } from '/@/store/modules/app'; - import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; - import CodeMirror from 'codemirror'; - import { MODE } from './../typing'; + import { ref, onMounted, onUnmounted, watchEffect, watch, unref, nextTick } from "vue"; + import { useDebounceFn } from "@vueuse/core"; + import { useAppStore } from "/@/store/modules/app"; + import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; + import CodeMirror from "codemirror"; + import { MODE } from "./../typing"; // css - import './codemirror.css'; - import 'codemirror/theme/idea.css'; - import 'codemirror/theme/material-palenight.css'; + import "./codemirror.css"; + import "codemirror/theme/idea.css"; + import "codemirror/theme/material-palenight.css"; // modes - import 'codemirror/mode/javascript/javascript'; - import 'codemirror/mode/css/css'; - import 'codemirror/mode/htmlmixed/htmlmixed'; + import "codemirror/mode/javascript/javascript"; + import "codemirror/mode/css/css"; + import "codemirror/mode/htmlmixed/htmlmixed"; const props = defineProps({ mode: { @@ -27,11 +27,11 @@ return Object.values(MODE).includes(value); }, }, - value: { type: String, default: '' }, + value: { type: String, default: "" }, readonly: { type: Boolean, default: false }, }); - const emit = defineEmits(['change']); + const emit = defineEmits(["change"]); const el = ref(); let editor: Nullable<CodeMirror.Editor>; @@ -45,14 +45,14 @@ await nextTick(); const oldValue = editor?.getValue(); if (value !== oldValue) { - editor?.setValue(value ? value : ''); + editor?.setValue(value ? value : ""); } }, - { flush: 'post' }, + { flush: "post" }, ); watchEffect(() => { - editor?.setOption('mode', props.mode); + editor?.setOption("mode", props.mode); }); watch( @@ -67,8 +67,8 @@ function setTheme() { unref(editor)?.setOption( - 'theme', - appStore.getDarkMode === 'light' ? 'idea' : 'material-palenight', + "theme", + appStore.getDarkMode === "light" ? "idea" : "material-palenight", ); } @@ -81,23 +81,23 @@ autoCloseBrackets: true, autoCloseTags: true, foldGutter: true, - gutters: ['CodeMirror-linenumbers'], + gutters: ["CodeMirror-linenumbers"], }; editor = CodeMirror(el.value!, { - value: '', + value: "", mode: props.mode, readOnly: props.readonly, tabSize: 2, - theme: 'material-palenight', + theme: "material-palenight", lineWrapping: true, lineNumbers: true, ...addonOptions, }); editor?.setValue(props.value); setTheme(); - editor?.on('change', () => { - emit('change', editor?.getValue()); + editor?.on("change", () => { + emit("change", editor?.getValue()); }); } diff --git a/src/components/CodeEditor/src/codemirror/codeMirror.ts b/src/components/CodeEditor/src/codemirror/codeMirror.ts index e04f51b..d70f282 100644 --- a/src/components/CodeEditor/src/codemirror/codeMirror.ts +++ b/src/components/CodeEditor/src/codemirror/codeMirror.ts @@ -1,13 +1,13 @@ -import CodeMirror from 'codemirror'; -import './codemirror.css'; -import 'codemirror/theme/idea.css'; -import 'codemirror/theme/material-palenight.css'; +import CodeMirror from "codemirror"; +import "./codemirror.css"; +import "codemirror/theme/idea.css"; +import "codemirror/theme/material-palenight.css"; // import 'codemirror/addon/lint/lint.css'; // modes -import 'codemirror/mode/javascript/javascript'; -import 'codemirror/mode/css/css'; -import 'codemirror/mode/htmlmixed/htmlmixed'; +import "codemirror/mode/javascript/javascript"; +import "codemirror/mode/css/css"; +import "codemirror/mode/htmlmixed/htmlmixed"; // addons // import 'codemirror/addon/edit/closebrackets'; // import 'codemirror/addon/edit/closetag'; diff --git a/src/components/CodeEditor/src/json-preview/JsonPreview.vue b/src/components/CodeEditor/src/json-preview/JsonPreview.vue index 75890c3..5ee8286 100644 --- a/src/components/CodeEditor/src/json-preview/JsonPreview.vue +++ b/src/components/CodeEditor/src/json-preview/JsonPreview.vue @@ -3,8 +3,8 @@ </template> <script lang="ts" setup> - import VueJsonPretty from 'vue-json-pretty'; - import 'vue-json-pretty/lib/styles.css'; + import VueJsonPretty from "vue-json-pretty"; + import "vue-json-pretty/lib/styles.css"; defineProps({ data: Object, diff --git a/src/components/CodeEditor/src/typing.ts b/src/components/CodeEditor/src/typing.ts index 34b5ed1..16eee6b 100644 --- a/src/components/CodeEditor/src/typing.ts +++ b/src/components/CodeEditor/src/typing.ts @@ -1,5 +1,5 @@ export enum MODE { - JSON = 'application/json', - HTML = 'htmlmixed', - JS = 'javascript', + JSON = "application/json", + HTML = "htmlmixed", + JS = "javascript", } diff --git a/src/components/Container/index.ts b/src/components/Container/index.ts index e1230a0..21a7dd3 100644 --- a/src/components/Container/index.ts +++ b/src/components/Container/index.ts @@ -1,10 +1,10 @@ -import { withInstall } from '/@/utils'; -import collapseContainer from './src/collapse/CollapseContainer.vue'; -import scrollContainer from './src/ScrollContainer.vue'; -import lazyContainer from './src/LazyContainer.vue'; +import { withInstall } from "/@/utils"; +import collapseContainer from "./src/collapse/CollapseContainer.vue"; +import scrollContainer from "./src/ScrollContainer.vue"; +import lazyContainer from "./src/LazyContainer.vue"; export const CollapseContainer = withInstall(collapseContainer); export const ScrollContainer = withInstall(scrollContainer); export const LazyContainer = withInstall(lazyContainer); -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/Container/src/LazyContainer.vue b/src/components/Container/src/LazyContainer.vue index a7ad2b6..853e762 100644 --- a/src/components/Container/src/LazyContainer.vue +++ b/src/components/Container/src/LazyContainer.vue @@ -17,11 +17,11 @@ </transition-group> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue'; - import { Skeleton } from 'ant-design-vue'; - import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - import { useIntersectionObserver } from '/@/hooks/event/useIntersectionObserver'; + import type { PropType } from "vue"; + import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from "vue"; + import { Skeleton } from "ant-design-vue"; + import { useTimeoutFn } from "/@/hooks/core/useTimeout"; + import { useIntersectionObserver } from "/@/hooks/event/useIntersectionObserver"; interface State { isInit: boolean; @@ -39,38 +39,38 @@ * If the component is scrolling in the page container, the viewport is the container */ viewport: { - type: (typeof window !== 'undefined' ? window.HTMLElement : Object) as PropType<HTMLElement>, + type: (typeof window !== "undefined" ? window.HTMLElement : Object) as PropType<HTMLElement>, default: () => null, }, /** * Preload threshold, css unit */ - threshold: { type: String, default: '0px' }, + threshold: { type: String, default: "0px" }, /** * The scroll direction of the viewport, vertical represents the vertical direction, horizontal represents the horizontal direction */ direction: { type: String, - default: 'vertical', - validator: (v) => ['vertical', 'horizontal'].includes(v), + default: "vertical", + validator: (v) => ["vertical", "horizontal"].includes(v), }, /** * The label name of the outer container that wraps the component */ - tag: { type: String, default: 'div' }, + tag: { type: String, default: "div" }, maxWaitingTime: { type: Number, default: 80 }, /** * transition name */ - transitionName: { type: String, default: 'lazy-container' }, + transitionName: { type: String, default: "lazy-container" }, }; export default defineComponent({ - name: 'LazyContainer', + name: "LazyContainer", components: { Skeleton }, inheritAttrs: false, props, - emits: ['init'], + emits: ["init"], setup(props, { emit }) { const elRef = ref(); const state = reactive<State>({ @@ -99,7 +99,7 @@ useTimeoutFn(() => { if (state.isInit) return; state.isInit = true; - emit('init'); + emit("init"); }, props.maxWaitingTime || 80); } @@ -107,12 +107,12 @@ const { timeout, direction, threshold } = props; if (timeout) return; // According to the scrolling direction to construct the viewport margin, used to load in advance - let rootMargin = '0px'; + let rootMargin = "0px"; switch (direction) { - case 'vertical': + case "vertical": rootMargin = `${threshold} 0px`; break; - case 'horizontal': + case "horizontal": rootMargin = `0px ${threshold}`; break; } @@ -120,7 +120,7 @@ try { const { stop, observer } = useIntersectionObserver({ rootMargin, - target: toRef(elRef.value, '$el'), + target: toRef(elRef.value, "$el"), onIntersect: (entries: any[]) => { const isIntersecting = entries[0].isIntersecting || entries[0].intersectionRatio; if (isIntersecting) { @@ -130,7 +130,7 @@ } } }, - root: toRef(props, 'viewport'), + root: toRef(props, "viewport"), }); } catch (e) { init(); diff --git a/src/components/Container/src/ScrollContainer.vue b/src/components/Container/src/ScrollContainer.vue index 65c71ed..a73c5a5 100644 --- a/src/components/Container/src/ScrollContainer.vue +++ b/src/components/Container/src/ScrollContainer.vue @@ -5,12 +5,12 @@ </template> <script lang="ts"> - import { defineComponent, ref, unref, nextTick } from 'vue'; - import { Scrollbar, ScrollbarType } from '/@/components/Scrollbar'; - import { useScrollTo } from '/@/hooks/event/useScrollTo'; + import { defineComponent, ref, unref, nextTick } from "vue"; + import { Scrollbar, ScrollbarType } from "/@/components/Scrollbar"; + import { useScrollTo } from "/@/hooks/event/useScrollTo"; export default defineComponent({ - name: 'ScrollContainer', + name: "ScrollContainer", components: { Scrollbar }, setup() { const scrollbarRef = ref<Nullable<ScrollbarType>>(null); diff --git a/src/components/Container/src/collapse/CollapseContainer.vue b/src/components/Container/src/collapse/CollapseContainer.vue index 4b629f2..dd5afe8 100644 --- a/src/components/Container/src/collapse/CollapseContainer.vue +++ b/src/components/Container/src/collapse/CollapseContainer.vue @@ -23,19 +23,19 @@ </div> </template> <script lang="ts" setup> - import type { PropType } from 'vue'; - import { ref } from 'vue'; + import type { PropType } from "vue"; + import { ref } from "vue"; // component - import { Skeleton } from 'ant-design-vue'; - import { CollapseTransition } from '/@/components/Transition'; - import CollapseHeader from './CollapseHeader.vue'; - import { triggerWindowResize } from '/@/utils/event'; + import { Skeleton } from "ant-design-vue"; + import { CollapseTransition } from "/@/components/Transition"; + import CollapseHeader from "./CollapseHeader.vue"; + import { triggerWindowResize } from "/@/utils/event"; // hook - import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useTimeoutFn } from "/@/hooks/core/useTimeout"; + import { useDesign } from "/@/hooks/web/useDesign"; const props = defineProps({ - title: { type: String, default: '' }, + title: { type: String, default: "" }, loading: { type: Boolean }, /** * Can it be expanded @@ -46,7 +46,7 @@ */ helpMessage: { type: [Array, String] as PropType<string[] | string>, - default: '', + default: "", }, /** * Whether to trigger window.resize when expanding and contracting, @@ -61,7 +61,7 @@ const show = ref(true); - const { prefixCls } = useDesign('collapse-container'); + const { prefixCls } = useDesign("collapse-container"); /** * @description: Handling development events @@ -75,7 +75,7 @@ } </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-collapse-container'; + @prefix-cls: ~"@{namespace}-collapse-container"; .@{prefix-cls} { background-color: @component-background; diff --git a/src/components/Container/src/collapse/CollapseHeader.vue b/src/components/Container/src/collapse/CollapseHeader.vue index 4196c0a..b6f5d0b 100644 --- a/src/components/Container/src/collapse/CollapseHeader.vue +++ b/src/components/Container/src/collapse/CollapseHeader.vue @@ -15,14 +15,14 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { BasicArrow, BasicTitle } from '/@/components/Basic'; + import { defineComponent } from "vue"; + import { BasicArrow, BasicTitle } from "/@/components/Basic"; const props = { prefixCls: { type: String }, helpMessage: { type: [Array, String] as PropType<string[] | string>, - default: '', + default: "", }, title: { type: String }, show: { type: Boolean }, @@ -33,6 +33,6 @@ components: { BasicArrow, BasicTitle }, inheritAttrs: false, props, - emits: ['expand'], + emits: ["expand"], }); </script> diff --git a/src/components/Container/src/typing.ts b/src/components/Container/src/typing.ts index 86c03be..371144e 100644 --- a/src/components/Container/src/typing.ts +++ b/src/components/Container/src/typing.ts @@ -1,4 +1,4 @@ -export type ScrollType = 'default' | 'main'; +export type ScrollType = "default" | "main"; export interface CollapseContainerOptions { canExpand?: boolean; diff --git a/src/components/ContextMenu/index.ts b/src/components/ContextMenu/index.ts index ed294d7..206bfaa 100644 --- a/src/components/ContextMenu/index.ts +++ b/src/components/ContextMenu/index.ts @@ -1,3 +1,3 @@ -export { createContextMenu, destroyContextMenu } from './src/createContextMenu'; +export { createContextMenu, destroyContextMenu } from "./src/createContextMenu"; -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/ContextMenu/src/ContextMenu.vue b/src/components/ContextMenu/src/ContextMenu.vue index 77f250f..e97a478 100644 --- a/src/components/ContextMenu/src/ContextMenu.vue +++ b/src/components/ContextMenu/src/ContextMenu.vue @@ -1,11 +1,11 @@ <script lang="tsx"> - import type { ContextMenuItem, ItemContentProps, Axis } from './typing'; - import type { FunctionalComponent, CSSProperties } from 'vue'; - import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from 'vue'; - import Icon from '/@/components/Icon'; - import { Menu, Divider } from 'ant-design-vue'; + import type { ContextMenuItem, ItemContentProps, Axis } from "./typing"; + import type { FunctionalComponent, CSSProperties } from "vue"; + import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from "vue"; + import Icon from "/@/components/Icon"; + import { Menu, Divider } from "ant-design-vue"; - const prefixCls = 'context-menu'; + const prefixCls = "context-menu"; const props = { width: { type: Number, default: 156 }, @@ -43,7 +43,7 @@ }; export default defineComponent({ - name: 'ContextMenu', + name: "ContextMenu", props, setup(props) { const wrapRef = ref(null); diff --git a/src/components/ContextMenu/src/createContextMenu.ts b/src/components/ContextMenu/src/createContextMenu.ts index 8f7a1c8..56b29ef 100644 --- a/src/components/ContextMenu/src/createContextMenu.ts +++ b/src/components/ContextMenu/src/createContextMenu.ts @@ -1,7 +1,7 @@ -import contextMenuVue from './ContextMenu.vue'; -import { isClient } from '/@/utils/is'; -import { CreateContextOptions, ContextMenuProps } from './typing'; -import { createVNode, render } from 'vue'; +import contextMenuVue from "./ContextMenu.vue"; +import { isClient } from "/@/utils/is"; +import { CreateContextOptions, ContextMenuProps } from "./typing"; +import { createVNode, render } from "vue"; const menuManager: { domList: Element[]; @@ -22,7 +22,7 @@ export const createContextMenu = function (options: CreateContextOptions) { return new Promise((resolve) => { const body = document.body; - const container = document.createElement('div'); + const container = document.createElement("div"); const propsData: Partial<ContextMenuProps> = {}; if (options.styles) { propsData.styles = options.styles; @@ -41,7 +41,7 @@ export const createContextMenu = function (options: CreateContextOptions) { render(vm, container); const handleClick = function () { - menuManager.resolve(''); + menuManager.resolve(""); }; menuManager.domList.push(container); @@ -52,8 +52,8 @@ export const createContextMenu = function (options: CreateContextOptions) { dom && body.removeChild(dom); } catch (error) {} }); - body.removeEventListener('click', handleClick); - body.removeEventListener('scroll', handleClick); + body.removeEventListener("click", handleClick); + body.removeEventListener("scroll", handleClick); }; menuManager.resolve = function (arg) { @@ -62,14 +62,14 @@ export const createContextMenu = function (options: CreateContextOptions) { }; remove(); body.appendChild(container); - body.addEventListener('click', handleClick); - body.addEventListener('scroll', handleClick); + body.addEventListener("click", handleClick); + body.addEventListener("scroll", handleClick); }); }; export const destroyContextMenu = function () { if (menuManager) { - menuManager.resolve(''); + menuManager.resolve(""); menuManager.domList = []; } }; diff --git a/src/components/CountDown/index.ts b/src/components/CountDown/index.ts index 9809416..467f85a 100644 --- a/src/components/CountDown/index.ts +++ b/src/components/CountDown/index.ts @@ -1,6 +1,6 @@ -import { withInstall } from '/@/utils'; -import countButton from './src/CountButton.vue'; -import countdownInput from './src/CountdownInput.vue'; +import { withInstall } from "/@/utils"; +import countButton from "./src/CountButton.vue"; +import countdownInput from "./src/CountdownInput.vue"; export const CountdownInput = withInstall(countdownInput); export const CountButton = withInstall(countButton); diff --git a/src/components/CountDown/src/CountButton.vue b/src/components/CountDown/src/CountButton.vue index 1ef520e..475412a 100644 --- a/src/components/CountDown/src/CountButton.vue +++ b/src/components/CountDown/src/CountButton.vue @@ -4,11 +4,11 @@ </Button> </template> <script lang="ts"> - import { defineComponent, ref, watchEffect, computed, unref } from 'vue'; - import { Button } from 'ant-design-vue'; - import { useCountdown } from './useCountdown'; - import { isFunction } from '/@/utils/is'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { defineComponent, ref, watchEffect, computed, unref } from "vue"; + import { Button } from "ant-design-vue"; + import { useCountdown } from "./useCountdown"; + import { isFunction } from "/@/utils/is"; + import { useI18n } from "/@/hooks/web/useI18n"; const props = { value: { type: [Object, Number, String, Array] }, @@ -20,7 +20,7 @@ }; export default defineComponent({ - name: 'CountButton', + name: "CountButton", components: { Button }, props, setup(props) { @@ -31,8 +31,8 @@ const getButtonText = computed(() => { return !unref(isStart) - ? t('component.countdown.normalText') - : t('component.countdown.sendText', [unref(currentCount)]); + ? t("component.countdown.normalText") + : t("component.countdown.sendText", [unref(currentCount)]); }); watchEffect(() => { diff --git a/src/components/CountDown/src/CountdownInput.vue b/src/components/CountDown/src/CountdownInput.vue index 8da89cd..27e6b7e 100644 --- a/src/components/CountDown/src/CountdownInput.vue +++ b/src/components/CountDown/src/CountdownInput.vue @@ -9,14 +9,14 @@ </a-input> </template> <script lang="ts"> - import { defineComponent, PropType } from 'vue'; - import CountButton from './CountButton.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useRuleFormItem } from '/@/hooks/component/useFormItem'; + import { defineComponent, PropType } from "vue"; + import CountButton from "./CountButton.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useRuleFormItem } from "/@/hooks/component/useFormItem"; const props = { value: { type: String }, - size: { type: String, validator: (v) => ['default', 'large', 'small'].includes(v) }, + size: { type: String, validator: (v) => ["default", "large", "small"].includes(v) }, count: { type: Number, default: 60 }, sendCodeApi: { type: Function as PropType<() => Promise<boolean>>, @@ -25,12 +25,12 @@ }; export default defineComponent({ - name: 'CountDownInput', + name: "CountDownInput", components: { CountButton }, inheritAttrs: false, props, setup(props) { - const { prefixCls } = useDesign('countdown-input'); + const { prefixCls } = useDesign("countdown-input"); const [state] = useRuleFormItem(props); return { prefixCls, state }; @@ -38,7 +38,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-countdown-input'; + @prefix-cls: ~"@{namespace}-countdown-input"; .@{prefix-cls} { .ant-input-group-addon { diff --git a/src/components/CountDown/src/useCountdown.ts b/src/components/CountDown/src/useCountdown.ts index 316d69a..72a3b6e 100644 --- a/src/components/CountDown/src/useCountdown.ts +++ b/src/components/CountDown/src/useCountdown.ts @@ -1,5 +1,5 @@ -import { ref, unref } from 'vue'; -import { tryOnUnmounted } from '@vueuse/core'; +import { ref, unref } from "vue"; +import { tryOnUnmounted } from "@vueuse/core"; export function useCountdown(count: number) { const currentCount = ref(count); diff --git a/src/components/CountTo/index.ts b/src/components/CountTo/index.ts index 36a4e65..4369da9 100644 --- a/src/components/CountTo/index.ts +++ b/src/components/CountTo/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import countTo from './src/CountTo.vue'; +import { withInstall } from "/@/utils"; +import countTo from "./src/CountTo.vue"; export const CountTo = withInstall(countTo); diff --git a/src/components/CountTo/src/CountTo.vue b/src/components/CountTo/src/CountTo.vue index 7de3361..7c95bca 100644 --- a/src/components/CountTo/src/CountTo.vue +++ b/src/components/CountTo/src/CountTo.vue @@ -4,9 +4,9 @@ </span> </template> <script lang="ts"> - import { defineComponent, ref, computed, watchEffect, unref, onMounted, watch } from 'vue'; - import { useTransition, TransitionPresets } from '@vueuse/core'; - import { isNumber } from '/@/utils/is'; + import { defineComponent, ref, computed, watchEffect, unref, onMounted, watch } from "vue"; + import { useTransition, TransitionPresets } from "@vueuse/core"; + import { isNumber } from "/@/utils/is"; const props = { startVal: { type: Number, default: 0 }, @@ -20,10 +20,10 @@ return value >= 0; }, }, - prefix: { type: String, default: '' }, - suffix: { type: String, default: '' }, - separator: { type: String, default: ',' }, - decimal: { type: String, default: '.' }, + prefix: { type: String, default: "" }, + suffix: { type: String, default: "" }, + separator: { type: String, default: "," }, + decimal: { type: String, default: "." }, /** * font color */ @@ -35,13 +35,13 @@ /** * Digital animation */ - transition: { type: String, default: 'linear' }, + transition: { type: String, default: "linear" }, }; export default defineComponent({ - name: 'CountTo', + name: "CountTo", props, - emits: ['onStarted', 'onFinished'], + emits: ["onStarted", "onFinished"], setup(props, { emit }) { const source = ref(props.startVal); const disabled = ref(false); @@ -77,28 +77,28 @@ outputValue = useTransition(source, { disabled, duration: props.duration, - onFinished: () => emit('onFinished'), - onStarted: () => emit('onStarted'), + onFinished: () => emit("onFinished"), + onStarted: () => emit("onStarted"), ...(props.useEasing ? { transition: TransitionPresets[props.transition] } : {}), }); } function formatNumber(num: number | string) { if (!num && num !== 0) { - return ''; + return ""; } const { decimals, decimal, separator, suffix, prefix } = props; num = Number(num).toFixed(decimals); - num += ''; + num += ""; - const x = num.split('.'); + const x = num.split("."); let x1 = x[0]; - const x2 = x.length > 1 ? decimal + x[1] : ''; + const x2 = x.length > 1 ? decimal + x[1] : ""; const rgx = /(\d+)(\d{3})/; if (separator && !isNumber(separator)) { while (rgx.test(x1)) { - x1 = x1.replace(rgx, '$1' + separator + '$2'); + x1 = x1.replace(rgx, "$1" + separator + "$2"); } } return prefix + x1 + x2 + suffix; diff --git a/src/components/Cropper/index.ts b/src/components/Cropper/index.ts index 88d6d1d..994781c 100644 --- a/src/components/Cropper/index.ts +++ b/src/components/Cropper/index.ts @@ -1,7 +1,7 @@ -import { withInstall } from '/@/utils'; -import cropperImage from './src/Cropper.vue'; -import avatarCropper from './src/CropperAvatar.vue'; +import { withInstall } from "/@/utils"; +import cropperImage from "./src/Cropper.vue"; +import avatarCropper from "./src/CropperAvatar.vue"; -export * from './src/typing'; +export * from "./src/typing"; export const CropperImage = withInstall(cropperImage); export const CropperAvatar = withInstall(avatarCropper); diff --git a/src/components/Cropper/src/CopperModal.vue b/src/components/Cropper/src/CopperModal.vue index 2ec7f4f..2c42fdd 100644 --- a/src/components/Cropper/src/CopperModal.vue +++ b/src/components/Cropper/src/CopperModal.vue @@ -111,16 +111,16 @@ </BasicModal> </template> <script lang="ts"> - import type { CropendResult, Cropper } from './typing'; + import type { CropendResult, Cropper } from "./typing"; - import { defineComponent, ref } from 'vue'; - import CropperImage from './Cropper.vue'; - import { Space, Upload, Avatar, Tooltip } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { BasicModal, useModalInner } from '/@/components/Modal'; - import { dataURLtoBlob } from '/@/utils/file/base64Conver'; - import { isFunction } from '/@/utils/is'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { defineComponent, ref } from "vue"; + import CropperImage from "./Cropper.vue"; + import { Space, Upload, Avatar, Tooltip } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { dataURLtoBlob } from "/@/utils/file/base64Conver"; + import { isFunction } from "/@/utils/is"; + import { useI18n } from "/@/hooks/web/useI18n"; type apiFunParams = { file: Blob; name: string; filename: string }; @@ -132,19 +132,19 @@ }; export default defineComponent({ - name: 'CropperModal', + name: "CropperModal", components: { BasicModal, Space, CropperImage, Upload, Avatar, Tooltip }, props, - emits: ['uploadSuccess', 'register'], + emits: ["uploadSuccess", "register"], setup(props, { emit }) { - let filename = ''; - const src = ref(''); - const previewSource = ref(''); + let filename = ""; + const src = ref(""); + const previewSource = ref(""); const cropper = ref<Cropper>(); let scaleX = 1; let scaleY = 1; - const { prefixCls } = useDesign('cropper-am'); + const { prefixCls } = useDesign("cropper-am"); const [register, { closeModal, setModalProps }] = useModalInner(); const { t } = useI18n(); @@ -152,10 +152,10 @@ function handleBeforeUpload(file: File) { const reader = new FileReader(); reader.readAsDataURL(file); - src.value = ''; - previewSource.value = ''; + src.value = ""; + previewSource.value = ""; reader.onload = function (e) { - src.value = (e.target?.result as string) ?? ''; + src.value = (e.target?.result as string) ?? ""; filename = file.name; }; return false; @@ -170,10 +170,10 @@ } function handlerToolbar(event: string, arg?: number) { - if (event === 'scaleX') { + if (event === "scaleX") { scaleX = arg = scaleX === -1 ? 1 : -1; } - if (event === 'scaleY') { + if (event === "scaleY") { scaleY = arg = scaleY === -1 ? 1 : -1; } cropper?.value?.[event]?.(arg); @@ -185,8 +185,8 @@ const blob = dataURLtoBlob(previewSource.value); try { setModalProps({ confirmLoading: true }); - const result = await uploadApi({ name: 'file', file: blob, filename }); - emit('uploadSuccess', { source: previewSource.value, data: result.data }); + const result = await uploadApi({ name: "file", file: blob, filename }); + emit("uploadSuccess", { source: previewSource.value, data: result.data }); closeModal(); } finally { setModalProps({ confirmLoading: false }); @@ -211,7 +211,7 @@ </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-cropper-am'; + @prefix-cls: ~"@{namespace}-cropper-am"; .@{prefix-cls} { display: flex; diff --git a/src/components/Cropper/src/Cropper.vue b/src/components/Cropper/src/Cropper.vue index 4523ad4..dca459f 100644 --- a/src/components/Cropper/src/Cropper.vue +++ b/src/components/Cropper/src/Cropper.vue @@ -11,12 +11,12 @@ </div> </template> <script lang="ts"> - import type { CSSProperties } from 'vue'; - import { defineComponent, onMounted, ref, unref, computed, onUnmounted } from 'vue'; - import Cropper from 'cropperjs'; - import 'cropperjs/dist/cropper.css'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useDebounceFn } from '@vueuse/shared'; + import type { CSSProperties } from "vue"; + import { defineComponent, onMounted, ref, unref, computed, onUnmounted } from "vue"; + import Cropper from "cropperjs"; + import "cropperjs/dist/cropper.css"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useDebounceFn } from "@vueuse/shared"; type Options = Cropper.Options; @@ -48,9 +48,9 @@ alt: { type: String }, circled: { type: Boolean, default: false }, realTimePreview: { type: Boolean, default: true }, - height: { type: [String, Number], default: '360px' }, + height: { type: [String, Number], default: "360px" }, crossorigin: { - type: String as PropType<'' | 'anonymous' | 'use-credentials' | undefined>, + type: String as PropType<"" | "anonymous" | "use-credentials" | undefined>, default: undefined, }, imageStyle: { type: Object as PropType<CSSProperties>, default: () => ({}) }, @@ -58,21 +58,21 @@ }; export default defineComponent({ - name: 'CropperImage', + name: "CropperImage", props, - emits: ['cropend', 'ready', 'cropendError'], + emits: ["cropend", "ready", "cropendError"], setup(props, { attrs, emit }) { const imgElRef = ref<ElRef<HTMLImageElement>>(); const cropper = ref<Nullable<Cropper>>(); const isReady = ref(false); - const { prefixCls } = useDesign('cropper-image'); + const { prefixCls } = useDesign("cropper-image"); const debounceRealTimeCroppered = useDebounceFn(realTimeCroppered, 80); const getImageStyle = computed((): CSSProperties => { return { height: props.height, - maxWidth: '100%', + maxWidth: "100%", ...props.imageStyle, }; }); @@ -88,7 +88,7 @@ }); const getWrapperStyle = computed((): CSSProperties => { - return { height: `${props.height}`.replace(/px/, '') + 'px' }; + return { height: `${props.height}`.replace(/px/, "") + "px" }; }); onMounted(init); @@ -107,7 +107,7 @@ ready: () => { isReady.value = true; realTimeCroppered(); - emit('ready', cropper.value); + emit("ready", cropper.value); }, crop() { debounceRealTimeCroppered(); @@ -141,29 +141,29 @@ let fileReader: FileReader = new FileReader(); fileReader.readAsDataURL(blob); fileReader.onloadend = (e) => { - emit('cropend', { - imgBase64: e.target?.result ?? '', + emit("cropend", { + imgBase64: e.target?.result ?? "", imgInfo, }); }; fileReader.onerror = () => { - emit('cropendError'); + emit("cropendError"); }; - }, 'image/png'); + }, "image/png"); } // Get a circular picture canvas function getRoundedCanvas() { const sourceCanvas = cropper.value!.getCroppedCanvas(); - const canvas = document.createElement('canvas'); - const context = canvas.getContext('2d')!; + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d")!; const width = sourceCanvas.width; const height = sourceCanvas.height; canvas.width = width; canvas.height = height; context.imageSmoothingEnabled = true; context.drawImage(sourceCanvas, 0, 0, width, height); - context.globalCompositeOperation = 'destination-in'; + context.globalCompositeOperation = "destination-in"; context.beginPath(); context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true); context.fill(); @@ -175,7 +175,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-cropper-image'; + @prefix-cls: ~"@{namespace}-cropper-image"; .@{prefix-cls} { &--circled { diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue index 6478e7e..b7eae14 100644 --- a/src/components/Cropper/src/CropperAvatar.vue +++ b/src/components/Cropper/src/CropperAvatar.vue @@ -17,7 +17,7 @@ v-if="showBtn" v-bind="btnProps" > - {{ btnText ? btnText : t('component.cropper.selectImage') }} + {{ btnText ? btnText : t("component.cropper.selectImage") }} </a-button> <CopperModal @@ -38,41 +38,41 @@ watchEffect, watch, PropType, - } from 'vue'; - import CopperModal from './CopperModal.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useModal } from '/@/components/Modal'; - import { useMessage } from '/@/hooks/web/useMessage'; - import { useI18n } from '/@/hooks/web/useI18n'; - import type { ButtonProps } from '/@/components/Button'; - import Icon from '/@/components/Icon'; + } from "vue"; + import CopperModal from "./CopperModal.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useModal } from "/@/components/Modal"; + import { useMessage } from "/@/hooks/web/useMessage"; + import { useI18n } from "/@/hooks/web/useI18n"; + import type { ButtonProps } from "/@/components/Button"; + import Icon from "/@/components/Icon"; const props = { - width: { type: [String, Number], default: '200px' }, + width: { type: [String, Number], default: "200px" }, value: { type: String }, showBtn: { type: Boolean, default: true }, btnProps: { type: Object as PropType<ButtonProps> }, - btnText: { type: String, default: '' }, + btnText: { type: String, default: "" }, uploadApi: { type: Function as PropType<({ file: Blob, name: string }) => Promise<void>> }, }; export default defineComponent({ - name: 'CropperAvatar', + name: "CropperAvatar", components: { CopperModal, Icon }, props, - emits: ['update:value', 'change'], + emits: ["update:value", "change"], setup(props, { emit, expose }) { - const sourceValue = ref(props.value || ''); - const { prefixCls } = useDesign('cropper-avatar'); + const sourceValue = ref(props.value || ""); + const { prefixCls } = useDesign("cropper-avatar"); const [register, { openModal, closeModal }] = useModal(); const { createMessage } = useMessage(); const { t } = useI18n(); const getClass = computed(() => [prefixCls]); - const getWidth = computed(() => `${props.width}`.replace(/px/, '') + 'px'); + const getWidth = computed(() => `${props.width}`.replace(/px/, "") + "px"); - const getIconWidth = computed(() => parseInt(`${props.width}`.replace(/px/, '')) / 2 + 'px'); + const getIconWidth = computed(() => parseInt(`${props.width}`.replace(/px/, "")) / 2 + "px"); const getStyle = computed((): CSSProperties => ({ width: unref(getWidth) })); @@ -81,20 +81,20 @@ ); watchEffect(() => { - sourceValue.value = props.value || ''; + sourceValue.value = props.value || ""; }); watch( () => sourceValue.value, (v: string) => { - emit('update:value', v); + emit("update:value", v); }, ); function handleUploadSuccess({ source }) { sourceValue.value = source; - emit('change', source); - createMessage.success(t('component.cropper.uploadSuccess')); + emit("change", source); + createMessage.success(t("component.cropper.uploadSuccess")); } expose({ openModal: openModal.bind(null, true), closeModal }); @@ -116,7 +116,7 @@ </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-cropper-avatar'; + @prefix-cls: ~"@{namespace}-cropper-avatar"; .@{prefix-cls} { display: inline-block; diff --git a/src/components/Cropper/src/typing.ts b/src/components/Cropper/src/typing.ts index e76cc6f..8d64bc6 100644 --- a/src/components/Cropper/src/typing.ts +++ b/src/components/Cropper/src/typing.ts @@ -1,4 +1,4 @@ -import type Cropper from 'cropperjs'; +import type Cropper from "cropperjs"; export interface CropendResult { imgBase64: string; diff --git a/src/components/Description/index.ts b/src/components/Description/index.ts index 58277d0..9b4cd66 100644 --- a/src/components/Description/index.ts +++ b/src/components/Description/index.ts @@ -1,6 +1,6 @@ -import { withInstall } from '/@/utils'; -import description from './src/Description.vue'; +import { withInstall } from "/@/utils"; +import description from "./src/Description.vue"; -export * from './src/typing'; -export { useDescription } from './src/useDescription'; +export * from "./src/typing"; +export { useDescription } from "./src/useDescription"; export const Description = withInstall(description); diff --git a/src/components/Description/src/Description.vue b/src/components/Description/src/Description.vue index 17b8c74..06b9afd 100644 --- a/src/components/Description/src/Description.vue +++ b/src/components/Description/src/Description.vue @@ -1,24 +1,24 @@ <script lang="tsx"> - import type { DescriptionProps, DescInstance, DescItem } from './typing'; - import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index'; - import type { CSSProperties } from 'vue'; - import type { CollapseContainerOptions } from '/@/components/Container/index'; - import { defineComponent, computed, ref, unref } from 'vue'; - import { get } from 'lodash-es'; - import { Descriptions } from 'ant-design-vue'; - import { CollapseContainer } from '/@/components/Container/index'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { isFunction } from '/@/utils/is'; - import { getSlot } from '/@/utils/helper/tsxHelper'; - import { useAttrs } from '/@/hooks/core/useAttrs'; + import type { DescriptionProps, DescInstance, DescItem } from "./typing"; + import type { DescriptionsProps } from "ant-design-vue/es/descriptions/index"; + import type { CSSProperties } from "vue"; + import type { CollapseContainerOptions } from "/@/components/Container/index"; + import { defineComponent, computed, ref, unref } from "vue"; + import { get } from "lodash-es"; + import { Descriptions } from "ant-design-vue"; + import { CollapseContainer } from "/@/components/Container/index"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { isFunction } from "/@/utils/is"; + import { getSlot } from "/@/utils/helper/tsxHelper"; + import { useAttrs } from "/@/hooks/core/useAttrs"; const props = { useCollapse: { type: Boolean, default: true }, - title: { type: String, default: '' }, + title: { type: String, default: "" }, size: { type: String, - validator: (v) => ['small', 'default', 'middle', undefined].includes(v), - default: 'small', + validator: (v) => ["small", "default", "middle", undefined].includes(v), + default: "small", }, bordered: { type: Boolean, default: true }, column: { @@ -39,13 +39,13 @@ }; export default defineComponent({ - name: 'Description', + name: "Description", props, - emits: ['register'], + emits: ["register"], setup(props, { slots, emit }) { const propsRef = ref<Partial<DescriptionProps> | null>(null); - const { prefixCls } = useDesign('description'); + const { prefixCls } = useDesign("description"); const attrs = useAttrs(); // Custom title component: get title @@ -121,7 +121,7 @@ return null; } const getField = get(_data, field); - return isFunction(render) ? render(getField, _data) : getField ?? ''; + return isFunction(render) ? render(getField, _data) : getField ?? ""; }; const width = contentMinWidth; @@ -164,7 +164,7 @@ <CollapseContainer title={title} canExpan={canExpand} helpMessage={helpMessage}> {{ default: () => content, - action: () => getSlot(slots, 'action'), + action: () => getSlot(slots, "action"), }} </CollapseContainer> ); @@ -174,7 +174,7 @@ setDescProps, }; - emit('register', methods); + emit("register", methods); return () => (unref(useWrapper) ? renderContainer() : renderDesc()); }, }); diff --git a/src/components/Description/src/typing.ts b/src/components/Description/src/typing.ts index ee96084..ad76225 100644 --- a/src/components/Description/src/typing.ts +++ b/src/components/Description/src/typing.ts @@ -1,6 +1,6 @@ -import type { VNode, CSSProperties } from 'vue'; -import type { CollapseContainerOptions } from '/@/components/Container/index'; -import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index'; +import type { VNode, CSSProperties } from "vue"; +import type { CollapseContainerOptions } from "/@/components/Container/index"; +import type { DescriptionsProps } from "ant-design-vue/es/descriptions/index"; export interface DescItem { labelMinWidth?: number; diff --git a/src/components/Description/src/useDescription.ts b/src/components/Description/src/useDescription.ts index d1037d0..5933c02 100644 --- a/src/components/Description/src/useDescription.ts +++ b/src/components/Description/src/useDescription.ts @@ -1,10 +1,10 @@ -import type { DescriptionProps, DescInstance, UseDescReturnType } from './typing'; -import { ref, getCurrentInstance, unref } from 'vue'; -import { isProdMode } from '/@/utils/env'; +import type { DescriptionProps, DescInstance, UseDescReturnType } from "./typing"; +import { ref, getCurrentInstance, unref } from "vue"; +import { isProdMode } from "/@/utils/env"; export function useDescription(props?: Partial<DescriptionProps>): UseDescReturnType { if (!getCurrentInstance()) { - throw new Error('useDescription() can only be used inside setup() or functional components!'); + throw new Error("useDescription() can only be used inside setup() or functional components!"); } const desc = ref<Nullable<DescInstance>>(null); const loaded = ref(false); diff --git a/src/components/Drawer/index.ts b/src/components/Drawer/index.ts index 820ade5..c14a01c 100644 --- a/src/components/Drawer/index.ts +++ b/src/components/Drawer/index.ts @@ -1,6 +1,6 @@ -import { withInstall } from '/@/utils'; -import basicDrawer from './src/BasicDrawer.vue'; +import { withInstall } from "/@/utils"; +import basicDrawer from "./src/BasicDrawer.vue"; export const BasicDrawer = withInstall(basicDrawer); -export * from './src/typing'; -export { useDrawer, useDrawerInner } from './src/useDrawer'; +export * from "./src/typing"; +export { useDrawer, useDrawerInner } from "./src/useDrawer"; diff --git a/src/components/Drawer/src/BasicDrawer.vue b/src/components/Drawer/src/BasicDrawer.vue index 93a4a58..609e64b 100644 --- a/src/components/Drawer/src/BasicDrawer.vue +++ b/src/components/Drawer/src/BasicDrawer.vue @@ -31,8 +31,8 @@ </Drawer> </template> <script lang="ts"> - import type { DrawerInstance, DrawerProps } from './typing'; - import type { CSSProperties } from 'vue'; + import type { DrawerInstance, DrawerProps } from "./typing"; + import type { CSSProperties } from "vue"; import { defineComponent, ref, @@ -42,30 +42,30 @@ nextTick, toRaw, getCurrentInstance, - } from 'vue'; - import { Drawer } from 'ant-design-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { isFunction, isNumber } from '/@/utils/is'; - import { deepMerge } from '/@/utils'; - import DrawerFooter from './components/DrawerFooter.vue'; - import DrawerHeader from './components/DrawerHeader.vue'; - import { ScrollContainer } from '/@/components/Container'; - import { basicProps } from './props'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useAttrs } from '/@/hooks/core/useAttrs'; + } from "vue"; + import { Drawer } from "ant-design-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { isFunction, isNumber } from "/@/utils/is"; + import { deepMerge } from "/@/utils"; + import DrawerFooter from "./components/DrawerFooter.vue"; + import DrawerHeader from "./components/DrawerHeader.vue"; + import { ScrollContainer } from "/@/components/Container"; + import { basicProps } from "./props"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useAttrs } from "/@/hooks/core/useAttrs"; export default defineComponent({ components: { Drawer, ScrollContainer, DrawerFooter, DrawerHeader }, inheritAttrs: false, props: basicProps, - emits: ['visible-change', 'ok', 'close', 'register'], + emits: ["visible-change", "ok", "close", "register"], setup(props, { emit }) { const visibleRef = ref(false); const attrs = useAttrs(); const propsRef = ref<Partial<Nullable<DrawerProps>>>(null); const { t } = useI18n(); - const { prefixVar, prefixCls } = useDesign('basic-drawer'); + const { prefixVar, prefixCls } = useDesign("basic-drawer"); const drawerInstance: DrawerInstance = { setDrawerProps: setDrawerProps, @@ -74,7 +74,7 @@ const instance = getCurrentInstance(); - instance && emit('register', drawerInstance, instance.uid); + instance && emit("register", drawerInstance, instance.uid); const getMergeProps = computed((): DrawerProps => { return deepMerge(toRaw(props), unref(propsRef)); @@ -82,7 +82,7 @@ const getProps = computed((): DrawerProps => { const opt = { - placement: 'right', + placement: "right", ...unref(attrs), ...unref(getMergeProps), visible: unref(visibleRef), @@ -91,7 +91,7 @@ const { isDetail, width, wrapClassName, getContainer } = opt; if (isDetail) { if (!width) { - opt.width = '100%'; + opt.width = "100%"; } const detailCls = `${prefixCls}__detail`; opt.wrapClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; @@ -117,7 +117,7 @@ if (showFooter && footerHeight) { return isNumber(footerHeight) ? `${footerHeight}px` - : `${footerHeight.replace('px', '')}px`; + : `${footerHeight.replace("px", "")}px`; } return `0px`; }); @@ -125,7 +125,7 @@ const getScrollContentStyle = computed((): CSSProperties => { const footerHeight = unref(getFooterHeight); return { - position: 'relative', + position: "relative", height: `calc(100% - ${footerHeight})`, }; }); @@ -146,7 +146,7 @@ () => visibleRef.value, (visible) => { nextTick(() => { - emit('visible-change', visible); + emit("visible-change", visible); instance && drawerInstance.emitVisible?.(visible, instance.uid); }); }, @@ -155,7 +155,7 @@ // Cancel event async function onClose(e: Recordable) { const { closeFunc } = unref(getProps); - emit('close', e); + emit("close", e); if (closeFunc && isFunction(closeFunc)) { const res = await closeFunc(); visibleRef.value = !res; @@ -168,13 +168,13 @@ // Keep the last setDrawerProps propsRef.value = deepMerge(unref(propsRef) || ({} as any), props); - if (Reflect.has(props, 'visible')) { + if (Reflect.has(props, "visible")) { visibleRef.value = !!props.visible; } } function handleOk() { - emit('ok'); + emit("ok"); } return { @@ -195,8 +195,8 @@ <style lang="less"> @header-height: 60px; @detail-header-height: 40px; - @prefix-cls: ~'@{namespace}-basic-drawer'; - @prefix-cls-detail: ~'@{namespace}-basic-drawer__detail'; + @prefix-cls: ~"@{namespace}-basic-drawer"; + @prefix-cls-detail: ~"@{namespace}-basic-drawer__detail"; .@{prefix-cls} { .ant-drawer-wrapper-body { diff --git a/src/components/Drawer/src/components/DrawerFooter.vue b/src/components/Drawer/src/components/DrawerFooter.vue index 903aa83..efe525c 100644 --- a/src/components/Drawer/src/components/DrawerFooter.vue +++ b/src/components/Drawer/src/components/DrawerFooter.vue @@ -25,23 +25,23 @@ </div> </template> <script lang="ts"> - import type { CSSProperties } from 'vue'; - import { defineComponent, computed } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { CSSProperties } from "vue"; + import { defineComponent, computed } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; - import { footerProps } from '../props'; + import { footerProps } from "../props"; export default defineComponent({ - name: 'BasicDrawerFooter', + name: "BasicDrawerFooter", props: { ...footerProps, height: { type: String, - default: '60px', + default: "60px", }, }, - emits: ['ok', 'close'], + emits: ["ok", "close"], setup(props, { emit }) { - const { prefixCls } = useDesign('basic-drawer-footer'); + const { prefixCls } = useDesign("basic-drawer-footer"); const getStyle = computed((): CSSProperties => { const heightStr = `${props.height}`; @@ -52,11 +52,11 @@ }); function handleOk() { - emit('ok'); + emit("ok"); } function handleClose() { - emit('close'); + emit("close"); } return { handleOk, prefixCls, handleClose, getStyle }; }, @@ -64,7 +64,7 @@ </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-drawer-footer'; + @prefix-cls: ~"@{namespace}-basic-drawer-footer"; @footer-height: 60px; .@{prefix-cls} { position: absolute; diff --git a/src/components/Drawer/src/components/DrawerHeader.vue b/src/components/Drawer/src/components/DrawerHeader.vue index 8232128..54b21f1 100644 --- a/src/components/Drawer/src/components/DrawerHeader.vue +++ b/src/components/Drawer/src/components/DrawerHeader.vue @@ -1,7 +1,7 @@ <template> <BasicTitle v-if="!isDetail" :class="prefixCls"> <slot name="title"></slot> - {{ !$slots.title ? title : '' }} + {{ !$slots.title ? title : "" }} </BasicTitle> <div :class="[prefixCls, `${prefixCls}--detail`]" v-else> @@ -18,27 +18,27 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { BasicTitle } from '/@/components/Basic'; - import { ArrowLeftOutlined } from '@ant-design/icons-vue'; + import { defineComponent } from "vue"; + import { BasicTitle } from "/@/components/Basic"; + import { ArrowLeftOutlined } from "@ant-design/icons-vue"; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useDesign } from "/@/hooks/web/useDesign"; - import { propTypes } from '/@/utils/propTypes'; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'BasicDrawerHeader', + name: "BasicDrawerHeader", components: { BasicTitle, ArrowLeftOutlined }, props: { isDetail: propTypes.bool, showDetailBack: propTypes.bool, title: propTypes.string, }, - emits: ['close'], + emits: ["close"], setup(_, { emit }) { - const { prefixCls } = useDesign('basic-drawer-header'); + const { prefixCls } = useDesign("basic-drawer-header"); function handleClose() { - emit('close'); + emit("close"); } return { prefixCls, handleClose }; @@ -47,7 +47,7 @@ </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-drawer-header'; + @prefix-cls: ~"@{namespace}-basic-drawer-header"; @footer-height: 60px; .@{prefix-cls} { display: flex; diff --git a/src/components/Drawer/src/props.ts b/src/components/Drawer/src/props.ts index 0a7ca8c..5ec98ee 100644 --- a/src/components/Drawer/src/props.ts +++ b/src/components/Drawer/src/props.ts @@ -1,6 +1,6 @@ -import type { PropType } from 'vue'; +import type { PropType } from "vue"; -import { useI18n } from '/@/hooks/web/useI18n'; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); export const footerProps = { @@ -10,14 +10,14 @@ export const footerProps = { */ showCancelBtn: { type: Boolean, default: true }, cancelButtonProps: Object as PropType<Recordable>, - cancelText: { type: String, default: t('common.cancelText') }, + cancelText: { type: String, default: t("common.cancelText") }, /** * @description: Show confirmation button */ showOkBtn: { type: Boolean, default: true }, okButtonProps: Object as PropType<Recordable>, - okText: { type: String, default: t('common.okText') }, - okType: { type: String, default: 'primary' }, + okText: { type: String, default: t("common.okText") }, + okType: { type: String, default: "primary" }, showFooter: { type: Boolean }, footerHeight: { type: [String, Number] as PropType<string | number>, @@ -26,7 +26,7 @@ export const footerProps = { }; export const basicProps = { isDetail: { type: Boolean }, - title: { type: String, default: '' }, + title: { type: String, default: "" }, loadingText: { type: String }, showDetailBack: { type: Boolean, default: true }, visible: { type: Boolean }, diff --git a/src/components/Drawer/src/typing.ts b/src/components/Drawer/src/typing.ts index 0df3dfd..1b3e700 100644 --- a/src/components/Drawer/src/typing.ts +++ b/src/components/Drawer/src/typing.ts @@ -1,6 +1,6 @@ -import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes'; -import type { CSSProperties, VNodeChild, ComputedRef } from 'vue'; -import type { ScrollContainerOptions } from '/@/components/Container/index'; +import type { ButtonProps } from "ant-design-vue/lib/button/buttonTypes"; +import type { CSSProperties, VNodeChild, ComputedRef } from "vue"; +import type { ScrollContainerOptions } from "/@/components/Container/index"; export interface DrawerInstance { setDrawerProps: (props: Partial<DrawerProps> | boolean) => void; @@ -47,7 +47,7 @@ export interface DrawerFooterProps { * @default 'primary' * @type string */ - okType: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default'; + okType: "primary" | "danger" | "dashed" | "ghost" | "default"; /** * The ok button props, follow jsx rules * @type object @@ -179,7 +179,7 @@ export interface DrawerProps extends DrawerFooterProps { * @default 'right' * @type string */ - placement?: 'top' | 'right' | 'bottom' | 'left'; + placement?: "top" | "right" | "bottom" | "left"; afterVisibleChange?: (visible?: boolean) => void; keyboard?: boolean; /** diff --git a/src/components/Drawer/src/useDrawer.ts b/src/components/Drawer/src/useDrawer.ts index bcb9e76..dc34132 100644 --- a/src/components/Drawer/src/useDrawer.ts +++ b/src/components/Drawer/src/useDrawer.ts @@ -4,7 +4,7 @@ import type { ReturnMethods, DrawerProps, UseDrawerInnerReturnType, -} from './typing'; +} from "./typing"; import { ref, getCurrentInstance, @@ -14,12 +14,12 @@ import { nextTick, toRaw, computed, -} from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { isFunction } from '/@/utils/is'; -import { tryOnUnmounted } from '@vueuse/core'; -import { isEqual } from 'lodash-es'; -import { error } from '/@/utils/log'; +} from "vue"; +import { isProdMode } from "/@/utils/env"; +import { isFunction } from "/@/utils/is"; +import { tryOnUnmounted } from "@vueuse/core"; +import { isEqual } from "lodash-es"; +import { error } from "/@/utils/log"; const dataTransferRef = reactive<any>({}); @@ -30,11 +30,11 @@ const visibleData = reactive<{ [key: number]: boolean }>({}); */ export function useDrawer(): UseDrawerReturnType { if (!getCurrentInstance()) { - throw new Error('useDrawer() can only be used inside setup() or functional components!'); + throw new Error("useDrawer() can only be used inside setup() or functional components!"); } const drawer = ref<DrawerInstance | null>(null); const loaded = ref<Nullable<boolean>>(false); - const uid = ref<string>(''); + const uid = ref<string>(""); function register(drawerInstance: DrawerInstance, uuid: string) { isProdMode() && @@ -59,7 +59,7 @@ export function useDrawer(): UseDrawerReturnType { const getInstance = () => { const instance = unref(drawer); if (!instance) { - error('useDrawer instance is undefined!'); + error("useDrawer instance is undefined!"); } return instance; }; @@ -100,16 +100,16 @@ export function useDrawer(): UseDrawerReturnType { export const useDrawerInner = (callbackFn?: Fn): UseDrawerInnerReturnType => { const drawerInstanceRef = ref<Nullable<DrawerInstance>>(null); const currentInstance = getCurrentInstance(); - const uidRef = ref<string>(''); + const uidRef = ref<string>(""); if (!getCurrentInstance()) { - throw new Error('useDrawerInner() can only be used inside setup() or functional components!'); + throw new Error("useDrawerInner() can only be used inside setup() or functional components!"); } const getInstance = () => { const instance = unref(drawerInstanceRef); if (!instance) { - error('useDrawerInner instance is undefined!'); + error("useDrawerInner instance is undefined!"); return; } return instance; @@ -123,7 +123,7 @@ export const useDrawerInner = (callbackFn?: Fn): UseDrawerInnerReturnType => { uidRef.value = uuid; drawerInstanceRef.value = modalInstance; - currentInstance?.emit('register', modalInstance, uuid); + currentInstance?.emit("register", modalInstance, uuid); }; watchEffect(() => { diff --git a/src/components/Dropdown/index.ts b/src/components/Dropdown/index.ts index 80439e5..ebdf4c3 100644 --- a/src/components/Dropdown/index.ts +++ b/src/components/Dropdown/index.ts @@ -1,5 +1,5 @@ -import { withInstall } from '/@/utils'; -import dropdown from './src/Dropdown.vue'; +import { withInstall } from "/@/utils"; +import dropdown from "./src/Dropdown.vue"; -export * from './src/typing'; +export * from "./src/typing"; export const Dropdown = withInstall(dropdown); diff --git a/src/components/Dropdown/src/Dropdown.vue b/src/components/Dropdown/src/Dropdown.vue index c70a99e..32087a6 100644 --- a/src/components/Dropdown/src/Dropdown.vue +++ b/src/components/Dropdown/src/Dropdown.vue @@ -36,12 +36,12 @@ </template> <script lang="ts" setup> - import { computed, PropType } from 'vue'; - import type { DropMenu } from './typing'; - import { Dropdown, Menu, Popconfirm } from 'ant-design-vue'; - import { Icon } from '/@/components/Icon'; - import { omit } from 'lodash-es'; - import { isFunction } from '/@/utils/is'; + import { computed, PropType } from "vue"; + import type { DropMenu } from "./typing"; + import { Dropdown, Menu, Popconfirm } from "ant-design-vue"; + import { Icon } from "/@/components/Icon"; + import { omit } from "lodash-es"; + import { isFunction } from "/@/utils/is"; const ADropdown = Dropdown; const AMenu = Menu; @@ -57,9 +57,9 @@ * @type string[] */ trigger: { - type: [Array] as PropType<('contextmenu' | 'click' | 'hover')[]>, + type: [Array] as PropType<("contextmenu" | "click" | "hover")[]>, default: () => { - return ['contextmenu']; + return ["contextmenu"]; }, }, dropMenuList: { @@ -72,22 +72,22 @@ }, }); - const emit = defineEmits(['menuEvent']); + const emit = defineEmits(["menuEvent"]); function handleClickMenu(item: DropMenu) { const { event } = item; const menu = props.dropMenuList.find((item) => `${item.event}` === `${event}`); - emit('menuEvent', menu); + emit("menuEvent", menu); item.onClick?.(); } const getPopConfirmAttrs = computed(() => { return (attrs) => { - const originAttrs = omit(attrs, ['confirm', 'cancel', 'icon']); + const originAttrs = omit(attrs, ["confirm", "cancel", "icon"]); if (!attrs.onConfirm && attrs.confirm && isFunction(attrs.confirm)) - originAttrs['onConfirm'] = attrs.confirm; + originAttrs["onConfirm"] = attrs.confirm; if (!attrs.onCancel && attrs.cancel && isFunction(attrs.cancel)) - originAttrs['onCancel'] = attrs.cancel; + originAttrs["onCancel"] = attrs.cancel; return originAttrs; }; }); diff --git a/src/components/Excel/index.ts b/src/components/Excel/index.ts index cece07c..15be92e 100644 --- a/src/components/Excel/index.ts +++ b/src/components/Excel/index.ts @@ -1,8 +1,8 @@ -import { withInstall } from '/@/utils'; -import impExcel from './src/ImportExcel.vue'; -import expExcelModal from './src/ExportExcelModal.vue'; +import { withInstall } from "/@/utils"; +import impExcel from "./src/ImportExcel.vue"; +import expExcelModal from "./src/ExportExcelModal.vue"; export const ImpExcel = withInstall(impExcel); export const ExpExcelModal = withInstall(expExcelModal); -export * from './src/typing'; -export { jsonToSheetXlsx, aoaToSheetXlsx } from './src/Export2Excel'; +export * from "./src/typing"; +export { jsonToSheetXlsx, aoaToSheetXlsx } from "./src/Export2Excel"; diff --git a/src/components/Excel/src/Export2Excel.ts b/src/components/Excel/src/Export2Excel.ts index 11efbe0..3ac4bb3 100644 --- a/src/components/Excel/src/Export2Excel.ts +++ b/src/components/Excel/src/Export2Excel.ts @@ -1,17 +1,17 @@ -import xlsx from 'xlsx'; -import type { WorkBook } from 'xlsx'; -import type { JsonToSheet, AoAToSheet } from './typing'; +import xlsx from "xlsx"; +import type { WorkBook } from "xlsx"; +import type { JsonToSheet, AoAToSheet } from "./typing"; const { utils, writeFile } = xlsx; -const DEF_FILE_NAME = 'excel-list.xlsx'; +const DEF_FILE_NAME = "excel-list.xlsx"; export function jsonToSheetXlsx<T = any>({ data, header, filename = DEF_FILE_NAME, json2sheetOpts = {}, - write2excelOpts = { bookType: 'xlsx' }, + write2excelOpts = { bookType: "xlsx" }, }: JsonToSheet<T>) { const arrData = [...data]; if (header) { @@ -37,7 +37,7 @@ export function aoaToSheetXlsx<T = any>({ data, header, filename = DEF_FILE_NAME, - write2excelOpts = { bookType: 'xlsx' }, + write2excelOpts = { bookType: "xlsx" }, }: AoAToSheet<T>) { const arrData = [...data]; if (header) { diff --git a/src/components/Excel/src/ExportExcelModal.vue b/src/components/Excel/src/ExportExcelModal.vue index efa3292..bb6132a 100644 --- a/src/components/Excel/src/ExportExcelModal.vue +++ b/src/components/Excel/src/ExportExcelModal.vue @@ -14,49 +14,49 @@ </BasicModal> </template> <script lang="ts"> - import type { ExportModalResult } from './typing'; - import { defineComponent } from 'vue'; - import { BasicModal, useModalInner } from '/@/components/Modal'; - import { BasicForm, FormSchema, useForm } from '/@/components/Form/index'; + import type { ExportModalResult } from "./typing"; + import { defineComponent } from "vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { BasicForm, FormSchema, useForm } from "/@/components/Form/index"; - import { useI18n } from '/@/hooks/web/useI18n'; + import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); const schemas: FormSchema[] = [ { - field: 'filename', - component: 'Input', - label: t('component.excel.fileName'), + field: "filename", + component: "Input", + label: t("component.excel.fileName"), rules: [{ required: true }], }, { - field: 'bookType', - component: 'Select', - label: t('component.excel.fileType'), - defaultValue: 'xlsx', + field: "bookType", + component: "Select", + label: t("component.excel.fileType"), + defaultValue: "xlsx", rules: [{ required: true }], componentProps: { options: [ { - label: 'xlsx', - value: 'xlsx', - key: 'xlsx', + label: "xlsx", + value: "xlsx", + key: "xlsx", }, { - label: 'html', - value: 'html', - key: 'html', + label: "html", + value: "html", + key: "html", }, { - label: 'csv', - value: 'csv', - key: 'csv', + label: "csv", + value: "csv", + key: "csv", }, { - label: 'txt', - value: 'txt', - key: 'txt', + label: "txt", + value: "txt", + key: "txt", }, ], }, @@ -64,7 +64,7 @@ ]; export default defineComponent({ components: { BasicModal, BasicForm }, - emits: ['success', 'register'], + emits: ["success", "register"], setup(_, { emit }) { const [registerForm, { validateFields }] = useForm(); const [registerModal, { closeModal }] = useModalInner(); @@ -72,8 +72,8 @@ async function handleOk() { const res = (await validateFields()) as ExportModalResult; const { filename, bookType } = res; - emit('success', { - filename: `${filename.split('.').shift()}.${bookType}`, + emit("success", { + filename: `${filename.split(".").shift()}.${bookType}`, bookType, }); closeModal(); diff --git a/src/components/Excel/src/ImportExcel.vue b/src/components/Excel/src/ImportExcel.vue index c94d07b..7df38ba 100644 --- a/src/components/Excel/src/ImportExcel.vue +++ b/src/components/Excel/src/ImportExcel.vue @@ -13,13 +13,13 @@ </div> </template> <script lang="ts"> - import { defineComponent, ref, unref } from 'vue'; - import XLSX from 'xlsx'; - import { dateUtil } from '/@/utils/dateUtil'; + import { defineComponent, ref, unref } from "vue"; + import XLSX from "xlsx"; + import { dateUtil } from "/@/utils/dateUtil"; - import type { ExcelData } from './typing'; + import type { ExcelData } from "./typing"; export default defineComponent({ - name: 'ImportExcel', + name: "ImportExcel", props: { // 日期时间格式。如果不提供或者提供空值,将返回原始Date对象 dateFormat: { @@ -32,7 +32,7 @@ default: 8, }, }, - emits: ['success', 'error'], + emits: ["success", "error"], setup(props, { emit }) { const inputRef = ref<HTMLInputElement | null>(null); const loadingRef = ref<Boolean>(false); @@ -41,10 +41,10 @@ * @description: 第一行作为头部 */ function getHeaderRow(sheet: XLSX.WorkSheet) { - if (!sheet || !sheet['!ref']) return []; + if (!sheet || !sheet["!ref"]) return []; const headers: string[] = []; // A3:B7=>{s:{c:0, r:2}, e:{c:1, r:6}} - const range = XLSX.utils.decode_range(sheet['!ref']); + const range = XLSX.utils.decode_range(sheet["!ref"]); const R = range.s.r; /* start in the first row */ @@ -52,7 +52,7 @@ /* walk every column in the range */ const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]; /* find the cell in the first row */ - let hdr = 'UNKNOWN ' + C; // <-- replace with your desired default + let hdr = "UNKNOWN " + C; // <-- replace with your desired default if (cell && cell.t) hdr = XLSX.utils.format_cell(cell); headers.push(hdr); } @@ -107,15 +107,15 @@ reader.onload = async (e) => { try { const data = e.target && e.target.result; - const workbook = XLSX.read(data, { type: 'array', cellDates: true }); + const workbook = XLSX.read(data, { type: "array", cellDates: true }); // console.log(workbook); /* DO SOMETHING WITH workbook HERE */ const excelData = getExcelData(workbook); - emit('success', excelData); - resolve(''); + emit("success", excelData); + resolve(""); } catch (error) { reject(error); - emit('error'); + emit("error"); } finally { loadingRef.value = false; } @@ -128,7 +128,7 @@ const inputRefDom = unref(inputRef); if (inputRefDom) { // fix can't select the same excel - inputRefDom.value = ''; + inputRefDom.value = ""; } await readerData(rawFile); } diff --git a/src/components/Excel/src/typing.ts b/src/components/Excel/src/typing.ts index e55e549..1626781 100644 --- a/src/components/Excel/src/typing.ts +++ b/src/components/Excel/src/typing.ts @@ -1,4 +1,4 @@ -import type { JSON2SheetOpts, WritingOptions, BookType } from 'xlsx'; +import type { JSON2SheetOpts, WritingOptions, BookType } from "xlsx"; export interface ExcelData<T = any> { header: string[]; diff --git a/src/components/FlowChart/index.ts b/src/components/FlowChart/index.ts index edbeb55..67c810b 100644 --- a/src/components/FlowChart/index.ts +++ b/src/components/FlowChart/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import flowChart from './src/FlowChart.vue'; +import { withInstall } from "/@/utils"; +import flowChart from "./src/FlowChart.vue"; export const FlowChart = withInstall(flowChart); diff --git a/src/components/FlowChart/src/FlowChart.vue b/src/components/FlowChart/src/FlowChart.vue index 419b0fe..98c030c 100644 --- a/src/components/FlowChart/src/FlowChart.vue +++ b/src/components/FlowChart/src/FlowChart.vue @@ -8,24 +8,24 @@ </div> </template> <script lang="ts"> - import type { Ref } from 'vue'; - import type { Definition } from '@logicflow/core'; - import { defineComponent, ref, onMounted, unref, nextTick, computed, watch } from 'vue'; - import FlowChartToolbar from './FlowChartToolbar.vue'; - import LogicFlow from '@logicflow/core'; - import { Snapshot, BpmnElement, Menu, DndPanel, SelectionSelect } from '@logicflow/extension'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useAppStore } from '/@/store/modules/app'; - import { createFlowChartContext } from './useFlowContext'; - import { toLogicFlowData } from './adpterForTurbo'; - import { useModal, BasicModal } from '/@/components/Modal'; - import { JsonPreview } from '/@/components/CodeEditor'; - import { configDefaultDndPanel } from './config'; - import '@logicflow/core/dist/style/index.css'; - import '@logicflow/extension/lib/style/index.css'; + import type { Ref } from "vue"; + import type { Definition } from "@logicflow/core"; + import { defineComponent, ref, onMounted, unref, nextTick, computed, watch } from "vue"; + import FlowChartToolbar from "./FlowChartToolbar.vue"; + import LogicFlow from "@logicflow/core"; + import { Snapshot, BpmnElement, Menu, DndPanel, SelectionSelect } from "@logicflow/extension"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useAppStore } from "/@/store/modules/app"; + import { createFlowChartContext } from "./useFlowContext"; + import { toLogicFlowData } from "./adpterForTurbo"; + import { useModal, BasicModal } from "/@/components/Modal"; + import { JsonPreview } from "/@/components/CodeEditor"; + import { configDefaultDndPanel } from "./config"; + import "@logicflow/core/dist/style/index.css"; + import "@logicflow/extension/lib/style/index.css"; export default defineComponent({ - name: 'FlowChart', + name: "FlowChart", components: { BasicModal, FlowChartToolbar, JsonPreview }, props: { flowOptions: { @@ -52,7 +52,7 @@ const lfInstance = ref(null) as Ref<LogicFlow | null>; - const { prefixCls } = useDesign('flow-chart'); + const { prefixCls } = useDesign("flow-chart"); const appStore = useAppStore(); const [register, { openModal }] = useModal(); createFlowChartContext({ @@ -65,7 +65,7 @@ const defaultOptions: Partial<Definition> = { grid: true, background: { - color: appStore.getDarkMode === 'light' ? '#f7f9ff' : '#151515', + color: appStore.getDarkMode === "light" ? "#f7f9ff" : "#151515", }, keyboard: { enabled: true, @@ -120,7 +120,7 @@ container: lfEl, }); const lf = unref(lfInstance)!; - lf?.setDefaultEdgeType('line'); + lf?.setDefaultEdgeType("line"); onRender(); lf?.setPatternItems(props.patternItems || configDefaultDndPanel(lf)); } diff --git a/src/components/FlowChart/src/FlowChartToolbar.vue b/src/components/FlowChart/src/FlowChartToolbar.vue index c88af5c..c1615b6 100644 --- a/src/components/FlowChart/src/FlowChartToolbar.vue +++ b/src/components/FlowChart/src/FlowChartToolbar.vue @@ -15,62 +15,62 @@ </div> </template> <script lang="ts"> - import type { ToolbarConfig } from './types'; + import type { ToolbarConfig } from "./types"; - import { defineComponent, ref, onUnmounted, unref, nextTick, watchEffect } from 'vue'; - import { Divider, Tooltip } from 'ant-design-vue'; - import { Icon } from '/@/components/Icon'; + import { defineComponent, ref, onUnmounted, unref, nextTick, watchEffect } from "vue"; + import { Divider, Tooltip } from "ant-design-vue"; + import { Icon } from "/@/components/Icon"; - import { useFlowChartContext } from './useFlowContext'; - import { ToolbarTypeEnum } from './enum'; + import { useFlowChartContext } from "./useFlowContext"; + import { ToolbarTypeEnum } from "./enum"; export default defineComponent({ - name: 'FlowChartToolbar', + name: "FlowChartToolbar", components: { Icon, Divider, Tooltip }, props: { prefixCls: String, }, - emits: ['view-data'], + emits: ["view-data"], setup(_, { emit }) { const toolbarItemList = ref<ToolbarConfig[]>([ { type: ToolbarTypeEnum.ZOOM_IN, - icon: 'codicon:zoom-out', - tooltip: '缩小', + icon: "codicon:zoom-out", + tooltip: "缩小", }, { type: ToolbarTypeEnum.ZOOM_OUT, - icon: 'codicon:zoom-in', - tooltip: '放大', + icon: "codicon:zoom-in", + tooltip: "放大", }, { type: ToolbarTypeEnum.RESET_ZOOM, - icon: 'codicon:screen-normal', - tooltip: '重置比例', + icon: "codicon:screen-normal", + tooltip: "重置比例", }, { separate: true }, { type: ToolbarTypeEnum.UNDO, - icon: 'ion:arrow-undo-outline', - tooltip: '后退', + icon: "ion:arrow-undo-outline", + tooltip: "后退", disabled: true, }, { type: ToolbarTypeEnum.REDO, - icon: 'ion:arrow-redo-outline', - tooltip: '前进', + icon: "ion:arrow-redo-outline", + tooltip: "前进", disabled: true, }, { separate: true }, { type: ToolbarTypeEnum.SNAPSHOT, - icon: 'ion:download-outline', - tooltip: '下载', + icon: "ion:download-outline", + tooltip: "下载", }, { type: ToolbarTypeEnum.VIEW_DATA, - icon: 'carbon:document-view', - tooltip: '查看数据', + icon: "carbon:document-view", + tooltip: "查看数据", }, ]); @@ -113,7 +113,7 @@ lf.getSnapshot(); break; case ToolbarTypeEnum.VIEW_DATA: - emit('view-data'); + emit("view-data"); break; } }; @@ -121,21 +121,21 @@ watchEffect(async () => { if (unref(logicFlow)) { await nextTick(); - unref(logicFlow)?.on('history:change', onHistoryChange); + unref(logicFlow)?.on("history:change", onHistoryChange); } }); onUnmounted(() => { - unref(logicFlow)?.off('history:change', onHistoryChange); + unref(logicFlow)?.off("history:change", onHistoryChange); }); return { toolbarItemList, onControl }; }, }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-flow-chart-toolbar'; + @prefix-cls: ~"@{namespace}-flow-chart-toolbar"; - html[data-theme='dark'] { + html[data-theme="dark"] { .lf-dnd { background: #080808; } diff --git a/src/components/FlowChart/src/adpterForTurbo.ts b/src/components/FlowChart/src/adpterForTurbo.ts index b68b276..85c2d16 100644 --- a/src/components/FlowChart/src/adpterForTurbo.ts +++ b/src/components/FlowChart/src/adpterForTurbo.ts @@ -21,7 +21,7 @@ function convertFlowElementToEdge(element) { pointsList, properties: {}, }; - const excludeProperties = ['startPoint', 'endPoint', 'pointsList', 'text', 'logicFlowType']; + const excludeProperties = ["startPoint", "endPoint", "pointsList", "text", "logicFlowType"]; Object.keys(element.properties).forEach((property) => { if (excludeProperties.indexOf(property) === -1) { edge.properties[property] = element.properties[property]; @@ -41,7 +41,7 @@ function convertFlowElementToNode(element) { text, properties: {}, }; - const excludeProperties = ['x', 'y', 'text', 'logicFlowType']; + const excludeProperties = ["x", "y", "text", "logicFlowType"]; Object.keys(element.properties).forEach((property) => { if (excludeProperties.indexOf(property) === -1) { node.properties[property] = element.properties[property]; diff --git a/src/components/FlowChart/src/config.ts b/src/components/FlowChart/src/config.ts index 4f10d2c..dc16733 100644 --- a/src/components/FlowChart/src/config.ts +++ b/src/components/FlowChart/src/config.ts @@ -1,64 +1,64 @@ export const nodeList = [ { - text: '开始', - type: 'start', - class: 'node-start', + text: "开始", + type: "start", + class: "node-start", }, { - text: '矩形', - type: 'rect', - class: 'node-rect', + text: "矩形", + type: "rect", + class: "node-rect", }, { - type: 'user', - text: '用户', - class: 'node-user', + type: "user", + text: "用户", + class: "node-user", }, { - type: 'push', - text: '推送', - class: 'node-push', + type: "push", + text: "推送", + class: "node-push", }, { - type: 'download', - text: '位置', - class: 'node-download', + type: "download", + text: "位置", + class: "node-download", }, { - type: 'end', - text: '结束', - class: 'node-end', + type: "end", + text: "结束", + class: "node-end", }, ]; export const BpmnNode = [ { - type: 'bpmn:startEvent', - text: '开始', - class: 'bpmn-start', + type: "bpmn:startEvent", + text: "开始", + class: "bpmn-start", }, { - type: 'bpmn:endEvent', - text: '结束', - class: 'bpmn-end', + type: "bpmn:endEvent", + text: "结束", + class: "bpmn-end", }, { - type: 'bpmn:exclusiveGateway', - text: '网关', - class: 'bpmn-exclusiveGateway', + type: "bpmn:exclusiveGateway", + text: "网关", + class: "bpmn-exclusiveGateway", }, { - type: 'bpmn:userTask', - text: '用户', - class: 'bpmn-user', + type: "bpmn:userTask", + text: "用户", + class: "bpmn-user", }, ]; export function configDefaultDndPanel(lf) { return [ { - text: '选区', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAOVJREFUOBGtVMENwzAIjKP++2026ETdpv10iy7WFbqFyyW6GBywLCv5gI+Dw2Bluj1znuSjhb99Gkn6QILDY2imo60p8nsnc9bEo3+QJ+AKHfMdZHnl78wyTnyHZD53Zzx73MRSgYvnqgCUHj6gwdck7Zsp1VOrz0Uz8NbKunzAW+Gu4fYW28bUYutYlzSa7B84Fh7d1kjLwhcSdYAYrdkMQVpsBr5XgDGuXwQfQr0y9zwLda+DUYXLaGKdd2ZTtvbolaO87pdo24hP7ov16N0zArH1ur3iwJpXxm+v7oAJNR4JEP8DoAuSFEkYH7cAAAAASUVORK5CYII=', + text: "选区", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAOVJREFUOBGtVMENwzAIjKP++2026ETdpv10iy7WFbqFyyW6GBywLCv5gI+Dw2Bluj1znuSjhb99Gkn6QILDY2imo60p8nsnc9bEo3+QJ+AKHfMdZHnl78wyTnyHZD53Zzx73MRSgYvnqgCUHj6gwdck7Zsp1VOrz0Uz8NbKunzAW+Gu4fYW28bUYutYlzSa7B84Fh7d1kjLwhcSdYAYrdkMQVpsBr5XgDGuXwQfQr0y9zwLda+DUYXLaGKdd2ZTtvbolaO87pdo24hP7ov16N0zArH1ur3iwJpXxm+v7oAJNR4JEP8DoAuSFEkYH7cAAAAASUVORK5CYII=", callback: () => { lf.updateEditConfig({ stopMoveGraph: true, @@ -66,31 +66,31 @@ export function configDefaultDndPanel(lf) { }, }, { - type: 'circle', - text: '开始', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg==', + type: "circle", + text: "开始", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg==", }, { - type: 'rect', - text: '用户任务', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==', - cls: 'important-node', + type: "rect", + text: "用户任务", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==", + cls: "important-node", }, { - type: 'rect', - text: '系统任务', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==', - cls: 'import_icon', + type: "rect", + text: "系统任务", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==", + cls: "import_icon", }, { - type: 'diamond', - text: '条件判断', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAAHeEJUAAAAABGdBTUEAALGPC/xhBQAAAvVJREFUOBGNVEFrE0EU/mY3bQoiFlOkaUJrQUQoWMGePLX24EH0IIoHKQiCV0G8iE1covgLiqA/QTzVm1JPogc9tIJYFaQtlhQxqYjSpunu+L7JvmUTU3AgmTfvffPNN++9WSA1DO182f6xwILzD5btfAoQmwL5KJEwiQyVbSVZ0IgRyV6PTpIJ81E5ZvqfHQR0HUOBHW4L5Et2kQ6Zf7iAOhTFAA8s0pEP7AXO1uAA52SbqGk6h/6J45LaLhO64ByfcUzM39V7ZiAdS2yCePPEIQYvTUHqM/n7dgQNfBKWPjpF4ISk8q3J4nB11qw6X8l+FsF3EhlkEMfrjIer3wJTLwS2aCNcj4DbGxXTw00JmAuO+Ni6bBxVUCvS5d9aa04+so4pHW5jLTywuXAL7jJ+D06sl82Sgl2JuVBQn498zkc2bGKxULHjCnSMadBKYDYYHAtsby1EQ5lNGrQd4Y3v4Zo0XdGEmDno46yCM9Tk+RiJmUYHS/aXHPNTcjxcbTFna000PFJHIVZ5lFRqRpJWk9/+QtlOUYJj9HG5pVFEU7zqIYDVsw2s+AJaD8wTd2umgSCCyUxgGsS1Y6TBwXQQTFuZaHcd8gAGioE90hlsY+wMcs30RduYtxanjMGal8H5dMW67dmT1JFtYUEe8LiQLRsPZ6IIc7A4J5tqco3T0pnv/4u0kyzrYUq7gASuEyI8VXKvB9Odytv6jS/PNaZBln0nioJG/AVQRZvApOdhjj3Jt8QC8Im09SafwdBdvIpztpxWxpeKCC+EsFdS8DCyuCn2munFpL7ctHKp+Xc5cMybeIyMAN33SPL3ZR9QV1XVwLyzHm6Iv0/yeUuUb7PPlZC4D4HZkeu6dpF4v9j9MreGtMbxMMRLIcjJic9yHi7WQ3yVKzZVWUr5UrViJvn1FfUlwe/KYVfYyWRLSGNu16hR01U9IacajXPei0wx/5BqgInvJN+MMNtNme7ReU9SBbgntovn0kKHpFg7UogZvaZiOue/q1SBo9ktHzQAAAAASUVORK5CYII=', + type: "diamond", + text: "条件判断", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAAHeEJUAAAAABGdBTUEAALGPC/xhBQAAAvVJREFUOBGNVEFrE0EU/mY3bQoiFlOkaUJrQUQoWMGePLX24EH0IIoHKQiCV0G8iE1covgLiqA/QTzVm1JPogc9tIJYFaQtlhQxqYjSpunu+L7JvmUTU3AgmTfvffPNN++9WSA1DO182f6xwILzD5btfAoQmwL5KJEwiQyVbSVZ0IgRyV6PTpIJ81E5ZvqfHQR0HUOBHW4L5Et2kQ6Zf7iAOhTFAA8s0pEP7AXO1uAA52SbqGk6h/6J45LaLhO64ByfcUzM39V7ZiAdS2yCePPEIQYvTUHqM/n7dgQNfBKWPjpF4ISk8q3J4nB11qw6X8l+FsF3EhlkEMfrjIer3wJTLwS2aCNcj4DbGxXTw00JmAuO+Ni6bBxVUCvS5d9aa04+so4pHW5jLTywuXAL7jJ+D06sl82Sgl2JuVBQn498zkc2bGKxULHjCnSMadBKYDYYHAtsby1EQ5lNGrQd4Y3v4Zo0XdGEmDno46yCM9Tk+RiJmUYHS/aXHPNTcjxcbTFna000PFJHIVZ5lFRqRpJWk9/+QtlOUYJj9HG5pVFEU7zqIYDVsw2s+AJaD8wTd2umgSCCyUxgGsS1Y6TBwXQQTFuZaHcd8gAGioE90hlsY+wMcs30RduYtxanjMGal8H5dMW67dmT1JFtYUEe8LiQLRsPZ6IIc7A4J5tqco3T0pnv/4u0kyzrYUq7gASuEyI8VXKvB9Odytv6jS/PNaZBln0nioJG/AVQRZvApOdhjj3Jt8QC8Im09SafwdBdvIpztpxWxpeKCC+EsFdS8DCyuCn2munFpL7ctHKp+Xc5cMybeIyMAN33SPL3ZR9QV1XVwLyzHm6Iv0/yeUuUb7PPlZC4D4HZkeu6dpF4v9j9MreGtMbxMMRLIcjJic9yHi7WQ3yVKzZVWUr5UrViJvn1FfUlwe/KYVfYyWRLSGNu16hR01U9IacajXPei0wx/5BqgInvJN+MMNtNme7ReU9SBbgntovn0kKHpFg7UogZvaZiOue/q1SBo9ktHzQAAAAASUVORK5CYII=", }, { - type: 'circle', - text: '结束', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAA1BJREFUOBFtVE1IVUEYPXOf+tq40Y3vPcmFIdSjIorWoRG0ERWUgnb5FwVhYQSl72oUoZAboxKNFtWiwKRN0M+jpfSzqJAQclHo001tKkjl3emc8V69igP3znzfnO/M9zcDcKT67azmjYWTwl9Vn7Vumeqzj1DVb6cleQY4oAVnIOPb+mKAGxQmKI5CWNJ2aLPatxWa3aB9K7/fB+/Z0jUF6TmMlFLQqrkECWQzOZxYGjTlOl8eeKaIY5yHnFn486xBustDjWT6dG7pmjHOJd+33t0iitTPkK6tEvjxq4h2MozQ6WFSX/LkDUGfFwfhEZj1Auz/U4pyAi5Sznd7uKzznXeVHlI/Aywmk6j7fsUsEuCGADrWARXXwjxWQsUbIupDHJI7kF5dRktg0eN81IbiZXiTESic50iwS+t1oJgL83jAiBupLDCQqwziaWSoAFSeIR3P5Xv5az00wyIn35QRYTwdSYbz8pH8fxUUAtxnFvYmEmgI0wYXUXcCCSpeEVpXlsRhBnCEATxWylL9+EKCAYhe1NGstUa6356kS9NVvt3DU2fd+Wtbm/+lSbylJqsqkSm9CRhvoJVlvKPvF1RKY/FcPn5j4UfIMLn8D4UYb54BNsilTDXKnF4CfTobA0FpoW/LSp306wkXM+XaOJhZaFkcNM82ASNAWMrhrUbRfmyeI1FvRBTpN06WKxa9BK0o2E4Pd3zfBBEwPsv9sQBnmLVbLEIZ/Xe9LYwJu/Er17W6HYVBc7vmuk0xUQ+pqxdom5Fnp55SiytXLPYoMXNM4u4SNSCFWnrVIzKG3EGyMXo6n/BQOe+bX3FClY4PwydVhthOZ9NnS+ntiLh0fxtlUJHAuGaFoVmttpVMeum0p3WEXbcll94l1wM/gZ0Ccczop77VvN2I7TlsZCsuXf1WHvWEhjO8DPtyOVg2/mvK9QqboEth+7pD6NUQC1HN/TwvydGBARi9MZSzLE4b8Ru3XhX2PBxf8E1er2A6516o0w4sIA+lwURhAON82Kwe2iDAC1Watq4XHaGQ7skLcFOtI5lDxuM2gZe6WFIotPAhbaeYlU4to5cuarF1QrcZ/lwrLaCJl66JBocYZnrNlvm2+MBCTmUymPrYZVbjdlr/BxlMjmNmNI3SAAAAAElFTkSuQmCC', + type: "circle", + text: "结束", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAA1BJREFUOBFtVE1IVUEYPXOf+tq40Y3vPcmFIdSjIorWoRG0ERWUgnb5FwVhYQSl72oUoZAboxKNFtWiwKRN0M+jpfSzqJAQclHo001tKkjl3emc8V69igP3znzfnO/M9zcDcKT67azmjYWTwl9Vn7Vumeqzj1DVb6cleQY4oAVnIOPb+mKAGxQmKI5CWNJ2aLPatxWa3aB9K7/fB+/Z0jUF6TmMlFLQqrkECWQzOZxYGjTlOl8eeKaIY5yHnFn486xBustDjWT6dG7pmjHOJd+33t0iitTPkK6tEvjxq4h2MozQ6WFSX/LkDUGfFwfhEZj1Auz/U4pyAi5Sznd7uKzznXeVHlI/Aywmk6j7fsUsEuCGADrWARXXwjxWQsUbIupDHJI7kF5dRktg0eN81IbiZXiTESic50iwS+t1oJgL83jAiBupLDCQqwziaWSoAFSeIR3P5Xv5az00wyIn35QRYTwdSYbz8pH8fxUUAtxnFvYmEmgI0wYXUXcCCSpeEVpXlsRhBnCEATxWylL9+EKCAYhe1NGstUa6356kS9NVvt3DU2fd+Wtbm/+lSbylJqsqkSm9CRhvoJVlvKPvF1RKY/FcPn5j4UfIMLn8D4UYb54BNsilTDXKnF4CfTobA0FpoW/LSp306wkXM+XaOJhZaFkcNM82ASNAWMrhrUbRfmyeI1FvRBTpN06WKxa9BK0o2E4Pd3zfBBEwPsv9sQBnmLVbLEIZ/Xe9LYwJu/Er17W6HYVBc7vmuk0xUQ+pqxdom5Fnp55SiytXLPYoMXNM4u4SNSCFWnrVIzKG3EGyMXo6n/BQOe+bX3FClY4PwydVhthOZ9NnS+ntiLh0fxtlUJHAuGaFoVmttpVMeum0p3WEXbcll94l1wM/gZ0Ccczop77VvN2I7TlsZCsuXf1WHvWEhjO8DPtyOVg2/mvK9QqboEth+7pD6NUQC1HN/TwvydGBARi9MZSzLE4b8Ru3XhX2PBxf8E1er2A6516o0w4sIA+lwURhAON82Kwe2iDAC1Watq4XHaGQ7skLcFOtI5lDxuM2gZe6WFIotPAhbaeYlU4to5cuarF1QrcZ/lwrLaCJl66JBocYZnrNlvm2+MBCTmUymPrYZVbjdlr/BxlMjmNmNI3SAAAAAElFTkSuQmCC", }, ]; } diff --git a/src/components/FlowChart/src/enum.ts b/src/components/FlowChart/src/enum.ts index 8ea134c..1a0c999 100644 --- a/src/components/FlowChart/src/enum.ts +++ b/src/components/FlowChart/src/enum.ts @@ -1,11 +1,11 @@ export enum ToolbarTypeEnum { - ZOOM_IN = 'zoomIn', - ZOOM_OUT = 'zoomOut', - RESET_ZOOM = 'resetZoom', + ZOOM_IN = "zoomIn", + ZOOM_OUT = "zoomOut", + RESET_ZOOM = "resetZoom", - UNDO = 'undo', - REDO = 'redo', + UNDO = "undo", + REDO = "redo", - SNAPSHOT = 'snapshot', - VIEW_DATA = 'viewData', + SNAPSHOT = "snapshot", + VIEW_DATA = "viewData", } diff --git a/src/components/FlowChart/src/types.ts b/src/components/FlowChart/src/types.ts index 94992ba..7a6613b 100644 --- a/src/components/FlowChart/src/types.ts +++ b/src/components/FlowChart/src/types.ts @@ -1,5 +1,5 @@ -import { NodeConfig } from '@logicflow/core'; -import { ToolbarTypeEnum } from './enum'; +import { NodeConfig } from "@logicflow/core"; +import { ToolbarTypeEnum } from "./enum"; export interface NodeItem extends NodeConfig { icon: string; diff --git a/src/components/FlowChart/src/useFlowContext.ts b/src/components/FlowChart/src/useFlowContext.ts index 7d15f3b..3dab7b7 100644 --- a/src/components/FlowChart/src/useFlowContext.ts +++ b/src/components/FlowChart/src/useFlowContext.ts @@ -1,8 +1,8 @@ -import type LogicFlow from '@logicflow/core'; +import type LogicFlow from "@logicflow/core"; -import { provide, inject } from 'vue'; +import { provide, inject } from "vue"; -const key = Symbol('flow-chart'); +const key = Symbol("flow-chart"); type Instance = { logicFlow: LogicFlow; diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index 8bca8a3..cba2535 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -1,15 +1,15 @@ -import BasicForm from './src/BasicForm.vue'; +import BasicForm from "./src/BasicForm.vue"; -export * from './src/types/form'; -export * from './src/types/formItem'; +export * from "./src/types/form"; +export * from "./src/types/formItem"; -export { useComponentRegister } from './src/hooks/useComponentRegister'; -export { useForm } from './src/hooks/useForm'; +export { useComponentRegister } from "./src/hooks/useComponentRegister"; +export { useForm } from "./src/hooks/useForm"; -export { default as ApiSelect } from './src/components/ApiSelect.vue'; -export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue'; -export { default as ApiTreeSelect } from './src/components/ApiTreeSelect.vue'; -export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue'; -export { default as ApiCascader } from './src/components/ApiCascader.vue'; +export { default as ApiSelect } from "./src/components/ApiSelect.vue"; +export { default as RadioButtonGroup } from "./src/components/RadioButtonGroup.vue"; +export { default as ApiTreeSelect } from "./src/components/ApiTreeSelect.vue"; +export { default as ApiRadioGroup } from "./src/components/ApiRadioGroup.vue"; +export { default as ApiCascader } from "./src/components/ApiCascader.vue"; export { BasicForm }; diff --git a/src/components/Form/src/BasicForm.vue b/src/components/Form/src/BasicForm.vue index 4a26727..8d2542d 100644 --- a/src/components/Form/src/BasicForm.vue +++ b/src/components/Form/src/BasicForm.vue @@ -37,36 +37,36 @@ </Form> </template> <script lang="ts"> - import type { FormActionType, FormProps, FormSchema } from './types/form'; - import type { AdvanceState } from './types/hooks'; - import type { Ref } from 'vue'; + import type { FormActionType, FormProps, FormSchema } from "./types/form"; + import type { AdvanceState } from "./types/hooks"; + import type { Ref } from "vue"; - import { defineComponent, reactive, ref, computed, unref, onMounted, watch, nextTick } from 'vue'; - import { Form, Row } from 'ant-design-vue'; - import FormItem from './components/FormItem.vue'; - import FormAction from './components/FormAction.vue'; + import { defineComponent, reactive, ref, computed, unref, onMounted, watch, nextTick } from "vue"; + import { Form, Row } from "ant-design-vue"; + import FormItem from "./components/FormItem.vue"; + import FormAction from "./components/FormAction.vue"; - import { dateItemType } from './helper'; - import { dateUtil } from '/@/utils/dateUtil'; + import { dateItemType } from "./helper"; + import { dateUtil } from "/@/utils/dateUtil"; // import { cloneDeep } from 'lodash-es'; - import { deepMerge } from '/@/utils'; + import { deepMerge } from "/@/utils"; - import { useFormValues } from './hooks/useFormValues'; - import useAdvanced from './hooks/useAdvanced'; - import { useFormEvents } from './hooks/useFormEvents'; - import { createFormContext } from './hooks/useFormContext'; - import { useAutoFocus } from './hooks/useAutoFocus'; - import { useModalContext } from '/@/components/Modal'; + import { useFormValues } from "./hooks/useFormValues"; + import useAdvanced from "./hooks/useAdvanced"; + import { useFormEvents } from "./hooks/useFormEvents"; + import { createFormContext } from "./hooks/useFormContext"; + import { useAutoFocus } from "./hooks/useAutoFocus"; + import { useModalContext } from "/@/components/Modal"; - import { basicProps } from './props'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { basicProps } from "./props"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'BasicForm', + name: "BasicForm", components: { FormItem, Form, Row, FormAction }, props: basicProps, - emits: ['advanced-change', 'reset', 'submit', 'register'], + emits: ["advanced-change", "reset", "submit", "register"], setup(props, { emit, attrs }) { const formModel = reactive<Recordable>({}); const modalFn = useModalContext(); @@ -84,7 +84,7 @@ const schemaRef = ref<Nullable<FormSchema[]>>(null); const formElRef = ref<Nullable<FormActionType>>(null); - const { prefixCls } = useDesign('basic-form'); + const { prefixCls } = useDesign("basic-form"); // Get the basic configuration of the form const getProps = computed((): FormProps => { @@ -131,7 +131,7 @@ } } if (unref(getProps).showAdvancedButton) { - return schemas.filter((schema) => schema.component !== 'Divider') as FormSchema[]; + return schemas.filter((schema) => schema.component !== "Divider") as FormSchema[]; } else { return schemas as FormSchema[]; } @@ -232,7 +232,7 @@ function setFormModel(key: string, value: any) { formModel[key] = value; const { validateTrigger } = unref(getBindValue); - if (!validateTrigger || validateTrigger === 'change') { + if (!validateTrigger || validateTrigger === "change") { validateFields([key]).catch((_) => {}); } } @@ -240,9 +240,9 @@ function handleEnterPress(e: KeyboardEvent) { const { autoSubmitOnEnter } = unref(getProps); if (!autoSubmitOnEnter) return; - if (e.key === 'Enter' && e.target && e.target instanceof HTMLElement) { + if (e.key === "Enter" && e.target && e.target instanceof HTMLElement) { const target: HTMLElement = e.target as HTMLElement; - if (target && target.tagName && target.tagName.toUpperCase() == 'INPUT') { + if (target && target.tagName && target.tagName.toUpperCase() == "INPUT") { handleSubmit(); } } @@ -266,7 +266,7 @@ onMounted(() => { initDefault(); - emit('register', formActionType); + emit("register", formActionType); }); return { @@ -292,7 +292,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-form'; + @prefix-cls: ~"@{namespace}-basic-form"; .@{prefix-cls} { .ant-form-item { diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts index 2f9003d..5ec64b6 100644 --- a/src/components/Form/src/componentMap.ts +++ b/src/components/Form/src/componentMap.ts @@ -1,5 +1,5 @@ -import type { Component } from 'vue'; -import type { ComponentType } from './types/index'; +import type { Component } from "vue"; +import type { ComponentType } from "./types/index"; /** * Component list, register here to setting it in the form @@ -19,54 +19,54 @@ import { Slider, Rate, Divider, -} from 'ant-design-vue'; +} from "ant-design-vue"; -import ApiRadioGroup from './components/ApiRadioGroup.vue'; -import RadioButtonGroup from './components/RadioButtonGroup.vue'; -import ApiSelect from './components/ApiSelect.vue'; -import ApiTreeSelect from './components/ApiTreeSelect.vue'; -import ApiCascader from './components/ApiCascader.vue'; -import { BasicUpload } from '/@/components/Upload'; -import { StrengthMeter } from '/@/components/StrengthMeter'; -import { IconPicker } from '/@/components/Icon'; -import { CountdownInput } from '/@/components/CountDown'; +import ApiRadioGroup from "./components/ApiRadioGroup.vue"; +import RadioButtonGroup from "./components/RadioButtonGroup.vue"; +import ApiSelect from "./components/ApiSelect.vue"; +import ApiTreeSelect from "./components/ApiTreeSelect.vue"; +import ApiCascader from "./components/ApiCascader.vue"; +import { BasicUpload } from "/@/components/Upload"; +import { StrengthMeter } from "/@/components/StrengthMeter"; +import { IconPicker } from "/@/components/Icon"; +import { CountdownInput } from "/@/components/CountDown"; const componentMap = new Map<ComponentType, Component>(); -componentMap.set('Input', Input); -componentMap.set('InputGroup', Input.Group); -componentMap.set('InputPassword', Input.Password); -componentMap.set('InputSearch', Input.Search); -componentMap.set('InputTextArea', Input.TextArea); -componentMap.set('InputNumber', InputNumber); -componentMap.set('AutoComplete', AutoComplete); +componentMap.set("Input", Input); +componentMap.set("InputGroup", Input.Group); +componentMap.set("InputPassword", Input.Password); +componentMap.set("InputSearch", Input.Search); +componentMap.set("InputTextArea", Input.TextArea); +componentMap.set("InputNumber", InputNumber); +componentMap.set("AutoComplete", AutoComplete); -componentMap.set('Select', Select); -componentMap.set('ApiSelect', ApiSelect); -componentMap.set('TreeSelect', TreeSelect); -componentMap.set('ApiTreeSelect', ApiTreeSelect); -componentMap.set('ApiRadioGroup', ApiRadioGroup); -componentMap.set('Switch', Switch); -componentMap.set('RadioButtonGroup', RadioButtonGroup); -componentMap.set('RadioGroup', Radio.Group); -componentMap.set('Checkbox', Checkbox); -componentMap.set('CheckboxGroup', Checkbox.Group); -componentMap.set('ApiCascader', ApiCascader); -componentMap.set('Cascader', Cascader); -componentMap.set('Slider', Slider); -componentMap.set('Rate', Rate); +componentMap.set("Select", Select); +componentMap.set("ApiSelect", ApiSelect); +componentMap.set("TreeSelect", TreeSelect); +componentMap.set("ApiTreeSelect", ApiTreeSelect); +componentMap.set("ApiRadioGroup", ApiRadioGroup); +componentMap.set("Switch", Switch); +componentMap.set("RadioButtonGroup", RadioButtonGroup); +componentMap.set("RadioGroup", Radio.Group); +componentMap.set("Checkbox", Checkbox); +componentMap.set("CheckboxGroup", Checkbox.Group); +componentMap.set("ApiCascader", ApiCascader); +componentMap.set("Cascader", Cascader); +componentMap.set("Slider", Slider); +componentMap.set("Rate", Rate); -componentMap.set('DatePicker', DatePicker); -componentMap.set('MonthPicker', DatePicker.MonthPicker); -componentMap.set('RangePicker', DatePicker.RangePicker); -componentMap.set('WeekPicker', DatePicker.WeekPicker); -componentMap.set('TimePicker', TimePicker); -componentMap.set('StrengthMeter', StrengthMeter); -componentMap.set('IconPicker', IconPicker); -componentMap.set('InputCountDown', CountdownInput); +componentMap.set("DatePicker", DatePicker); +componentMap.set("MonthPicker", DatePicker.MonthPicker); +componentMap.set("RangePicker", DatePicker.RangePicker); +componentMap.set("WeekPicker", DatePicker.WeekPicker); +componentMap.set("TimePicker", TimePicker); +componentMap.set("StrengthMeter", StrengthMeter); +componentMap.set("IconPicker", IconPicker); +componentMap.set("InputCountDown", CountdownInput); -componentMap.set('Upload', BasicUpload); -componentMap.set('Divider', Divider); +componentMap.set("Upload", BasicUpload); +componentMap.set("Divider", Divider); export function add(compName: ComponentType, component: Component) { componentMap.set(compName, component); diff --git a/src/components/Form/src/components/ApiCascader.vue b/src/components/Form/src/components/ApiCascader.vue index 2bfd096..bc6de8c 100644 --- a/src/components/Form/src/components/ApiCascader.vue +++ b/src/components/Form/src/components/ApiCascader.vue @@ -13,19 +13,19 @@ <template #notFoundContent v-if="loading"> <span> <LoadingOutlined spin class="mr-1" /> - {{ t('component.form.apiSelectNotFound') }} + {{ t("component.form.apiSelectNotFound") }} </span> </template> </a-cascader> </template> <script lang="ts"> - import { defineComponent, PropType, ref, unref, watch, watchEffect } from 'vue'; - import { Cascader } from 'ant-design-vue'; - import { propTypes } from '/@/utils/propTypes'; - import { isFunction } from '/@/utils/is'; - import { get, omit } from 'lodash-es'; - import { useRuleFormItem } from '/@/hooks/component/useFormItem'; - import { LoadingOutlined } from '@ant-design/icons-vue'; + import { defineComponent, PropType, ref, unref, watch, watchEffect } from "vue"; + import { Cascader } from "ant-design-vue"; + import { propTypes } from "/@/utils/propTypes"; + import { isFunction } from "/@/utils/is"; + import { get, omit } from "lodash-es"; + import { useRuleFormItem } from "/@/hooks/component/useFormItem"; + import { LoadingOutlined } from "@ant-design/icons-vue"; interface Option { value: string; @@ -35,7 +35,7 @@ children?: Option[]; } export default defineComponent({ - name: 'ApiCascader', + name: "ApiCascader", components: { LoadingOutlined, [Cascader.name]: Cascader, @@ -49,11 +49,11 @@ default: null, }, numberToString: propTypes.bool, - resultField: propTypes.string.def(''), - labelField: propTypes.string.def('label'), - valueField: propTypes.string.def('value'), - childrenField: propTypes.string.def('children'), - asyncFetchParamKey: propTypes.string.def('parentCode'), + resultField: propTypes.string.def(""), + labelField: propTypes.string.def("label"), + valueField: propTypes.string.def("value"), + childrenField: propTypes.string.def("children"), + asyncFetchParamKey: propTypes.string.def("parentCode"), immediate: propTypes.bool.def(true), // init fetch params initFetchParams: { @@ -69,7 +69,7 @@ type: Array, }, }, - emits: ['change', 'defaultChange'], + emits: ["change", "defaultChange"], setup(props, { emit }) { const apiData = ref<any[]>([]); const options = ref<Option[]>([]); @@ -78,7 +78,7 @@ const isFirstLoad = ref(true); // Embedded in the form, just use the hook binding to perform form verification - const [state] = useRuleFormItem(props, 'value', 'change', emitData); + const [state] = useRuleFormItem(props, "value", "change", emitData); watch( apiData, @@ -98,7 +98,7 @@ ...omit(next, [labelField, valueField]), label: next[labelField], value: numberToString ? `${value}` : value, - isLeaf: isLeaf && typeof isLeaf === 'function' ? isLeaf(next) : false, + isLeaf: isLeaf && typeof isLeaf === "function" ? isLeaf(next) : false, }; const children = Reflect.get(next, childrenField); if (children) { @@ -139,7 +139,7 @@ if (!api || !isFunction(api)) return; try { const res = await api({ - [props.asyncFetchParamKey]: Reflect.get(targetOption, 'value'), + [props.asyncFetchParamKey]: Reflect.get(targetOption, "value"), }); if (Array.isArray(res)) { const children = generatorOptions(res); @@ -171,17 +171,17 @@ function handleChange(keys, args) { emitData.value = keys; - emit('defaultChange', keys, args); + emit("defaultChange", keys, args); } function handleRenderDisplay({ labels, selectedOptions }) { if (unref(emitData).length === selectedOptions.length) { - return labels.join(' / '); + return labels.join(" / "); } if (props.displayRenderArray) { - return props.displayRenderArray.join(' / '); + return props.displayRenderArray.join(" / "); } - return ''; + return ""; } return { diff --git a/src/components/Form/src/components/ApiRadioGroup.vue b/src/components/Form/src/components/ApiRadioGroup.vue index 712cfba..89f3d3e 100644 --- a/src/components/Form/src/components/ApiRadioGroup.vue +++ b/src/components/Form/src/components/ApiRadioGroup.vue @@ -14,18 +14,18 @@ </RadioGroup> </template> <script lang="ts"> - import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from 'vue'; - import { Radio } from 'ant-design-vue'; - import { isFunction } from '/@/utils/is'; - import { useRuleFormItem } from '/@/hooks/component/useFormItem'; - import { useAttrs } from '/@/hooks/core/useAttrs'; - import { propTypes } from '/@/utils/propTypes'; - import { get, omit } from 'lodash-es'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from "vue"; + import { Radio } from "ant-design-vue"; + import { isFunction } from "/@/utils/is"; + import { useRuleFormItem } from "/@/hooks/component/useFormItem"; + import { useAttrs } from "/@/hooks/core/useAttrs"; + import { propTypes } from "/@/utils/propTypes"; + import { get, omit } from "lodash-es"; + import { useI18n } from "/@/hooks/web/useI18n"; type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean }; export default defineComponent({ - name: 'ApiRadioGroup', + name: "ApiRadioGroup", components: { RadioGroup: Radio.Group, RadioButton: Radio.Button, @@ -48,12 +48,12 @@ default: false, }, numberToString: propTypes.bool, - resultField: propTypes.string.def(''), - labelField: propTypes.string.def('label'), - valueField: propTypes.string.def('value'), + resultField: propTypes.string.def(""), + labelField: propTypes.string.def("label"), + valueField: propTypes.string.def("value"), immediate: propTypes.bool.def(true), }, - emits: ['options-change', 'change'], + emits: ["options-change", "change"], setup(props, { emit }) { const options = ref<OptionsItem[]>([]); const loading = ref(false); @@ -117,7 +117,7 @@ } function emitChange() { - emit('options-change', unref(getOptions)); + emit("options-change", unref(getOptions)); } function handleChange(_, ...args) { diff --git a/src/components/Form/src/components/ApiSelect.vue b/src/components/Form/src/components/ApiSelect.vue index 7b6bad1..2fb995a 100644 --- a/src/components/Form/src/components/ApiSelect.vue +++ b/src/components/Form/src/components/ApiSelect.vue @@ -15,26 +15,26 @@ <template #notFoundContent v-if="loading"> <span> <LoadingOutlined spin class="mr-1" /> - {{ t('component.form.apiSelectNotFound') }} + {{ t("component.form.apiSelectNotFound") }} </span> </template> </Select> </template> <script lang="ts"> - import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from 'vue'; - import { Select } from 'ant-design-vue'; - import { isFunction } from '/@/utils/is'; - import { useRuleFormItem } from '/@/hooks/component/useFormItem'; - import { useAttrs } from '/@/hooks/core/useAttrs'; - import { get, omit } from 'lodash-es'; - import { LoadingOutlined } from '@ant-design/icons-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { propTypes } from '/@/utils/propTypes'; + import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from "vue"; + import { Select } from "ant-design-vue"; + import { isFunction } from "/@/utils/is"; + import { useRuleFormItem } from "/@/hooks/component/useFormItem"; + import { useAttrs } from "/@/hooks/core/useAttrs"; + import { get, omit } from "lodash-es"; + import { LoadingOutlined } from "@ant-design/icons-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { propTypes } from "/@/utils/propTypes"; type OptionsItem = { label: string; value: string; disabled?: boolean }; export default defineComponent({ - name: 'ApiSelect', + name: "ApiSelect", components: { Select, LoadingOutlined, @@ -53,12 +53,12 @@ default: () => ({}), }, // support xxx.xxx.xx - resultField: propTypes.string.def(''), - labelField: propTypes.string.def('label'), - valueField: propTypes.string.def('value'), + resultField: propTypes.string.def(""), + labelField: propTypes.string.def("label"), + valueField: propTypes.string.def("value"), immediate: propTypes.bool.def(true), }, - emits: ['options-change', 'change'], + emits: ["options-change", "change"], setup(props, { emit }) { const options = ref<OptionsItem[]>([]); const loading = ref(false); @@ -68,7 +68,7 @@ const { t } = useI18n(); // Embedded in the form, just use the hook binding to perform form verification - const [state] = useRuleFormItem(props, 'value', 'change', emitData); + const [state] = useRuleFormItem(props, "value", "change", emitData); const getOptions = computed(() => { const { labelField, valueField, numberToString } = props; @@ -129,7 +129,7 @@ } function emitChange() { - emit('options-change', unref(getOptions)); + emit("options-change", unref(getOptions)); } function handleChange(_, ...args) { diff --git a/src/components/Form/src/components/ApiTreeSelect.vue b/src/components/Form/src/components/ApiTreeSelect.vue index 3f073d3..d10acc3 100644 --- a/src/components/Form/src/components/ApiTreeSelect.vue +++ b/src/components/Form/src/components/ApiTreeSelect.vue @@ -10,22 +10,22 @@ </template> <script lang="ts"> - import { computed, defineComponent, watch, ref, onMounted, unref } from 'vue'; - import { TreeSelect } from 'ant-design-vue'; - import { isArray, isFunction } from '/@/utils/is'; - import { get } from 'lodash-es'; - import { propTypes } from '/@/utils/propTypes'; - import { LoadingOutlined } from '@ant-design/icons-vue'; + import { computed, defineComponent, watch, ref, onMounted, unref } from "vue"; + import { TreeSelect } from "ant-design-vue"; + import { isArray, isFunction } from "/@/utils/is"; + import { get } from "lodash-es"; + import { propTypes } from "/@/utils/propTypes"; + import { LoadingOutlined } from "@ant-design/icons-vue"; export default defineComponent({ - name: 'ApiTreeSelect', + name: "ApiTreeSelect", components: { ATreeSelect: TreeSelect, LoadingOutlined }, props: { api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> }, params: { type: Object }, immediate: { type: Boolean, default: true }, - resultField: propTypes.string.def(''), + resultField: propTypes.string.def(""), }, - emits: ['options-change', 'change'], + emits: ["options-change", "change"], setup(props, { attrs, emit }) { const treeData = ref<Recordable[]>([]); const isFirstLoaded = ref<Boolean>(false); @@ -38,7 +38,7 @@ }); function handleChange(...args) { - emit('change', ...args); + emit("change", ...args); } watch( @@ -78,7 +78,7 @@ } treeData.value = (result as Recordable[]) || []; isFirstLoaded.value = true; - emit('options-change', treeData.value); + emit("options-change", treeData.value); } return { getAttrs, loading, handleChange }; }, diff --git a/src/components/Form/src/components/FormAction.vue b/src/components/Form/src/components/FormAction.vue index 8dec49f..6cf23b0 100644 --- a/src/components/Form/src/components/FormAction.vue +++ b/src/components/Form/src/components/FormAction.vue @@ -31,7 +31,7 @@ @click="toggleAdvanced" v-if="showAdvancedButton && !hideAdvanceBtn" > - {{ isAdvanced ? t('component.form.putAway') : t('component.form.unfold') }} + {{ isAdvanced ? t("component.form.putAway") : t("component.form.unfold") }} <BasicArrow class="ml-1" :expand="!isAdvanced" up /> </Button> <slot name="advanceAfter"></slot> @@ -40,20 +40,20 @@ </a-col> </template> <script lang="ts"> - import type { ColEx } from '../types/index'; + import type { ColEx } from "../types/index"; //import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; - import { defineComponent, computed, PropType } from 'vue'; - import { Form, Col } from 'ant-design-vue'; - import { Button, ButtonProps } from '/@/components/Button'; - import { BasicArrow } from '/@/components/Basic'; - import { useFormContext } from '../hooks/useFormContext'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { propTypes } from '/@/utils/propTypes'; + import { defineComponent, computed, PropType } from "vue"; + import { Form, Col } from "ant-design-vue"; + import { Button, ButtonProps } from "/@/components/Button"; + import { BasicArrow } from "/@/components/Basic"; + import { useFormContext } from "../hooks/useFormContext"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { propTypes } from "/@/utils/propTypes"; type ButtonOptions = Partial<ButtonProps> & { text: string }; export default defineComponent({ - name: 'BasicFormAction', + name: "BasicFormAction", components: { FormItem: Form.Item, Button, @@ -81,7 +81,7 @@ isAdvanced: propTypes.bool, hideAdvanceBtn: propTypes.bool, }, - emits: ['toggle-advanced'], + emits: ["toggle-advanced"], setup(props, { emit }) { const { t } = useI18n(); @@ -92,7 +92,7 @@ ? { span: actionSpan < 6 ? 24 : actionSpan } : {}; const actionColOpt: Partial<ColEx> = { - style: { textAlign: 'right' }, + style: { textAlign: "right" }, span: showAdvancedButton ? 6 : 4, ...advancedSpanObj, ...actionColOptions, @@ -103,7 +103,7 @@ const getResetBtnOptions = computed((): ButtonOptions => { return Object.assign( { - text: t('common.resetText'), + text: t("common.resetText"), }, props.resetButtonOptions, ); @@ -112,14 +112,14 @@ const getSubmitBtnOptions = computed(() => { return Object.assign( { - text: t('common.queryText'), + text: t("common.queryText"), }, props.submitButtonOptions, ); }); function toggleAdvanced() { - emit('toggle-advanced'); + emit("toggle-advanced"); } return { diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue index e34e4b3..44c8691 100644 --- a/src/components/Form/src/components/FormItem.vue +++ b/src/components/Form/src/components/FormItem.vue @@ -1,22 +1,22 @@ <script lang="tsx"> - import type { PropType, Ref } from 'vue'; - import type { FormActionType, FormProps } from '../types/form'; - import type { FormSchema } from '../types/form'; - import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; - import type { TableActionType } from '/@/components/Table'; - import { defineComponent, computed, unref, toRefs } from 'vue'; - import { Form, Col, Divider } from 'ant-design-vue'; - import { componentMap } from '../componentMap'; - import { BasicHelp } from '/@/components/Basic'; - import { isBoolean, isFunction, isNull } from '/@/utils/is'; - import { getSlot } from '/@/utils/helper/tsxHelper'; - import { createPlaceholderMessage, setComponentRuleType } from '../helper'; - import { upperFirst, cloneDeep } from 'lodash-es'; - import { useItemLabelWidth } from '../hooks/useLabelWidth'; - import { useI18n } from '/@/hooks/web/useI18n'; + import type { PropType, Ref } from "vue"; + import type { FormActionType, FormProps } from "../types/form"; + import type { FormSchema } from "../types/form"; + import type { ValidationRule } from "ant-design-vue/lib/form/Form"; + import type { TableActionType } from "/@/components/Table"; + import { defineComponent, computed, unref, toRefs } from "vue"; + import { Form, Col, Divider } from "ant-design-vue"; + import { componentMap } from "../componentMap"; + import { BasicHelp } from "/@/components/Basic"; + import { isBoolean, isFunction, isNull } from "/@/utils/is"; + import { getSlot } from "/@/utils/helper/tsxHelper"; + import { createPlaceholderMessage, setComponentRuleType } from "../helper"; + import { upperFirst, cloneDeep } from "lodash-es"; + import { useItemLabelWidth } from "../hooks/useLabelWidth"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ - name: 'BasicFormItem', + name: "BasicFormItem", inheritAttrs: false, props: { schema: { @@ -77,9 +77,9 @@ if (isFunction(componentProps)) { componentProps = componentProps({ schema, tableAction, formModel, formActionType }) ?? {}; } - if (schema.component === 'Divider') { - componentProps = Object.assign({ type: 'horizontal' }, componentProps, { - orientation: 'left', + if (schema.component === "Divider") { + componentProps = Object.assign({ type: "horizontal" }, componentProps, { + orientation: "left", plain: true, }); } @@ -145,10 +145,10 @@ let rules: ValidationRule[] = cloneDeep(defRules) as ValidationRule[]; const { rulesMessageJoinLabel: globalRulesMessageJoinLabel } = props.formProps; - const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel') + const joinLabel = Reflect.has(props.schema, "rulesMessageJoinLabel") ? rulesMessageJoinLabel : globalRulesMessageJoinLabel; - const defaultMsg = createPlaceholderMessage(component) + `${joinLabel ? label : ''}`; + const defaultMsg = createPlaceholderMessage(component) + `${joinLabel ? label : ""}`; function validator(rule: any, value: any) { const msg = rule.message || defaultMsg; @@ -158,13 +158,13 @@ } else if (Array.isArray(value) && value.length === 0) { // 数组类型 return Promise.reject(msg); - } else if (typeof value === 'string' && value.trim() === '') { + } else if (typeof value === "string" && value.trim() === "") { // 空字符串 return Promise.reject(msg); } else if ( - typeof value === 'object' && - Reflect.has(value, 'checked') && - Reflect.has(value, 'halfChecked') && + typeof value === "object" && + Reflect.has(value, "checked") && + Reflect.has(value, "halfChecked") && Array.isArray(value.checked) && Array.isArray(value.halfChecked) && value.checked.length === 0 && @@ -183,7 +183,7 @@ } const requiredRuleIndex: number = rules.findIndex( - (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'), + (rule) => Reflect.has(rule, "required") && !Reflect.has(rule, "validator"), ); if (requiredRuleIndex !== -1) { @@ -193,13 +193,13 @@ rule.required = false; } if (component) { - if (!Reflect.has(rule, 'type')) { - rule.type = component === 'InputNumber' ? 'number' : 'string'; + if (!Reflect.has(rule, "type")) { + rule.type = component === "InputNumber" ? "number" : "string"; } rule.message = rule.message || defaultMsg; - if (component.includes('Input') || component.includes('Textarea')) { + if (component.includes("Input") || component.includes("Textarea")) { rule.whitespace = true; } const valueFormat = unref(getComponentsProps)?.valueFormat; @@ -212,7 +212,7 @@ if (characterInx !== -1 && !rules[characterInx].validator) { rules[characterInx].message = rules[characterInx].message || - t('component.form.maxTip', [rules[characterInx].max] as Recordable); + t("component.form.maxTip", [rules[characterInx].max] as Recordable); } return rules; } @@ -222,11 +222,11 @@ renderComponentContent, component, field, - changeEvent = 'change', + changeEvent = "change", valueField, } = props.schema; - const isCheck = component && ['Switch', 'Checkbox'].includes(component); + const isCheck = component && ["Switch", "Checkbox"].includes(component); const eventKey = `on${upperFirst(changeEvent)}`; @@ -254,7 +254,7 @@ const isCreatePlaceholder = !propsData.disabled && autoSetPlaceHolder; // RangePicker place is an array - if (isCreatePlaceholder && component !== 'RangePicker' && component) { + if (isCreatePlaceholder && component !== "RangePicker" && component) { propsData.placeholder = unref(getComponentsProps)?.placeholder || createPlaceholderMessage(component); } @@ -262,7 +262,7 @@ propsData.formValues = unref(getValues); const bindValue: Recordable = { - [valueField || (isCheck ? 'checked' : 'value')]: props.formModel[field], + [valueField || (isCheck ? "checked" : "value")]: props.formModel[field], }; const compAttr: Recordable = { @@ -310,7 +310,7 @@ const { labelCol, wrapperCol } = unref(itemLabelWidthProp); const { colon } = props.formProps; - if (component === 'Divider') { + if (component === "Divider") { return ( <Col span={24}> <Divider {...unref(getComponentsProps)}>{renderLabelHelpMessage()}</Divider> @@ -332,7 +332,7 @@ <Form.Item name={field} colon={colon} - class={{ 'suffix-item': showSuffix }} + class={{ "suffix-item": showSuffix }} {...(itemProps as Recordable)} label={renderLabelHelpMessage()} rules={handleRules()} diff --git a/src/components/Form/src/components/RadioButtonGroup.vue b/src/components/Form/src/components/RadioButtonGroup.vue index c2c7b22..94bc72d 100644 --- a/src/components/Form/src/components/RadioButtonGroup.vue +++ b/src/components/Form/src/components/RadioButtonGroup.vue @@ -11,17 +11,17 @@ </RadioGroup> </template> <script lang="ts"> - import { defineComponent, PropType, computed } from 'vue'; - import { Radio } from 'ant-design-vue'; - import { isString } from '/@/utils/is'; - import { useRuleFormItem } from '/@/hooks/component/useFormItem'; - import { useAttrs } from '/@/hooks/core/useAttrs'; + import { defineComponent, PropType, computed } from "vue"; + import { Radio } from "ant-design-vue"; + import { isString } from "/@/utils/is"; + import { useRuleFormItem } from "/@/hooks/component/useFormItem"; + import { useAttrs } from "/@/hooks/core/useAttrs"; type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean }; type RadioItem = string | OptionsItem; export default defineComponent({ - name: 'RadioButtonGroup', + name: "RadioButtonGroup", components: { RadioGroup: Radio.Group, RadioButton: Radio.Button, diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts index 5a4595a..7d62dca 100644 --- a/src/components/Form/src/helper.ts +++ b/src/components/Form/src/helper.ts @@ -1,8 +1,8 @@ -import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; -import type { ComponentType } from './types/index'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { dateUtil } from '/@/utils/dateUtil'; -import { isNumber, isObject } from '/@/utils/is'; +import type { ValidationRule } from "ant-design-vue/lib/form/Form"; +import type { ComponentType } from "./types/index"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { dateUtil } from "/@/utils/dateUtil"; +import { isNumber, isObject } from "/@/utils/is"; const { t } = useI18n(); @@ -10,29 +10,29 @@ const { t } = useI18n(); * @description: 生成placeholder */ export function createPlaceholderMessage(component: ComponentType) { - if (component.includes('Input') || component.includes('Complete')) { - return t('common.inputText'); + if (component.includes("Input") || component.includes("Complete")) { + return t("common.inputText"); } - if (component.includes('Picker')) { - return t('common.chooseText'); + if (component.includes("Picker")) { + return t("common.chooseText"); } if ( - component.includes('Select') || - component.includes('Cascader') || - component.includes('Checkbox') || - component.includes('Radio') || - component.includes('Switch') + component.includes("Select") || + component.includes("Cascader") || + component.includes("Checkbox") || + component.includes("Radio") || + component.includes("Switch") ) { // return `请选择${label}`; - return t('common.chooseText'); + return t("common.chooseText"); } - return ''; + return ""; } -const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker']; +const DATE_TYPE = ["DatePicker", "MonthPicker", "WeekPicker", "TimePicker"]; function genType() { - return [...DATE_TYPE, 'RangePicker']; + return [...DATE_TYPE, "RangePicker"]; } export function setComponentRuleType( @@ -40,12 +40,12 @@ export function setComponentRuleType( component: ComponentType, valueFormat: string, ) { - if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component)) { - rule.type = valueFormat ? 'string' : 'object'; - } else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component)) { - rule.type = 'array'; - } else if (['InputNumber'].includes(component)) { - rule.type = 'number'; + if (["DatePicker", "MonthPicker", "WeekPicker", "TimePicker"].includes(component)) { + rule.type = valueFormat ? "string" : "object"; + } else if (["RangePicker", "Upload", "CheckboxGroup", "TimePicker"].includes(component)) { + rule.type = "array"; + } else if (["InputNumber"].includes(component)) { + rule.type = "number"; } } @@ -60,7 +60,7 @@ export function processDateValue(attr: Recordable, component: string) { export function handleInputNumberValue(component?: ComponentType, val?: any) { if (!component) return val; - if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) { + if (["Input", "InputPassword", "InputSearch", "InputTextArea"].includes(component)) { return val && isNumber(val) ? `${val}` : val; } return val; diff --git a/src/components/Form/src/hooks/useAdvanced.ts b/src/components/Form/src/hooks/useAdvanced.ts index 5c9603f..2903363 100644 --- a/src/components/Form/src/hooks/useAdvanced.ts +++ b/src/components/Form/src/hooks/useAdvanced.ts @@ -1,11 +1,11 @@ -import type { ColEx } from '../types'; -import type { AdvanceState } from '../types/hooks'; -import type { ComputedRef, Ref } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; -import { computed, unref, watch } from 'vue'; -import { isBoolean, isFunction, isNumber, isObject } from '/@/utils/is'; -import { useBreakpoint } from '/@/hooks/event/useBreakpoint'; -import { useDebounceFn } from '@vueuse/core'; +import type { ColEx } from "../types"; +import type { AdvanceState } from "../types/hooks"; +import type { ComputedRef, Ref } from "vue"; +import type { FormProps, FormSchema } from "../types/form"; +import { computed, unref, watch } from "vue"; +import { isBoolean, isFunction, isNumber, isObject } from "/@/utils/is"; +import { useBreakpoint } from "/@/hooks/event/useBreakpoint"; +import { useDebounceFn } from "@vueuse/core"; const BASIC_COL_LEN = 24; @@ -154,7 +154,7 @@ export default function ({ getAdvanced(unref(getProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true); - emit('advanced-change'); + emit("advanced-change"); } function handleToggleAdvanced() { diff --git a/src/components/Form/src/hooks/useAutoFocus.ts b/src/components/Form/src/hooks/useAutoFocus.ts index e24dd6b..5192c12 100644 --- a/src/components/Form/src/hooks/useAutoFocus.ts +++ b/src/components/Form/src/hooks/useAutoFocus.ts @@ -1,7 +1,7 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { FormSchema, FormActionType, FormProps } from '../types/form'; +import type { ComputedRef, Ref } from "vue"; +import type { FormSchema, FormActionType, FormProps } from "../types/form"; -import { unref, nextTick, watchEffect } from 'vue'; +import { unref, nextTick, watchEffect } from "vue"; interface UseAutoFocusContext { getSchema: ComputedRef<FormSchema[]>; @@ -29,11 +29,11 @@ export async function useAutoFocus({ const firstItem = schemas[0]; // Only open when the first form item is input type - if (!firstItem.component.includes('Input')) { + if (!firstItem.component.includes("Input")) { return; } - const inputEl = el.querySelector('.ant-row:first-child input') as Nullable<HTMLInputElement>; + const inputEl = el.querySelector(".ant-row:first-child input") as Nullable<HTMLInputElement>; if (!inputEl) return; inputEl?.focus(); }); diff --git a/src/components/Form/src/hooks/useComponentRegister.ts b/src/components/Form/src/hooks/useComponentRegister.ts index 218aaa9..9fce8c2 100644 --- a/src/components/Form/src/hooks/useComponentRegister.ts +++ b/src/components/Form/src/hooks/useComponentRegister.ts @@ -1,7 +1,7 @@ -import type { ComponentType } from '../types/index'; -import { tryOnUnmounted } from '@vueuse/core'; -import { add, del } from '../componentMap'; -import type { Component } from 'vue'; +import type { ComponentType } from "../types/index"; +import { tryOnUnmounted } from "@vueuse/core"; +import { add, del } from "../componentMap"; +import type { Component } from "vue"; export function useComponentRegister(compName: ComponentType, comp: Component) { add(compName, comp); diff --git a/src/components/Form/src/hooks/useForm.ts b/src/components/Form/src/hooks/useForm.ts index d026d69..07dc6ff 100644 --- a/src/components/Form/src/hooks/useForm.ts +++ b/src/components/Form/src/hooks/useForm.ts @@ -1,10 +1,10 @@ -import type { FormProps, FormActionType, UseFormReturnType, FormSchema } from '../types/form'; -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import type { DynamicProps } from '/#/utils'; -import { ref, onUnmounted, unref, nextTick, watch } from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { error } from '/@/utils/log'; -import { getDynamicProps } from '/@/utils'; +import type { FormProps, FormActionType, UseFormReturnType, FormSchema } from "../types/form"; +import type { NamePath } from "ant-design-vue/lib/form/interface"; +import type { DynamicProps } from "/#/utils"; +import { ref, onUnmounted, unref, nextTick, watch } from "vue"; +import { isProdMode } from "/@/utils/env"; +import { error } from "/@/utils/log"; +import { getDynamicProps } from "/@/utils"; export declare type ValidateFields = (nameList?: NamePath[]) => Promise<Recordable>; @@ -18,7 +18,7 @@ export function useForm(props?: Props): UseFormReturnType { const form = unref(formRef); if (!form) { error( - 'The form instance has not been obtained, please make sure that the form has been rendered when performing the form operation!', + "The form instance has not been obtained, please make sure that the form has been rendered when performing the form operation!", ); } await nextTick(); diff --git a/src/components/Form/src/hooks/useFormContext.ts b/src/components/Form/src/hooks/useFormContext.ts index 01dfadd..4758cfa 100644 --- a/src/components/Form/src/hooks/useFormContext.ts +++ b/src/components/Form/src/hooks/useFormContext.ts @@ -1,5 +1,5 @@ -import type { InjectionKey } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import type { InjectionKey } from "vue"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface FormContextProps { resetAction: () => Promise<void>; diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts index efb3b41..d89dfee 100644 --- a/src/components/Form/src/hooks/useFormEvents.ts +++ b/src/components/Form/src/hooks/useFormEvents.ts @@ -1,13 +1,13 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { FormProps, FormSchema, FormActionType } from '../types/form'; -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import { unref, toRaw } from 'vue'; -import { isArray, isFunction, isObject, isString } from '/@/utils/is'; -import { deepMerge } from '/@/utils'; -import { dateItemType, handleInputNumberValue } from '../helper'; -import { dateUtil } from '/@/utils/dateUtil'; -import { cloneDeep, uniqBy } from 'lodash-es'; -import { error } from '/@/utils/log'; +import type { ComputedRef, Ref } from "vue"; +import type { FormProps, FormSchema, FormActionType } from "../types/form"; +import type { NamePath } from "ant-design-vue/lib/form/interface"; +import { unref, toRaw } from "vue"; +import { isArray, isFunction, isObject, isString } from "/@/utils/is"; +import { deepMerge } from "/@/utils"; +import { dateItemType, handleInputNumberValue } from "../helper"; +import { dateUtil } from "/@/utils/dateUtil"; +import { cloneDeep, uniqBy } from "lodash-es"; +import { error } from "/@/utils/log"; interface UseFormActionContext { emit: EmitType; @@ -40,7 +40,7 @@ export function useFormEvents({ formModel[key] = defaultValueRef.value[key]; }); clearValidate(); - emit('reset', toRaw(formModel)); + emit("reset", toRaw(formModel)); submitOnReset && handleSubmit(); } @@ -73,7 +73,7 @@ export function useFormEvents({ } else { const { componentProps } = schema || {}; let _props = componentProps as any; - if (typeof componentProps === 'function') { + if (typeof componentProps === "function") { _props = _props({ formModel }); } formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null; @@ -150,12 +150,12 @@ export function useFormEvents({ } const hasField = updateData.every( - (item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field), + (item) => item.component === "Divider" || (Reflect.has(item, "field") && item.field), ); if (!hasField) { error( - 'All children of the form Schema array that need to be updated must contain the `field` field', + "All children of the form Schema array that need to be updated must contain the `field` field", ); return; } @@ -172,12 +172,12 @@ export function useFormEvents({ } const hasField = updateData.every( - (item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field), + (item) => item.component === "Divider" || (Reflect.has(item, "field") && item.field), ); if (!hasField) { error( - 'All children of the form Schema array that need to be updated must contain the `field` field', + "All children of the form Schema array that need to be updated must contain the `field` field", ); return; } @@ -192,7 +192,7 @@ export function useFormEvents({ } }); }); - schemaRef.value = uniqBy(schema, 'field'); + schemaRef.value = uniqBy(schema, "field"); } function getFieldsValue(): Recordable { @@ -241,7 +241,7 @@ export function useFormEvents({ try { const values = await validate(); const res = handleFormValues(values); - emit('submit', res); + emit("submit", res); } catch (error: any) { throw new Error(error); } diff --git a/src/components/Form/src/hooks/useFormValues.ts b/src/components/Form/src/hooks/useFormValues.ts index c5f2a07..e7372d5 100644 --- a/src/components/Form/src/hooks/useFormValues.ts +++ b/src/components/Form/src/hooks/useFormValues.ts @@ -1,9 +1,9 @@ -import { isArray, isFunction, isObject, isString, isNullOrUnDef } from '/@/utils/is'; -import { dateUtil } from '/@/utils/dateUtil'; -import { unref } from 'vue'; -import type { Ref, ComputedRef } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; -import { set } from 'lodash-es'; +import { isArray, isFunction, isObject, isString, isNullOrUnDef } from "/@/utils/is"; +import { dateUtil } from "/@/utils/dateUtil"; +import { unref } from "vue"; +import type { Ref, ComputedRef } from "vue"; +import type { FormProps, FormSchema } from "../types/form"; +import { set } from "lodash-es"; interface UseFormValuesContext { defaultValueRef: Ref<any>; @@ -55,7 +55,7 @@ export function useFormValues({ return values; } - for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) { + for (const [field, [startTimeKey, endTimeKey], format = "YYYY-MM-DD"] of fieldMapToTime) { if (!field || !startTimeKey || !endTimeKey || !values[field]) { continue; } diff --git a/src/components/Form/src/hooks/useLabelWidth.ts b/src/components/Form/src/hooks/useLabelWidth.ts index fb96ee3..425ea8b 100644 --- a/src/components/Form/src/hooks/useLabelWidth.ts +++ b/src/components/Form/src/hooks/useLabelWidth.ts @@ -1,8 +1,8 @@ -import type { Ref } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; +import type { Ref } from "vue"; +import type { FormProps, FormSchema } from "../types/form"; -import { computed, unref } from 'vue'; -import { isNumber } from '/@/utils/is'; +import { computed, unref } from "vue"; +import { isNumber } from "/@/utils/is"; export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<FormProps>) { return computed(() => { @@ -19,7 +19,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref< // If labelWidth is set globally, all items setting if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) { labelCol.style = { - textAlign: 'left', + textAlign: "left", }; return { labelCol, wrapperCol }; } diff --git a/src/components/Form/src/props.ts b/src/components/Form/src/props.ts index 36237f4..29d925b 100644 --- a/src/components/Form/src/props.ts +++ b/src/components/Form/src/props.ts @@ -1,10 +1,10 @@ -import type { FieldMapToTime, FormSchema } from './types/form'; -import type { CSSProperties, PropType } from 'vue'; -import type { ColEx } from './types'; -import type { TableActionType } from '/@/components/Table'; -import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import type { RowProps } from 'ant-design-vue/lib/grid/Row'; -import { propTypes } from '/@/utils/propTypes'; +import type { FieldMapToTime, FormSchema } from "./types/form"; +import type { CSSProperties, PropType } from "vue"; +import type { ColEx } from "./types"; +import type { TableActionType } from "/@/components/Table"; +import type { ButtonProps } from "ant-design-vue/es/button/buttonTypes"; +import type { RowProps } from "ant-design-vue/lib/grid/Row"; +import { propTypes } from "/@/utils/propTypes"; export const basicProps = { model: { @@ -40,7 +40,7 @@ export const basicProps = { // 在INPUT组件上单击回车时,是否自动提交 autoSubmitOnEnter: propTypes.bool.def(false), submitOnReset: propTypes.bool, - size: propTypes.oneOf(['default', 'small', 'large']).def('default'), + size: propTypes.oneOf(["default", "small", "large"]).def("default"), // 禁用表单 disabled: propTypes.bool, emptySpan: { @@ -53,7 +53,7 @@ export const basicProps = { transformDateFunc: { type: Function as PropType<Fn>, default: (date: any) => { - return date._isAMomentObject ? date?.format('YYYY-MM-DD HH:mm:ss') : date; + return date._isAMomentObject ? date?.format("YYYY-MM-DD HH:mm:ss") : date; }, }, rulesMessageJoinLabel: propTypes.bool.def(true), @@ -87,7 +87,7 @@ export const basicProps = { labelCol: Object as PropType<Partial<ColEx>>, - layout: propTypes.oneOf(['horizontal', 'vertical', 'inline']).def('horizontal'), + layout: propTypes.oneOf(["horizontal", "vertical", "inline"]).def("horizontal"), tableAction: { type: Object as PropType<TableActionType>, }, diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts index ac85a74..af1852f 100644 --- a/src/components/Form/src/types/form.ts +++ b/src/components/Form/src/types/form.ts @@ -1,16 +1,16 @@ -import type { NamePath, RuleObject } from 'ant-design-vue/lib/form/interface'; -import type { VNode } from 'vue'; -import type { ButtonProps as AntdButtonProps } from '/@/components/Button'; -import type { FormItem } from './formItem'; -import type { ColEx, ComponentType } from './index'; -import type { TableActionType } from '/@/components/Table/src/types/table'; -import type { CSSProperties } from 'vue'; -import type { RowProps } from 'ant-design-vue/lib/grid/Row'; +import type { NamePath, RuleObject } from "ant-design-vue/lib/form/interface"; +import type { VNode } from "vue"; +import type { ButtonProps as AntdButtonProps } from "/@/components/Button"; +import type { FormItem } from "./formItem"; +import type { ColEx, ComponentType } from "./index"; +import type { TableActionType } from "/@/components/Table/src/types/table"; +import type { CSSProperties } from "vue"; +import type { RowProps } from "ant-design-vue/lib/grid/Row"; export type FieldMapToTime = [string, [string, string], string?][]; export type Rule = RuleObject & { - trigger?: 'blur' | 'change' | ['change', 'blur']; + trigger?: "blur" | "change" | ["change", "blur"]; }; export interface RenderCallbackParams { @@ -49,13 +49,13 @@ export type RegisterFn = (formInstance: FormActionType) => void; export type UseFormReturnType = [RegisterFn, FormActionType]; export interface FormProps { - layout?: 'vertical' | 'inline' | 'horizontal'; + layout?: "vertical" | "inline" | "horizontal"; // Form value model?: Recordable; // The width of all items in the entire form labelWidth?: number | string; //alignment - labelAlign?: 'left' | 'right'; + labelAlign?: "left" | "right"; //Row configuration for the entire form rowProps?: RowProps; // Submit form on reset @@ -80,7 +80,7 @@ export interface FormProps { // Blank line span emptySpan?: number | Partial<ColEx>; // Internal component size of the form - size?: 'default' | 'small' | 'large'; + size?: "default" | "small" | "large"; // Whether to disable disabled?: boolean; // Time interval fields are mapped into multiple diff --git a/src/components/Form/src/types/formItem.ts b/src/components/Form/src/types/formItem.ts index 77b238a..d0e4de6 100644 --- a/src/components/Form/src/types/formItem.ts +++ b/src/components/Form/src/types/formItem.ts @@ -1,6 +1,6 @@ -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import type { ColProps } from 'ant-design-vue/lib/grid/Col'; -import type { HTMLAttributes, VNodeChild } from 'vue'; +import type { NamePath } from "ant-design-vue/lib/form/interface"; +import type { ColProps } from "ant-design-vue/lib/grid/Col"; +import type { HTMLAttributes, VNodeChild } from "vue"; export interface FormItem { /** @@ -52,7 +52,7 @@ export interface FormItem { * The validation status. If not provided, it will be generated by validation rule. options: 'success' 'warning' 'error' 'validating' * @type string */ - validateStatus?: '' | 'success' | 'warning' | 'error' | 'validating'; + validateStatus?: "" | "success" | "warning" | "error" | "validating"; /** * The layout for input controls, same as labelCol @@ -66,7 +66,7 @@ export interface FormItem { /** * text align of label */ - labelAlign?: 'left' | 'right'; + labelAlign?: "left" | "right"; /** * a key of model. In the setting of validate and resetFields method, the attribute is required */ diff --git a/src/components/Form/src/types/index.ts b/src/components/Form/src/types/index.ts index a3e968e..dc43641 100644 --- a/src/components/Form/src/types/index.ts +++ b/src/components/Form/src/types/index.ts @@ -81,35 +81,35 @@ export interface ColEx { } export type ComponentType = - | 'Input' - | 'InputGroup' - | 'InputPassword' - | 'InputSearch' - | 'InputTextArea' - | 'InputNumber' - | 'InputCountDown' - | 'Select' - | 'ApiSelect' - | 'TreeSelect' - | 'ApiTreeSelect' - | 'ApiRadioGroup' - | 'RadioButtonGroup' - | 'RadioGroup' - | 'Checkbox' - | 'CheckboxGroup' - | 'AutoComplete' - | 'ApiCascader' - | 'Cascader' - | 'DatePicker' - | 'MonthPicker' - | 'RangePicker' - | 'WeekPicker' - | 'TimePicker' - | 'Switch' - | 'StrengthMeter' - | 'Upload' - | 'IconPicker' - | 'Render' - | 'Slider' - | 'Rate' - | 'Divider'; + | "Input" + | "InputGroup" + | "InputPassword" + | "InputSearch" + | "InputTextArea" + | "InputNumber" + | "InputCountDown" + | "Select" + | "ApiSelect" + | "TreeSelect" + | "ApiTreeSelect" + | "ApiRadioGroup" + | "RadioButtonGroup" + | "RadioGroup" + | "Checkbox" + | "CheckboxGroup" + | "AutoComplete" + | "ApiCascader" + | "Cascader" + | "DatePicker" + | "MonthPicker" + | "RangePicker" + | "WeekPicker" + | "TimePicker" + | "Switch" + | "StrengthMeter" + | "Upload" + | "IconPicker" + | "Render" + | "Slider" + | "Rate" + | "Divider"; diff --git a/src/components/Icon/data/icons.data.ts b/src/components/Icon/data/icons.data.ts index e5fe3e2..b23c817 100644 --- a/src/components/Icon/data/icons.data.ts +++ b/src/components/Icon/data/icons.data.ts @@ -1,793 +1,793 @@ export default { - prefix: 'ant-design', + prefix: "ant-design", icons: [ - 'account-book-filled', - 'account-book-outlined', - 'account-book-twotone', - 'aim-outlined', - 'alert-filled', - 'alert-outlined', - 'alert-twotone', - 'alibaba-outlined', - 'align-center-outlined', - 'align-left-outlined', - 'align-right-outlined', - 'alipay-circle-filled', - 'alipay-circle-outlined', - 'alipay-outlined', - 'alipay-square-filled', - 'aliwangwang-filled', - 'aliwangwang-outlined', - 'aliyun-outlined', - 'amazon-circle-filled', - 'amazon-outlined', - 'amazon-square-filled', - 'android-filled', - 'android-outlined', - 'ant-cloud-outlined', - 'ant-design-outlined', - 'apartment-outlined', - 'api-filled', - 'api-outlined', - 'api-twotone', - 'apple-filled', - 'apple-outlined', - 'appstore-add-outlined', - 'appstore-filled', - 'appstore-outlined', - 'appstore-twotone', - 'area-chart-outlined', - 'arrow-down-outlined', - 'arrow-left-outlined', - 'arrow-right-outlined', - 'arrow-up-outlined', - 'arrows-alt-outlined', - 'audio-filled', - 'audio-muted-outlined', - 'audio-outlined', - 'audio-twotone', - 'audit-outlined', - 'backward-filled', - 'backward-outlined', - 'bank-filled', - 'bank-outlined', - 'bank-twotone', - 'bar-chart-outlined', - 'barcode-outlined', - 'bars-outlined', - 'behance-circle-filled', - 'behance-outlined', - 'behance-square-filled', - 'behance-square-outlined', - 'bell-filled', - 'bell-outlined', - 'bell-twotone', - 'bg-colors-outlined', - 'block-outlined', - 'bold-outlined', - 'book-filled', - 'book-outlined', - 'book-twotone', - 'border-bottom-outlined', - 'border-horizontal-outlined', - 'border-inner-outlined', - 'border-left-outlined', - 'border-outer-outlined', - 'border-outlined', - 'border-right-outlined', - 'border-top-outlined', - 'border-verticle-outlined', - 'borderless-table-outlined', - 'box-plot-filled', - 'box-plot-outlined', - 'box-plot-twotone', - 'branches-outlined', - 'bug-filled', - 'bug-outlined', - 'bug-twotone', - 'build-filled', - 'build-outlined', - 'build-twotone', - 'bulb-filled', - 'bulb-outlined', - 'bulb-twotone', - 'calculator-filled', - 'calculator-outlined', - 'calculator-twotone', - 'calendar-filled', - 'calendar-outlined', - 'calendar-twotone', - 'camera-filled', - 'camera-outlined', - 'camera-twotone', - 'car-filled', - 'car-outlined', - 'car-twotone', - 'caret-down-filled', - 'caret-down-outlined', - 'caret-left-filled', - 'caret-left-outlined', - 'caret-right-filled', - 'caret-right-outlined', - 'caret-up-filled', - 'caret-up-outlined', - 'carry-out-filled', - 'carry-out-outlined', - 'carry-out-twotone', - 'check-circle-filled', - 'check-circle-outlined', - 'check-circle-twotone', - 'check-outlined', - 'check-square-filled', - 'check-square-outlined', - 'check-square-twotone', - 'chrome-filled', - 'chrome-outlined', - 'ci-circle-filled', - 'ci-circle-outlined', - 'ci-circle-twotone', - 'ci-outlined', - 'ci-twotone', - 'clear-outlined', - 'clock-circle-filled', - 'clock-circle-outlined', - 'clock-circle-twotone', - 'close-circle-filled', - 'close-circle-outlined', - 'close-circle-twotone', - 'close-outlined', - 'close-square-filled', - 'close-square-outlined', - 'close-square-twotone', - 'cloud-download-outlined', - 'cloud-filled', - 'cloud-outlined', - 'cloud-server-outlined', - 'cloud-sync-outlined', - 'cloud-twotone', - 'cloud-upload-outlined', - 'cluster-outlined', - 'code-filled', - 'code-outlined', - 'code-sandbox-circle-filled', - 'code-sandbox-outlined', - 'code-sandbox-square-filled', - 'code-twotone', - 'codepen-circle-filled', - 'codepen-circle-outlined', - 'codepen-outlined', - 'codepen-square-filled', - 'coffee-outlined', - 'column-height-outlined', - 'column-width-outlined', - 'comment-outlined', - 'compass-filled', - 'compass-outlined', - 'compass-twotone', - 'compress-outlined', - 'console-sql-outlined', - 'contacts-filled', - 'contacts-outlined', - 'contacts-twotone', - 'container-filled', - 'container-outlined', - 'container-twotone', - 'control-filled', - 'control-outlined', - 'control-twotone', - 'copy-filled', - 'copy-outlined', - 'copy-twotone', - 'copyright-circle-filled', - 'copyright-circle-outlined', - 'copyright-circle-twotone', - 'copyright-outlined', - 'copyright-twotone', - 'credit-card-filled', - 'credit-card-outlined', - 'credit-card-twotone', - 'crown-filled', - 'crown-outlined', - 'crown-twotone', - 'customer-service-filled', - 'customer-service-outlined', - 'customer-service-twotone', - 'dash-outlined', - 'dashboard-filled', - 'dashboard-outlined', - 'dashboard-twotone', - 'database-filled', - 'database-outlined', - 'database-twotone', - 'delete-column-outlined', - 'delete-filled', - 'delete-outlined', - 'delete-row-outlined', - 'delete-twotone', - 'delivered-procedure-outlined', - 'deployment-unit-outlined', - 'desktop-outlined', - 'diff-filled', - 'diff-outlined', - 'diff-twotone', - 'dingding-outlined', - 'dingtalk-circle-filled', - 'dingtalk-outlined', - 'dingtalk-square-filled', - 'disconnect-outlined', - 'dislike-filled', - 'dislike-outlined', - 'dislike-twotone', - 'dollar-circle-filled', - 'dollar-circle-outlined', - 'dollar-circle-twotone', - 'dollar-outlined', - 'dollar-twotone', - 'dot-chart-outlined', - 'double-left-outlined', - 'double-right-outlined', - 'down-circle-filled', - 'down-circle-outlined', - 'down-circle-twotone', - 'down-outlined', - 'down-square-filled', - 'down-square-outlined', - 'down-square-twotone', - 'download-outlined', - 'drag-outlined', - 'dribbble-circle-filled', - 'dribbble-outlined', - 'dribbble-square-filled', - 'dribbble-square-outlined', - 'dropbox-circle-filled', - 'dropbox-outlined', - 'dropbox-square-filled', - 'edit-filled', - 'edit-outlined', - 'edit-twotone', - 'ellipsis-outlined', - 'enter-outlined', - 'environment-filled', - 'environment-outlined', - 'environment-twotone', - 'euro-circle-filled', - 'euro-circle-outlined', - 'euro-circle-twotone', - 'euro-outlined', - 'euro-twotone', - 'exception-outlined', - 'exclamation-circle-filled', - 'exclamation-circle-outlined', - 'exclamation-circle-twotone', - 'exclamation-outlined', - 'expand-alt-outlined', - 'expand-outlined', - 'experiment-filled', - 'experiment-outlined', - 'experiment-twotone', - 'export-outlined', - 'eye-filled', - 'eye-invisible-filled', - 'eye-invisible-outlined', - 'eye-invisible-twotone', - 'eye-outlined', - 'eye-twotone', - 'facebook-filled', - 'facebook-outlined', - 'fall-outlined', - 'fast-backward-filled', - 'fast-backward-outlined', - 'fast-forward-filled', - 'fast-forward-outlined', - 'field-binary-outlined', - 'field-number-outlined', - 'field-string-outlined', - 'field-time-outlined', - 'file-add-filled', - 'file-add-outlined', - 'file-add-twotone', - 'file-done-outlined', - 'file-excel-filled', - 'file-excel-outlined', - 'file-excel-twotone', - 'file-exclamation-filled', - 'file-exclamation-outlined', - 'file-exclamation-twotone', - 'file-filled', - 'file-gif-outlined', - 'file-image-filled', - 'file-image-outlined', - 'file-image-twotone', - 'file-jpg-outlined', - 'file-markdown-filled', - 'file-markdown-outlined', - 'file-markdown-twotone', - 'file-outlined', - 'file-pdf-filled', - 'file-pdf-outlined', - 'file-pdf-twotone', - 'file-ppt-filled', - 'file-ppt-outlined', - 'file-ppt-twotone', - 'file-protect-outlined', - 'file-search-outlined', - 'file-sync-outlined', - 'file-text-filled', - 'file-text-outlined', - 'file-text-twotone', - 'file-twotone', - 'file-unknown-filled', - 'file-unknown-outlined', - 'file-unknown-twotone', - 'file-word-filled', - 'file-word-outlined', - 'file-word-twotone', - 'file-zip-filled', - 'file-zip-outlined', - 'file-zip-twotone', - 'filter-filled', - 'filter-outlined', - 'filter-twotone', - 'fire-filled', - 'fire-outlined', - 'fire-twotone', - 'flag-filled', - 'flag-outlined', - 'flag-twotone', - 'folder-add-filled', - 'folder-add-outlined', - 'folder-add-twotone', - 'folder-filled', - 'folder-open-filled', - 'folder-open-outlined', - 'folder-open-twotone', - 'folder-outlined', - 'folder-twotone', - 'folder-view-outlined', - 'font-colors-outlined', - 'font-size-outlined', - 'fork-outlined', - 'form-outlined', - 'format-painter-filled', - 'format-painter-outlined', - 'forward-filled', - 'forward-outlined', - 'frown-filled', - 'frown-outlined', - 'frown-twotone', - 'fullscreen-exit-outlined', - 'fullscreen-outlined', - 'function-outlined', - 'fund-filled', - 'fund-outlined', - 'fund-projection-screen-outlined', - 'fund-twotone', - 'fund-view-outlined', - 'funnel-plot-filled', - 'funnel-plot-outlined', - 'funnel-plot-twotone', - 'gateway-outlined', - 'gif-outlined', - 'gift-filled', - 'gift-outlined', - 'gift-twotone', - 'github-filled', - 'github-outlined', - 'gitlab-filled', - 'gitlab-outlined', - 'global-outlined', - 'gold-filled', - 'gold-outlined', - 'gold-twotone', - 'golden-filled', - 'google-circle-filled', - 'google-outlined', - 'google-plus-circle-filled', - 'google-plus-outlined', - 'google-plus-square-filled', - 'google-square-filled', - 'group-outlined', - 'hdd-filled', - 'hdd-outlined', - 'hdd-twotone', - 'heart-filled', - 'heart-outlined', - 'heart-twotone', - 'heat-map-outlined', - 'highlight-filled', - 'highlight-outlined', - 'highlight-twotone', - 'history-outlined', - 'home-filled', - 'home-outlined', - 'home-twotone', - 'hourglass-filled', - 'hourglass-outlined', - 'hourglass-twotone', - 'html5-filled', - 'html5-outlined', - 'html5-twotone', - 'idcard-filled', - 'idcard-outlined', - 'idcard-twotone', - 'ie-circle-filled', - 'ie-outlined', - 'ie-square-filled', - 'import-outlined', - 'inbox-outlined', - 'info-circle-filled', - 'info-circle-outlined', - 'info-circle-twotone', - 'info-outlined', - 'insert-row-above-outlined', - 'insert-row-below-outlined', - 'insert-row-left-outlined', - 'insert-row-right-outlined', - 'instagram-filled', - 'instagram-outlined', - 'insurance-filled', - 'insurance-outlined', - 'insurance-twotone', - 'interaction-filled', - 'interaction-outlined', - 'interaction-twotone', - 'issues-close-outlined', - 'italic-outlined', - 'key-outlined', - 'laptop-outlined', - 'layout-filled', - 'layout-outlined', - 'layout-twotone', - 'left-circle-filled', - 'left-circle-outlined', - 'left-circle-twotone', - 'left-outlined', - 'left-square-filled', - 'left-square-outlined', - 'left-square-twotone', - 'like-filled', - 'like-outlined', - 'like-twotone', - 'line-chart-outlined', - 'line-height-outlined', - 'line-outlined', - 'link-outlined', - 'linkedin-filled', - 'linkedin-outlined', - 'loading-3-quarters-outlined', - 'loading-outlined', - 'lock-filled', - 'lock-outlined', - 'lock-twotone', - 'login-outlined', - 'logout-outlined', - 'mac-command-filled', - 'mac-command-outlined', - 'mail-filled', - 'mail-outlined', - 'mail-twotone', - 'man-outlined', - 'medicine-box-filled', - 'medicine-box-outlined', - 'medicine-box-twotone', - 'medium-circle-filled', - 'medium-outlined', - 'medium-square-filled', - 'medium-workmark-outlined', - 'meh-filled', - 'meh-outlined', - 'meh-twotone', - 'menu-fold-outlined', - 'menu-outlined', - 'menu-unfold-outlined', - 'merge-cells-outlined', - 'message-filled', - 'message-outlined', - 'message-twotone', - 'minus-circle-filled', - 'minus-circle-outlined', - 'minus-circle-twotone', - 'minus-outlined', - 'minus-square-filled', - 'minus-square-outlined', - 'minus-square-twotone', - 'mobile-filled', - 'mobile-outlined', - 'mobile-twotone', - 'money-collect-filled', - 'money-collect-outlined', - 'money-collect-twotone', - 'monitor-outlined', - 'more-outlined', - 'node-collapse-outlined', - 'node-expand-outlined', - 'node-index-outlined', - 'notification-filled', - 'notification-outlined', - 'notification-twotone', - 'number-outlined', - 'one-to-one-outlined', - 'ordered-list-outlined', - 'paper-clip-outlined', - 'partition-outlined', - 'pause-circle-filled', - 'pause-circle-outlined', - 'pause-circle-twotone', - 'pause-outlined', - 'pay-circle-filled', - 'pay-circle-outlined', - 'percentage-outlined', - 'phone-filled', - 'phone-outlined', - 'phone-twotone', - 'pic-center-outlined', - 'pic-left-outlined', - 'pic-right-outlined', - 'picture-filled', - 'picture-outlined', - 'picture-twotone', - 'pie-chart-filled', - 'pie-chart-outlined', - 'pie-chart-twotone', - 'play-circle-filled', - 'play-circle-outlined', - 'play-circle-twotone', - 'play-square-filled', - 'play-square-outlined', - 'play-square-twotone', - 'plus-circle-filled', - 'plus-circle-outlined', - 'plus-circle-twotone', - 'plus-outlined', - 'plus-square-filled', - 'plus-square-outlined', - 'plus-square-twotone', - 'pound-circle-filled', - 'pound-circle-outlined', - 'pound-circle-twotone', - 'pound-outlined', - 'poweroff-outlined', - 'printer-filled', - 'printer-outlined', - 'printer-twotone', - 'profile-filled', - 'profile-outlined', - 'profile-twotone', - 'project-filled', - 'project-outlined', - 'project-twotone', - 'property-safety-filled', - 'property-safety-outlined', - 'property-safety-twotone', - 'pull-request-outlined', - 'pushpin-filled', - 'pushpin-outlined', - 'pushpin-twotone', - 'qq-circle-filled', - 'qq-outlined', - 'qq-square-filled', - 'qrcode-outlined', - 'question-circle-filled', - 'question-circle-outlined', - 'question-circle-twotone', - 'question-outlined', - 'radar-chart-outlined', - 'radius-bottomleft-outlined', - 'radius-bottomright-outlined', - 'radius-setting-outlined', - 'radius-upleft-outlined', - 'radius-upright-outlined', - 'read-filled', - 'read-outlined', - 'reconciliation-filled', - 'reconciliation-outlined', - 'reconciliation-twotone', - 'red-envelope-filled', - 'red-envelope-outlined', - 'red-envelope-twotone', - 'reddit-circle-filled', - 'reddit-outlined', - 'reddit-square-filled', - 'redo-outlined', - 'reload-outlined', - 'rest-filled', - 'rest-outlined', - 'rest-twotone', - 'retweet-outlined', - 'right-circle-filled', - 'right-circle-outlined', - 'right-circle-twotone', - 'right-outlined', - 'right-square-filled', - 'right-square-outlined', - 'right-square-twotone', - 'rise-outlined', - 'robot-filled', - 'robot-outlined', - 'rocket-filled', - 'rocket-outlined', - 'rocket-twotone', - 'rollback-outlined', - 'rotate-left-outlined', - 'rotate-right-outlined', - 'safety-certificate-filled', - 'safety-certificate-outlined', - 'safety-certificate-twotone', - 'safety-outlined', - 'save-filled', - 'save-outlined', - 'save-twotone', - 'scan-outlined', - 'schedule-filled', - 'schedule-outlined', - 'schedule-twotone', - 'scissor-outlined', - 'search-outlined', - 'security-scan-filled', - 'security-scan-outlined', - 'security-scan-twotone', - 'select-outlined', - 'send-outlined', - 'setting-filled', - 'setting-outlined', - 'setting-twotone', - 'shake-outlined', - 'share-alt-outlined', - 'shop-filled', - 'shop-outlined', - 'shop-twotone', - 'shopping-cart-outlined', - 'shopping-filled', - 'shopping-outlined', - 'shopping-twotone', - 'shrink-outlined', - 'signal-filled', - 'sisternode-outlined', - 'sketch-circle-filled', - 'sketch-outlined', - 'sketch-square-filled', - 'skin-filled', - 'skin-outlined', - 'skin-twotone', - 'skype-filled', - 'skype-outlined', - 'slack-circle-filled', - 'slack-outlined', - 'slack-square-filled', - 'slack-square-outlined', - 'sliders-filled', - 'sliders-outlined', - 'sliders-twotone', - 'small-dash-outlined', - 'smile-filled', - 'smile-outlined', - 'smile-twotone', - 'snippets-filled', - 'snippets-outlined', - 'snippets-twotone', - 'solution-outlined', - 'sort-ascending-outlined', - 'sort-descending-outlined', - 'sound-filled', - 'sound-outlined', - 'sound-twotone', - 'split-cells-outlined', - 'star-filled', - 'star-outlined', - 'star-twotone', - 'step-backward-filled', - 'step-backward-outlined', - 'step-forward-filled', - 'step-forward-outlined', - 'stock-outlined', - 'stop-filled', - 'stop-outlined', - 'stop-twotone', - 'strikethrough-outlined', - 'subnode-outlined', - 'swap-left-outlined', - 'swap-outlined', - 'swap-right-outlined', - 'switcher-filled', - 'switcher-outlined', - 'switcher-twotone', - 'sync-outlined', - 'table-outlined', - 'tablet-filled', - 'tablet-outlined', - 'tablet-twotone', - 'tag-filled', - 'tag-outlined', - 'tag-twotone', - 'tags-filled', - 'tags-outlined', - 'tags-twotone', - 'taobao-circle-filled', - 'taobao-circle-outlined', - 'taobao-outlined', - 'taobao-square-filled', - 'team-outlined', - 'thunderbolt-filled', - 'thunderbolt-outlined', - 'thunderbolt-twotone', - 'to-top-outlined', - 'tool-filled', - 'tool-outlined', - 'tool-twotone', - 'trademark-circle-filled', - 'trademark-circle-outlined', - 'trademark-circle-twotone', - 'trademark-outlined', - 'transaction-outlined', - 'translation-outlined', - 'trophy-filled', - 'trophy-outlined', - 'trophy-twotone', - 'twitter-circle-filled', - 'twitter-outlined', - 'twitter-square-filled', - 'underline-outlined', - 'undo-outlined', - 'ungroup-outlined', - 'unlock-filled', - 'unlock-outlined', - 'unlock-twotone', - 'unordered-list-outlined', - 'up-circle-filled', - 'up-circle-outlined', - 'up-circle-twotone', - 'up-outlined', - 'up-square-filled', - 'up-square-outlined', - 'up-square-twotone', - 'upload-outlined', - 'usb-filled', - 'usb-outlined', - 'usb-twotone', - 'user-add-outlined', - 'user-delete-outlined', - 'user-outlined', - 'user-switch-outlined', - 'usergroup-add-outlined', - 'usergroup-delete-outlined', - 'verified-outlined', - 'vertical-align-bottom-outlined', - 'vertical-align-middle-outlined', - 'vertical-align-top-outlined', - 'vertical-left-outlined', - 'vertical-right-outlined', - 'video-camera-add-outlined', - 'video-camera-filled', - 'video-camera-outlined', - 'video-camera-twotone', - 'wallet-filled', - 'wallet-outlined', - 'wallet-twotone', - 'warning-filled', - 'warning-outlined', - 'warning-twotone', - 'wechat-filled', - 'wechat-outlined', - 'weibo-circle-filled', - 'weibo-circle-outlined', - 'weibo-outlined', - 'weibo-square-filled', - 'weibo-square-outlined', - 'whats-app-outlined', - 'wifi-outlined', - 'windows-filled', - 'windows-outlined', - 'woman-outlined', - 'yahoo-filled', - 'yahoo-outlined', - 'youtube-filled', - 'youtube-outlined', - 'yuque-filled', - 'yuque-outlined', - 'zhihu-circle-filled', - 'zhihu-outlined', - 'zhihu-square-filled', - 'zoom-in-outlined', - 'zoom-out-outlined', + "account-book-filled", + "account-book-outlined", + "account-book-twotone", + "aim-outlined", + "alert-filled", + "alert-outlined", + "alert-twotone", + "alibaba-outlined", + "align-center-outlined", + "align-left-outlined", + "align-right-outlined", + "alipay-circle-filled", + "alipay-circle-outlined", + "alipay-outlined", + "alipay-square-filled", + "aliwangwang-filled", + "aliwangwang-outlined", + "aliyun-outlined", + "amazon-circle-filled", + "amazon-outlined", + "amazon-square-filled", + "android-filled", + "android-outlined", + "ant-cloud-outlined", + "ant-design-outlined", + "apartment-outlined", + "api-filled", + "api-outlined", + "api-twotone", + "apple-filled", + "apple-outlined", + "appstore-add-outlined", + "appstore-filled", + "appstore-outlined", + "appstore-twotone", + "area-chart-outlined", + "arrow-down-outlined", + "arrow-left-outlined", + "arrow-right-outlined", + "arrow-up-outlined", + "arrows-alt-outlined", + "audio-filled", + "audio-muted-outlined", + "audio-outlined", + "audio-twotone", + "audit-outlined", + "backward-filled", + "backward-outlined", + "bank-filled", + "bank-outlined", + "bank-twotone", + "bar-chart-outlined", + "barcode-outlined", + "bars-outlined", + "behance-circle-filled", + "behance-outlined", + "behance-square-filled", + "behance-square-outlined", + "bell-filled", + "bell-outlined", + "bell-twotone", + "bg-colors-outlined", + "block-outlined", + "bold-outlined", + "book-filled", + "book-outlined", + "book-twotone", + "border-bottom-outlined", + "border-horizontal-outlined", + "border-inner-outlined", + "border-left-outlined", + "border-outer-outlined", + "border-outlined", + "border-right-outlined", + "border-top-outlined", + "border-verticle-outlined", + "borderless-table-outlined", + "box-plot-filled", + "box-plot-outlined", + "box-plot-twotone", + "branches-outlined", + "bug-filled", + "bug-outlined", + "bug-twotone", + "build-filled", + "build-outlined", + "build-twotone", + "bulb-filled", + "bulb-outlined", + "bulb-twotone", + "calculator-filled", + "calculator-outlined", + "calculator-twotone", + "calendar-filled", + "calendar-outlined", + "calendar-twotone", + "camera-filled", + "camera-outlined", + "camera-twotone", + "car-filled", + "car-outlined", + "car-twotone", + "caret-down-filled", + "caret-down-outlined", + "caret-left-filled", + "caret-left-outlined", + "caret-right-filled", + "caret-right-outlined", + "caret-up-filled", + "caret-up-outlined", + "carry-out-filled", + "carry-out-outlined", + "carry-out-twotone", + "check-circle-filled", + "check-circle-outlined", + "check-circle-twotone", + "check-outlined", + "check-square-filled", + "check-square-outlined", + "check-square-twotone", + "chrome-filled", + "chrome-outlined", + "ci-circle-filled", + "ci-circle-outlined", + "ci-circle-twotone", + "ci-outlined", + "ci-twotone", + "clear-outlined", + "clock-circle-filled", + "clock-circle-outlined", + "clock-circle-twotone", + "close-circle-filled", + "close-circle-outlined", + "close-circle-twotone", + "close-outlined", + "close-square-filled", + "close-square-outlined", + "close-square-twotone", + "cloud-download-outlined", + "cloud-filled", + "cloud-outlined", + "cloud-server-outlined", + "cloud-sync-outlined", + "cloud-twotone", + "cloud-upload-outlined", + "cluster-outlined", + "code-filled", + "code-outlined", + "code-sandbox-circle-filled", + "code-sandbox-outlined", + "code-sandbox-square-filled", + "code-twotone", + "codepen-circle-filled", + "codepen-circle-outlined", + "codepen-outlined", + "codepen-square-filled", + "coffee-outlined", + "column-height-outlined", + "column-width-outlined", + "comment-outlined", + "compass-filled", + "compass-outlined", + "compass-twotone", + "compress-outlined", + "console-sql-outlined", + "contacts-filled", + "contacts-outlined", + "contacts-twotone", + "container-filled", + "container-outlined", + "container-twotone", + "control-filled", + "control-outlined", + "control-twotone", + "copy-filled", + "copy-outlined", + "copy-twotone", + "copyright-circle-filled", + "copyright-circle-outlined", + "copyright-circle-twotone", + "copyright-outlined", + "copyright-twotone", + "credit-card-filled", + "credit-card-outlined", + "credit-card-twotone", + "crown-filled", + "crown-outlined", + "crown-twotone", + "customer-service-filled", + "customer-service-outlined", + "customer-service-twotone", + "dash-outlined", + "dashboard-filled", + "dashboard-outlined", + "dashboard-twotone", + "database-filled", + "database-outlined", + "database-twotone", + "delete-column-outlined", + "delete-filled", + "delete-outlined", + "delete-row-outlined", + "delete-twotone", + "delivered-procedure-outlined", + "deployment-unit-outlined", + "desktop-outlined", + "diff-filled", + "diff-outlined", + "diff-twotone", + "dingding-outlined", + "dingtalk-circle-filled", + "dingtalk-outlined", + "dingtalk-square-filled", + "disconnect-outlined", + "dislike-filled", + "dislike-outlined", + "dislike-twotone", + "dollar-circle-filled", + "dollar-circle-outlined", + "dollar-circle-twotone", + "dollar-outlined", + "dollar-twotone", + "dot-chart-outlined", + "double-left-outlined", + "double-right-outlined", + "down-circle-filled", + "down-circle-outlined", + "down-circle-twotone", + "down-outlined", + "down-square-filled", + "down-square-outlined", + "down-square-twotone", + "download-outlined", + "drag-outlined", + "dribbble-circle-filled", + "dribbble-outlined", + "dribbble-square-filled", + "dribbble-square-outlined", + "dropbox-circle-filled", + "dropbox-outlined", + "dropbox-square-filled", + "edit-filled", + "edit-outlined", + "edit-twotone", + "ellipsis-outlined", + "enter-outlined", + "environment-filled", + "environment-outlined", + "environment-twotone", + "euro-circle-filled", + "euro-circle-outlined", + "euro-circle-twotone", + "euro-outlined", + "euro-twotone", + "exception-outlined", + "exclamation-circle-filled", + "exclamation-circle-outlined", + "exclamation-circle-twotone", + "exclamation-outlined", + "expand-alt-outlined", + "expand-outlined", + "experiment-filled", + "experiment-outlined", + "experiment-twotone", + "export-outlined", + "eye-filled", + "eye-invisible-filled", + "eye-invisible-outlined", + "eye-invisible-twotone", + "eye-outlined", + "eye-twotone", + "facebook-filled", + "facebook-outlined", + "fall-outlined", + "fast-backward-filled", + "fast-backward-outlined", + "fast-forward-filled", + "fast-forward-outlined", + "field-binary-outlined", + "field-number-outlined", + "field-string-outlined", + "field-time-outlined", + "file-add-filled", + "file-add-outlined", + "file-add-twotone", + "file-done-outlined", + "file-excel-filled", + "file-excel-outlined", + "file-excel-twotone", + "file-exclamation-filled", + "file-exclamation-outlined", + "file-exclamation-twotone", + "file-filled", + "file-gif-outlined", + "file-image-filled", + "file-image-outlined", + "file-image-twotone", + "file-jpg-outlined", + "file-markdown-filled", + "file-markdown-outlined", + "file-markdown-twotone", + "file-outlined", + "file-pdf-filled", + "file-pdf-outlined", + "file-pdf-twotone", + "file-ppt-filled", + "file-ppt-outlined", + "file-ppt-twotone", + "file-protect-outlined", + "file-search-outlined", + "file-sync-outlined", + "file-text-filled", + "file-text-outlined", + "file-text-twotone", + "file-twotone", + "file-unknown-filled", + "file-unknown-outlined", + "file-unknown-twotone", + "file-word-filled", + "file-word-outlined", + "file-word-twotone", + "file-zip-filled", + "file-zip-outlined", + "file-zip-twotone", + "filter-filled", + "filter-outlined", + "filter-twotone", + "fire-filled", + "fire-outlined", + "fire-twotone", + "flag-filled", + "flag-outlined", + "flag-twotone", + "folder-add-filled", + "folder-add-outlined", + "folder-add-twotone", + "folder-filled", + "folder-open-filled", + "folder-open-outlined", + "folder-open-twotone", + "folder-outlined", + "folder-twotone", + "folder-view-outlined", + "font-colors-outlined", + "font-size-outlined", + "fork-outlined", + "form-outlined", + "format-painter-filled", + "format-painter-outlined", + "forward-filled", + "forward-outlined", + "frown-filled", + "frown-outlined", + "frown-twotone", + "fullscreen-exit-outlined", + "fullscreen-outlined", + "function-outlined", + "fund-filled", + "fund-outlined", + "fund-projection-screen-outlined", + "fund-twotone", + "fund-view-outlined", + "funnel-plot-filled", + "funnel-plot-outlined", + "funnel-plot-twotone", + "gateway-outlined", + "gif-outlined", + "gift-filled", + "gift-outlined", + "gift-twotone", + "github-filled", + "github-outlined", + "gitlab-filled", + "gitlab-outlined", + "global-outlined", + "gold-filled", + "gold-outlined", + "gold-twotone", + "golden-filled", + "google-circle-filled", + "google-outlined", + "google-plus-circle-filled", + "google-plus-outlined", + "google-plus-square-filled", + "google-square-filled", + "group-outlined", + "hdd-filled", + "hdd-outlined", + "hdd-twotone", + "heart-filled", + "heart-outlined", + "heart-twotone", + "heat-map-outlined", + "highlight-filled", + "highlight-outlined", + "highlight-twotone", + "history-outlined", + "home-filled", + "home-outlined", + "home-twotone", + "hourglass-filled", + "hourglass-outlined", + "hourglass-twotone", + "html5-filled", + "html5-outlined", + "html5-twotone", + "idcard-filled", + "idcard-outlined", + "idcard-twotone", + "ie-circle-filled", + "ie-outlined", + "ie-square-filled", + "import-outlined", + "inbox-outlined", + "info-circle-filled", + "info-circle-outlined", + "info-circle-twotone", + "info-outlined", + "insert-row-above-outlined", + "insert-row-below-outlined", + "insert-row-left-outlined", + "insert-row-right-outlined", + "instagram-filled", + "instagram-outlined", + "insurance-filled", + "insurance-outlined", + "insurance-twotone", + "interaction-filled", + "interaction-outlined", + "interaction-twotone", + "issues-close-outlined", + "italic-outlined", + "key-outlined", + "laptop-outlined", + "layout-filled", + "layout-outlined", + "layout-twotone", + "left-circle-filled", + "left-circle-outlined", + "left-circle-twotone", + "left-outlined", + "left-square-filled", + "left-square-outlined", + "left-square-twotone", + "like-filled", + "like-outlined", + "like-twotone", + "line-chart-outlined", + "line-height-outlined", + "line-outlined", + "link-outlined", + "linkedin-filled", + "linkedin-outlined", + "loading-3-quarters-outlined", + "loading-outlined", + "lock-filled", + "lock-outlined", + "lock-twotone", + "login-outlined", + "logout-outlined", + "mac-command-filled", + "mac-command-outlined", + "mail-filled", + "mail-outlined", + "mail-twotone", + "man-outlined", + "medicine-box-filled", + "medicine-box-outlined", + "medicine-box-twotone", + "medium-circle-filled", + "medium-outlined", + "medium-square-filled", + "medium-workmark-outlined", + "meh-filled", + "meh-outlined", + "meh-twotone", + "menu-fold-outlined", + "menu-outlined", + "menu-unfold-outlined", + "merge-cells-outlined", + "message-filled", + "message-outlined", + "message-twotone", + "minus-circle-filled", + "minus-circle-outlined", + "minus-circle-twotone", + "minus-outlined", + "minus-square-filled", + "minus-square-outlined", + "minus-square-twotone", + "mobile-filled", + "mobile-outlined", + "mobile-twotone", + "money-collect-filled", + "money-collect-outlined", + "money-collect-twotone", + "monitor-outlined", + "more-outlined", + "node-collapse-outlined", + "node-expand-outlined", + "node-index-outlined", + "notification-filled", + "notification-outlined", + "notification-twotone", + "number-outlined", + "one-to-one-outlined", + "ordered-list-outlined", + "paper-clip-outlined", + "partition-outlined", + "pause-circle-filled", + "pause-circle-outlined", + "pause-circle-twotone", + "pause-outlined", + "pay-circle-filled", + "pay-circle-outlined", + "percentage-outlined", + "phone-filled", + "phone-outlined", + "phone-twotone", + "pic-center-outlined", + "pic-left-outlined", + "pic-right-outlined", + "picture-filled", + "picture-outlined", + "picture-twotone", + "pie-chart-filled", + "pie-chart-outlined", + "pie-chart-twotone", + "play-circle-filled", + "play-circle-outlined", + "play-circle-twotone", + "play-square-filled", + "play-square-outlined", + "play-square-twotone", + "plus-circle-filled", + "plus-circle-outlined", + "plus-circle-twotone", + "plus-outlined", + "plus-square-filled", + "plus-square-outlined", + "plus-square-twotone", + "pound-circle-filled", + "pound-circle-outlined", + "pound-circle-twotone", + "pound-outlined", + "poweroff-outlined", + "printer-filled", + "printer-outlined", + "printer-twotone", + "profile-filled", + "profile-outlined", + "profile-twotone", + "project-filled", + "project-outlined", + "project-twotone", + "property-safety-filled", + "property-safety-outlined", + "property-safety-twotone", + "pull-request-outlined", + "pushpin-filled", + "pushpin-outlined", + "pushpin-twotone", + "qq-circle-filled", + "qq-outlined", + "qq-square-filled", + "qrcode-outlined", + "question-circle-filled", + "question-circle-outlined", + "question-circle-twotone", + "question-outlined", + "radar-chart-outlined", + "radius-bottomleft-outlined", + "radius-bottomright-outlined", + "radius-setting-outlined", + "radius-upleft-outlined", + "radius-upright-outlined", + "read-filled", + "read-outlined", + "reconciliation-filled", + "reconciliation-outlined", + "reconciliation-twotone", + "red-envelope-filled", + "red-envelope-outlined", + "red-envelope-twotone", + "reddit-circle-filled", + "reddit-outlined", + "reddit-square-filled", + "redo-outlined", + "reload-outlined", + "rest-filled", + "rest-outlined", + "rest-twotone", + "retweet-outlined", + "right-circle-filled", + "right-circle-outlined", + "right-circle-twotone", + "right-outlined", + "right-square-filled", + "right-square-outlined", + "right-square-twotone", + "rise-outlined", + "robot-filled", + "robot-outlined", + "rocket-filled", + "rocket-outlined", + "rocket-twotone", + "rollback-outlined", + "rotate-left-outlined", + "rotate-right-outlined", + "safety-certificate-filled", + "safety-certificate-outlined", + "safety-certificate-twotone", + "safety-outlined", + "save-filled", + "save-outlined", + "save-twotone", + "scan-outlined", + "schedule-filled", + "schedule-outlined", + "schedule-twotone", + "scissor-outlined", + "search-outlined", + "security-scan-filled", + "security-scan-outlined", + "security-scan-twotone", + "select-outlined", + "send-outlined", + "setting-filled", + "setting-outlined", + "setting-twotone", + "shake-outlined", + "share-alt-outlined", + "shop-filled", + "shop-outlined", + "shop-twotone", + "shopping-cart-outlined", + "shopping-filled", + "shopping-outlined", + "shopping-twotone", + "shrink-outlined", + "signal-filled", + "sisternode-outlined", + "sketch-circle-filled", + "sketch-outlined", + "sketch-square-filled", + "skin-filled", + "skin-outlined", + "skin-twotone", + "skype-filled", + "skype-outlined", + "slack-circle-filled", + "slack-outlined", + "slack-square-filled", + "slack-square-outlined", + "sliders-filled", + "sliders-outlined", + "sliders-twotone", + "small-dash-outlined", + "smile-filled", + "smile-outlined", + "smile-twotone", + "snippets-filled", + "snippets-outlined", + "snippets-twotone", + "solution-outlined", + "sort-ascending-outlined", + "sort-descending-outlined", + "sound-filled", + "sound-outlined", + "sound-twotone", + "split-cells-outlined", + "star-filled", + "star-outlined", + "star-twotone", + "step-backward-filled", + "step-backward-outlined", + "step-forward-filled", + "step-forward-outlined", + "stock-outlined", + "stop-filled", + "stop-outlined", + "stop-twotone", + "strikethrough-outlined", + "subnode-outlined", + "swap-left-outlined", + "swap-outlined", + "swap-right-outlined", + "switcher-filled", + "switcher-outlined", + "switcher-twotone", + "sync-outlined", + "table-outlined", + "tablet-filled", + "tablet-outlined", + "tablet-twotone", + "tag-filled", + "tag-outlined", + "tag-twotone", + "tags-filled", + "tags-outlined", + "tags-twotone", + "taobao-circle-filled", + "taobao-circle-outlined", + "taobao-outlined", + "taobao-square-filled", + "team-outlined", + "thunderbolt-filled", + "thunderbolt-outlined", + "thunderbolt-twotone", + "to-top-outlined", + "tool-filled", + "tool-outlined", + "tool-twotone", + "trademark-circle-filled", + "trademark-circle-outlined", + "trademark-circle-twotone", + "trademark-outlined", + "transaction-outlined", + "translation-outlined", + "trophy-filled", + "trophy-outlined", + "trophy-twotone", + "twitter-circle-filled", + "twitter-outlined", + "twitter-square-filled", + "underline-outlined", + "undo-outlined", + "ungroup-outlined", + "unlock-filled", + "unlock-outlined", + "unlock-twotone", + "unordered-list-outlined", + "up-circle-filled", + "up-circle-outlined", + "up-circle-twotone", + "up-outlined", + "up-square-filled", + "up-square-outlined", + "up-square-twotone", + "upload-outlined", + "usb-filled", + "usb-outlined", + "usb-twotone", + "user-add-outlined", + "user-delete-outlined", + "user-outlined", + "user-switch-outlined", + "usergroup-add-outlined", + "usergroup-delete-outlined", + "verified-outlined", + "vertical-align-bottom-outlined", + "vertical-align-middle-outlined", + "vertical-align-top-outlined", + "vertical-left-outlined", + "vertical-right-outlined", + "video-camera-add-outlined", + "video-camera-filled", + "video-camera-outlined", + "video-camera-twotone", + "wallet-filled", + "wallet-outlined", + "wallet-twotone", + "warning-filled", + "warning-outlined", + "warning-twotone", + "wechat-filled", + "wechat-outlined", + "weibo-circle-filled", + "weibo-circle-outlined", + "weibo-outlined", + "weibo-square-filled", + "weibo-square-outlined", + "whats-app-outlined", + "wifi-outlined", + "windows-filled", + "windows-outlined", + "woman-outlined", + "yahoo-filled", + "yahoo-outlined", + "youtube-filled", + "youtube-outlined", + "yuque-filled", + "yuque-outlined", + "zhihu-circle-filled", + "zhihu-outlined", + "zhihu-square-filled", + "zoom-in-outlined", + "zoom-out-outlined", ], }; diff --git a/src/components/Icon/index.ts b/src/components/Icon/index.ts index 01e7d23..bac2d66 100644 --- a/src/components/Icon/index.ts +++ b/src/components/Icon/index.ts @@ -1,6 +1,6 @@ -import Icon from './src/Icon.vue'; -import SvgIcon from './src/SvgIcon.vue'; -import IconPicker from './src/IconPicker.vue'; +import Icon from "./src/Icon.vue"; +import SvgIcon from "./src/SvgIcon.vue"; +import IconPicker from "./src/IconPicker.vue"; export { Icon, IconPicker, SvgIcon }; diff --git a/src/components/Icon/src/Icon.vue b/src/components/Icon/src/Icon.vue index 4956cf0..54bba52 100644 --- a/src/components/Icon/src/Icon.vue +++ b/src/components/Icon/src/Icon.vue @@ -14,7 +14,7 @@ ></span> </template> <script lang="ts"> - import type { PropType } from 'vue'; + import type { PropType } from "vue"; import { defineComponent, ref, @@ -24,15 +24,15 @@ unref, computed, CSSProperties, - } from 'vue'; - import SvgIcon from './SvgIcon.vue'; - import Iconify from '@purge-icons/generated'; - import { isString } from '/@/utils/is'; - import { propTypes } from '/@/utils/propTypes'; + } from "vue"; + import SvgIcon from "./SvgIcon.vue"; + import Iconify from "@purge-icons/generated"; + import { isString } from "/@/utils/is"; + import { propTypes } from "/@/utils/propTypes"; - const SVG_END_WITH_FLAG = '|svg'; + const SVG_END_WITH_FLAG = "|svg"; export default defineComponent({ - name: 'Icon', + name: "Icon", components: { SvgIcon }, props: { // icon name @@ -45,14 +45,14 @@ default: 16, }, spin: propTypes.bool.def(false), - prefix: propTypes.string.def(''), + prefix: propTypes.string.def(""), }, setup(props) { const elRef = ref<ElRef>(null); const isSvgIcon = computed(() => props.icon?.endsWith(SVG_END_WITH_FLAG)); - const getSvgIcon = computed(() => props.icon.replace(SVG_END_WITH_FLAG, '')); - const getIconRef = computed(() => `${props.prefix ? props.prefix + ':' : ''}${props.icon}`); + const getSvgIcon = computed(() => props.icon.replace(SVG_END_WITH_FLAG, "")); + const getIconRef = computed(() => `${props.prefix ? props.prefix + ":" : ""}${props.icon}`); const update = async () => { if (unref(isSvgIcon)) return; @@ -66,13 +66,13 @@ const svg = Iconify.renderSVG(icon, {}); if (svg) { - el.textContent = ''; + el.textContent = ""; el.appendChild(svg); } else { - const span = document.createElement('span'); - span.className = 'iconify'; + const span = document.createElement("span"); + span.className = "iconify"; span.dataset.icon = icon; - el.textContent = ''; + el.textContent = ""; el.appendChild(span); } }; @@ -87,11 +87,11 @@ return { fontSize: `${fs}px`, color: color, - display: 'inline-flex', + display: "inline-flex", }; }); - watch(() => props.icon, update, { flush: 'post' }); + watch(() => props.icon, update, { flush: "post" }); onMounted(update); diff --git a/src/components/Icon/src/IconPicker.vue b/src/components/Icon/src/IconPicker.vue index e939c22..ec7b8c8 100644 --- a/src/components/Icon/src/IconPicker.vue +++ b/src/components/Icon/src/IconPicker.vue @@ -31,18 +31,7 @@ v-for="icon in getPaginationList" :key="icon" :class="currentSelect === icon ? 'border border-primary' : ''" - class=" - p-2 - w-1/8 - cursor-pointer - mr-1 - mt-1 - flex - justify-center - items-center - border border-solid - hover:border-primary - " + class="p-2 w-1/8 cursor-pointer mr-1 mt-1 flex justify-center items-center border border-solid hover:border-primary" @click="handleClick(icon)" :title="icon" > @@ -76,21 +65,21 @@ </a-input> </template> <script lang="ts" setup> - import { ref, watchEffect, watch, unref } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { ScrollContainer } from '/@/components/Container'; - import { Input, Popover, Pagination, Empty } from 'ant-design-vue'; - import Icon from './Icon.vue'; - import SvgIcon from './SvgIcon.vue'; - - import iconsData from '../data/icons.data'; - import { propTypes } from '/@/utils/propTypes'; - import { usePagination } from '/@/hooks/web/usePagination'; - import { useDebounceFn } from '@vueuse/core'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; - import { useMessage } from '/@/hooks/web/useMessage'; - import svgIcons from 'virtual:svg-icons-names'; + import { ref, watchEffect, watch, unref } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { ScrollContainer } from "/@/components/Container"; + import { Input, Popover, Pagination, Empty } from "ant-design-vue"; + import Icon from "./Icon.vue"; + import SvgIcon from "./SvgIcon.vue"; + + import iconsData from "../data/icons.data"; + import { propTypes } from "/@/utils/propTypes"; + import { usePagination } from "/@/hooks/web/usePagination"; + import { useDebounceFn } from "@vueuse/core"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useCopyToClipboard } from "/@/hooks/web/useCopyToClipboard"; + import { useMessage } from "/@/hooks/web/useMessage"; + import svgIcons from "virtual:svg-icons-names"; // 没有使用别名引入,是因为WebStorm当前版本还不能正确识别,会报unused警告 const AInput = Input; @@ -100,7 +89,7 @@ function getIcons() { const data = iconsData as any; - const prefix: string = data?.prefix ?? ''; + const prefix: string = data?.prefix ?? ""; let result: string[] = []; if (prefix) { result = (data?.icons ?? []).map((item) => `${prefix}:${item}`); @@ -111,28 +100,28 @@ } function getSvgIcons() { - return svgIcons.map((icon) => icon.replace('icon-', '')); + return svgIcons.map((icon) => icon.replace("icon-", "")); } const props = defineProps({ value: propTypes.string, - width: propTypes.string.def('100%'), + width: propTypes.string.def("100%"), pageSize: propTypes.number.def(140), copy: propTypes.bool.def(false), - mode: propTypes.oneOf<('svg' | 'iconify')[]>(['svg', 'iconify']).def('iconify'), + mode: propTypes.oneOf<("svg" | "iconify")[]>(["svg", "iconify"]).def("iconify"), }); - const emit = defineEmits(['change', 'update:value']); + const emit = defineEmits(["change", "update:value"]); - const isSvgMode = props.mode === 'svg'; + const isSvgMode = props.mode === "svg"; const icons = isSvgMode ? getSvgIcons() : getIcons(); - const currentSelect = ref(''); + const currentSelect = ref(""); const visible = ref(false); const currentList = ref(icons); const { t } = useI18n(); - const { prefixCls } = useDesign('icon-picker'); + const { prefixCls } = useDesign("icon-picker"); const debounceHandleSearchChange = useDebounceFn(handleSearchChange, 100); const { clipboardRef, isSuccessRef } = useCopyToClipboard(props.value); @@ -150,8 +139,8 @@ watch( () => currentSelect.value, (v) => { - emit('update:value', v); - return emit('change', v); + emit("update:value", v); + return emit("change", v); }, ); @@ -164,7 +153,7 @@ if (props.copy) { clipboardRef.value = icon; if (unref(isSuccessRef)) { - createMessage.success(t('component.icon.copy')); + createMessage.success(t("component.icon.copy")); } } } @@ -180,7 +169,7 @@ } </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-icon-picker'; + @prefix-cls: ~"@{namespace}-icon-picker"; .@{prefix-cls} { .ant-input-group-addon { diff --git a/src/components/Icon/src/SvgIcon.vue b/src/components/Icon/src/SvgIcon.vue index 2afa4de..10f5c08 100644 --- a/src/components/Icon/src/SvgIcon.vue +++ b/src/components/Icon/src/SvgIcon.vue @@ -8,16 +8,16 @@ </svg> </template> <script lang="ts"> - import type { CSSProperties } from 'vue'; - import { defineComponent, computed } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { CSSProperties } from "vue"; + import { defineComponent, computed } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'SvgIcon', + name: "SvgIcon", props: { prefix: { type: String, - default: 'icon', + default: "icon", }, name: { type: String, @@ -33,13 +33,13 @@ }, }, setup(props) { - const { prefixCls } = useDesign('svg-icon'); + const { prefixCls } = useDesign("svg-icon"); const symbolId = computed(() => `#${props.prefix}-${props.name}`); const getStyle = computed((): CSSProperties => { const { size } = props; let s = `${size}`; - s = `${s.replace('px', '')}px`; + s = `${s.replace("px", "")}px`; return { width: s, height: s, @@ -50,7 +50,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-svg-icon'; + @prefix-cls: ~"@{namespace}-svg-icon"; .@{prefix-cls} { display: inline-block; diff --git a/src/components/Loading/index.ts b/src/components/Loading/index.ts index 3673a44..889fa67 100644 --- a/src/components/Loading/index.ts +++ b/src/components/Loading/index.ts @@ -1,5 +1,5 @@ -import Loading from './src/Loading.vue'; +import Loading from "./src/Loading.vue"; export { Loading }; -export { useLoading } from './src/useLoading'; -export { createLoading } from './src/createLoading'; +export { useLoading } from "./src/useLoading"; +export { createLoading } from "./src/createLoading"; diff --git a/src/components/Loading/src/Loading.vue b/src/components/Loading/src/Loading.vue index 0f52b28..060cbf4 100644 --- a/src/components/Loading/src/Loading.vue +++ b/src/components/Loading/src/Loading.vue @@ -9,18 +9,18 @@ </section> </template> <script lang="ts"> - import { PropType } from 'vue'; - import { defineComponent } from 'vue'; - import { Spin } from 'ant-design-vue'; - import { SizeEnum } from '/@/enums/sizeEnum'; + import { PropType } from "vue"; + import { defineComponent } from "vue"; + import { Spin } from "ant-design-vue"; + import { SizeEnum } from "/@/enums/sizeEnum"; export default defineComponent({ - name: 'Loading', + name: "Loading", components: { Spin }, props: { tip: { type: String as PropType<string>, - default: '', + default: "", }, size: { type: String as PropType<SizeEnum>, @@ -41,7 +41,7 @@ type: String as PropType<string>, }, theme: { - type: String as PropType<'dark' | 'light'>, + type: String as PropType<"dark" | "light">, }, }, }); @@ -67,7 +67,7 @@ } } - html[data-theme='dark'] { + html[data-theme="dark"] { .full-loading:not(.light) { background-color: @modal-mask-bg; } diff --git a/src/components/Loading/src/createLoading.ts b/src/components/Loading/src/createLoading.ts index 966ca53..6477267 100644 --- a/src/components/Loading/src/createLoading.ts +++ b/src/components/Loading/src/createLoading.ts @@ -1,13 +1,13 @@ -import { VNode, defineComponent } from 'vue'; -import type { LoadingProps } from './typing'; +import { VNode, defineComponent } from "vue"; +import type { LoadingProps } from "./typing"; -import { createVNode, render, reactive, h } from 'vue'; -import Loading from './Loading.vue'; +import { createVNode, render, reactive, h } from "vue"; +import Loading from "./Loading.vue"; export function createLoading(props?: Partial<LoadingProps>, target?: HTMLElement, wait = false) { let vm: Nullable<VNode> = null; const data = reactive({ - tip: '', + tip: "", loading: true, ...props, }); @@ -23,10 +23,10 @@ export function createLoading(props?: Partial<LoadingProps>, target?: HTMLElemen if (wait) { // TODO fix https://github.com/anncwb/vue-vben-admin/issues/438 setTimeout(() => { - render(vm, document.createElement('div')); + render(vm, document.createElement("div")); }, 0); } else { - render(vm, document.createElement('div')); + render(vm, document.createElement("div")); } function close() { diff --git a/src/components/Loading/src/typing.ts b/src/components/Loading/src/typing.ts index 9af60e6..0f30ee8 100644 --- a/src/components/Loading/src/typing.ts +++ b/src/components/Loading/src/typing.ts @@ -1,4 +1,4 @@ -import { SizeEnum } from '/@/enums/sizeEnum'; +import { SizeEnum } from "/@/enums/sizeEnum"; export interface LoadingProps { tip: string; @@ -6,5 +6,5 @@ export interface LoadingProps { absolute: boolean; loading: boolean; background: string; - theme: 'dark' | 'light'; + theme: "dark" | "light"; } diff --git a/src/components/Loading/src/useLoading.ts b/src/components/Loading/src/useLoading.ts index 356df7d..e1a6ad7 100644 --- a/src/components/Loading/src/useLoading.ts +++ b/src/components/Loading/src/useLoading.ts @@ -1,7 +1,7 @@ -import { unref } from 'vue'; -import { createLoading } from './createLoading'; -import type { LoadingProps } from './typing'; -import type { Ref } from 'vue'; +import { unref } from "vue"; +import { createLoading } from "./createLoading"; +import type { LoadingProps } from "./typing"; +import type { Ref } from "vue"; export interface UseLoadingOptions { target?: any; @@ -21,7 +21,7 @@ export function useLoading( let props: Partial<LoadingProps>; let target: HTMLElement | Ref<ElRef> = document.body; - if (Reflect.has(opt, 'target') || Reflect.has(opt, 'props')) { + if (Reflect.has(opt, "target") || Reflect.has(opt, "props")) { const options = opt as Partial<UseLoadingOptions>; props = options.props || {}; target = options.target || document.body; diff --git a/src/components/Markdown/index.ts b/src/components/Markdown/index.ts index d337681..d13cfdc 100644 --- a/src/components/Markdown/index.ts +++ b/src/components/Markdown/index.ts @@ -1,7 +1,7 @@ -import { withInstall } from '/@/utils'; -import markDown from './src/Markdown.vue'; -import markDownViewer from './src/MarkdownViewer.vue'; +import { withInstall } from "/@/utils"; +import markDown from "./src/Markdown.vue"; +import markDownViewer from "./src/MarkdownViewer.vue"; export const MarkDown = withInstall(markDown); export const MarkdownViewer = withInstall(markDownViewer); -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/Markdown/src/Markdown.vue b/src/components/Markdown/src/Markdown.vue index d811763..50d910e 100644 --- a/src/components/Markdown/src/Markdown.vue +++ b/src/components/Markdown/src/Markdown.vue @@ -2,7 +2,7 @@ <div ref="wrapRef"></div> </template> <script lang="ts"> - import type { Ref } from 'vue'; + import type { Ref } from "vue"; import { defineComponent, ref, @@ -12,23 +12,23 @@ watch, onBeforeUnmount, onDeactivated, - } from 'vue'; - import Vditor from 'vditor'; - import 'vditor/dist/index.css'; - import { useLocale } from '/@/locales/useLocale'; - import { useModalContext } from '../../Modal'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; + } from "vue"; + import Vditor from "vditor"; + import "vditor/dist/index.css"; + import { useLocale } from "/@/locales/useLocale"; + import { useModalContext } from "../../Modal"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; - type Lang = 'zh_CN' | 'en_US' | 'ja_JP' | 'ko_KR' | undefined; + type Lang = "zh_CN" | "en_US" | "ja_JP" | "ko_KR" | undefined; export default defineComponent({ inheritAttrs: false, props: { height: { type: Number, default: 360 }, - value: { type: String, default: '' }, + value: { type: String, default: "" }, }, - emits: ['change', 'get', 'update:value'], + emits: ["change", "get", "update:value"], setup(props, { attrs, emit }) { const wrapRef = ref<ElRef>(null); const vditorRef = ref(null) as Ref<Nullable<Vditor>>; @@ -38,7 +38,7 @@ const { getLocale } = useLocale(); const { getDarkMode } = useRootSetting(); - const valueRef = ref(props.value || ''); + const valueRef = ref(props.value || ""); watch( [() => getDarkMode.value, () => initedRef.value], @@ -46,12 +46,12 @@ if (!inited) { return; } - const theme = val === 'dark' ? 'dark' : 'classic'; + const theme = val === "dark" ? "dark" : "classic"; instance.getVditor()?.setTheme(theme); }, { immediate: true, - flush: 'post', + flush: "post", }, ); @@ -65,20 +65,20 @@ }, ); - const getCurrentLang = computed((): 'zh_CN' | 'en_US' | 'ja_JP' | 'ko_KR' => { + const getCurrentLang = computed((): "zh_CN" | "en_US" | "ja_JP" | "ko_KR" => { let lang: Lang; switch (unref(getLocale)) { - case 'en': - lang = 'en_US'; + case "en": + lang = "en_US"; break; - case 'ja': - lang = 'ja_JP'; + case "ja": + lang = "ja_JP"; break; - case 'ko': - lang = 'ko_KR'; + case "ko": + lang = "ko_KR"; break; default: - lang = 'zh_CN'; + lang = "zh_CN"; } return lang; }); @@ -87,9 +87,9 @@ if (!wrapEl) return; const bindValue = { ...attrs, ...props }; const insEditor = new Vditor(wrapEl, { - theme: getDarkMode.value === 'dark' ? 'dark' : 'classic', + theme: getDarkMode.value === "dark" ? "dark" : "classic", lang: unref(getCurrentLang), - mode: 'sv', + mode: "sv", fullscreen: { index: 520, }, @@ -98,8 +98,8 @@ }, input: (v) => { valueRef.value = v; - emit('update:value', v); - emit('change', v); + emit("update:value", v); + emit("change", v); }, after: () => { nextTick(() => { @@ -107,7 +107,7 @@ insEditor.setValue(valueRef.value); vditorRef.value = insEditor; initedRef.value = true; - emit('get', instance); + emit("get", instance); }); }, blur: () => { diff --git a/src/components/Markdown/src/MarkdownViewer.vue b/src/components/Markdown/src/MarkdownViewer.vue index 0091a90..1dc10cc 100644 --- a/src/components/Markdown/src/MarkdownViewer.vue +++ b/src/components/Markdown/src/MarkdownViewer.vue @@ -4,16 +4,16 @@ </template> <script lang="ts" setup> - import { computed } from 'vue'; - import showdown from 'showdown'; + import { computed } from "vue"; + import showdown from "showdown"; const converter = new showdown.Converter(); - converter.setOption('tables', true); + converter.setOption("tables", true); const props = defineProps({ value: { type: String }, class: { type: String }, }); - const getHtmlData = computed(() => converter.makeHtml(props.value || '')); + const getHtmlData = computed(() => converter.makeHtml(props.value || "")); </script> <style scoped> diff --git a/src/components/Markdown/src/typing.ts b/src/components/Markdown/src/typing.ts index b4bb465..e973569 100644 --- a/src/components/Markdown/src/typing.ts +++ b/src/components/Markdown/src/typing.ts @@ -1,4 +1,4 @@ -import Vditor from 'vditor'; +import Vditor from "vditor"; export interface MarkDownActionType { getVditor: () => Vditor; } diff --git a/src/components/Menu/index.ts b/src/components/Menu/index.ts index 4a59225..83fd8fa 100644 --- a/src/components/Menu/index.ts +++ b/src/components/Menu/index.ts @@ -1,3 +1,3 @@ -import BasicMenu from './src/BasicMenu.vue'; +import BasicMenu from "./src/BasicMenu.vue"; export { BasicMenu }; diff --git a/src/components/Menu/src/BasicMenu.vue b/src/components/Menu/src/BasicMenu.vue index 0d0e20f..946e626 100644 --- a/src/components/Menu/src/BasicMenu.vue +++ b/src/components/Menu/src/BasicMenu.vue @@ -18,33 +18,33 @@ </Menu> </template> <script lang="ts"> - import type { MenuState } from './types'; - import { computed, defineComponent, unref, reactive, watch, toRefs, ref } from 'vue'; - import { Menu } from 'ant-design-vue'; - import BasicSubMenuItem from './components/BasicSubMenuItem.vue'; - import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; - import { useOpenKeys } from './useOpenKeys'; - import { RouteLocationNormalizedLoaded, useRouter } from 'vue-router'; - import { isFunction } from '/@/utils/is'; - import { basicProps } from './props'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { REDIRECT_NAME } from '/@/router/constant'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { getCurrentParentPath } from '/@/router/menus'; - import { listenerRouteChange } from '/@/logics/mitt/routeChange'; - import { getAllParentPath } from '/@/router/helper/menuHelper'; + import type { MenuState } from "./types"; + import { computed, defineComponent, unref, reactive, watch, toRefs, ref } from "vue"; + import { Menu } from "ant-design-vue"; + import BasicSubMenuItem from "./components/BasicSubMenuItem.vue"; + import { MenuModeEnum, MenuTypeEnum } from "/@/enums/menuEnum"; + import { useOpenKeys } from "./useOpenKeys"; + import { RouteLocationNormalizedLoaded, useRouter } from "vue-router"; + import { isFunction } from "/@/utils/is"; + import { basicProps } from "./props"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { REDIRECT_NAME } from "/@/router/constant"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { getCurrentParentPath } from "/@/router/menus"; + import { listenerRouteChange } from "/@/logics/mitt/routeChange"; + import { getAllParentPath } from "/@/router/helper/menuHelper"; export default defineComponent({ - name: 'BasicMenu', + name: "BasicMenu", components: { Menu, BasicSubMenuItem, }, props: basicProps, - emits: ['menuClick'], + emits: ["menuClick"], setup(props, { emit }) { const isClickGo = ref(false); - const currentActiveMenu = ref(''); + const currentActiveMenu = ref(""); const menuState = reactive<MenuState>({ defaultSelectedKeys: [], @@ -53,7 +53,7 @@ collapsedOpenKeys: [], }); - const { prefixCls } = useDesign('basic-menu'); + const { prefixCls } = useDesign("basic-menu"); const { items, mode, accordion } = toRefs(props); const { getCollapsed, getTopMenuAlign, getSplit } = useMenuSetting(); @@ -77,7 +77,7 @@ }); const getMenuClass = computed(() => { - const align = props.isHorizontal && unref(getSplit) ? 'start' : unref(getTopMenuAlign); + const align = props.isHorizontal && unref(getSplit) ? "start" : unref(getTopMenuAlign); return [ prefixCls, `justify-${align}`, @@ -123,7 +123,7 @@ const flag = await beforeClickFn(key); if (!flag) return; } - emit('menuClick', key); + emit("menuClick", key); isClickGo.value = true; menuState.selectedKeys = [key]; @@ -160,5 +160,5 @@ }); </script> <style lang="less"> - @import './index.less'; + @import "./index.less"; </style> diff --git a/src/components/Menu/src/components/BasicMenuItem.vue b/src/components/Menu/src/components/BasicMenuItem.vue index 2a56562..79ed449 100644 --- a/src/components/Menu/src/components/BasicMenuItem.vue +++ b/src/components/Menu/src/components/BasicMenuItem.vue @@ -4,13 +4,13 @@ </MenuItem> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { Menu } from 'ant-design-vue'; - import { itemProps } from '../props'; + import { defineComponent } from "vue"; + import { Menu } from "ant-design-vue"; + import { itemProps } from "../props"; - import MenuItemContent from './MenuItemContent.vue'; + import MenuItemContent from "./MenuItemContent.vue"; export default defineComponent({ - name: 'BasicMenuItem', + name: "BasicMenuItem", components: { MenuItem: Menu.Item, MenuItemContent }, props: itemProps, setup() { diff --git a/src/components/Menu/src/components/BasicSubMenuItem.vue b/src/components/Menu/src/components/BasicSubMenuItem.vue index d5139fc..451a36e 100644 --- a/src/components/Menu/src/components/BasicSubMenuItem.vue +++ b/src/components/Menu/src/components/BasicSubMenuItem.vue @@ -16,16 +16,16 @@ </SubMenu> </template> <script lang="ts"> - import type { Menu as MenuType } from '/@/router/types'; - import { defineComponent, computed } from 'vue'; - import { Menu } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { itemProps } from '../props'; - import BasicMenuItem from './BasicMenuItem.vue'; - import MenuItemContent from './MenuItemContent.vue'; + import type { Menu as MenuType } from "/@/router/types"; + import { defineComponent, computed } from "vue"; + import { Menu } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { itemProps } from "../props"; + import BasicMenuItem from "./BasicMenuItem.vue"; + import MenuItemContent from "./MenuItemContent.vue"; export default defineComponent({ - name: 'BasicSubMenuItem', + name: "BasicSubMenuItem", isSubMenu: true, components: { BasicMenuItem, @@ -34,13 +34,13 @@ }, props: itemProps, setup(props) { - const { prefixCls } = useDesign('basic-menu-item'); + const { prefixCls } = useDesign("basic-menu-item"); const getShowMenu = computed(() => !props.item.meta?.hideMenu); function menuHasChildren(menuTreeItem: MenuType): boolean { return ( !menuTreeItem.meta?.hideChildrenInMenu && - Reflect.has(menuTreeItem, 'children') && + Reflect.has(menuTreeItem, "children") && !!menuTreeItem.children && menuTreeItem.children.length > 0 ); diff --git a/src/components/Menu/src/components/MenuItemContent.vue b/src/components/Menu/src/components/MenuItemContent.vue index 3044fbc..bd471be 100644 --- a/src/components/Menu/src/components/MenuItemContent.vue +++ b/src/components/Menu/src/components/MenuItemContent.vue @@ -5,22 +5,22 @@ </span> </template> <script lang="ts"> - import { computed, defineComponent } from 'vue'; + import { computed, defineComponent } from "vue"; - import Icon from '/@/components/Icon/index'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { contentProps } from '../props'; + import Icon from "/@/components/Icon/index"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { contentProps } from "../props"; const { t } = useI18n(); export default defineComponent({ - name: 'MenuItemContent', + name: "MenuItemContent", components: { Icon, }, props: contentProps, setup(props) { - const { prefixCls } = useDesign('basic-menu-item-content'); + const { prefixCls } = useDesign("basic-menu-item-content"); const getI18nName = computed(() => t(props.item?.name)); const getIcon = computed(() => props.item?.icon); diff --git a/src/components/Menu/src/props.ts b/src/components/Menu/src/props.ts index ed3f010..ccfe448 100644 --- a/src/components/Menu/src/props.ts +++ b/src/components/Menu/src/props.ts @@ -1,11 +1,11 @@ -import type { Menu } from '/@/router/types'; -import type { PropType } from 'vue'; +import type { Menu } from "/@/router/types"; +import type { PropType } from "vue"; -import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; -import { ThemeEnum } from '/@/enums/appEnum'; -import { propTypes } from '/@/utils/propTypes'; -import type { MenuTheme } from 'ant-design-vue'; -import type { MenuMode } from 'ant-design-vue/lib/menu/src/interface'; +import { MenuModeEnum, MenuTypeEnum } from "/@/enums/menuEnum"; +import { ThemeEnum } from "/@/enums/appEnum"; +import { propTypes } from "/@/utils/propTypes"; +import type { MenuTheme } from "ant-design-vue"; +import type { MenuMode } from "ant-design-vue/lib/menu/src/interface"; export const basicProps = { items: { type: Array as PropType<Menu[]>, @@ -44,7 +44,7 @@ export const itemProps = { default: {}, }, level: propTypes.number, - theme: propTypes.oneOf(['dark', 'light']), + theme: propTypes.oneOf(["dark", "light"]), showTitle: propTypes.bool, isHorizontal: propTypes.bool, }; diff --git a/src/components/Menu/src/useOpenKeys.ts b/src/components/Menu/src/useOpenKeys.ts index 841dab5..2b90e93 100644 --- a/src/components/Menu/src/useOpenKeys.ts +++ b/src/components/Menu/src/useOpenKeys.ts @@ -1,14 +1,14 @@ -import { MenuModeEnum } from '/@/enums/menuEnum'; -import type { Menu as MenuType } from '/@/router/types'; -import type { MenuState } from './types'; +import { MenuModeEnum } from "/@/enums/menuEnum"; +import type { Menu as MenuType } from "/@/router/types"; +import type { MenuState } from "./types"; -import { computed, Ref, toRaw } from 'vue'; +import { computed, Ref, toRaw } from "vue"; -import { unref } from 'vue'; -import { uniq } from 'lodash-es'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { getAllParentPath } from '/@/router/helper/menuHelper'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; +import { unref } from "vue"; +import { uniq } from "lodash-es"; +import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; +import { getAllParentPath } from "/@/router/helper/menuHelper"; +import { useTimeoutFn } from "/@/hooks/core/useTimeout"; export function useOpenKeys( menuState: MenuState, diff --git a/src/components/Modal/index.ts b/src/components/Modal/index.ts index 6188c5c..76ac7d7 100644 --- a/src/components/Modal/index.ts +++ b/src/components/Modal/index.ts @@ -1,8 +1,8 @@ -import { withInstall } from '/@/utils'; -import './src/index.less'; -import basicModal from './src/BasicModal.vue'; +import { withInstall } from "/@/utils"; +import "./src/index.less"; +import basicModal from "./src/BasicModal.vue"; export const BasicModal = withInstall(basicModal); -export { useModalContext } from './src/hooks/useModalContext'; -export { useModal, useModalInner } from './src/hooks/useModal'; -export * from './src/typing'; +export { useModalContext } from "./src/hooks/useModalContext"; +export { useModal, useModalInner } from "./src/hooks/useModal"; +export * from "./src/typing"; diff --git a/src/components/Modal/src/BasicModal.vue b/src/components/Modal/src/BasicModal.vue index 89bc879..d4e0a05 100644 --- a/src/components/Modal/src/BasicModal.vue +++ b/src/components/Modal/src/BasicModal.vue @@ -49,7 +49,7 @@ </Modal> </template> <script lang="ts"> - import type { ModalProps, ModalMethods } from './typing'; + import type { ModalProps, ModalMethods } from "./typing"; import { defineComponent, @@ -61,30 +61,30 @@ toRef, getCurrentInstance, nextTick, - } from 'vue'; - import Modal from './components/Modal'; - import ModalWrapper from './components/ModalWrapper.vue'; - import ModalClose from './components/ModalClose.vue'; - import ModalFooter from './components/ModalFooter.vue'; - import ModalHeader from './components/ModalHeader.vue'; - import { isFunction } from '/@/utils/is'; - import { deepMerge } from '/@/utils'; - import { basicProps } from './props'; - import { useFullScreen } from './hooks/useModalFullScreen'; - import { omit } from 'lodash-es'; - import { useDesign } from '/@/hooks/web/useDesign'; + } from "vue"; + import Modal from "./components/Modal"; + import ModalWrapper from "./components/ModalWrapper.vue"; + import ModalClose from "./components/ModalClose.vue"; + import ModalFooter from "./components/ModalFooter.vue"; + import ModalHeader from "./components/ModalHeader.vue"; + import { isFunction } from "/@/utils/is"; + import { deepMerge } from "/@/utils"; + import { basicProps } from "./props"; + import { useFullScreen } from "./hooks/useModalFullScreen"; + import { omit } from "lodash-es"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'BasicModal', + name: "BasicModal", components: { Modal, ModalWrapper, ModalClose, ModalFooter, ModalHeader }, inheritAttrs: false, props: basicProps, - emits: ['visible-change', 'height-change', 'cancel', 'ok', 'register', 'update:visible'], + emits: ["visible-change", "height-change", "cancel", "ok", "register", "update:visible"], setup(props, { emit, attrs }) { const visibleRef = ref(false); const propsRef = ref<Partial<ModalProps> | null>(null); const modalWrapperRef = ref<any>(null); - const { prefixCls } = useDesign('basic-modal'); + const { prefixCls } = useDesign("basic-modal"); // modal Bottom and top height const extHeightRef = ref(0); @@ -102,7 +102,7 @@ const instance = getCurrentInstance(); if (instance) { - emit('register', modalMethods, instance.uid); + emit("register", modalMethods, instance.uid); } // Custom title component: get title @@ -116,7 +116,7 @@ const { handleFullScreen, getWrapClassName, fullScreenRef } = useFullScreen({ modalWrapperRef, extHeightRef, - wrapClassName: toRef(getMergeProps.value, 'wrapClassName'), + wrapClassName: toRef(getMergeProps.value, "wrapClassName"), }); // modal component does not need title and origin buttons @@ -142,9 +142,9 @@ wrapClassName: unref(getWrapClassName), }; if (unref(fullScreenRef)) { - return omit(attr, ['height', 'title']); + return omit(attr, ["height", "title"]); } - return omit(attr, 'title'); + return omit(attr, "title"); }); const getWrapperHeight = computed(() => { @@ -160,8 +160,8 @@ watch( () => unref(visibleRef), (v) => { - emit('visible-change', v); - emit('update:visible', v); + emit("visible-change", v); + emit("update:visible", v); instance && modalMethods.emitVisible?.(v, instance.uid); nextTick(() => { if (props.scrollTop && v && unref(modalWrapperRef)) { @@ -178,7 +178,7 @@ async function handleCancel(e: Event) { e?.stopPropagation(); // 过滤自定义关闭按钮的空白区域 - if ((e.target as HTMLElement)?.classList?.contains(prefixCls + '-close--custom')) return; + if ((e.target as HTMLElement)?.classList?.contains(prefixCls + "-close--custom")) return; if (props.closeFunc && isFunction(props.closeFunc)) { const isClose: boolean = await props.closeFunc(); visibleRef.value = !isClose; @@ -186,7 +186,7 @@ } visibleRef.value = false; - emit('cancel', e); + emit("cancel", e); } /** @@ -195,20 +195,20 @@ function setModalProps(props: Partial<ModalProps>): void { // Keep the last setModalProps propsRef.value = deepMerge(unref(propsRef) || ({} as any), props); - if (Reflect.has(props, 'visible')) { + if (Reflect.has(props, "visible")) { visibleRef.value = !!props.visible; } - if (Reflect.has(props, 'defaultFullscreen')) { + if (Reflect.has(props, "defaultFullscreen")) { fullScreenRef.value = !!props.defaultFullscreen; } } function handleOk(e: Event) { - emit('ok', e); + emit("ok", e); } function handleHeightChange(height: string) { - emit('height-change', height); + emit("height-change", height); } function handleExtHeight(height: number) { diff --git a/src/components/Modal/src/components/Modal.tsx b/src/components/Modal/src/components/Modal.tsx index f4b8bd7..7f8d4f6 100644 --- a/src/components/Modal/src/components/Modal.tsx +++ b/src/components/Modal/src/components/Modal.tsx @@ -1,15 +1,15 @@ -import { Modal } from 'ant-design-vue'; -import { defineComponent, toRefs, unref } from 'vue'; -import { basicProps } from '../props'; -import { useModalDragMove } from '../hooks/useModalDrag'; -import { useAttrs } from '/@/hooks/core/useAttrs'; -import { extendSlots } from '/@/utils/helper/tsxHelper'; +import { Modal } from "ant-design-vue"; +import { defineComponent, toRefs, unref } from "vue"; +import { basicProps } from "../props"; +import { useModalDragMove } from "../hooks/useModalDrag"; +import { useAttrs } from "/@/hooks/core/useAttrs"; +import { extendSlots } from "/@/utils/helper/tsxHelper"; export default defineComponent({ - name: 'Modal', + name: "Modal", inheritAttrs: false, props: basicProps, - emits: ['cancel'], + emits: ["cancel"], setup(props, { slots }) { const { visible, draggable, destroyOnClose } = toRefs(props); const attrs = useAttrs(); diff --git a/src/components/Modal/src/components/ModalClose.vue b/src/components/Modal/src/components/ModalClose.vue index a0d9612..70b3963 100644 --- a/src/components/Modal/src/components/ModalClose.vue +++ b/src/components/Modal/src/components/ModalClose.vue @@ -14,22 +14,22 @@ </div> </template> <script lang="ts"> - import { defineComponent, computed } from 'vue'; - import { FullscreenExitOutlined, FullscreenOutlined, CloseOutlined } from '@ant-design/icons-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { Tooltip } from 'ant-design-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { defineComponent, computed } from "vue"; + import { FullscreenExitOutlined, FullscreenOutlined, CloseOutlined } from "@ant-design/icons-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { Tooltip } from "ant-design-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ - name: 'ModalClose', + name: "ModalClose", components: { Tooltip, FullscreenExitOutlined, FullscreenOutlined, CloseOutlined }, props: { canFullscreen: { type: Boolean, default: true }, fullScreen: { type: Boolean }, }, - emits: ['cancel', 'fullscreen'], + emits: ["cancel", "fullscreen"], setup(props, { emit }) { - const { prefixCls } = useDesign('basic-modal-close'); + const { prefixCls } = useDesign("basic-modal-close"); const { t } = useI18n(); const getClass = computed(() => { @@ -43,13 +43,13 @@ }); function handleCancel(e: Event) { - emit('cancel', e); + emit("cancel", e); } function handleFullScreen(e: Event) { e?.stopPropagation(); e?.preventDefault(); - emit('fullscreen'); + emit("fullscreen"); } return { @@ -63,7 +63,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-modal-close'; + @prefix-cls: ~"@{namespace}-basic-modal-close"; .@{prefix-cls} { display: flex; height: 95%; diff --git a/src/components/Modal/src/components/ModalFooter.vue b/src/components/Modal/src/components/ModalFooter.vue index d8cefdb..6b96cc0 100644 --- a/src/components/Modal/src/components/ModalFooter.vue +++ b/src/components/Modal/src/components/ModalFooter.vue @@ -18,20 +18,20 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; + import { defineComponent } from "vue"; - import { basicProps } from '../props'; + import { basicProps } from "../props"; export default defineComponent({ - name: 'BasicModalFooter', + name: "BasicModalFooter", props: basicProps, - emits: ['ok', 'cancel'], + emits: ["ok", "cancel"], setup(_, { emit }) { function handleOk(e: Event) { - emit('ok', e); + emit("ok", e); } function handleCancel(e: Event) { - emit('cancel', e); + emit("cancel", e); } return { handleOk, handleCancel }; diff --git a/src/components/Modal/src/components/ModalHeader.vue b/src/components/Modal/src/components/ModalHeader.vue index 2f45778..c376d35 100644 --- a/src/components/Modal/src/components/ModalHeader.vue +++ b/src/components/Modal/src/components/ModalHeader.vue @@ -4,12 +4,12 @@ </BasicTitle> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import { defineComponent } from 'vue'; - import { BasicTitle } from '/@/components/Basic'; + import type { PropType } from "vue"; + import { defineComponent } from "vue"; + import { BasicTitle } from "/@/components/Basic"; export default defineComponent({ - name: 'BasicModalHeader', + name: "BasicModalHeader", components: { BasicTitle }, props: { helpMessage: { @@ -17,6 +17,6 @@ }, title: { type: String }, }, - emits: ['dblclick'], + emits: ["dblclick"], }); </script> diff --git a/src/components/Modal/src/components/ModalWrapper.vue b/src/components/Modal/src/components/ModalWrapper.vue index 699bf9c..e28dd62 100644 --- a/src/components/Modal/src/components/ModalWrapper.vue +++ b/src/components/Modal/src/components/ModalWrapper.vue @@ -6,7 +6,7 @@ </ScrollContainer> </template> <script lang="ts"> - import type { CSSProperties } from 'vue'; + import type { CSSProperties } from "vue"; import { defineComponent, computed, @@ -17,11 +17,11 @@ onMounted, nextTick, onUnmounted, - } from 'vue'; - import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; - import { ScrollContainer } from '/@/components/Container'; - import { createModalContext } from '../hooks/useModalContext'; - import { useMutationObserver } from '@vueuse/core'; + } from "vue"; + import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; + import { ScrollContainer } from "/@/components/Container"; + import { createModalContext } from "../hooks/useModalContext"; + import { useMutationObserver } from "@vueuse/core"; const props = { loading: { type: Boolean }, @@ -37,11 +37,11 @@ }; export default defineComponent({ - name: 'ModalWrapper', + name: "ModalWrapper", components: { ScrollContainer }, inheritAttrs: false, props, - emits: ['height-change', 'ext-height'], + emits: ["height-change", "ext-height"], setup(props, { emit }) { const wrapperRef = ref<ComponentRef>(null); const spinRef = ref<ElRef>(null); @@ -72,7 +72,7 @@ const spinStyle = computed((): CSSProperties => { return { minHeight: `${props.minHeight}px`, - [props.fullScreen ? 'height' : 'maxHeight']: `${unref(realHeightRef)}px`, + [props.fullScreen ? "height" : "maxHeight"]: `${unref(realHeightRef)}px`, }; }); @@ -94,7 +94,7 @@ onMounted(() => { const { modalHeaderHeight, modalFooterHeight } = props; - emit('ext-height', modalHeaderHeight + modalFooterHeight); + emit("ext-height", modalHeaderHeight + modalFooterHeight); }); onUnmounted(() => { @@ -118,7 +118,7 @@ const bodyDom = wrapperRefDom.$el.parentElement; if (!bodyDom) return; - bodyDom.style.padding = '0'; + bodyDom.style.padding = "0"; await nextTick(); try { @@ -157,7 +157,7 @@ ? maxHeight : realHeight; } - emit('height-change', unref(realHeightRef)); + emit("height-change", unref(realHeightRef)); } catch (error) { console.log(error); } diff --git a/src/components/Modal/src/hooks/useModal.ts b/src/components/Modal/src/hooks/useModal.ts index fac82b7..f461df1 100644 --- a/src/components/Modal/src/hooks/useModal.ts +++ b/src/components/Modal/src/hooks/useModal.ts @@ -4,7 +4,7 @@ import type { ModalProps, ReturnMethods, UseModalInnerReturnType, -} from '../typing'; +} from "../typing"; import { ref, onUnmounted, @@ -14,13 +14,13 @@ import { watchEffect, nextTick, toRaw, -} from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { isFunction } from '/@/utils/is'; -import { isEqual } from 'lodash-es'; -import { tryOnUnmounted } from '@vueuse/core'; -import { error } from '/@/utils/log'; -import { computed } from 'vue'; +} from "vue"; +import { isProdMode } from "/@/utils/env"; +import { isFunction } from "/@/utils/is"; +import { isEqual } from "lodash-es"; +import { tryOnUnmounted } from "@vueuse/core"; +import { error } from "/@/utils/log"; +import { computed } from "vue"; const dataTransfer = reactive<any>({}); @@ -32,11 +32,11 @@ const visibleData = reactive<{ [key: number]: boolean }>({}); export function useModal(): UseModalReturnType { const modal = ref<Nullable<ModalMethods>>(null); const loaded = ref<Nullable<boolean>>(false); - const uid = ref<string>(''); + const uid = ref<string>(""); function register(modalMethod: ModalMethods, uuid: string) { if (!getCurrentInstance()) { - throw new Error('useModal() can only be used inside setup() or functional components!'); + throw new Error("useModal() can only be used inside setup() or functional components!"); } uid.value = uuid; isProdMode() && @@ -57,7 +57,7 @@ export function useModal(): UseModalReturnType { const getInstance = () => { const instance = unref(modal); if (!instance) { - error('useModal instance is undefined!'); + error("useModal instance is undefined!"); } return instance; }; @@ -103,12 +103,12 @@ export function useModal(): UseModalReturnType { export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => { const modalInstanceRef = ref<Nullable<ModalMethods>>(null); const currentInstance = getCurrentInstance(); - const uidRef = ref<string>(''); + const uidRef = ref<string>(""); const getInstance = () => { const instance = unref(modalInstanceRef); if (!instance) { - error('useModalInner instance is undefined!'); + error("useModalInner instance is undefined!"); } return instance; }; @@ -120,7 +120,7 @@ export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => { }); uidRef.value = uuid; modalInstanceRef.value = modalInstance; - currentInstance?.emit('register', modalInstance, uuid); + currentInstance?.emit("register", modalInstance, uuid); }; watchEffect(() => { diff --git a/src/components/Modal/src/hooks/useModalContext.ts b/src/components/Modal/src/hooks/useModalContext.ts index 94d4c4e..eafce29 100644 --- a/src/components/Modal/src/hooks/useModalContext.ts +++ b/src/components/Modal/src/hooks/useModalContext.ts @@ -1,5 +1,5 @@ -import { InjectionKey } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import { InjectionKey } from "vue"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface ModalContextProps { redoModalHeight: () => void; diff --git a/src/components/Modal/src/hooks/useModalDrag.ts b/src/components/Modal/src/hooks/useModalDrag.ts index ff05b7b..c6674f2 100644 --- a/src/components/Modal/src/hooks/useModalDrag.ts +++ b/src/components/Modal/src/hooks/useModalDrag.ts @@ -1,5 +1,5 @@ -import { Ref, unref, watchEffect } from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; +import { Ref, unref, watchEffect } from "vue"; +import { useTimeoutFn } from "/@/hooks/core/useTimeout"; export interface UseModalDragMoveContext { draggable: Ref<boolean>; @@ -13,13 +13,13 @@ export function useModalDragMove(context: UseModalDragMoveContext) { }; const drag = (wrap: any) => { if (!wrap) return; - wrap.setAttribute('data-drag', unref(context.draggable)); - const dialogHeaderEl = wrap.querySelector('.ant-modal-header'); - const dragDom = wrap.querySelector('.ant-modal'); + wrap.setAttribute("data-drag", unref(context.draggable)); + const dialogHeaderEl = wrap.querySelector(".ant-modal-header"); + const dragDom = wrap.querySelector(".ant-modal"); if (!dialogHeaderEl || !dragDom || !unref(context.draggable)) return; - dialogHeaderEl.style.cursor = 'move'; + dialogHeaderEl.style.cursor = "move"; dialogHeaderEl.onmousedown = (e: any) => { if (!e) return; @@ -38,18 +38,18 @@ export function useModalDragMove(context: UseModalDragMoveContext) { const minDragDomTop = dragDom.offsetTop; const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight; // 获取到的值带px 正则匹配替换 - const domLeft = getStyle(dragDom, 'left'); - const domTop = getStyle(dragDom, 'top'); + const domLeft = getStyle(dragDom, "left"); + const domTop = getStyle(dragDom, "top"); let styL = +domLeft; let styT = +domTop; // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px - if (domLeft.includes('%')) { - styL = +document.body.clientWidth * (+domLeft.replace(/%/g, '') / 100); - styT = +document.body.clientHeight * (+domTop.replace(/%/g, '') / 100); + if (domLeft.includes("%")) { + styL = +document.body.clientWidth * (+domLeft.replace(/%/g, "") / 100); + styT = +document.body.clientHeight * (+domTop.replace(/%/g, "") / 100); } else { - styL = +domLeft.replace(/px/g, ''); - styT = +domTop.replace(/px/g, ''); + styL = +domLeft.replace(/px/g, ""); + styT = +domTop.replace(/px/g, ""); } document.onmousemove = function (e) { @@ -82,12 +82,12 @@ export function useModalDragMove(context: UseModalDragMoveContext) { }; const handleDrag = () => { - const dragWraps = document.querySelectorAll('.ant-modal-wrap'); + const dragWraps = document.querySelectorAll(".ant-modal-wrap"); for (const wrap of Array.from(dragWraps)) { if (!wrap) continue; - const display = getStyle(wrap, 'display'); - const draggable = wrap.getAttribute('data-drag'); - if (display !== 'none') { + const display = getStyle(wrap, "display"); + const draggable = wrap.getAttribute("data-drag"); + if (display !== "none") { // 拖拽位置 if (draggable === null || unref(context.destroyOnClose)) { drag(wrap); diff --git a/src/components/Modal/src/hooks/useModalFullScreen.ts b/src/components/Modal/src/hooks/useModalFullScreen.ts index b53563a..8286aa6 100644 --- a/src/components/Modal/src/hooks/useModalFullScreen.ts +++ b/src/components/Modal/src/hooks/useModalFullScreen.ts @@ -1,4 +1,4 @@ -import { computed, Ref, ref, unref } from 'vue'; +import { computed, Ref, ref, unref } from "vue"; export interface UseFullScreenContext { wrapClassName: Ref<string | undefined>; @@ -11,7 +11,7 @@ export function useFullScreen(context: UseFullScreenContext) { const fullScreenRef = ref(false); const getWrapClassName = computed(() => { - const clsName = unref(context.wrapClassName) || ''; + const clsName = unref(context.wrapClassName) || ""; return unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName); }); diff --git a/src/components/Modal/src/props.ts b/src/components/Modal/src/props.ts index c3c70c6..6c9c473 100644 --- a/src/components/Modal/src/props.ts +++ b/src/components/Modal/src/props.ts @@ -1,7 +1,7 @@ -import type { PropType, CSSProperties } from 'vue'; -import type { ModalWrapperProps } from './typing'; -import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { PropType, CSSProperties } from "vue"; +import type { ModalWrapperProps } from "./typing"; +import { ButtonProps } from "ant-design-vue/es/button/buttonTypes"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); @@ -13,8 +13,8 @@ export const modalProps = { // open drag draggable: { type: Boolean, default: true }, centered: { type: Boolean }, - cancelText: { type: String, default: t('common.cancelText') }, - okText: { type: String, default: t('common.okText') }, + cancelText: { type: String, default: t("common.cancelText") }, + okText: { type: String, default: t("common.okText") }, closeFunc: Function as PropType<() => Promise<boolean>>, }; @@ -65,7 +65,7 @@ export const basicProps = Object.assign({}, modalProps, { maskStyle: Object as PropType<CSSProperties>, - okType: { type: String, default: 'primary' }, + okType: { type: String, default: "primary" }, okButtonProps: Object as PropType<ButtonProps>, diff --git a/src/components/Modal/src/typing.ts b/src/components/Modal/src/typing.ts index 36a7e7c..0d73955 100644 --- a/src/components/Modal/src/typing.ts +++ b/src/components/Modal/src/typing.ts @@ -1,5 +1,5 @@ -import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes'; -import type { CSSProperties, VNodeChild, ComputedRef } from 'vue'; +import type { ButtonProps } from "ant-design-vue/lib/button/buttonTypes"; +import type { CSSProperties, VNodeChild, ComputedRef } from "vue"; /** * @description: 弹窗对外暴露的方法 */ @@ -50,7 +50,7 @@ export interface ModalProps { loading: boolean; loadingTip?: string; - wrapperProps: Omit<ModalWrapperProps, 'loading'>; + wrapperProps: Omit<ModalWrapperProps, "loading">; showOkBtn: boolean; showCancelBtn: boolean; @@ -155,7 +155,7 @@ export interface ModalProps { * @default 'primary' * @type string */ - okType?: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default'; + okType?: "primary" | "danger" | "dashed" | "ghost" | "default"; /** * The ok button props, follow jsx rules diff --git a/src/components/Page/index.ts b/src/components/Page/index.ts index 2d3f6dd..8d9ec43 100644 --- a/src/components/Page/index.ts +++ b/src/components/Page/index.ts @@ -1,9 +1,9 @@ -import { withInstall } from '/@/utils'; +import { withInstall } from "/@/utils"; -import pageFooter from './src/PageFooter.vue'; -import pageWrapper from './src/PageWrapper.vue'; +import pageFooter from "./src/PageFooter.vue"; +import pageWrapper from "./src/PageWrapper.vue"; export const PageFooter = withInstall(pageFooter); export const PageWrapper = withInstall(pageWrapper); -export const PageWrapperFixedHeightKey = 'PageWrapperFixedHeight'; +export const PageWrapperFixedHeightKey = "PageWrapperFixedHeight"; diff --git a/src/components/Page/src/PageFooter.vue b/src/components/Page/src/PageFooter.vue index e89a6ce..6adcd9b 100644 --- a/src/components/Page/src/PageFooter.vue +++ b/src/components/Page/src/PageFooter.vue @@ -10,22 +10,22 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { defineComponent } from "vue"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'PageFooter', + name: "PageFooter", inheritAttrs: false, setup() { - const { prefixCls } = useDesign('page-footer'); + const { prefixCls } = useDesign("page-footer"); const { getCalcContentWidth } = useMenuSetting(); return { prefixCls, getCalcContentWidth }; }, }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-page-footer'; + @prefix-cls: ~"@{namespace}-page-footer"; .@{prefix-cls} { position: fixed; diff --git a/src/components/Page/src/PageWrapper.vue b/src/components/Page/src/PageWrapper.vue index 8f6f0d5..bdb15b3 100644 --- a/src/components/Page/src/PageWrapper.vue +++ b/src/components/Page/src/PageWrapper.vue @@ -33,20 +33,20 @@ </div> </template> <script lang="ts"> - import { CSSProperties, PropType, provide } from 'vue'; + import { CSSProperties, PropType, provide } from "vue"; - import { defineComponent, computed, watch, ref, unref } from 'vue'; - import PageFooter from './PageFooter.vue'; + import { defineComponent, computed, watch, ref, unref } from "vue"; + import PageFooter from "./PageFooter.vue"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; - import { omit } from 'lodash-es'; - import { PageHeader } from 'ant-design-vue'; - import { useContentHeight } from '/@/hooks/web/useContentHeight'; - import { PageWrapperFixedHeightKey } from '..'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; + import { omit } from "lodash-es"; + import { PageHeader } from "ant-design-vue"; + import { useContentHeight } from "/@/hooks/web/useContentHeight"; + import { PageWrapperFixedHeightKey } from ".."; export default defineComponent({ - name: 'PageWrapper', + name: "PageWrapper", components: { PageFooter, PageHeader }, inheritAttrs: false, props: { @@ -68,7 +68,7 @@ const headerRef = ref(null); const contentRef = ref(null); const footerRef = ref(null); - const { prefixCls } = useDesign('page-wrapper'); + const { prefixCls } = useDesign("page-wrapper"); provide( PageWrapperFixedHeightKey, @@ -102,7 +102,7 @@ const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter); const getHeaderSlots = computed(() => { - return Object.keys(omit(slots, 'default', 'leftFooter', 'rightFooter', 'headerContent')); + return Object.keys(omit(slots, "default", "leftFooter", "rightFooter", "headerContent")); }); const getContentStyle = computed((): CSSProperties => { @@ -136,7 +136,7 @@ redoHeight(); }, { - flush: 'post', + flush: "post", immediate: true, }, ); @@ -158,7 +158,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-page-wrapper'; + @prefix-cls: ~"@{namespace}-page-wrapper"; .@{prefix-cls} { position: relative; diff --git a/src/components/Preview/index.ts b/src/components/Preview/index.ts index c0b4685..fcb6442 100644 --- a/src/components/Preview/index.ts +++ b/src/components/Preview/index.ts @@ -1,2 +1,2 @@ -export { default as ImagePreview } from './src/Preview.vue'; -export { createImgPreview } from './src/functional'; +export { default as ImagePreview } from "./src/Preview.vue"; +export { createImgPreview } from "./src/functional"; diff --git a/src/components/Preview/src/Functional.vue b/src/components/Preview/src/Functional.vue index 1c91929..1048d81 100644 --- a/src/components/Preview/src/Functional.vue +++ b/src/components/Preview/src/Functional.vue @@ -1,11 +1,11 @@ <script lang="tsx"> - import { defineComponent, ref, unref, computed, reactive, watchEffect } from 'vue'; - import { CloseOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons-vue'; - import resumeSvg from '/@/assets/svg/preview/resume.svg'; - import rotateSvg from '/@/assets/svg/preview/p-rotate.svg'; - import scaleSvg from '/@/assets/svg/preview/scale.svg'; - import unScaleSvg from '/@/assets/svg/preview/unscale.svg'; - import unRotateSvg from '/@/assets/svg/preview/unrotate.svg'; + import { defineComponent, ref, unref, computed, reactive, watchEffect } from "vue"; + import { CloseOutlined, LeftOutlined, RightOutlined } from "@ant-design/icons-vue"; + import resumeSvg from "/@/assets/svg/preview/resume.svg"; + import rotateSvg from "/@/assets/svg/preview/p-rotate.svg"; + import scaleSvg from "/@/assets/svg/preview/scale.svg"; + import unScaleSvg from "/@/assets/svg/preview/unscale.svg"; + import unRotateSvg from "/@/assets/svg/preview/unrotate.svg"; enum StatueEnum { LOADING, @@ -51,11 +51,11 @@ }, }; - const prefixCls = 'img-preview'; + const prefixCls = "img-preview"; export default defineComponent({ - name: 'ImagePreview', + name: "ImagePreview", props, - emits: ['img-load', 'img-error'], + emits: ["img-load", "img-error"], setup(props, { expose, emit }) { interface stateInfo { scale: number; @@ -65,7 +65,7 @@ } const stateMap = new Map<string, stateInfo>(); const imgState = reactive<ImgState>({ - currentUrl: '', + currentUrl: "", imgScale: 1, imgRotate: 0, imgTop: 0, @@ -86,7 +86,7 @@ const { index, imageList } = props; if (!imageList || !imageList.length) { - throw new Error('imageList is undefined'); + throw new Error("imageList is undefined"); } imgState.currentIndex = index; handleIChangeImage(imageList[index]); @@ -108,7 +108,7 @@ } (wrapEl as any).onmousewheel = scrollFunc; // 火狐浏览器没有onmousewheel事件,用DOMMouseScroll代替 - document.body.addEventListener('DOMMouseScroll', scrollFunc); + document.body.addEventListener("DOMMouseScroll", scrollFunc); // 禁止火狐浏览器下拖拽图片的默认事件 document.ondragstart = function () { return false; @@ -193,7 +193,7 @@ } ele && - emit('img-load', { + emit("img-load", { index: imgState.currentIndex, dom: ele[0] as HTMLImageElement, url, @@ -205,7 +205,7 @@ img.onerror = (e: Event) => { const ele: EventTarget[] = e.composedPath(); ele && - emit('img-error', { + emit("img-error", { index: imgState.currentIndex, dom: ele[0] as HTMLImageElement, url, @@ -223,7 +223,7 @@ function close() { imgState.show = false; // 移除火狐浏览器下的鼠标滚动事件 - document.body.removeEventListener('DOMMouseScroll', scrollFunc); + document.body.removeEventListener("DOMMouseScroll", scrollFunc); // 恢复火狐及Safari浏览器下的图片拖拽 document.ondragstart = null; } @@ -236,8 +236,8 @@ expose({ resume, close, - prev: handleChange.bind(null, 'left'), - next: handleChange.bind(null, 'right'), + prev: handleChange.bind(null, "left"), + next: handleChange.bind(null, "right"), setScale: (scale: number) => { if (scale > 0 && scale <= 10) imgState.imgScale = scale; }, @@ -247,16 +247,16 @@ }); // 上一页下一页 - function handleChange(direction: 'left' | 'right') { + function handleChange(direction: "left" | "right") { const { currentIndex } = imgState; const { imageList } = props; - if (direction === 'left') { + if (direction === "left") { imgState.currentIndex--; if (currentIndex <= 0) { imgState.currentIndex = imageList.length - 1; } } - if (direction === 'right') { + if (direction === "right") { imgState.currentIndex++; if (currentIndex >= imageList.length - 1) { imgState.currentIndex = 0; @@ -293,7 +293,7 @@ transform: `scale(${imgScale}) rotate(${imgRotate}deg)`, marginTop: `${imgTop}px`, marginLeft: `${imgLeft}px`, - maxWidth: props.defaultWidth ? 'unset' : '100%', + maxWidth: props.defaultWidth ? "unset" : "100%", }; }); @@ -370,13 +370,13 @@ ); }; - const renderArrow = (direction: 'left' | 'right') => { + const renderArrow = (direction: "left" | "right") => { if (!unref(getIsMultipleImage)) { return null; } return ( <div class={[`${prefixCls}__arrow`, direction]} onClick={() => handleChange(direction)}> - {direction === 'left' ? <LeftOutlined /> : <RightOutlined />} + {direction === "left" ? <LeftOutlined /> : <RightOutlined />} </div> ); }; @@ -405,7 +405,7 @@ style={unref(getImageStyle)} class={[ `${prefixCls}-image`, - imgState.status === StatueEnum.DONE ? '' : 'hidden', + imgState.status === StatueEnum.DONE ? "" : "hidden", ]} ref={imgElRef} src={imgState.currentUrl} @@ -414,8 +414,8 @@ {renderClose()} {renderIndex()} {renderController()} - {renderArrow('left')} - {renderArrow('right')} + {renderArrow("left")} + {renderArrow("right")} </div> </div> ) diff --git a/src/components/Preview/src/Preview.vue b/src/components/Preview/src/Preview.vue index 9996d0b..ed7cd23 100644 --- a/src/components/Preview/src/Preview.vue +++ b/src/components/Preview/src/Preview.vue @@ -15,13 +15,13 @@ </div> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import { defineComponent, computed } from 'vue'; + import type { PropType } from "vue"; + import { defineComponent, computed } from "vue"; - import { Image } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; - import { isString } from '/@/utils/is'; + import { Image } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; + import { isString } from "/@/utils/is"; interface ImageProps { alt?: string; @@ -42,7 +42,7 @@ type ImageItem = string | ImageProps; export default defineComponent({ - name: 'ImagePreview', + name: "ImagePreview", components: { Image, PreviewGroup: Image.PreviewGroup, @@ -54,7 +54,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('image-preview'); + const { prefixCls } = useDesign("image-preview"); const getImageList = computed((): any[] => { const { imageList } = props; @@ -80,7 +80,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-image-preview'; + @prefix-cls: ~"@{namespace}-image-preview"; .@{prefix-cls} { .ant-image { diff --git a/src/components/Preview/src/functional.ts b/src/components/Preview/src/functional.ts index 74073a2..f086672 100644 --- a/src/components/Preview/src/functional.ts +++ b/src/components/Preview/src/functional.ts @@ -1,13 +1,13 @@ -import type { Options, Props } from './typing'; -import ImgPreview from './Functional.vue'; -import { isClient } from '/@/utils/is'; -import { createVNode, render } from 'vue'; +import type { Options, Props } from "./typing"; +import ImgPreview from "./Functional.vue"; +import { isClient } from "/@/utils/is"; +import { createVNode, render } from "vue"; let instance: ReturnType<typeof createVNode> | null = null; export function createImgPreview(options: Options) { if (!isClient) return; const propsData: Partial<Props> = {}; - const container = document.createElement('div'); + const container = document.createElement("div"); Object.assign(propsData, { show: true, index: 0, scaleStep: 100 }, options); instance = createVNode(ImgPreview, propsData); diff --git a/src/components/Qrcode/index.ts b/src/components/Qrcode/index.ts index 16a2f40..8eeb167 100644 --- a/src/components/Qrcode/index.ts +++ b/src/components/Qrcode/index.ts @@ -1,5 +1,5 @@ -import { withInstall } from '/@/utils'; -import qrCode from './src/Qrcode.vue'; +import { withInstall } from "/@/utils"; +import qrCode from "./src/Qrcode.vue"; export const QrCode = withInstall(qrCode); -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/Qrcode/src/Qrcode.vue b/src/components/Qrcode/src/Qrcode.vue index 81194e1..52e5482 100644 --- a/src/components/Qrcode/src/Qrcode.vue +++ b/src/components/Qrcode/src/Qrcode.vue @@ -4,14 +4,14 @@ </div> </template> <script lang="ts"> - import { defineComponent, watch, PropType, ref, unref, onMounted } from 'vue'; - import { toCanvas, QRCodeRenderersOptions, LogoType } from './qrcodePlus'; - import { toDataURL } from 'qrcode'; - import { downloadByUrl } from '/@/utils/file/download'; - import { QrcodeDoneEventParams } from './typing'; + import { defineComponent, watch, PropType, ref, unref, onMounted } from "vue"; + import { toCanvas, QRCodeRenderersOptions, LogoType } from "./qrcodePlus"; + import { toDataURL } from "qrcode"; + import { downloadByUrl } from "/@/utils/file/download"; + import { QrcodeDoneEventParams } from "./typing"; export default defineComponent({ - name: 'QrCode', + name: "QrCode", props: { value: { type: [String, Array] as PropType<string | any[]>, @@ -30,13 +30,13 @@ // 中间logo图标 logo: { type: [String, Object] as PropType<Partial<LogoType> | string>, - default: '', + default: "", }, // img 不支持内嵌logo tag: { - type: String as PropType<'canvas' | 'img'>, - default: 'canvas', - validator: (v: string) => ['canvas', 'img'].includes(v), + type: String as PropType<"canvas" | "img">, + default: "canvas", + validator: (v: string) => ["canvas", "img"].includes(v), }, }, emits: { done: (data: QrcodeDoneEventParams) => !!data, error: (error: any) => !!error }, @@ -50,7 +50,7 @@ if (!wrapEl) return; - if (tag === 'canvas') { + if (tag === "canvas") { const url: string = await toCanvas({ canvas: wrapEl, width, @@ -58,28 +58,28 @@ content: renderValue, options: options || {}, }); - emit('done', { url, ctx: (wrapEl as HTMLCanvasElement).getContext('2d') }); + emit("done", { url, ctx: (wrapEl as HTMLCanvasElement).getContext("2d") }); return; } - if (tag === 'img') { + if (tag === "img") { const url = await toDataURL(renderValue, { - errorCorrectionLevel: 'H', + errorCorrectionLevel: "H", width, ...options, }); (unref(wrapRef) as HTMLImageElement).src = url; - emit('done', { url }); + emit("done", { url }); } } catch (error) { - emit('error', error); + emit("error", error); } } /** * file download */ function download(fileName?: string) { - let url = ''; + let url = ""; const wrapEl = unref(wrapRef); if (wrapEl instanceof HTMLCanvasElement) { url = wrapEl.toDataURL(); diff --git a/src/components/Qrcode/src/drawCanvas.ts b/src/components/Qrcode/src/drawCanvas.ts index 53198e8..411ccde 100644 --- a/src/components/Qrcode/src/drawCanvas.ts +++ b/src/components/Qrcode/src/drawCanvas.ts @@ -1,7 +1,7 @@ -import { toCanvas } from 'qrcode'; -import type { QRCodeRenderersOptions } from 'qrcode'; -import { RenderQrCodeParams, ContentType } from './typing'; -import { cloneDeep } from 'lodash-es'; +import { toCanvas } from "qrcode"; +import type { QRCodeRenderersOptions } from "qrcode"; +import { RenderQrCodeParams, ContentType } from "./typing"; +import { cloneDeep } from "lodash-es"; export const renderQrCode = ({ canvas, @@ -21,17 +21,17 @@ export const renderQrCode = ({ // 得到原QrCode的大小,以便缩放得到正确的QrCode大小 function getOriginWidth(content: ContentType, options: QRCodeRenderersOptions) { - const _canvas = document.createElement('canvas'); + const _canvas = document.createElement("canvas"); return toCanvas(_canvas, content, options).then(() => _canvas.width); } // 对于内容少的QrCode,增大容错率 function getErrorCorrectionLevel(content: ContentType) { if (content.length > 36) { - return 'M'; + return "M"; } else if (content.length > 16) { - return 'Q'; + return "Q"; } else { - return 'H'; + return "H"; } } diff --git a/src/components/Qrcode/src/drawLogo.ts b/src/components/Qrcode/src/drawLogo.ts index 85a160f..646839a 100644 --- a/src/components/Qrcode/src/drawLogo.ts +++ b/src/components/Qrcode/src/drawLogo.ts @@ -1,5 +1,5 @@ -import { isString } from '/@/utils/is'; -import { RenderQrCodeParams, LogoType } from './typing'; +import { isString } from "/@/utils/is"; +import { RenderQrCodeParams, LogoType } from "./typing"; export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { if (!logo) { return new Promise((resolve) => { @@ -9,7 +9,7 @@ export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { const canvasWidth = (canvas as HTMLCanvasElement).width; const { logoSize = 0.15, - bgColor = '#ffffff', + bgColor = "#ffffff", borderSize = 0.05, crossOrigin, borderRadius = 8, @@ -22,7 +22,7 @@ export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { const logoBgWidth = canvasWidth * (logoSize + borderSize); const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2; - const ctx = canvas.getContext('2d'); + const ctx = canvas.getContext("2d"); if (!ctx) return; // logo 底色 @@ -33,7 +33,7 @@ export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { // logo const image = new Image(); if (crossOrigin || logoRadius) { - image.setAttribute('crossOrigin', crossOrigin || 'anonymous'); + image.setAttribute("crossOrigin", crossOrigin || "anonymous"); } image.src = logoSrc; @@ -44,16 +44,16 @@ export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { // 使用canvas绘制以获得更多的功能 const drawLogoWithCanvas = (image: HTMLImageElement) => { - const canvasImage = document.createElement('canvas'); + const canvasImage = document.createElement("canvas"); canvasImage.width = logoXY + logoWidth; canvasImage.height = logoXY + logoWidth; - const imageCanvas = canvasImage.getContext('2d'); + const imageCanvas = canvasImage.getContext("2d"); if (!imageCanvas || !ctx) return; imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius); if (!ctx) return; - const fillStyle = ctx.createPattern(canvasImage, 'no-repeat'); + const fillStyle = ctx.createPattern(canvasImage, "no-repeat"); if (fillStyle) { ctx.fillStyle = fillStyle; ctx.fill(); diff --git a/src/components/Qrcode/src/qrcodePlus.ts b/src/components/Qrcode/src/qrcodePlus.ts index 6439861..40b99d1 100644 --- a/src/components/Qrcode/src/qrcodePlus.ts +++ b/src/components/Qrcode/src/qrcodePlus.ts @@ -1,4 +1,4 @@ // 参考 qr-code-with-logo 进行ts版本修改 -import { toCanvas } from './toCanvas'; -export * from './typing'; +import { toCanvas } from "./toCanvas"; +export * from "./typing"; export { toCanvas }; diff --git a/src/components/Qrcode/src/toCanvas.ts b/src/components/Qrcode/src/toCanvas.ts index f74d596..990c988 100644 --- a/src/components/Qrcode/src/toCanvas.ts +++ b/src/components/Qrcode/src/toCanvas.ts @@ -1,6 +1,6 @@ -import { renderQrCode } from './drawCanvas'; -import { drawLogo } from './drawLogo'; -import { RenderQrCodeParams } from './typing'; +import { renderQrCode } from "./drawCanvas"; +import { drawLogo } from "./drawLogo"; +import { RenderQrCodeParams } from "./typing"; export const toCanvas = (options: RenderQrCodeParams) => { return renderQrCode(options) .then(() => { diff --git a/src/components/Qrcode/src/typing.ts b/src/components/Qrcode/src/typing.ts index 3a037e9..bf9699f 100644 --- a/src/components/Qrcode/src/typing.ts +++ b/src/components/Qrcode/src/typing.ts @@ -1,4 +1,4 @@ -import type { QRCodeSegment, QRCodeRenderersOptions } from 'qrcode'; +import type { QRCodeSegment, QRCodeRenderersOptions } from "qrcode"; export type ContentType = string | QRCodeSegment[]; diff --git a/src/components/Scrollbar/index.ts b/src/components/Scrollbar/index.ts index e5b2cb2..2180ea1 100644 --- a/src/components/Scrollbar/index.ts +++ b/src/components/Scrollbar/index.ts @@ -2,7 +2,7 @@ * copy from element-ui */ -import Scrollbar from './src/Scrollbar.vue'; +import Scrollbar from "./src/Scrollbar.vue"; export { Scrollbar }; -export type { ScrollbarType } from './src/types'; +export type { ScrollbarType } from "./src/types"; diff --git a/src/components/Scrollbar/src/Scrollbar.vue b/src/components/Scrollbar/src/Scrollbar.vue index ed08026..c6ee363 100644 --- a/src/components/Scrollbar/src/Scrollbar.vue +++ b/src/components/Scrollbar/src/Scrollbar.vue @@ -17,10 +17,10 @@ </div> </template> <script lang="ts"> - import { addResizeListener, removeResizeListener } from '/@/utils/event'; - import componentSetting from '/@/settings/componentSetting'; + import { addResizeListener, removeResizeListener } from "/@/utils/event"; + import componentSetting from "/@/settings/componentSetting"; const { scrollbar } = componentSetting; - import { toObject } from './util'; + import { toObject } from "./util"; import { defineComponent, ref, @@ -30,11 +30,11 @@ provide, computed, unref, - } from 'vue'; - import Bar from './bar'; + } from "vue"; + import Bar from "./bar"; export default defineComponent({ - name: 'Scrollbar', + name: "Scrollbar", // inheritAttrs: false, components: { Bar }, props: { @@ -44,35 +44,35 @@ }, wrapStyle: { type: [String, Array], - default: '', + default: "", }, wrapClass: { type: [String, Array], - default: '', + default: "", }, viewClass: { type: [String, Array], - default: '', + default: "", }, viewStyle: { type: [String, Array], - default: '', + default: "", }, noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能 tag: { type: String, - default: 'div', + default: "div", }, }, setup(props) { - const sizeWidth = ref('0'); - const sizeHeight = ref('0'); + const sizeWidth = ref("0"); + const sizeHeight = ref("0"); const moveX = ref(0); const moveY = ref(0); const wrap = ref(); const resize = ref(); - provide('scroll-bar-wrap', wrap); + provide("scroll-bar-wrap", wrap); const style = computed(() => { if (Array.isArray(props.wrapStyle)) { @@ -94,8 +94,8 @@ const heightPercentage = (unref(wrap).clientHeight * 100) / unref(wrap).scrollHeight; const widthPercentage = (unref(wrap).clientWidth * 100) / unref(wrap).scrollWidth; - sizeHeight.value = heightPercentage < 100 ? heightPercentage + '%' : ''; - sizeWidth.value = widthPercentage < 100 ? widthPercentage + '%' : ''; + sizeHeight.value = heightPercentage < 100 ? heightPercentage + "%" : ""; + sizeWidth.value = widthPercentage < 100 ? widthPercentage + "%" : ""; }; onMounted(() => { @@ -104,7 +104,7 @@ if (!props.noresize) { addResizeListener(unref(resize), update); addResizeListener(unref(wrap), update); - addEventListener('resize', update); + addEventListener("resize", update); } }); @@ -113,7 +113,7 @@ if (!props.noresize) { removeResizeListener(unref(resize), update); removeResizeListener(unref(wrap), update); - removeEventListener('resize', update); + removeEventListener("resize", update); } }); diff --git a/src/components/Scrollbar/src/bar.ts b/src/components/Scrollbar/src/bar.ts index 64bd289..b992d29 100644 --- a/src/components/Scrollbar/src/bar.ts +++ b/src/components/Scrollbar/src/bar.ts @@ -7,13 +7,13 @@ import { onUnmounted, inject, Ref, -} from 'vue'; -import { on, off } from '/@/utils/domUtils'; +} from "vue"; +import { on, off } from "/@/utils/domUtils"; -import { renderThumbStyle, BAR_MAP } from './util'; +import { renderThumbStyle, BAR_MAP } from "./util"; export default defineComponent({ - name: 'Bar', + name: "Bar", props: { vertical: Boolean, @@ -24,9 +24,9 @@ export default defineComponent({ setup(props) { const instance = getCurrentInstance(); const thumb = ref(); - const wrap = inject('scroll-bar-wrap', {} as Ref<Nullable<HTMLElement>>) as any; + const wrap = inject("scroll-bar-wrap", {} as Ref<Nullable<HTMLElement>>) as any; const bar = computed(() => { - return BAR_MAP[props.vertical ? 'vertical' : 'horizontal']; + return BAR_MAP[props.vertical ? "vertical" : "horizontal"]; }); const barStore = ref<Recordable>({}); const cursorDown = ref(); @@ -56,8 +56,8 @@ export default defineComponent({ const startDrag = (e: any) => { e.stopImmediatePropagation(); cursorDown.value = true; - on(document, 'mousemove', mouseMoveDocumentHandler); - on(document, 'mouseup', mouseUpDocumentHandler); + on(document, "mousemove", mouseMoveDocumentHandler); + on(document, "mouseup", mouseUpDocumentHandler); document.onselectstart = () => false; }; @@ -80,24 +80,24 @@ export default defineComponent({ function mouseUpDocumentHandler() { cursorDown.value = false; barStore.value[bar.value.axis] = 0; - off(document, 'mousemove', mouseMoveDocumentHandler); + off(document, "mousemove", mouseMoveDocumentHandler); document.onselectstart = null; } onUnmounted(() => { - off(document, 'mouseup', mouseUpDocumentHandler); + off(document, "mouseup", mouseUpDocumentHandler); }); return () => h( - 'div', + "div", { - class: ['scrollbar__bar', 'is-' + bar.value.key], + class: ["scrollbar__bar", "is-" + bar.value.key], onMousedown: clickTrackHandler, }, - h('div', { + h("div", { ref: thumb, - class: 'scrollbar__thumb', + class: "scrollbar__thumb", onMousedown: clickThumbHandler, style: renderThumbStyle({ size: props.size, diff --git a/src/components/Scrollbar/src/util.ts b/src/components/Scrollbar/src/util.ts index b7c4845..59454f6 100644 --- a/src/components/Scrollbar/src/util.ts +++ b/src/components/Scrollbar/src/util.ts @@ -1,24 +1,24 @@ -import type { BarMap } from './types'; +import type { BarMap } from "./types"; export const BAR_MAP: BarMap = { vertical: { - offset: 'offsetHeight', - scroll: 'scrollTop', - scrollSize: 'scrollHeight', - size: 'height', - key: 'vertical', - axis: 'Y', - client: 'clientY', - direction: 'top', + offset: "offsetHeight", + scroll: "scrollTop", + scrollSize: "scrollHeight", + size: "height", + key: "vertical", + axis: "Y", + client: "clientY", + direction: "top", }, horizontal: { - offset: 'offsetWidth', - scroll: 'scrollLeft', - scrollSize: 'scrollWidth', - size: 'width', - key: 'horizontal', - axis: 'X', - client: 'clientX', - direction: 'left', + offset: "offsetWidth", + scroll: "scrollLeft", + scrollSize: "scrollWidth", + size: "width", + key: "horizontal", + axis: "X", + client: "clientX", + direction: "left", }, }; diff --git a/src/components/SimpleMenu/index.ts b/src/components/SimpleMenu/index.ts index 0dfd248..6d91307 100644 --- a/src/components/SimpleMenu/index.ts +++ b/src/components/SimpleMenu/index.ts @@ -1,2 +1,2 @@ -export { default as SimpleMenu } from './src/SimpleMenu.vue'; -export { default as SimpleMenuTag } from './src/SimpleMenuTag.vue'; +export { default as SimpleMenu } from "./src/SimpleMenu.vue"; +export { default as SimpleMenuTag } from "./src/SimpleMenuTag.vue"; diff --git a/src/components/SimpleMenu/src/SimpleMenu.vue b/src/components/SimpleMenu/src/SimpleMenu.vue index 45015be..87979ce 100644 --- a/src/components/SimpleMenu/src/SimpleMenu.vue +++ b/src/components/SimpleMenu/src/SimpleMenu.vue @@ -18,23 +18,23 @@ </Menu> </template> <script lang="ts"> - import type { MenuState } from './types'; - import type { Menu as MenuType } from '/@/router/types'; - import type { RouteLocationNormalizedLoaded } from 'vue-router'; - import { defineComponent, computed, ref, unref, reactive, toRefs, watch } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import Menu from './components/Menu.vue'; - import SimpleSubMenu from './SimpleSubMenu.vue'; - import { listenerRouteChange } from '/@/logics/mitt/routeChange'; - import { propTypes } from '/@/utils/propTypes'; - import { REDIRECT_NAME } from '/@/router/constant'; - import { useRouter } from 'vue-router'; - import { isFunction, isUrl } from '/@/utils/is'; - import { openWindow } from '/@/utils'; - - import { useOpenKeys } from './useOpenKeys'; + import type { MenuState } from "./types"; + import type { Menu as MenuType } from "/@/router/types"; + import type { RouteLocationNormalizedLoaded } from "vue-router"; + import { defineComponent, computed, ref, unref, reactive, toRefs, watch } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import Menu from "./components/Menu.vue"; + import SimpleSubMenu from "./SimpleSubMenu.vue"; + import { listenerRouteChange } from "/@/logics/mitt/routeChange"; + import { propTypes } from "/@/utils/propTypes"; + import { REDIRECT_NAME } from "/@/router/constant"; + import { useRouter } from "vue-router"; + import { isFunction, isUrl } from "/@/utils/is"; + import { openWindow } from "/@/utils"; + + import { useOpenKeys } from "./useOpenKeys"; export default defineComponent({ - name: 'SimpleMenu', + name: "SimpleMenu", components: { Menu, SimpleSubMenu, @@ -55,19 +55,19 @@ }, isSplitMenu: propTypes.bool, }, - emits: ['menuClick'], + emits: ["menuClick"], setup(props, { attrs, emit }) { - const currentActiveMenu = ref(''); + const currentActiveMenu = ref(""); const isClickGo = ref(false); const menuState = reactive<MenuState>({ - activeName: '', + activeName: "", openNames: [], activeSubMenuNames: [], }); const { currentRoute } = useRouter(); - const { prefixCls } = useDesign('simple-menu'); + const { prefixCls } = useDesign("simple-menu"); const { items, accordion, mixSider, collapse } = toRefs(props); const { setOpenKeys, getOpenKeys } = useOpenKeys( @@ -100,7 +100,7 @@ } setOpenKeys(currentRoute.value.path); }, - { flush: 'post' }, + { flush: "post" }, ); listenerRouteChange((route) => { @@ -138,7 +138,7 @@ if (!flag) return; } - emit('menuClick', key); + emit("menuClick", key); isClickGo.value = true; setOpenKeys(key); @@ -156,5 +156,5 @@ }); </script> <style lang="less"> - @import './index.less'; + @import "./index.less"; </style> diff --git a/src/components/SimpleMenu/src/SimpleMenuTag.vue b/src/components/SimpleMenu/src/SimpleMenuTag.vue index b7d3cb3..12e2fa4 100644 --- a/src/components/SimpleMenu/src/SimpleMenuTag.vue +++ b/src/components/SimpleMenu/src/SimpleMenuTag.vue @@ -2,15 +2,15 @@ <span :class="getTagClass" v-if="getShowTag">{{ getContent }}</span> </template> <script lang="ts"> - import type { Menu } from '/@/router/types'; + import type { Menu } from "/@/router/types"; - import { defineComponent, computed } from 'vue'; + import { defineComponent, computed } from "vue"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'SimpleMenuTag', + name: "SimpleMenuTag", props: { item: { type: Object as PropType<Menu>, @@ -20,7 +20,7 @@ collapseParent: propTypes.bool, }, setup(props) { - const { prefixCls } = useDesign('simple-menu'); + const { prefixCls } = useDesign("simple-menu"); const getShowTag = computed(() => { const { item } = props; @@ -36,17 +36,17 @@ }); const getContent = computed(() => { - if (!getShowTag.value) return ''; + if (!getShowTag.value) return ""; const { item, collapseParent } = props; const { tag } = item; const { dot, content } = tag!; - return dot || collapseParent ? '' : content; + return dot || collapseParent ? "" : content; }); const getTagClass = computed(() => { const { item, collapseParent } = props; const { tag = {} } = item || {}; - const { dot, type = 'error' } = tag; + const { dot, type = "error" } = tag; const tagCls = `${prefixCls}-tag`; return [ tagCls, diff --git a/src/components/SimpleMenu/src/SimpleSubMenu.vue b/src/components/SimpleMenu/src/SimpleSubMenu.vue index bb4e778..4ed31b0 100644 --- a/src/components/SimpleMenu/src/SimpleSubMenu.vue +++ b/src/components/SimpleMenu/src/SimpleSubMenu.vue @@ -40,25 +40,25 @@ </SubMenu> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import type { Menu } from '/@/router/types'; + import type { PropType } from "vue"; + import type { Menu } from "/@/router/types"; - import { defineComponent, computed } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import Icon from '/@/components/Icon/index'; + import { defineComponent, computed } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import Icon from "/@/components/Icon/index"; - import MenuItem from './components/MenuItem.vue'; - import SubMenu from './components/SubMenuItem.vue'; - import { propTypes } from '/@/utils/propTypes'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; + import MenuItem from "./components/MenuItem.vue"; + import SubMenu from "./components/SubMenuItem.vue"; + import { propTypes } from "/@/utils/propTypes"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; export default defineComponent({ - name: 'SimpleSubMenu', + name: "SimpleSubMenu", components: { SubMenu, MenuItem, - SimpleMenuTag: createAsyncComponent(() => import('./SimpleMenuTag.vue')), + SimpleMenuTag: createAsyncComponent(() => import("./SimpleMenuTag.vue")), Icon, }, props: { @@ -69,11 +69,11 @@ parent: propTypes.bool, collapsedShowTitle: propTypes.bool, collapse: propTypes.bool, - theme: propTypes.oneOf(['dark', 'light']), + theme: propTypes.oneOf(["dark", "light"]), }, setup(props) { const { t } = useI18n(); - const { prefixCls } = useDesign('simple-menu'); + const { prefixCls } = useDesign("simple-menu"); const getShowMenu = computed(() => !props.item?.meta?.hideMenu); const getIcon = computed(() => props.item?.icon); @@ -92,7 +92,7 @@ function menuHasChildren(menuTreeItem: Menu): boolean { return ( !menuTreeItem.meta?.hideChildrenInMenu && - Reflect.has(menuTreeItem, 'children') && + Reflect.has(menuTreeItem, "children") && !!menuTreeItem.children && menuTreeItem.children.length > 0 ); diff --git a/src/components/SimpleMenu/src/components/Menu.vue b/src/components/SimpleMenu/src/components/Menu.vue index 28f78fb..76027e8 100644 --- a/src/components/SimpleMenu/src/components/Menu.vue +++ b/src/components/SimpleMenu/src/components/Menu.vue @@ -5,8 +5,8 @@ </template> <script lang="ts"> - import type { PropType } from 'vue'; - import type { SubMenuProvider } from './types'; + import type { PropType } from "vue"; + import type { SubMenuProvider } from "./types"; import { defineComponent, ref, @@ -17,24 +17,24 @@ nextTick, getCurrentInstance, provide, - } from 'vue'; + } from "vue"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; - import { createSimpleRootMenuContext } from './useSimpleMenuContext'; - import mitt from '/@/utils/mitt'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; + import { createSimpleRootMenuContext } from "./useSimpleMenuContext"; + import mitt from "/@/utils/mitt"; export default defineComponent({ - name: 'Menu', + name: "Menu", props: { - theme: propTypes.oneOf(['light', 'dark']).def('light'), + theme: propTypes.oneOf(["light", "dark"]).def("light"), activeName: propTypes.oneOfType([propTypes.string, propTypes.number]), openNames: { type: Array as PropType<string[]>, default: () => [], }, accordion: propTypes.bool.def(true), - width: propTypes.string.def('100%'), - collapsedWidth: propTypes.string.def('48px'), + width: propTypes.string.def("100%"), + collapsedWidth: propTypes.string.def("48px"), indentSize: propTypes.number.def(16), collapse: propTypes.bool.def(true), activeSubMenuNames: { @@ -42,15 +42,15 @@ default: () => [], }, }, - emits: ['select', 'open-change'], + emits: ["select", "open-change"], setup(props, { emit }) { const rootMenuEmitter = mitt(); const instance = getCurrentInstance(); - const currentActiveName = ref<string | number>(''); + const currentActiveName = ref<string | number>(""); const openedNames = ref<string[]>([]); - const { prefixCls } = useDesign('menu'); + const { prefixCls } = useDesign("menu"); const isRemoveAllPopup = ref(false); @@ -91,7 +91,7 @@ ); function updateOpened() { - rootMenuEmitter.emit('on-update-opened', openedNames.value); + rootMenuEmitter.emit("on-update-opened", openedNames.value); } function addSubMenu(name: string) { @@ -130,16 +130,16 @@ onMounted(() => { openedNames.value = !props.collapse ? [...props.openNames] : []; updateOpened(); - rootMenuEmitter.on('on-menu-item-select', (name: string) => { + rootMenuEmitter.on("on-menu-item-select", (name: string) => { currentActiveName.value = name; nextTick(() => { props.collapse && removeAll(); }); - emit('select', name); + emit("select", name); }); - rootMenuEmitter.on('open-name-change', ({ name, opened }) => { + rootMenuEmitter.on("open-name-change", ({ name, opened }) => { if (opened && !openedNames.value.includes(name)) { openedNames.value.push(name); } else if (!opened) { @@ -154,5 +154,5 @@ }); </script> <style lang="less"> - @import './menu.less'; + @import "./menu.less"; </style> diff --git a/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue b/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue index 5295439..c2d6700 100644 --- a/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue +++ b/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue @@ -4,22 +4,22 @@ </transition> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { addClass, removeClass } from '/@/utils/domUtils'; + import { defineComponent } from "vue"; + import { addClass, removeClass } from "/@/utils/domUtils"; export default defineComponent({ - name: 'MenuCollapseTransition', + name: "MenuCollapseTransition", setup() { return { on: { beforeEnter(el) { - addClass(el, 'collapse-transition'); + addClass(el, "collapse-transition"); if (!el.dataset) el.dataset = {}; el.dataset.oldPaddingTop = el.style.paddingTop; el.dataset.oldPaddingBottom = el.style.paddingBottom; - el.style.height = '0'; + el.style.height = "0"; el.style.paddingTop = 0; el.style.paddingBottom = 0; }, @@ -27,21 +27,21 @@ enter(el) { el.dataset.oldOverflow = el.style.overflow; if (el.scrollHeight !== 0) { - el.style.height = el.scrollHeight + 'px'; + el.style.height = el.scrollHeight + "px"; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } else { - el.style.height = ''; + el.style.height = ""; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } - el.style.overflow = 'hidden'; + el.style.overflow = "hidden"; }, afterEnter(el) { - removeClass(el, 'collapse-transition'); - el.style.height = ''; + removeClass(el, "collapse-transition"); + el.style.height = ""; el.style.overflow = el.dataset.oldOverflow; }, @@ -51,13 +51,13 @@ el.dataset.oldPaddingBottom = el.style.paddingBottom; el.dataset.oldOverflow = el.style.overflow; - el.style.height = el.scrollHeight + 'px'; - el.style.overflow = 'hidden'; + el.style.height = el.scrollHeight + "px"; + el.style.overflow = "hidden"; }, leave(el) { if (el.scrollHeight !== 0) { - addClass(el, 'collapse-transition'); + addClass(el, "collapse-transition"); el.style.height = 0; el.style.paddingTop = 0; el.style.paddingBottom = 0; @@ -65,8 +65,8 @@ }, afterLeave(el) { - removeClass(el, 'collapse-transition'); - el.style.height = ''; + removeClass(el, "collapse-transition"); + el.style.height = ""; el.style.overflow = el.dataset.oldOverflow; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; diff --git a/src/components/SimpleMenu/src/components/MenuItem.vue b/src/components/SimpleMenu/src/components/MenuItem.vue index c4976de..d47479f 100644 --- a/src/components/SimpleMenu/src/components/MenuItem.vue +++ b/src/components/SimpleMenu/src/components/MenuItem.vue @@ -17,15 +17,15 @@ </template> <script lang="ts"> - import { PropType } from 'vue'; - import { defineComponent, ref, computed, unref, getCurrentInstance, watch } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; - import { useMenuItem } from './useMenu'; - import { Tooltip } from 'ant-design-vue'; - import { useSimpleRootMenuContext } from './useSimpleMenuContext'; + import { PropType } from "vue"; + import { defineComponent, ref, computed, unref, getCurrentInstance, watch } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; + import { useMenuItem } from "./useMenu"; + import { Tooltip } from "ant-design-vue"; + import { useSimpleRootMenuContext } from "./useSimpleMenuContext"; export default defineComponent({ - name: 'MenuItem', + name: "MenuItem", components: { Tooltip }, props: { name: { @@ -42,7 +42,7 @@ const { getItemStyle, getParentList, getParentMenu, getParentRootMenu } = useMenuItem(instance); - const { prefixCls } = useDesign('menu'); + const { prefixCls } = useDesign("menu"); const { rootMenuEmitter, activeName } = useSimpleRootMenuContext(); @@ -60,7 +60,7 @@ const getCollapse = computed(() => unref(getParentRootMenu)?.props.collapse); const showTooptip = computed(() => { - return unref(getParentMenu)?.type.name === 'Menu' && unref(getCollapse) && slots.title; + return unref(getParentMenu)?.type.name === "Menu" && unref(getCollapse) && slots.title; }); function handleClickItem() { @@ -69,13 +69,13 @@ return; } - rootMenuEmitter.emit('on-menu-item-select', props.name); + rootMenuEmitter.emit("on-menu-item-select", props.name); if (unref(getCollapse)) { return; } const { uidList } = getParentList(); - rootMenuEmitter.emit('on-update-opened', { + rootMenuEmitter.emit("on-update-opened", { opend: false, parent: instance?.parent, uidList: uidList, @@ -93,7 +93,7 @@ } }); - rootMenuEmitter.emit('on-update-active-name:submenu', uidList); + rootMenuEmitter.emit("on-update-active-name:submenu", uidList); } else { active.value = false; } diff --git a/src/components/SimpleMenu/src/components/SubMenuItem.vue b/src/components/SimpleMenu/src/components/SubMenuItem.vue index d5cf7e3..0a0955b 100644 --- a/src/components/SimpleMenu/src/components/SubMenuItem.vue +++ b/src/components/SimpleMenu/src/components/SubMenuItem.vue @@ -56,8 +56,8 @@ </template> <script lang="ts"> - import type { CSSProperties, PropType } from 'vue'; - import type { SubMenuProvider } from './types'; + import type { CSSProperties, PropType } from "vue"; + import type { SubMenuProvider } from "./types"; import { defineComponent, computed, @@ -68,20 +68,20 @@ provide, onBeforeMount, inject, - } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; - import { useMenuItem } from './useMenu'; - import { useSimpleRootMenuContext } from './useSimpleMenuContext'; - import { CollapseTransition } from '/@/components/Transition'; - import Icon from '/@/components/Icon'; - import { Popover } from 'ant-design-vue'; - import { isBoolean, isObject } from '/@/utils/is'; - import mitt from '/@/utils/mitt'; + } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; + import { useMenuItem } from "./useMenu"; + import { useSimpleRootMenuContext } from "./useSimpleMenuContext"; + import { CollapseTransition } from "/@/components/Transition"; + import Icon from "/@/components/Icon"; + import { Popover } from "ant-design-vue"; + import { isBoolean, isObject } from "/@/utils/is"; + import mitt from "/@/utils/mitt"; const DELAY = 200; export default defineComponent({ - name: 'SubMenu', + name: "SubMenu", components: { Icon, CollapseTransition, @@ -112,7 +112,7 @@ const { getParentSubMenu, getItemStyle, getParentMenu, getParentList } = useMenuItem(instance); - const { prefixCls } = useDesign('menu'); + const { prefixCls } = useDesign("menu"); const subMenuEmitter = mitt(); @@ -149,7 +149,7 @@ const getOverlayStyle = computed((): CSSProperties => { return { - minWidth: '200px', + minWidth: "200px", }; }); @@ -190,13 +190,13 @@ if (unref(getAccordion)) { const { uidList } = getParentList(); - rootMenuEmitter.emit('on-update-opened', { + rootMenuEmitter.emit("on-update-opened", { opend: false, parent: instance?.parent, uidList: uidList, }); } else { - rootMenuEmitter.emit('open-name-change', { + rootMenuEmitter.emit("open-name-change", { name: props.name, opened: !opened, }); @@ -208,7 +208,7 @@ const disabled = props.disabled; if (disabled) return; - subMenuEmitter.emit('submenu:mouse-enter-child'); + subMenuEmitter.emit("submenu:mouse-enter-child"); const index = parentGetOpenNames().findIndex((item) => item === props.name); @@ -235,7 +235,7 @@ data.isChild = false; } - subMenuEmitter.emit('submenu:mouse-leave-child'); + subMenuEmitter.emit("submenu:mouse-leave-child"); if (data.timeout) { clearTimeout(data.timeout!); data.timeout = setTimeout(() => { @@ -254,19 +254,19 @@ } onBeforeMount(() => { - subMenuEmitter.on('submenu:mouse-enter-child', () => { + subMenuEmitter.on("submenu:mouse-enter-child", () => { data.mouseInChild = true; isRemoveAllPopup.value = false; clearTimeout(data.timeout!); }); - subMenuEmitter.on('submenu:mouse-leave-child', () => { + subMenuEmitter.on("submenu:mouse-leave-child", () => { if (data.isChild) return; data.mouseInChild = false; clearTimeout(data.timeout!); }); rootMenuEmitter.on( - 'on-update-opened', + "on-update-opened", (data: boolean | (string | number)[] | Recordable) => { if (unref(getCollapse)) return; if (isBoolean(data)) { @@ -289,7 +289,7 @@ }, ); - rootMenuEmitter.on('on-update-active-name:submenu', (data: number[]) => { + rootMenuEmitter.on("on-update-active-name:submenu", (data: number[]) => { if (instance?.uid) { state.active = data.includes(instance?.uid); } diff --git a/src/components/SimpleMenu/src/components/types.ts b/src/components/SimpleMenu/src/components/types.ts index d828e89..5230120 100644 --- a/src/components/SimpleMenu/src/components/types.ts +++ b/src/components/SimpleMenu/src/components/types.ts @@ -1,4 +1,4 @@ -import { Ref } from 'vue'; +import { Ref } from "vue"; export interface Props { theme: string; diff --git a/src/components/SimpleMenu/src/components/useMenu.ts b/src/components/SimpleMenu/src/components/useMenu.ts index 8830559..521ca30 100644 --- a/src/components/SimpleMenu/src/components/useMenu.ts +++ b/src/components/SimpleMenu/src/components/useMenu.ts @@ -1,17 +1,17 @@ -import { computed, ComponentInternalInstance, unref } from 'vue'; -import type { CSSProperties } from 'vue'; +import { computed, ComponentInternalInstance, unref } from "vue"; +import type { CSSProperties } from "vue"; export function useMenuItem(instance: ComponentInternalInstance | null) { const getParentMenu = computed(() => { - return findParentMenu(['Menu', 'SubMenu']); + return findParentMenu(["Menu", "SubMenu"]); }); const getParentRootMenu = computed(() => { - return findParentMenu(['Menu']); + return findParentMenu(["Menu"]); }); const getParentSubMenu = computed(() => { - return findParentMenu(['SubMenu']); + return findParentMenu(["SubMenu"]); }); const getItemStyle = computed((): CSSProperties => { @@ -23,14 +23,14 @@ export function useMenuItem(instance: ComponentInternalInstance | null) { if (unref(getParentRootMenu)?.props.collapse) { padding = indentSize; } else { - while (parent && parent.type.name !== 'Menu') { - if (parent.type.name === 'SubMenu') { + while (parent && parent.type.name !== "Menu") { + if (parent.type.name === "SubMenu") { padding += indentSize; } parent = parent.parent; } } - return { paddingLeft: padding + 'px' }; + return { paddingLeft: padding + "px" }; }); function findParentMenu(name: string[]) { @@ -50,8 +50,8 @@ export function useMenuItem(instance: ComponentInternalInstance | null) { list: [], }; const ret: any[] = []; - while (parent && parent.type.name !== 'Menu') { - if (parent.type.name === 'SubMenu') { + while (parent && parent.type.name !== "Menu") { + if (parent.type.name === "SubMenu") { ret.push(parent); } parent = parent.parent; @@ -62,7 +62,7 @@ export function useMenuItem(instance: ComponentInternalInstance | null) { }; } - function getParentInstance(instance: ComponentInternalInstance, name = 'SubMenu') { + function getParentInstance(instance: ComponentInternalInstance, name = "SubMenu") { let parent = instance.parent; while (parent) { if (parent.type.name !== name) { diff --git a/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts b/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts index f3d8100..7cecb76 100644 --- a/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts +++ b/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts @@ -1,6 +1,6 @@ -import type { InjectionKey, Ref } from 'vue'; -import type { Emitter } from '/@/utils/mitt'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import type { InjectionKey, Ref } from "vue"; +import type { Emitter } from "/@/utils/mitt"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface SimpleRootMenuContextProps { rootMenuEmitter: Emitter; diff --git a/src/components/SimpleMenu/src/useOpenKeys.ts b/src/components/SimpleMenu/src/useOpenKeys.ts index 1b3cf7b..743e3a2 100644 --- a/src/components/SimpleMenu/src/useOpenKeys.ts +++ b/src/components/SimpleMenu/src/useOpenKeys.ts @@ -1,14 +1,14 @@ -import type { Menu as MenuType } from '/@/router/types'; -import type { MenuState } from './types'; +import type { Menu as MenuType } from "/@/router/types"; +import type { MenuState } from "./types"; -import { computed, Ref, toRaw } from 'vue'; +import { computed, Ref, toRaw } from "vue"; -import { unref } from 'vue'; -import { uniq } from 'lodash-es'; -import { getAllParentPath } from '/@/router/helper/menuHelper'; +import { unref } from "vue"; +import { uniq } from "lodash-es"; +import { getAllParentPath } from "/@/router/helper/menuHelper"; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { useDebounceFn } from '@vueuse/core'; +import { useTimeoutFn } from "/@/hooks/core/useTimeout"; +import { useDebounceFn } from "@vueuse/core"; export function useOpenKeys( menuState: MenuState, diff --git a/src/components/StrengthMeter/index.ts b/src/components/StrengthMeter/index.ts index 9763afa..efd1f25 100644 --- a/src/components/StrengthMeter/index.ts +++ b/src/components/StrengthMeter/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import strengthMeter from './src/StrengthMeter.vue'; +import { withInstall } from "/@/utils"; +import strengthMeter from "./src/StrengthMeter.vue"; export const StrengthMeter = withInstall(strengthMeter); diff --git a/src/components/StrengthMeter/src/StrengthMeter.vue b/src/components/StrengthMeter/src/StrengthMeter.vue index e0fc331..c5b2c96 100644 --- a/src/components/StrengthMeter/src/StrengthMeter.vue +++ b/src/components/StrengthMeter/src/StrengthMeter.vue @@ -19,31 +19,31 @@ </template> <script lang="ts"> - import { defineComponent, computed, ref, watch, unref, watchEffect } from 'vue'; - import { Input } from 'ant-design-vue'; - import { zxcvbn } from '@zxcvbn-ts/core'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; + import { defineComponent, computed, ref, watch, unref, watchEffect } from "vue"; + import { Input } from "ant-design-vue"; + import { zxcvbn } from "@zxcvbn-ts/core"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'StrengthMeter', + name: "StrengthMeter", components: { InputPassword: Input.Password }, props: { value: propTypes.string, showInput: propTypes.bool.def(true), disabled: propTypes.bool, }, - emits: ['score-change', 'change'], + emits: ["score-change", "change"], setup(props, { emit }) { - const innerValueRef = ref(''); - const { prefixCls } = useDesign('strength-meter'); + const innerValueRef = ref(""); + const { prefixCls } = useDesign("strength-meter"); const getPasswordStrength = computed(() => { const { disabled } = props; if (disabled) return -1; const innerValue = unref(innerValueRef); const score = innerValue ? zxcvbn(unref(innerValueRef)).score : -1; - emit('score-change', score); + emit("score-change", score); return score; }); @@ -52,13 +52,13 @@ } watchEffect(() => { - innerValueRef.value = props.value || ''; + innerValueRef.value = props.value || ""; }); watch( () => unref(innerValueRef), (val) => { - emit('change', val); + emit("change", val); }, ); @@ -72,7 +72,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-strength-meter'; + @prefix-cls: ~"@{namespace}-strength-meter"; .@{prefix-cls} { &-bar { @@ -93,7 +93,7 @@ border-color: @white; border-style: solid; border-width: 0 5px; - content: ''; + content: ""; } &::before { @@ -112,27 +112,27 @@ border-radius: inherit; transition: width 0.5s ease-in-out, background 0.25s; - &[data-score='0'] { + &[data-score="0"] { width: 20%; background-color: darken(@error-color, 10%); } - &[data-score='1'] { + &[data-score="1"] { width: 40%; background-color: @error-color; } - &[data-score='2'] { + &[data-score="2"] { width: 60%; background-color: @warning-color; } - &[data-score='3'] { + &[data-score="3"] { width: 80%; background-color: fade(@success-color, 50%); } - &[data-score='4'] { + &[data-score="4"] { width: 100%; background-color: @success-color; } diff --git a/src/components/Table/index.ts b/src/components/Table/index.ts index 7fe08c9..393067e 100644 --- a/src/components/Table/index.ts +++ b/src/components/Table/index.ts @@ -1,10 +1,10 @@ -export { default as BasicTable } from './src/BasicTable.vue'; -export { default as TableAction } from './src/components/TableAction.vue'; -export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue'; -export { default as TableImg } from './src/components/TableImg.vue'; -export * from './src/types/table'; -export * from './src/types/pagination'; -export * from './src/types/tableAction'; -export { useTable } from './src/hooks/useTable'; -export type { FormSchema, FormProps } from '/@/components/Form/src/types/form'; -export type { EditRecordRow } from './src/components/editable'; +export { default as BasicTable } from "./src/BasicTable.vue"; +export { default as TableAction } from "./src/components/TableAction.vue"; +export { default as EditTableHeaderIcon } from "./src/components/EditTableHeaderIcon.vue"; +export { default as TableImg } from "./src/components/TableImg.vue"; +export * from "./src/types/table"; +export * from "./src/types/pagination"; +export * from "./src/types/tableAction"; +export { useTable } from "./src/hooks/useTable"; +export type { FormSchema, FormProps } from "/@/components/Form/src/types/form"; +export type { EditRecordRow } from "./src/components/editable"; diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue index 7fb1071..a8b3cff 100644 --- a/src/components/Table/src/BasicTable.vue +++ b/src/components/Table/src/BasicTable.vue @@ -37,35 +37,35 @@ TableActionType, SizeType, ColumnChangeParam, - } from './types/table'; - - import { defineComponent, ref, computed, unref, toRaw, inject, watchEffect } from 'vue'; - import { Table } from 'ant-design-vue'; - import { BasicForm, useForm } from '/@/components/Form/index'; - import { PageWrapperFixedHeightKey } from '/@/components/Page'; - import expandIcon from './components/ExpandIcon'; - import HeaderCell from './components/HeaderCell.vue'; - import { InnerHandlers } from './types/table'; - - import { usePagination } from './hooks/usePagination'; - import { useColumns } from './hooks/useColumns'; - import { useDataSource } from './hooks/useDataSource'; - import { useLoading } from './hooks/useLoading'; - import { useRowSelection } from './hooks/useRowSelection'; - import { useTableScroll } from './hooks/useTableScroll'; - import { useCustomRow } from './hooks/useCustomRow'; - import { useTableStyle } from './hooks/useTableStyle'; - import { useTableHeader } from './hooks/useTableHeader'; - import { useTableExpand } from './hooks/useTableExpand'; - import { createTableContext } from './hooks/useTableContext'; - import { useTableFooter } from './hooks/useTableFooter'; - import { useTableForm } from './hooks/useTableForm'; - import { useDesign } from '/@/hooks/web/useDesign'; - - import { omit } from 'lodash-es'; - import { basicProps } from './props'; - import { isFunction } from '/@/utils/is'; - import { warn } from '/@/utils/log'; + } from "./types/table"; + + import { defineComponent, ref, computed, unref, toRaw, inject, watchEffect } from "vue"; + import { Table } from "ant-design-vue"; + import { BasicForm, useForm } from "/@/components/Form/index"; + import { PageWrapperFixedHeightKey } from "/@/components/Page"; + import expandIcon from "./components/ExpandIcon"; + import HeaderCell from "./components/HeaderCell.vue"; + import { InnerHandlers } from "./types/table"; + + import { usePagination } from "./hooks/usePagination"; + import { useColumns } from "./hooks/useColumns"; + import { useDataSource } from "./hooks/useDataSource"; + import { useLoading } from "./hooks/useLoading"; + import { useRowSelection } from "./hooks/useRowSelection"; + import { useTableScroll } from "./hooks/useTableScroll"; + import { useCustomRow } from "./hooks/useCustomRow"; + import { useTableStyle } from "./hooks/useTableStyle"; + import { useTableHeader } from "./hooks/useTableHeader"; + import { useTableExpand } from "./hooks/useTableExpand"; + import { createTableContext } from "./hooks/useTableContext"; + import { useTableFooter } from "./hooks/useTableFooter"; + import { useTableForm } from "./hooks/useTableForm"; + import { useDesign } from "/@/hooks/web/useDesign"; + + import { omit } from "lodash-es"; + import { basicProps } from "./props"; + import { isFunction } from "/@/utils/is"; + import { warn } from "/@/utils/log"; export default defineComponent({ components: { @@ -75,22 +75,22 @@ }, props: basicProps, emits: [ - 'fetch-success', - 'fetch-error', - 'selection-change', - 'register', - 'row-click', - 'row-dbClick', - 'row-contextmenu', - 'row-mouseenter', - 'row-mouseleave', - 'edit-end', - 'edit-cancel', - 'edit-row-end', - 'edit-change', - 'expanded-rows-change', - 'change', - 'columns-change', + "fetch-success", + "fetch-error", + "selection-change", + "register", + "row-click", + "row-dbClick", + "row-contextmenu", + "row-mouseenter", + "row-mouseleave", + "edit-end", + "edit-cancel", + "edit-row-end", + "edit-change", + "expanded-rows-change", + "change", + "columns-change", ], setup(props, { attrs, emit, slots, expose }) { const tableElRef = ref(null); @@ -99,7 +99,7 @@ const wrapRef = ref(null); const innerPropsRef = ref<Partial<BasicTableProps>>(); - const { prefixCls } = useDesign('basic-table'); + const { prefixCls } = useDesign("basic-table"); const [registerForm, formActions] = useForm(); const getProps = computed(() => { @@ -164,7 +164,7 @@ function handleTableChange(...args) { onTableChange.call(undefined, ...args); - emit('change', ...args); + emit("change", ...args); // 解决通过useTable注册onChange时不起作用的问题 const { onChange } = unref(getProps); onChange && isFunction(onChange) && onChange.call(undefined, ...args); @@ -201,7 +201,7 @@ const handlers: InnerHandlers = { onColumnsChange: (data: ColumnChangeParam[]) => { - emit('columns-change', data); + emit("columns-change", data); // support useTable unref(getProps).onColumnsChange?.(data); }, @@ -230,7 +230,7 @@ ...unref(getHeaderProps), scroll: unref(getScrollRef), loading: unref(getLoading), - tableLayout: 'fixed', + tableLayout: "fixed", rowSelection: unref(getRowSelectionRef), rowKey: unref(getRowKey), columns: toRaw(unref(getViewColumns)), @@ -240,10 +240,10 @@ ...unref(getExpandOption), }; if (slots.expandedRowRender) { - propsData = omit(propsData, 'scroll'); + propsData = omit(propsData, "scroll"); } - propsData = omit(propsData, ['class', 'onChange']); + propsData = omit(propsData, ["class", "onChange"]); return propsData; }); @@ -309,7 +309,7 @@ expose(tableAction); - emit('register', tableAction, formActions); + emit("register", tableAction, formActions); return { tableElRef, @@ -335,9 +335,9 @@ <style lang="less"> @border-color: #cecece4d; - @prefix-cls: ~'@{namespace}-basic-table'; + @prefix-cls: ~"@{namespace}-basic-table"; - [data-theme='dark'] { + [data-theme="dark"] { .ant-table-tbody > tr:hover.ant-table-row-selected > td, .ant-table-tbody > tr.ant-table-row-selected td { background-color: #262626; diff --git a/src/components/Table/src/componentMap.ts b/src/components/Table/src/componentMap.ts index 265b7c7..fe9a411 100644 --- a/src/components/Table/src/componentMap.ts +++ b/src/components/Table/src/componentMap.ts @@ -1,4 +1,4 @@ -import type { Component } from 'vue'; +import type { Component } from "vue"; import { Input, Select, @@ -7,21 +7,21 @@ import { Switch, DatePicker, TimePicker, -} from 'ant-design-vue'; -import type { ComponentType } from './types/componentType'; -import { ApiSelect, ApiTreeSelect } from '/@/components/Form'; +} from "ant-design-vue"; +import type { ComponentType } from "./types/componentType"; +import { ApiSelect, ApiTreeSelect } from "/@/components/Form"; const componentMap = new Map<ComponentType, Component>(); -componentMap.set('Input', Input); -componentMap.set('InputNumber', InputNumber); -componentMap.set('Select', Select); -componentMap.set('ApiSelect', ApiSelect); -componentMap.set('ApiTreeSelect', ApiTreeSelect); -componentMap.set('Switch', Switch); -componentMap.set('Checkbox', Checkbox); -componentMap.set('DatePicker', DatePicker); -componentMap.set('TimePicker', TimePicker); +componentMap.set("Input", Input); +componentMap.set("InputNumber", InputNumber); +componentMap.set("Select", Select); +componentMap.set("ApiSelect", ApiSelect); +componentMap.set("ApiTreeSelect", ApiTreeSelect); +componentMap.set("Switch", Switch); +componentMap.set("Checkbox", Checkbox); +componentMap.set("DatePicker", DatePicker); +componentMap.set("TimePicker", TimePicker); export function add(compName: ComponentType, component: Component) { componentMap.set(compName, component); diff --git a/src/components/Table/src/components/EditTableHeaderIcon.vue b/src/components/Table/src/components/EditTableHeaderIcon.vue index 369820e..7baa894 100644 --- a/src/components/Table/src/components/EditTableHeaderIcon.vue +++ b/src/components/Table/src/components/EditTableHeaderIcon.vue @@ -6,11 +6,11 @@ </span> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { FormOutlined } from '@ant-design/icons-vue'; + import { defineComponent } from "vue"; + import { FormOutlined } from "@ant-design/icons-vue"; export default defineComponent({ - name: 'EditTableHeaderIcon', + name: "EditTableHeaderIcon", components: { FormOutlined }, - props: { title: { type: String, default: '' } }, + props: { title: { type: String, default: "" } }, }); </script> diff --git a/src/components/Table/src/components/ExpandIcon.tsx b/src/components/Table/src/components/ExpandIcon.tsx index 3d1d98d..8897d76 100644 --- a/src/components/Table/src/components/ExpandIcon.tsx +++ b/src/components/Table/src/components/ExpandIcon.tsx @@ -1,4 +1,4 @@ -import { BasicArrow } from '/@/components/Basic'; +import { BasicArrow } from "/@/components/Basic"; export default () => { return (props: Recordable) => { diff --git a/src/components/Table/src/components/HeaderCell.vue b/src/components/Table/src/components/HeaderCell.vue index 91c6373..66a8f28 100644 --- a/src/components/Table/src/components/HeaderCell.vue +++ b/src/components/Table/src/components/HeaderCell.vue @@ -6,15 +6,15 @@ <BasicHelp v-if="getHelpMessage" :text="getHelpMessage" :class="`${prefixCls}__help`" /> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import type { BasicColumn } from '../types/table'; - import { defineComponent, computed } from 'vue'; - import BasicHelp from '/@/components/Basic/src/BasicHelp.vue'; - import EditTableHeaderCell from './EditTableHeaderIcon.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { PropType } from "vue"; + import type { BasicColumn } from "../types/table"; + import { defineComponent, computed } from "vue"; + import BasicHelp from "/@/components/Basic/src/BasicHelp.vue"; + import EditTableHeaderCell from "./EditTableHeaderIcon.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'TableHeaderCell', + name: "TableHeaderCell", components: { EditTableHeaderCell, BasicHelp, @@ -26,7 +26,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('basic-table-header-cell'); + const { prefixCls } = useDesign("basic-table-header-cell"); const getIsEdit = computed(() => !!props.column?.edit); const getTitle = computed(() => props.column?.customTitle); @@ -37,7 +37,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-table-header-cell'; + @prefix-cls: ~"@{namespace}-basic-table-header-cell"; .@{prefix-cls} { &__help { diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue index 0c882a1..c5eea63 100644 --- a/src/components/Table/src/components/TableAction.vue +++ b/src/components/Table/src/components/TableAction.vue @@ -31,22 +31,22 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType, computed, toRaw, unref } from 'vue'; - import { MoreOutlined } from '@ant-design/icons-vue'; - import { Divider, Tooltip, TooltipProps } from 'ant-design-vue'; - import Icon from '/@/components/Icon/index'; - import { ActionItem, TableActionType } from '/@/components/Table'; - import { PopConfirmButton } from '/@/components/Button'; - import { Dropdown } from '/@/components/Dropdown'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useTableContext } from '../hooks/useTableContext'; - import { usePermission } from '/@/hooks/web/usePermission'; - import { isBoolean, isFunction, isString } from '/@/utils/is'; - import { propTypes } from '/@/utils/propTypes'; - import { ACTION_COLUMN_FLAG } from '../const'; + import { defineComponent, PropType, computed, toRaw, unref } from "vue"; + import { MoreOutlined } from "@ant-design/icons-vue"; + import { Divider, Tooltip, TooltipProps } from "ant-design-vue"; + import Icon from "/@/components/Icon/index"; + import { ActionItem, TableActionType } from "/@/components/Table"; + import { PopConfirmButton } from "/@/components/Button"; + import { Dropdown } from "/@/components/Dropdown"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useTableContext } from "../hooks/useTableContext"; + import { usePermission } from "/@/hooks/web/usePermission"; + import { isBoolean, isFunction, isString } from "/@/utils/is"; + import { propTypes } from "/@/utils/propTypes"; + import { ACTION_COLUMN_FLAG } from "../const"; export default defineComponent({ - name: 'TableAction', + name: "TableAction", components: { Icon, PopConfirmButton, Divider, Dropdown, MoreOutlined, Tooltip }, props: { actions: { @@ -62,7 +62,7 @@ stopButtonPropagation: propTypes.bool.def(false), }, setup(props) { - const { prefixCls } = useDesign('basic-table-action'); + const { prefixCls } = useDesign("basic-table-action"); let table: Partial<TableActionType> = {}; if (!props.outside) { table = useTableContext(); @@ -92,8 +92,8 @@ const { popConfirm } = action; return { getPopupContainer: () => unref((table as any)?.wrapRef.value) ?? document.body, - type: 'link', - size: 'small', + type: "link", + size: "small", ...action, ...(popConfirm || {}), onConfirm: popConfirm?.confirm, @@ -124,13 +124,13 @@ const getAlign = computed(() => { const columns = (table as TableActionType)?.getColumns?.() || []; const actionColumn = columns.find((item) => item.flag === ACTION_COLUMN_FLAG); - return actionColumn?.align ?? 'left'; + return actionColumn?.align ?? "left"; }); function getTooltip(data: string | TooltipProps): TooltipProps { return { getPopupContainer: () => unref((table as any)?.wrapRef.value) ?? document.body, - placement: 'bottom', + placement: "bottom", ...(isString(data) ? { title: data } : data), }; } @@ -139,7 +139,7 @@ if (!props.stopButtonPropagation) return; const path = e.composedPath() as HTMLElement[]; const isInButton = path.find((ele) => { - return ele.tagName?.toUpperCase() === 'BUTTON'; + return ele.tagName?.toUpperCase() === "BUTTON"; }); isInButton && e.stopPropagation(); } @@ -149,7 +149,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-table-action'; + @prefix-cls: ~"@{namespace}-basic-table-action"; .@{prefix-cls} { display: flex; diff --git a/src/components/Table/src/components/TableFooter.vue b/src/components/Table/src/components/TableFooter.vue index 68e556b..8725e8e 100644 --- a/src/components/Table/src/components/TableFooter.vue +++ b/src/components/Table/src/components/TableFooter.vue @@ -12,20 +12,20 @@ /> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import { defineComponent, unref, computed, toRaw } from 'vue'; - import { Table } from 'ant-design-vue'; - import { cloneDeep } from 'lodash-es'; - import { isFunction } from '/@/utils/is'; - import type { BasicColumn } from '../types/table'; - import { INDEX_COLUMN_FLAG } from '../const'; - import { propTypes } from '/@/utils/propTypes'; - import { useTableContext } from '../hooks/useTableContext'; + import type { PropType } from "vue"; + import { defineComponent, unref, computed, toRaw } from "vue"; + import { Table } from "ant-design-vue"; + import { cloneDeep } from "lodash-es"; + import { isFunction } from "/@/utils/is"; + import type { BasicColumn } from "../types/table"; + import { INDEX_COLUMN_FLAG } from "../const"; + import { propTypes } from "/@/utils/propTypes"; + import { useTableContext } from "../hooks/useTableContext"; - const SUMMARY_ROW_KEY = '_row'; - const SUMMARY_INDEX_KEY = '_index'; + const SUMMARY_ROW_KEY = "_row"; + const SUMMARY_INDEX_KEY = "_index"; export default defineComponent({ - name: 'BasicTableFooter', + name: "BasicTableFooter", components: { Table }, props: { summaryFunc: { @@ -37,7 +37,7 @@ scroll: { type: Object as PropType<Recordable>, }, - rowKey: propTypes.string.def('key'), + rowKey: propTypes.string.def("key"), }, setup(props) { const table = useTableContext(); @@ -71,18 +71,18 @@ columns[index].customRender = ({ record }) => record[SUMMARY_INDEX_KEY]; columns[index].ellipsis = false; } else { - Reflect.deleteProperty(columns[index], 'customRender'); + Reflect.deleteProperty(columns[index], "customRender"); } } if (table.getRowSelection() && hasRowSummary) { - const isFixed = columns.some((col) => col.fixed === 'left'); + const isFixed = columns.some((col) => col.fixed === "left"); columns.unshift({ width: 60, - title: 'selection', - key: 'selectionKey', - align: 'center', - ...(isFixed ? { fixed: 'left' } : {}), + title: "selection", + key: "selectionKey", + align: "center", + ...(isFixed ? { fixed: "left" } : {}), customRender: ({ record }) => record[SUMMARY_ROW_KEY], }); } diff --git a/src/components/Table/src/components/TableHeader.vue b/src/components/Table/src/components/TableHeader.vue index 189e913..410fa3f 100644 --- a/src/components/Table/src/components/TableHeader.vue +++ b/src/components/Table/src/components/TableHeader.vue @@ -23,16 +23,16 @@ </div> </template> <script lang="ts"> - import type { TableSetting, ColumnChangeParam } from '../types/table'; - import type { PropType } from 'vue'; - import { defineComponent } from 'vue'; - import { Divider } from 'ant-design-vue'; - import TableSettingComponent from './settings/index.vue'; - import TableTitle from './TableTitle.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import type { TableSetting, ColumnChangeParam } from "../types/table"; + import type { PropType } from "vue"; + import { defineComponent } from "vue"; + import { Divider } from "ant-design-vue"; + import TableSettingComponent from "./settings/index.vue"; + import TableTitle from "./TableTitle.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'BasicTableHeader', + name: "BasicTableHeader", components: { Divider, TableTitle, @@ -50,21 +50,21 @@ }, titleHelpMessage: { type: [String, Array] as PropType<string | string[]>, - default: '', + default: "", }, }, - emits: ['columns-change'], + emits: ["columns-change"], setup(_, { emit }) { - const { prefixCls } = useDesign('basic-table-header'); + const { prefixCls } = useDesign("basic-table-header"); function handleColumnChange(data: ColumnChangeParam[]) { - emit('columns-change', data); + emit("columns-change", data); } return { prefixCls, handleColumnChange }; }, }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-table-header'; + @prefix-cls: ~"@{namespace}-basic-table-header"; .@{prefix-cls} { &__toolbar { diff --git a/src/components/Table/src/components/TableImg.vue b/src/components/Table/src/components/TableImg.vue index 6b533aa..fe1b92d 100644 --- a/src/components/Table/src/components/TableImg.vue +++ b/src/components/Table/src/components/TableImg.vue @@ -32,14 +32,14 @@ </div> </template> <script lang="ts"> - import type { CSSProperties } from 'vue'; - import { defineComponent, computed } from 'vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { Image, Badge } from 'ant-design-vue'; - import { propTypes } from '/@/utils/propTypes'; + import type { CSSProperties } from "vue"; + import { defineComponent, computed } from "vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { Image, Badge } from "ant-design-vue"; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'TableImage', + name: "TableImage", components: { Image, PreviewGroup: Image.PreviewGroup, Badge }, props: { imgList: propTypes.arrayOf(propTypes.string), @@ -51,7 +51,7 @@ // 图片间距 margin: propTypes.number.def(4), // src前缀,将会附加在imgList中每一项之前 - srcPrefix: propTypes.string.def(''), + srcPrefix: propTypes.string.def(""), }, setup(props) { const getWrapStyle = computed((): CSSProperties => { @@ -60,13 +60,13 @@ return { height: s, width: s }; }); - const { prefixCls } = useDesign('basic-table-img'); + const { prefixCls } = useDesign("basic-table-img"); return { prefixCls, getWrapStyle }; }, }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-table-img'; + @prefix-cls: ~"@{namespace}-basic-table-img"; .@{prefix-cls} { .ant-image { diff --git a/src/components/Table/src/components/TableTitle.vue b/src/components/Table/src/components/TableTitle.vue index 0b797e1..3be23b2 100644 --- a/src/components/Table/src/components/TableTitle.vue +++ b/src/components/Table/src/components/TableTitle.vue @@ -4,13 +4,13 @@ </BasicTitle> </template> <script lang="ts"> - import { computed, defineComponent, PropType } from 'vue'; - import { BasicTitle } from '/@/components/Basic/index'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { isFunction } from '/@/utils/is'; + import { computed, defineComponent, PropType } from "vue"; + import { BasicTitle } from "/@/components/Basic/index"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { isFunction } from "/@/utils/is"; export default defineComponent({ - name: 'BasicTableTitle', + name: "BasicTableTitle", components: { BasicTitle }, props: { title: { @@ -24,7 +24,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('basic-table-title'); + const { prefixCls } = useDesign("basic-table-title"); const getTitle = computed(() => { const { title, getSelectRows = () => {} } = props; @@ -43,7 +43,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-table-title'; + @prefix-cls: ~"@{namespace}-basic-table-title"; .@{prefix-cls} { display: flex; diff --git a/src/components/Table/src/components/editable/CellComponent.ts b/src/components/Table/src/components/editable/CellComponent.ts index 3a16693..3259b3f 100644 --- a/src/components/Table/src/components/editable/CellComponent.ts +++ b/src/components/Table/src/components/editable/CellComponent.ts @@ -1,9 +1,9 @@ -import type { FunctionalComponent, defineComponent } from 'vue'; -import type { ComponentType } from '../../types/componentType'; -import { componentMap } from '/@/components/Table/src/componentMap'; +import type { FunctionalComponent, defineComponent } from "vue"; +import type { ComponentType } from "../../types/componentType"; +import { componentMap } from "/@/components/Table/src/componentMap"; -import { Popover } from 'ant-design-vue'; -import { h } from 'vue'; +import { Popover } from "ant-design-vue"; +import { h } from "vue"; export interface ComponentProps { component: ComponentType; @@ -15,7 +15,7 @@ export interface ComponentProps { export const CellComponent: FunctionalComponent = ( { - component = 'Input', + component = "Input", rule = true, ruleMessage, popoverVisible, @@ -32,7 +32,7 @@ export const CellComponent: FunctionalComponent = ( return h( Popover, { - overlayClassName: 'edit-cell-rule-popover', + overlayClassName: "edit-cell-rule-popover", visible: !!popoverVisible, ...(getPopupContainer ? { getPopupContainer } : {}), }, diff --git a/src/components/Table/src/components/editable/EditableCell.vue b/src/components/Table/src/components/editable/EditableCell.vue index 787d120..7736807 100644 --- a/src/components/Table/src/components/editable/EditableCell.vue +++ b/src/components/Table/src/components/editable/EditableCell.vue @@ -6,7 +6,7 @@ @click="handleEdit" > <div class="cell-content" :title="column.ellipsis ? getValues ?? '' : ''"> - {{ getValues ? getValues : ' ' }} + {{ getValues ? getValues : " " }} </div> <FormOutlined :class="`${prefixCls}__normal-icon`" v-if="!column.editRow" /> </div> @@ -35,27 +35,27 @@ </div> </template> <script lang="ts"> - import type { CSSProperties, PropType } from 'vue'; - import { computed, defineComponent, nextTick, ref, toRaw, unref, watchEffect } from 'vue'; - import type { BasicColumn } from '../../types/table'; - import type { EditRecordRow } from './index'; - import { CheckOutlined, CloseOutlined, FormOutlined } from '@ant-design/icons-vue'; - import { CellComponent } from './CellComponent'; + import type { CSSProperties, PropType } from "vue"; + import { computed, defineComponent, nextTick, ref, toRaw, unref, watchEffect } from "vue"; + import type { BasicColumn } from "../../types/table"; + import type { EditRecordRow } from "./index"; + import { CheckOutlined, CloseOutlined, FormOutlined } from "@ant-design/icons-vue"; + import { CellComponent } from "./CellComponent"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useTableContext } from '../../hooks/useTableContext'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useTableContext } from "../../hooks/useTableContext"; - import clickOutside from '/@/directives/clickOutside'; + import clickOutside from "/@/directives/clickOutside"; - import { propTypes } from '/@/utils/propTypes'; - import { isArray, isBoolean, isFunction, isNumber, isString } from '/@/utils/is'; - import { createPlaceholderMessage } from './helper'; - import { omit, pick, set } from 'lodash-es'; - import { treeToList } from '/@/utils/helper/treeHelper'; - import { Spin } from 'ant-design-vue'; + import { propTypes } from "/@/utils/propTypes"; + import { isArray, isBoolean, isFunction, isNumber, isString } from "/@/utils/is"; + import { createPlaceholderMessage } from "./helper"; + import { omit, pick, set } from "lodash-es"; + import { treeToList } from "/@/utils/helper/treeHelper"; + import { Spin } from "ant-design-vue"; export default defineComponent({ - name: 'EditableCell', + name: "EditableCell", components: { FormOutlined, CloseOutlined, CheckOutlined, CellComponent, ASpin: Spin }, directives: { clickOutside, @@ -63,7 +63,7 @@ props: { value: { type: [String, Number, Boolean, Object] as PropType<string | number | boolean | Recordable>, - default: '', + default: "", }, record: { type: Object as PropType<EditRecordRow>, @@ -79,15 +79,15 @@ const isEdit = ref(false); const elRef = ref(); const ruleVisible = ref(false); - const ruleMessage = ref(''); + const ruleMessage = ref(""); const optionsRef = ref<LabelValueOptions>([]); const currentValueRef = ref<any>(props.value); const defaultValueRef = ref<any>(props.value); const spinning = ref<boolean>(false); - const { prefixCls } = useDesign('editable-cell'); + const { prefixCls } = useDesign("editable-cell"); - const getComponent = computed(() => props.column?.editComponent || 'Input'); + const getComponent = computed(() => props.column?.editComponent || "Input"); const getRule = computed(() => props.column?.editRule); const getRuleVisible = computed(() => { @@ -96,31 +96,31 @@ const getIsCheckComp = computed(() => { const component = unref(getComponent); - return ['Checkbox', 'Switch'].includes(component); + return ["Checkbox", "Switch"].includes(component); }); const getComponentProps = computed(() => { const compProps = props.column?.editComponentProps ?? {}; const component = unref(getComponent); const apiSelectProps: Recordable = {}; - if (component === 'ApiSelect') { + if (component === "ApiSelect") { apiSelectProps.cache = true; } const isCheckValue = unref(getIsCheckComp); - const valueField = isCheckValue ? 'checked' : 'value'; + const valueField = isCheckValue ? "checked" : "value"; const val = unref(currentValueRef); const value = isCheckValue ? (isNumber(val) && isBoolean(val) ? val : !!val) : val; return { - size: 'small', + size: "small", getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body, getCalendarContainer: () => unref(table?.wrapRef.value) ?? document.body, placeholder: createPlaceholderMessage(unref(getComponent)), ...apiSelectProps, - ...omit(compProps, 'onChange'), + ...omit(compProps, "onChange"), [valueField]: value, }; }); @@ -135,7 +135,7 @@ } const component = unref(getComponent); - if (!component.includes('Select')) { + if (!component.includes("Select")) { return value; } @@ -150,12 +150,12 @@ return {}; } return { - width: 'calc(100% - 48px)', + width: "calc(100% - 48px)", }; }); const getWrapperClass = computed(() => { - const { align = 'center' } = props.column; + const { align = "center" } = props.column; return `edit-cell-align-${align}`; }); @@ -178,7 +178,7 @@ function handleEdit() { if (unref(getRowEditable) || unref(props.column?.editRow)) return; - ruleMessage.value = ''; + ruleMessage.value = ""; isEdit.value = true; nextTick(() => { const el = unref(elRef); @@ -190,9 +190,9 @@ const component = unref(getComponent); if (!e) { currentValueRef.value = e; - } else if (e?.target && Reflect.has(e.target, 'value')) { + } else if (e?.target && Reflect.has(e.target, "value")) { currentValueRef.value = (e as ChangeEvent).target.value; - } else if (component === 'Checkbox') { + } else if (component === "Checkbox") { currentValueRef.value = (e as ChangeEvent).target.checked; } else if (isString(e) || isBoolean(e) || isNumber(e)) { currentValueRef.value = e; @@ -200,7 +200,7 @@ const onChange = props.column?.editComponentProps?.onChange; if (onChange && isFunction(onChange)) onChange(...arguments); - table.emit?.('edit-change', { + table.emit?.("edit-change", { column: props.column, value: unref(currentValueRef), record: toRaw(props.record), @@ -227,12 +227,12 @@ ruleVisible.value = true; return false; } else { - ruleMessage.value = ''; + ruleMessage.value = ""; return true; } } } - ruleMessage.value = ''; + ruleMessage.value = ""; return true; } @@ -281,7 +281,7 @@ set(record, dataKey, value); //const record = await table.updateTableData(index, dataKey, value); - needEmit && table.emit?.('edit-end', { record, index, key, value }); + needEmit && table.emit?.("edit-end", { record, index, key, value }); isEdit.value = false; } @@ -301,7 +301,7 @@ currentValueRef.value = defaultValueRef.value; const { column, index, record } = props; const { key, dataIndex } = column; - table.emit?.('edit-cancel', { + table.emit?.("edit-cancel", { record, index, key: dataIndex || key, @@ -315,7 +315,7 @@ } const component = unref(getComponent); - if (component.includes('Input')) { + if (component.includes("Input")) { handleCancel(); } } @@ -324,8 +324,8 @@ function handleOptionsChange(options: LabelValueOptions) { const { replaceFields } = props.column?.editComponentProps ?? {}; const component = unref(getComponent); - if (component === 'ApiTreeSelect') { - const { title = 'title', value = 'value', children = 'children' } = replaceFields || {}; + if (component === "ApiTreeSelect") { + const { title = "title", value = "value", children = "children" } = replaceFields || {}; let listOptions: Recordable[] = treeToList(options, { children }); listOptions = listOptions.map((item) => { return { @@ -339,7 +339,7 @@ } } - function initCbs(cbs: 'submitCbs' | 'validCbs' | 'cancelCbs', handle: Fn) { + function initCbs(cbs: "submitCbs" | "validCbs" | "cancelCbs", handle: Fn) { if (props.record) { /* eslint-disable */ isArray(props.record[cbs]) diff --git a/src/components/Table/src/components/editable/helper.ts b/src/components/Table/src/components/editable/helper.ts index d901729..e36775a 100644 --- a/src/components/Table/src/components/editable/helper.ts +++ b/src/components/Table/src/components/editable/helper.ts @@ -1,5 +1,5 @@ -import { ComponentType } from '../../types/componentType'; -import { useI18n } from '/@/hooks/web/useI18n'; +import { ComponentType } from "../../types/componentType"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); @@ -7,22 +7,22 @@ const { t } = useI18n(); * @description: 生成placeholder */ export function createPlaceholderMessage(component: ComponentType) { - if (component.includes('Input')) { - return t('common.inputText'); + if (component.includes("Input")) { + return t("common.inputText"); } - if (component.includes('Picker')) { - return t('common.chooseText'); + if (component.includes("Picker")) { + return t("common.chooseText"); } if ( - component.includes('Select') || - component.includes('Checkbox') || - component.includes('Radio') || - component.includes('Switch') || - component.includes('DatePicker') || - component.includes('TimePicker') + component.includes("Select") || + component.includes("Checkbox") || + component.includes("Radio") || + component.includes("Switch") || + component.includes("DatePicker") || + component.includes("TimePicker") ) { - return t('common.chooseText'); + return t("common.chooseText"); } - return ''; + return ""; } diff --git a/src/components/Table/src/components/editable/index.ts b/src/components/Table/src/components/editable/index.ts index 4f7d4da..428bef1 100644 --- a/src/components/Table/src/components/editable/index.ts +++ b/src/components/Table/src/components/editable/index.ts @@ -1,9 +1,9 @@ -import type { BasicColumn } from '/@/components/Table/src/types/table'; +import type { BasicColumn } from "/@/components/Table/src/types/table"; -import { h, Ref } from 'vue'; +import { h, Ref } from "vue"; -import EditableCell from './EditableCell.vue'; -import { isArray } from '/@/utils/is'; +import EditableCell from "./EditableCell.vue"; +import { isArray } from "/@/utils/is"; interface Params { text: string; diff --git a/src/components/Table/src/components/settings/ColumnSetting.vue b/src/components/Table/src/components/settings/ColumnSetting.vue index 24e42d4..e2ac173 100644 --- a/src/components/Table/src/components/settings/ColumnSetting.vue +++ b/src/components/Table/src/components/settings/ColumnSetting.vue @@ -1,7 +1,7 @@ <template> <Tooltip placement="top"> <template #title> - <span>{{ t('component.table.settingColumn') }}</span> + <span>{{ t("component.table.settingColumn") }}</span> </template> <Popover placement="bottomLeft" @@ -17,11 +17,11 @@ v-model:checked="checkAll" @change="onCheckAllChange" > - {{ t('component.table.settingColumnShow') }} + {{ t("component.table.settingColumnShow") }} </Checkbox> <Checkbox v-model:checked="checkIndex" @change="handleIndexCheckChange"> - {{ t('component.table.settingIndexColumnShow') }} + {{ t("component.table.settingIndexColumnShow") }} </Checkbox> <Checkbox @@ -29,11 +29,11 @@ @change="handleSelectCheckChange" :disabled="!defaultRowSelection" > - {{ t('component.table.settingSelectColumnShow') }} + {{ t("component.table.settingSelectColumnShow") }} </Checkbox> <a-button size="small" type="link" @click="reset"> - {{ t('common.resetText') }} + {{ t("common.resetText") }} </a-button> </div> </template> @@ -54,7 +54,7 @@ :getPopupContainer="getPopupContainer" > <template #title> - {{ t('component.table.settingFixedLeft') }} + {{ t("component.table.settingFixedLeft") }} </template> <Icon icon="line-md:arrow-align-left" @@ -75,7 +75,7 @@ :getPopupContainer="getPopupContainer" > <template #title> - {{ t('component.table.settingFixedRight') }} + {{ t("component.table.settingFixedRight") }} </template> <Icon icon="line-md:arrow-align-left" @@ -99,7 +99,7 @@ </Tooltip> </template> <script lang="ts"> - import type { BasicColumn, ColumnChangeParam } from '../../types/table'; + import type { BasicColumn, ColumnChangeParam } from "../../types/table"; import { defineComponent, ref, @@ -109,18 +109,18 @@ nextTick, unref, computed, - } from 'vue'; - import { Tooltip, Popover, Checkbox, Divider } from 'ant-design-vue'; - import { SettingOutlined, DragOutlined } from '@ant-design/icons-vue'; - import { Icon } from '/@/components/Icon'; - import { ScrollContainer } from '/@/components/Container'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTableContext } from '../../hooks/useTableContext'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useSortable } from '/@/hooks/web/useSortable'; - import { isFunction, isNullAndUnDef } from '/@/utils/is'; - import { getPopupContainer as getParentContainer } from '/@/utils'; - import { omit } from 'lodash-es'; + } from "vue"; + import { Tooltip, Popover, Checkbox, Divider } from "ant-design-vue"; + import { SettingOutlined, DragOutlined } from "@ant-design/icons-vue"; + import { Icon } from "/@/components/Icon"; + import { ScrollContainer } from "/@/components/Container"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTableContext } from "../../hooks/useTableContext"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useSortable } from "/@/hooks/web/useSortable"; + import { isFunction, isNullAndUnDef } from "/@/utils/is"; + import { getPopupContainer as getParentContainer } from "/@/utils"; + import { omit } from "lodash-es"; interface State { checkAll: boolean; @@ -131,11 +131,11 @@ interface Options { label: string; value: string; - fixed?: boolean | 'left' | 'right'; + fixed?: boolean | "left" | "right"; } export default defineComponent({ - name: 'ColumnSetting', + name: "ColumnSetting", components: { SettingOutlined, Popover, @@ -147,13 +147,13 @@ Divider, Icon, }, - emits: ['columns-change'], + emits: ["columns-change"], setup(_, { emit, attrs }) { const { t } = useI18n(); const table = useTableContext(); - const defaultRowSelection = omit(table.getRowSelection(), 'selectedRowKeys'); + const defaultRowSelection = omit(table.getRowSelection(), "selectedRowKeys"); let inited = false; const cachePlainOptions = ref<Options[]>([]); @@ -172,7 +172,7 @@ const checkIndex = ref(false); const checkSelect = ref(false); - const { prefixCls } = useDesign('basic-column-setting'); + const { prefixCls } = useDesign("basic-column-setting"); const getValues = computed(() => { return unref(table?.getBindValues) || {}; @@ -210,7 +210,7 @@ .getColumns({ ignoreAction: true }) .map((item) => { if (item.defaultHidden) { - return ''; + return ""; } return item.dataIndex || item.title; }) @@ -286,7 +286,7 @@ if (!el) return; // Drag and drop sort const { initSortable } = useSortable(el, { - handle: '.table-coulmn-drag-icon ', + handle: ".table-coulmn-drag-icon ", onEnd: (evt) => { const { oldIndex, newIndex } = evt; if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) { @@ -327,7 +327,7 @@ }); } - function handleColumnFixed(item: BasicColumn, fixed?: 'left' | 'right') { + function handleColumnFixed(item: BasicColumn, fixed?: "left" | "right") { if (!state.checkedList.includes(item.dataIndex as string)) return; const columns = getColumns() as BasicColumn[]; @@ -351,12 +351,12 @@ const visible = columns.findIndex( (c: BasicColumn | string) => - c === col.value || (typeof c !== 'string' && c.dataIndex === col.value), + c === col.value || (typeof c !== "string" && c.dataIndex === col.value), ) !== -1; return { dataIndex: col.value, fixed: col.fixed, visible }; }); - emit('columns-change', data); + emit("columns-change", data); } function getPopupContainer() { @@ -388,7 +388,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-column-setting'; + @prefix-cls: ~"@{namespace}-basic-column-setting"; .table-coulmn-drag-icon { margin: 0 5px; diff --git a/src/components/Table/src/components/settings/FullScreenSetting.vue b/src/components/Table/src/components/settings/FullScreenSetting.vue index af07f84..8888738 100644 --- a/src/components/Table/src/components/settings/FullScreenSetting.vue +++ b/src/components/Table/src/components/settings/FullScreenSetting.vue @@ -1,22 +1,22 @@ <template> <Tooltip placement="top"> <template #title> - <span>{{ t('component.table.settingFullScreen') }}</span> + <span>{{ t("component.table.settingFullScreen") }}</span> </template> <FullscreenOutlined @click="toggle" v-if="!isFullscreen" /> <FullscreenExitOutlined @click="toggle" v-else /> </Tooltip> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { Tooltip } from 'ant-design-vue'; - import { FullscreenOutlined, FullscreenExitOutlined } from '@ant-design/icons-vue'; - import { useFullscreen } from '@vueuse/core'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTableContext } from '../../hooks/useTableContext'; + import { defineComponent } from "vue"; + import { Tooltip } from "ant-design-vue"; + import { FullscreenOutlined, FullscreenExitOutlined } from "@ant-design/icons-vue"; + import { useFullscreen } from "@vueuse/core"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTableContext } from "../../hooks/useTableContext"; export default defineComponent({ - name: 'FullScreenSetting', + name: "FullScreenSetting", components: { FullscreenExitOutlined, FullscreenOutlined, diff --git a/src/components/Table/src/components/settings/RedoSetting.vue b/src/components/Table/src/components/settings/RedoSetting.vue index 81829a1..d4702a4 100644 --- a/src/components/Table/src/components/settings/RedoSetting.vue +++ b/src/components/Table/src/components/settings/RedoSetting.vue @@ -1,20 +1,20 @@ <template> <Tooltip placement="top"> <template #title> - <span>{{ t('common.redo') }}</span> + <span>{{ t("common.redo") }}</span> </template> <RedoOutlined @click="redo" /> </Tooltip> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { Tooltip } from 'ant-design-vue'; - import { RedoOutlined } from '@ant-design/icons-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTableContext } from '../../hooks/useTableContext'; + import { defineComponent } from "vue"; + import { Tooltip } from "ant-design-vue"; + import { RedoOutlined } from "@ant-design/icons-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTableContext } from "../../hooks/useTableContext"; export default defineComponent({ - name: 'RedoSetting', + name: "RedoSetting", components: { RedoOutlined, Tooltip, diff --git a/src/components/Table/src/components/settings/SizeSetting.vue b/src/components/Table/src/components/settings/SizeSetting.vue index 190340a..29c62de 100644 --- a/src/components/Table/src/components/settings/SizeSetting.vue +++ b/src/components/Table/src/components/settings/SizeSetting.vue @@ -1,7 +1,7 @@ <template> <Tooltip placement="top"> <template #title> - <span>{{ t('component.table.settingDens') }}</span> + <span>{{ t("component.table.settingDens") }}</span> </template> <Dropdown placement="bottomCenter" :trigger="['click']" :getPopupContainer="getPopupContainer"> @@ -9,13 +9,13 @@ <template #overlay> <Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef"> <MenuItem key="default"> - <span>{{ t('component.table.settingDensDefault') }}</span> + <span>{{ t("component.table.settingDensDefault") }}</span> </MenuItem> <MenuItem key="middle"> - <span>{{ t('component.table.settingDensMiddle') }}</span> + <span>{{ t("component.table.settingDensMiddle") }}</span> </MenuItem> <MenuItem key="small"> - <span>{{ t('component.table.settingDensSmall') }}</span> + <span>{{ t("component.table.settingDensSmall") }}</span> </MenuItem> </Menu> </template> @@ -23,16 +23,16 @@ </Tooltip> </template> <script lang="ts"> - import type { SizeType } from '../../types/table'; - import { defineComponent, ref } from 'vue'; - import { Tooltip, Dropdown, Menu } from 'ant-design-vue'; - import { ColumnHeightOutlined } from '@ant-design/icons-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTableContext } from '../../hooks/useTableContext'; - import { getPopupContainer } from '/@/utils'; + import type { SizeType } from "../../types/table"; + import { defineComponent, ref } from "vue"; + import { Tooltip, Dropdown, Menu } from "ant-design-vue"; + import { ColumnHeightOutlined } from "@ant-design/icons-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTableContext } from "../../hooks/useTableContext"; + import { getPopupContainer } from "/@/utils"; export default defineComponent({ - name: 'SizeSetting', + name: "SizeSetting", components: { ColumnHeightOutlined, Tooltip, diff --git a/src/components/Table/src/components/settings/index.vue b/src/components/Table/src/components/settings/index.vue index ab03cb2..dc3aef1 100644 --- a/src/components/Table/src/components/settings/index.vue +++ b/src/components/Table/src/components/settings/index.vue @@ -11,18 +11,18 @@ </div> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import type { TableSetting, ColumnChangeParam } from '../../types/table'; - import { defineComponent, computed, unref } from 'vue'; - import ColumnSetting from './ColumnSetting.vue'; - import SizeSetting from './SizeSetting.vue'; - import RedoSetting from './RedoSetting.vue'; - import FullScreenSetting from './FullScreenSetting.vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTableContext } from '../../hooks/useTableContext'; + import type { PropType } from "vue"; + import type { TableSetting, ColumnChangeParam } from "../../types/table"; + import { defineComponent, computed, unref } from "vue"; + import ColumnSetting from "./ColumnSetting.vue"; + import SizeSetting from "./SizeSetting.vue"; + import RedoSetting from "./RedoSetting.vue"; + import FullScreenSetting from "./FullScreenSetting.vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTableContext } from "../../hooks/useTableContext"; export default defineComponent({ - name: 'TableSetting', + name: "TableSetting", components: { ColumnSetting, SizeSetting, @@ -35,7 +35,7 @@ default: () => ({}), }, }, - emits: ['columns-change'], + emits: ["columns-change"], setup(props, { emit }) { const { t } = useI18n(); const table = useTableContext(); @@ -51,7 +51,7 @@ }); function handleColumnChange(data: ColumnChangeParam[]) { - emit('columns-change', data); + emit("columns-change", data); } function getTableContainer() { diff --git a/src/components/Table/src/const.ts b/src/components/Table/src/const.ts index 2a45fac..5bd8c2e 100644 --- a/src/components/Table/src/const.ts +++ b/src/components/Table/src/const.ts @@ -1,4 +1,4 @@ -import componentSetting from '/@/settings/componentSetting'; +import componentSetting from "/@/settings/componentSetting"; const { table } = componentSetting; @@ -11,7 +11,7 @@ const { defaultFilterFn, } = table; -export const ROW_KEY = 'key'; +export const ROW_KEY = "key"; // Optional display number per page; export const PAGE_SIZE_OPTIONS = pageSizeOptions; @@ -31,8 +31,8 @@ export const DEFAULT_SORT_FN = defaultSortFn; export const DEFAULT_FILTER_FN = defaultFilterFn; // Default layout of table cells -export const DEFAULT_ALIGN = 'center'; +export const DEFAULT_ALIGN = "center"; -export const INDEX_COLUMN_FLAG = 'INDEX'; +export const INDEX_COLUMN_FLAG = "INDEX"; -export const ACTION_COLUMN_FLAG = 'ACTION'; +export const ACTION_COLUMN_FLAG = "ACTION"; diff --git a/src/components/Table/src/hooks/useColumns.ts b/src/components/Table/src/hooks/useColumns.ts index 42e0c8a..d61933c 100644 --- a/src/components/Table/src/hooks/useColumns.ts +++ b/src/components/Table/src/hooks/useColumns.ts @@ -1,14 +1,14 @@ -import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; -import type { ComputedRef } from 'vue'; -import { computed, Ref, ref, toRaw, unref, watch } from 'vue'; -import { renderEditCell } from '../components/editable'; -import { usePermission } from '/@/hooks/web/usePermission'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { isArray, isBoolean, isFunction, isMap, isString } from '/@/utils/is'; -import { cloneDeep, isEqual } from 'lodash-es'; -import { formatToDate } from '/@/utils/dateUtil'; -import { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from '../const'; +import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from "../types/table"; +import type { PaginationProps } from "../types/pagination"; +import type { ComputedRef } from "vue"; +import { computed, Ref, ref, toRaw, unref, watch } from "vue"; +import { renderEditCell } from "../components/editable"; +import { usePermission } from "/@/hooks/web/usePermission"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { isArray, isBoolean, isFunction, isMap, isString } from "/@/utils/is"; +import { cloneDeep, isEqual } from "lodash-es"; +import { formatToDate } from "/@/utils/dateUtil"; +import { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from "../const"; function handleItem(item: BasicColumn, ellipsis: boolean) { const { key, dataIndex, children } = item; @@ -61,13 +61,13 @@ function handleIndexColumn( if (!pushIndexColumns) return; - const isFixedLeft = columns.some((item) => item.fixed === 'left'); + const isFixedLeft = columns.some((item) => item.fixed === "left"); columns.unshift({ flag: INDEX_COLUMN_FLAG, width: 50, - title: t('component.table.index'), - align: 'center', + title: t("component.table.index"), + align: "center", customRender: ({ index }) => { const getPagination = unref(getPaginationRef); if (isBoolean(getPagination)) { @@ -78,7 +78,7 @@ function handleIndexColumn( }, ...(isFixedLeft ? { - fixed: 'left', + fixed: "left", } : {}), ...indexColumnProps, @@ -93,7 +93,7 @@ function handleActionColumn(propsRef: ComputedRef<BasicTableProps>, columns: Bas if (hasIndex === -1) { columns.push({ ...columns[hasIndex], - fixed: 'right', + fixed: "right", ...actionColumn, flag: ACTION_COLUMN_FLAG, }); @@ -122,7 +122,7 @@ export function useColumns( handleItem( item, - Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots, + Reflect.has(item, "ellipsis") ? !!item.ellipsis : !!ellipsis && !customRender && !slots, ); }); return columns; @@ -157,7 +157,7 @@ export function useColumns( if (!slots || !slots?.title) { column.slots = { title: `header-${dataIndex}`, ...(slots || {}) }; column.customTitle = column.title; - Reflect.deleteProperty(column, 'title'); + Reflect.deleteProperty(column, "title"); } const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!); if (!customRender && format && !edit && !isDefaultAction) { @@ -277,11 +277,11 @@ function sortFixedColumn(columns: BasicColumn[]) { const fixedRightColumns: BasicColumn[] = []; const defColumns: BasicColumn[] = []; for (const column of columns) { - if (column.fixed === 'left') { + if (column.fixed === "left") { fixedLeftColumns.push(column); continue; } - if (column.fixed === 'right') { + if (column.fixed === "right") { fixedRightColumns.push(column); continue; } @@ -305,9 +305,9 @@ export function formatCell(text: string, format: CellFormat, record: Recordable, try { // date type - const DATE_FORMAT_PREFIX = 'date|'; + const DATE_FORMAT_PREFIX = "date|"; if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX)) { - const dateFormat = format.replace(DATE_FORMAT_PREFIX, ''); + const dateFormat = format.replace(DATE_FORMAT_PREFIX, ""); if (!dateFormat) { return text; diff --git a/src/components/Table/src/hooks/useCustomRow.ts b/src/components/Table/src/hooks/useCustomRow.ts index 5618720..f091863 100644 --- a/src/components/Table/src/hooks/useCustomRow.ts +++ b/src/components/Table/src/hooks/useCustomRow.ts @@ -1,8 +1,8 @@ -import type { ComputedRef } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { unref } from 'vue'; -import { ROW_KEY } from '../const'; -import { isString, isFunction } from '/@/utils/is'; +import type { ComputedRef } from "vue"; +import type { BasicTableProps } from "../types/table"; +import { unref } from "vue"; +import { ROW_KEY } from "../const"; +import { isString, isFunction } from "/@/utils/is"; interface Options { setSelectedRowKeys: (keys: string[]) => void; @@ -44,16 +44,16 @@ export function useCustomRow( const key = getKey(record, rowKey, unref(getAutoCreateKey)); if (!key) return; - const isCheckbox = rowSelection.type === 'checkbox'; + const isCheckbox = rowSelection.type === "checkbox"; if (isCheckbox) { // 找到tr const tr: HTMLElement = (e as MouseEvent) .composedPath?.() - .find((dom: HTMLElement) => dom.tagName === 'TR') as HTMLElement; + .find((dom: HTMLElement) => dom.tagName === "TR") as HTMLElement; if (!tr) return; // 找到Checkbox,检查是否为disabled - const checkBox = tr.querySelector('input[type=checkbox]'); - if (!checkBox || checkBox.hasAttribute('disabled')) return; + const checkBox = tr.querySelector("input[type=checkbox]"); + if (!checkBox || checkBox.hasAttribute("disabled")) return; if (!keys.includes(key)) { setSelectedRowKeys([...keys, key]); return; @@ -64,7 +64,7 @@ export function useCustomRow( return; } - const isRadio = rowSelection.type === 'radio'; + const isRadio = rowSelection.type === "radio"; if (isRadio) { if (!keys.includes(key)) { if (keys.length) { @@ -77,19 +77,19 @@ export function useCustomRow( } } handleClick(); - emit('row-click', record, index, e); + emit("row-click", record, index, e); }, onDblclick: (event: Event) => { - emit('row-dbClick', record, index, event); + emit("row-dbClick", record, index, event); }, onContextmenu: (event: Event) => { - emit('row-contextmenu', record, index, event); + emit("row-contextmenu", record, index, event); }, onMouseenter: (event: Event) => { - emit('row-mouseenter', record, index, event); + emit("row-mouseenter", record, index, event); }, onMouseleave: (event: Event) => { - emit('row-mouseleave', record, index, event); + emit("row-mouseleave", record, index, event); }, }; }; diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts index 76cba22..889b3eb 100644 --- a/src/components/Table/src/hooks/useDataSource.ts +++ b/src/components/Table/src/hooks/useDataSource.ts @@ -1,5 +1,5 @@ -import type { BasicTableProps, FetchParams, SorterResult } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; +import type { BasicTableProps, FetchParams, SorterResult } from "../types/table"; +import type { PaginationProps } from "../types/pagination"; import { ref, unref, @@ -10,12 +10,12 @@ import { reactive, Ref, watchEffect, -} from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { buildUUID } from '/@/utils/uuid'; -import { isFunction, isBoolean } from '/@/utils/is'; -import { get, cloneDeep } from 'lodash-es'; -import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from '../const'; +} from "vue"; +import { useTimeoutFn } from "/@/hooks/core/useTimeout"; +import { buildUUID } from "/@/utils/uuid"; +import { isFunction, isBoolean } from "/@/utils/is"; +import { get, cloneDeep } from "lodash-es"; +import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from "../const"; interface ActionType { getPaginationInfo: ComputedRef<boolean | PaginationProps>; @@ -168,7 +168,7 @@ export function useDataSource( for (const key of rowKeys) { let index: number | undefined = dataSourceRef.value.findIndex((row) => { let targetKeyName: string; - if (typeof rowKeyName === 'function') { + if (typeof rowKeyName === "function") { targetKeyName = rowKeyName(row); } else { targetKeyName = rowKeyName as string; @@ -180,14 +180,14 @@ export function useDataSource( } index = unref(propsRef).dataSource?.findIndex((row) => { let targetKeyName: string; - if (typeof rowKeyName === 'function') { + if (typeof rowKeyName === "function") { targetKeyName = rowKeyName(row); } else { targetKeyName = rowKeyName as string; } return row[targetKeyName] === key; }); - if (typeof index !== 'undefined' && index !== -1) + if (typeof index !== "undefined" && index !== -1) unref(propsRef).dataSource?.splice(index, 1); } setPagination({ @@ -209,12 +209,12 @@ export function useDataSource( const rowKeyName = unref(getRowKey); if (!rowKeyName) return; - const { childrenColumnName = 'children' } = unref(propsRef); + const { childrenColumnName = "children" } = unref(propsRef); const findRow = (array: any[]) => { let ret; array.some(function iter(r) { - if (typeof rowKeyName === 'function') { + if (typeof rowKeyName === "function") { if ((rowKeyName(r) as string) === rowKey) { ret = r; return true; @@ -318,13 +318,13 @@ export function useDataSource( current: opt.page || 1, }); } - emit('fetch-success', { + emit("fetch-success", { items: unref(resultItems), total: resultTotal, }); return resultItems; } catch (error) { - emit('fetch-error', error); + emit("fetch-error", error); dataSourceRef.value = []; setPagination({ total: 0, diff --git a/src/components/Table/src/hooks/useLoading.ts b/src/components/Table/src/hooks/useLoading.ts index fe8a0f1..bfb5463 100644 --- a/src/components/Table/src/hooks/useLoading.ts +++ b/src/components/Table/src/hooks/useLoading.ts @@ -1,5 +1,5 @@ -import { ref, ComputedRef, unref, computed, watch } from 'vue'; -import type { BasicTableProps } from '../types/table'; +import { ref, ComputedRef, unref, computed, watch } from "vue"; +import type { BasicTableProps } from "../types/table"; export function useLoading(props: ComputedRef<BasicTableProps>) { const loadingRef = ref(unref(props).loading); diff --git a/src/components/Table/src/hooks/usePagination.tsx b/src/components/Table/src/hooks/usePagination.tsx index ba310bd..3dbc110 100644 --- a/src/components/Table/src/hooks/usePagination.tsx +++ b/src/components/Table/src/hooks/usePagination.tsx @@ -1,21 +1,21 @@ -import type { PaginationProps } from '../types/pagination'; -import type { BasicTableProps } from '../types/table'; -import { computed, unref, ref, ComputedRef, watch } from 'vue'; -import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue'; -import { isBoolean } from '/@/utils/is'; -import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { PaginationProps } from "../types/pagination"; +import type { BasicTableProps } from "../types/table"; +import { computed, unref, ref, ComputedRef, watch } from "vue"; +import { LeftOutlined, RightOutlined } from "@ant-design/icons-vue"; +import { isBoolean } from "/@/utils/is"; +import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from "../const"; +import { useI18n } from "/@/hooks/web/useI18n"; interface ItemRender { page: number; - type: 'page' | 'prev' | 'next'; + type: "page" | "prev" | "next"; originalElement: any; } function itemRender({ page, type, originalElement }: ItemRender) { - if (type === 'prev') { + if (type === "prev") { return page === 0 ? null : <LeftOutlined />; - } else if (type === 'next') { + } else if (type === "next") { return page === 1 ? null : <RightOutlined />; } return originalElement; @@ -49,9 +49,9 @@ export function usePagination(refProps: ComputedRef<BasicTableProps>) { return { current: 1, pageSize: PAGE_SIZE, - size: 'small', + size: "small", defaultPageSize: PAGE_SIZE, - showTotal: (total) => t('component.table.total', { total }), + showTotal: (total) => t("component.table.total", { total }), showSizeChanger: true, pageSizeOptions: PAGE_SIZE_OPTIONS, itemRender: itemRender, diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index ffae9b5..eb4d024 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/src/components/Table/src/hooks/useRowSelection.ts @@ -1,9 +1,9 @@ -import { isFunction } from '/@/utils/is'; -import type { BasicTableProps, TableRowSelection } from '../types/table'; -import { computed, ComputedRef, nextTick, Ref, ref, toRaw, unref, watch } from 'vue'; -import { ROW_KEY } from '../const'; -import { omit } from 'lodash-es'; -import { findNodeAll } from '/@/utils/helper/treeHelper'; +import { isFunction } from "/@/utils/is"; +import type { BasicTableProps, TableRowSelection } from "../types/table"; +import { computed, ComputedRef, nextTick, Ref, ref, toRaw, unref, watch } from "vue"; +import { ROW_KEY } from "../const"; +import { omit } from "lodash-es"; +import { findNodeAll } from "/@/utils/helper/treeHelper"; export function useRowSelection( propsRef: ComputedRef<BasicTableProps>, @@ -27,7 +27,7 @@ export function useRowSelection( // selectedRowKeysRef.value = selectedRowKeys; // selectedRowRef.value = selectedRows; }, - ...omit(rowSelection, ['onChange']), + ...omit(rowSelection, ["onChange"]), }; }); @@ -47,7 +47,7 @@ export function useRowSelection( const { onChange } = rowSelection; if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows()); } - emit('selection-change', { + emit("selection-change", { keys: getSelectRowKeys(), rows: getSelectRows(), }); @@ -71,7 +71,7 @@ export function useRowSelection( toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))), (item) => rowKeys.includes(item[unref(getRowKey) as string]), { - children: propsRef.value.childrenColumnName ?? 'children', + children: propsRef.value.childrenColumnName ?? "children", }, ); const trueSelectedRows: any[] = []; diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts index d605893..9d31a18 100644 --- a/src/components/Table/src/hooks/useTable.ts +++ b/src/components/Table/src/hooks/useTable.ts @@ -1,12 +1,12 @@ -import type { BasicTableProps, TableActionType, FetchParams, BasicColumn } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; -import type { DynamicProps } from '/#/utils'; -import type { FormActionType } from '/@/components/Form'; -import type { WatchStopHandle } from 'vue'; -import { getDynamicProps } from '/@/utils'; -import { ref, onUnmounted, unref, watch, toRaw } from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { error } from '/@/utils/log'; +import type { BasicTableProps, TableActionType, FetchParams, BasicColumn } from "../types/table"; +import type { PaginationProps } from "../types/pagination"; +import type { DynamicProps } from "/#/utils"; +import type { FormActionType } from "/@/components/Form"; +import type { WatchStopHandle } from "vue"; +import { getDynamicProps } from "/@/utils"; +import { ref, onUnmounted, unref, watch, toRaw } from "vue"; +import { isProdMode } from "/@/utils/env"; +import { error } from "/@/utils/log"; type Props = Partial<DynamicProps<BasicTableProps>>; @@ -58,7 +58,7 @@ export function useTable(tableProps?: Props): [ const table = unref(tableRef); if (!table) { error( - 'The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!', + "The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!", ); } return table as TableActionType; diff --git a/src/components/Table/src/hooks/useTableContext.ts b/src/components/Table/src/hooks/useTableContext.ts index b657bb2..db55344 100644 --- a/src/components/Table/src/hooks/useTableContext.ts +++ b/src/components/Table/src/hooks/useTableContext.ts @@ -1,15 +1,15 @@ -import type { Ref } from 'vue'; -import type { BasicTableProps, TableActionType } from '../types/table'; -import { provide, inject, ComputedRef } from 'vue'; +import type { Ref } from "vue"; +import type { BasicTableProps, TableActionType } from "../types/table"; +import { provide, inject, ComputedRef } from "vue"; -const key = Symbol('basic-table'); +const key = Symbol("basic-table"); type Instance = TableActionType & { wrapRef: Ref<Nullable<HTMLElement>>; getBindValues: ComputedRef<Recordable>; }; -type RetInstance = Omit<Instance, 'getBindValues'> & { +type RetInstance = Omit<Instance, "getBindValues"> & { getBindValues: ComputedRef<BasicTableProps>; }; diff --git a/src/components/Table/src/hooks/useTableExpand.ts b/src/components/Table/src/hooks/useTableExpand.ts index c9f0eb1..192c4cd 100644 --- a/src/components/Table/src/hooks/useTableExpand.ts +++ b/src/components/Table/src/hooks/useTableExpand.ts @@ -1,7 +1,7 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { computed, unref, ref, toRaw } from 'vue'; -import { ROW_KEY } from '../const'; +import type { ComputedRef, Ref } from "vue"; +import type { BasicTableProps } from "../types/table"; +import { computed, unref, ref, toRaw } from "vue"; +import { ROW_KEY } from "../const"; export function useTableExpand( propsRef: ComputedRef<BasicTableProps>, @@ -27,7 +27,7 @@ export function useTableExpand( expandedRowKeys: unref(expandedRowKeys), onExpandedRowsChange: (keys: string[]) => { expandedRowKeys.value = keys; - emit('expanded-rows-change', keys); + emit("expanded-rows-change", keys); }, }; }); @@ -42,7 +42,7 @@ export function useTableExpand( const { childrenColumnName } = unref(propsRef); toRaw(data || unref(tableData)).forEach((item) => { keys.push(item[unref(getRowKey) as string]); - const children = item[childrenColumnName || 'children']; + const children = item[childrenColumnName || "children"]; if (children?.length) { keys.push(...getAllKeys(children)); } diff --git a/src/components/Table/src/hooks/useTableFooter.ts b/src/components/Table/src/hooks/useTableFooter.ts index df8393a..e087f74 100644 --- a/src/components/Table/src/hooks/useTableFooter.ts +++ b/src/components/Table/src/hooks/useTableFooter.ts @@ -1,8 +1,8 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { unref, computed, h, nextTick, watchEffect } from 'vue'; -import TableFooter from '../components/TableFooter.vue'; -import { useEventListener } from '/@/hooks/event/useEventListener'; +import type { ComputedRef, Ref } from "vue"; +import type { BasicTableProps } from "../types/table"; +import { unref, computed, h, nextTick, watchEffect } from "vue"; +import TableFooter from "../components/TableFooter.vue"; +import { useEventListener } from "/@/hooks/event/useEventListener"; export function useTableFooter( propsRef: ComputedRef<BasicTableProps>, @@ -36,14 +36,14 @@ export function useTableFooter( nextTick(() => { const tableEl = unref(tableElRef); if (!tableEl) return; - const bodyDomList = tableEl.$el.querySelectorAll('.ant-table-body'); + const bodyDomList = tableEl.$el.querySelectorAll(".ant-table-body"); const bodyDom = bodyDomList[0]; useEventListener({ el: bodyDom, - name: 'scroll', + name: "scroll", listener: () => { const footerBodyDom = tableEl.$el.querySelector( - '.ant-table-footer .ant-table-body', + ".ant-table-footer .ant-table-body", ) as HTMLDivElement; if (!footerBodyDom || !bodyDom) return; footerBodyDom.scrollLeft = bodyDom.scrollLeft; diff --git a/src/components/Table/src/hooks/useTableForm.ts b/src/components/Table/src/hooks/useTableForm.ts index bc09c7f..eda514a 100644 --- a/src/components/Table/src/hooks/useTableForm.ts +++ b/src/components/Table/src/hooks/useTableForm.ts @@ -1,8 +1,8 @@ -import type { ComputedRef, Slots } from 'vue'; -import type { BasicTableProps, FetchParams } from '../types/table'; -import { unref, computed } from 'vue'; -import type { FormProps } from '/@/components/Form'; -import { isFunction } from '/@/utils/is'; +import type { ComputedRef, Slots } from "vue"; +import type { BasicTableProps, FetchParams } from "../types/table"; +import { unref, computed } from "vue"; +import type { FormProps } from "/@/components/Form"; +import { isFunction } from "/@/utils/is"; export function useTableForm( propsRef: ComputedRef<BasicTableProps>, @@ -24,13 +24,13 @@ export function useTableForm( const getFormSlotKeys: ComputedRef<string[]> = computed(() => { const keys = Object.keys(slots); return keys - .map((item) => (item.startsWith('form-') ? item : null)) + .map((item) => (item.startsWith("form-") ? item : null)) .filter((item) => !!item) as string[]; }); function replaceFormSlotKey(key: string) { - if (!key) return ''; - return key?.replace?.(/form\-/, '') ?? ''; + if (!key) return ""; + return key?.replace?.(/form\-/, "") ?? ""; } function handleSearchInfoChange(info: Recordable) { diff --git a/src/components/Table/src/hooks/useTableHeader.ts b/src/components/Table/src/hooks/useTableHeader.ts index e728207..e856748 100644 --- a/src/components/Table/src/hooks/useTableHeader.ts +++ b/src/components/Table/src/hooks/useTableHeader.ts @@ -1,9 +1,9 @@ -import type { ComputedRef, Slots } from 'vue'; -import type { BasicTableProps, InnerHandlers } from '../types/table'; -import { unref, computed, h } from 'vue'; -import TableHeader from '../components/TableHeader.vue'; -import { isString } from '/@/utils/is'; -import { getSlot } from '/@/utils/helper/tsxHelper'; +import type { ComputedRef, Slots } from "vue"; +import type { BasicTableProps, InnerHandlers } from "../types/table"; +import { unref, computed, h } from "vue"; +import TableHeader from "../components/TableHeader.vue"; +import { isString } from "/@/utils/is"; +import { getSlot } from "/@/utils/helper/tsxHelper"; export function useTableHeader( propsRef: ComputedRef<BasicTableProps>, @@ -33,17 +33,17 @@ export function useTableHeader( { ...(slots.toolbar ? { - toolbar: () => getSlot(slots, 'toolbar'), + toolbar: () => getSlot(slots, "toolbar"), } : {}), ...(slots.tableTitle ? { - tableTitle: () => getSlot(slots, 'tableTitle'), + tableTitle: () => getSlot(slots, "tableTitle"), } : {}), ...(slots.headerTop ? { - headerTop: () => getSlot(slots, 'headerTop'), + headerTop: () => getSlot(slots, "headerTop"), } : {}), }, diff --git a/src/components/Table/src/hooks/useTableScroll.ts b/src/components/Table/src/hooks/useTableScroll.ts index 3400151..c21b00f 100644 --- a/src/components/Table/src/hooks/useTableScroll.ts +++ b/src/components/Table/src/hooks/useTableScroll.ts @@ -1,12 +1,12 @@ -import type { BasicTableProps, TableRowSelection, BasicColumn } from '../types/table'; -import type { Ref, ComputedRef } from 'vue'; -import { computed, unref, ref, nextTick, watch } from 'vue'; -import { getViewportOffset } from '/@/utils/domUtils'; -import { isBoolean } from '/@/utils/is'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; -import { useModalContext } from '/@/components/Modal'; -import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; -import { useDebounceFn } from '@vueuse/core'; +import type { BasicTableProps, TableRowSelection, BasicColumn } from "../types/table"; +import type { Ref, ComputedRef } from "vue"; +import { computed, unref, ref, nextTick, watch } from "vue"; +import { getViewportOffset } from "/@/utils/domUtils"; +import { isBoolean } from "/@/utils/is"; +import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; +import { useModalContext } from "/@/components/Modal"; +import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; +import { useDebounceFn } from "@vueuse/core"; export function useTableScroll( propsRef: ComputedRef<BasicTableProps>, @@ -33,7 +33,7 @@ export function useTableScroll( debounceRedoHeight(); }, { - flush: 'post', + flush: "post", }, ); @@ -65,7 +65,7 @@ export function useTableScroll( if (!tableEl) return; if (!bodyEl) { - bodyEl = tableEl.querySelector('.ant-table-body'); + bodyEl = tableEl.querySelector(".ant-table-body"); if (!bodyEl) return; } @@ -73,27 +73,27 @@ export function useTableScroll( const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth; if (hasScrollBarY) { - tableEl.classList.contains('hide-scrollbar-y') && - tableEl.classList.remove('hide-scrollbar-y'); + tableEl.classList.contains("hide-scrollbar-y") && + tableEl.classList.remove("hide-scrollbar-y"); } else { - !tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y'); + !tableEl.classList.contains("hide-scrollbar-y") && tableEl.classList.add("hide-scrollbar-y"); } if (hasScrollBarX) { - tableEl.classList.contains('hide-scrollbar-x') && - tableEl.classList.remove('hide-scrollbar-x'); + tableEl.classList.contains("hide-scrollbar-x") && + tableEl.classList.remove("hide-scrollbar-x"); } else { - !tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x'); + !tableEl.classList.contains("hide-scrollbar-x") && tableEl.classList.add("hide-scrollbar-x"); } - bodyEl!.style.height = 'unset'; + bodyEl!.style.height = "unset"; if (!unref(getCanResize) || tableData.length === 0) return; await nextTick(); //Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight - const headEl = tableEl.querySelector('.ant-table-thead '); + const headEl = tableEl.querySelector(".ant-table-thead "); if (!headEl) return; @@ -105,7 +105,7 @@ export function useTableScroll( // Pager height let paginationHeight = 2; if (!isBoolean(pagination)) { - paginationEl = tableEl.querySelector('.ant-pagination') as HTMLElement; + paginationEl = tableEl.querySelector(".ant-pagination") as HTMLElement; if (paginationEl) { const offsetHeight = paginationEl.offsetHeight; paginationHeight += offsetHeight || 0; @@ -120,7 +120,7 @@ export function useTableScroll( let footerHeight = 0; if (!isBoolean(pagination)) { if (!footerEl) { - footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement; + footerEl = tableEl.querySelector(".ant-table-footer") as HTMLElement; } else { const offsetHeight = footerEl.offsetHeight; footerHeight += offsetHeight || 0; @@ -166,7 +166,7 @@ export function useTableScroll( columns.forEach((item) => { width += Number.parseInt(item.width as string) || 0; }); - const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, 'width')); + const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, "width")); const len = unsetWidthColumns.length; if (len !== 0) { @@ -175,7 +175,7 @@ export function useTableScroll( const table = unref(tableElRef); const tableWidth = table?.$el?.offsetWidth ?? 0; - return tableWidth > width ? '100%' : width; + return tableWidth > width ? "100%" : width; }); const getScrollRef = computed(() => { diff --git a/src/components/Table/src/hooks/useTableStyle.ts b/src/components/Table/src/hooks/useTableStyle.ts index 292187d..0beb62a 100644 --- a/src/components/Table/src/hooks/useTableStyle.ts +++ b/src/components/Table/src/hooks/useTableStyle.ts @@ -1,19 +1,19 @@ -import type { ComputedRef } from 'vue'; -import type { BasicTableProps, TableCustomRecord } from '../types/table'; -import { unref } from 'vue'; -import { isFunction } from '/@/utils/is'; +import type { ComputedRef } from "vue"; +import type { BasicTableProps, TableCustomRecord } from "../types/table"; +import { unref } from "vue"; +import { isFunction } from "/@/utils/is"; export function useTableStyle(propsRef: ComputedRef<BasicTableProps>, prefixCls: string) { function getRowClassName(record: TableCustomRecord, index: number) { const { striped, rowClassName } = unref(propsRef); const classNames: string[] = []; if (striped) { - classNames.push((index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : ''); + classNames.push((index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : ""); } if (rowClassName && isFunction(rowClassName)) { classNames.push(rowClassName(record, index)); } - return classNames.filter((cls) => !!cls).join(' '); + return classNames.filter((cls) => !!cls).join(" "); } return { getRowClassName }; diff --git a/src/components/Table/src/props.ts b/src/components/Table/src/props.ts index 302bb3b..cc604a2 100644 --- a/src/components/Table/src/props.ts +++ b/src/components/Table/src/props.ts @@ -1,5 +1,5 @@ -import type { PropType } from 'vue'; -import type { PaginationProps } from './types/pagination'; +import type { PropType } from "vue"; +import type { PaginationProps } from "./types/pagination"; import type { BasicColumn, FetchSetting, @@ -8,10 +8,10 @@ import type { TableCustomRecord, TableRowSelection, SizeType, -} from './types/table'; -import type { FormProps } from '/@/components/Form'; -import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from './const'; -import { propTypes } from '/@/utils/propTypes'; +} from "./types/table"; +import type { FormProps } from "/@/components/Form"; +import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from "./const"; +import { propTypes } from "/@/utils/propTypes"; export const basicProps = { clickToRowSelect: propTypes.bool.def(true), @@ -117,7 +117,7 @@ export const basicProps = { }, rowKey: { type: [String, Function] as PropType<string | ((record: Recordable) => string)>, - default: '', + default: "", }, bordered: propTypes.bool, pagination: { diff --git a/src/components/Table/src/types/column.ts b/src/components/Table/src/types/column.ts index 785e6df..b8ab2ef 100644 --- a/src/components/Table/src/types/column.ts +++ b/src/components/Table/src/types/column.ts @@ -1,4 +1,4 @@ -import { VNodeChild } from 'vue'; +import { VNodeChild } from "vue"; export interface ColumnFilterItem { text?: string; @@ -6,7 +6,7 @@ export interface ColumnFilterItem { children?: any; } -export declare type SortOrder = 'ascend' | 'descend'; +export declare type SortOrder = "ascend" | "descend"; export interface RecordProps<T> { text: any; @@ -33,7 +33,7 @@ export interface ColumnProps<T> { * @default 'left' * @type string */ - align?: 'left' | 'right' | 'center'; + align?: "left" | "right" | "center"; /** * ellipsize cell content, not working with sorter and filters for now. @@ -120,7 +120,7 @@ export interface ColumnProps<T> { * @default false * @type boolean | string */ - fixed?: boolean | 'left' | 'right'; + fixed?: boolean | "left" | "right"; /** * Unique key of this column, you can ignore this prop if you've set a unique dataIndex diff --git a/src/components/Table/src/types/componentType.ts b/src/components/Table/src/types/componentType.ts index 48d5a7a..0bbed62 100644 --- a/src/components/Table/src/types/componentType.ts +++ b/src/components/Table/src/types/componentType.ts @@ -1,10 +1,10 @@ export type ComponentType = - | 'Input' - | 'InputNumber' - | 'Select' - | 'ApiSelect' - | 'ApiTreeSelect' - | 'Checkbox' - | 'Switch' - | 'DatePicker' - | 'TimePicker'; + | "Input" + | "InputNumber" + | "Select" + | "ApiSelect" + | "ApiTreeSelect" + | "Checkbox" + | "Switch" + | "DatePicker" + | "TimePicker"; diff --git a/src/components/Table/src/types/pagination.ts b/src/components/Table/src/types/pagination.ts index fd2ecbe..81f0a1f 100644 --- a/src/components/Table/src/types/pagination.ts +++ b/src/components/Table/src/types/pagination.ts @@ -1,14 +1,14 @@ -import Pagination from 'ant-design-vue/lib/pagination'; -import { VNodeChild } from 'vue'; +import Pagination from "ant-design-vue/lib/pagination"; +import { VNodeChild } from "vue"; interface PaginationRenderProps { page: number; - type: 'page' | 'prev' | 'next'; + type: "page" | "prev" | "next"; originalElement: any; } export declare class PaginationConfig extends Pagination { - position?: 'top' | 'bottom' | 'both'; + position?: "top" | "bottom" | "both"; } export interface PaginationProps { /** diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts index 10f2c8c..fffa338 100644 --- a/src/components/Table/src/types/table.ts +++ b/src/components/Table/src/types/table.ts @@ -1,16 +1,16 @@ -import type { VNodeChild } from 'vue'; -import type { PaginationProps } from './pagination'; -import type { FormProps } from '/@/components/Form'; +import type { VNodeChild } from "vue"; +import type { PaginationProps } from "./pagination"; +import type { FormProps } from "/@/components/Form"; import type { ColumnProps, TableRowSelection as ITableRowSelection, -} from 'ant-design-vue/lib/table/interface'; +} from "ant-design-vue/lib/table/interface"; -import { ComponentType } from './componentType'; -import { VueNode } from '/@/utils/propTypes'; -import { RoleEnum } from '/@/enums/roleEnum'; +import { ComponentType } from "./componentType"; +import { VueNode } from "/@/utils/propTypes"; +import { RoleEnum } from "/@/enums/roleEnum"; -export declare type SortOrder = 'ascend' | 'descend'; +export declare type SortOrder = "ascend" | "descend"; export interface TableCurrentDataSource<T = Recordable> { currentDataSource: T[]; @@ -82,7 +82,7 @@ export interface GetColumnsParams { sort?: boolean; } -export type SizeType = 'default' | 'middle' | 'small' | 'large'; +export type SizeType = "default" | "middle" | "small" | "large"; export interface TableActionType { reload: (opt?: FetchParams) => Promise<void>; @@ -348,7 +348,7 @@ export interface BasicTableProps<T = any> { * @see https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout * @version 1.5.0 */ - tableLayout?: 'auto' | 'fixed' | string; + tableLayout?: "auto" | "fixed" | string; /** * the render container of dropdowns in table @@ -421,7 +421,7 @@ export interface BasicColumn extends ColumnProps { }[]; // - flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION'; + flag?: "INDEX" | "DEFAULT" | "CHECKBOX" | "RADIO" | "ACTION"; customTitle?: VueNode; slots?: Recordable; @@ -451,7 +451,7 @@ export interface BasicColumn extends ColumnProps { export type ColumnChangeParam = { dataIndex: string; - fixed: boolean | 'left' | 'right' | undefined; + fixed: boolean | "left" | "right" | undefined; visible: boolean; }; diff --git a/src/components/Table/src/types/tableAction.ts b/src/components/Table/src/types/tableAction.ts index 3566d24..9a6522a 100644 --- a/src/components/Table/src/types/tableAction.ts +++ b/src/components/Table/src/types/tableAction.ts @@ -1,10 +1,10 @@ -import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import { TooltipProps } from 'ant-design-vue/es/tooltip/Tooltip'; -import { RoleEnum } from '/@/enums/roleEnum'; +import { ButtonProps } from "ant-design-vue/es/button/buttonTypes"; +import { TooltipProps } from "ant-design-vue/es/tooltip/Tooltip"; +import { RoleEnum } from "/@/enums/roleEnum"; export interface ActionItem extends ButtonProps { onClick?: Fn; label?: string; - color?: 'success' | 'error' | 'warning'; + color?: "success" | "error" | "warning"; icon?: string; popConfirm?: PopConfirm; disabled?: boolean; diff --git a/src/components/Time/index.ts b/src/components/Time/index.ts index 7e2f4c0..f85e9ca 100644 --- a/src/components/Time/index.ts +++ b/src/components/Time/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils/index'; -import time from './src/Time.vue'; +import { withInstall } from "/@/utils/index"; +import time from "./src/Time.vue"; export const Time = withInstall(time); diff --git a/src/components/Time/src/Time.vue b/src/components/Time/src/Time.vue index 2789368..c979743 100644 --- a/src/components/Time/src/Time.vue +++ b/src/components/Time/src/Time.vue @@ -2,12 +2,12 @@ <span>{{ date }}</span> </template> <script lang="ts"> - import { defineComponent, ref, watch } from 'vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useIntervalFn } from '@vueuse/core'; - import { formatToDateTime, formatToDate, dateUtil } from '/@/utils/dateUtil'; - import { isNumber, isObject, isString } from '/@/utils/is'; - import { propTypes } from '/@/utils/propTypes'; + import { defineComponent, ref, watch } from "vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useIntervalFn } from "@vueuse/core"; + import { formatToDateTime, formatToDate, dateUtil } from "/@/utils/dateUtil"; + import { isNumber, isObject, isString } from "/@/utils/is"; + import { propTypes } from "/@/utils/propTypes"; const ONE_SECONDS = 1000; const ONE_MINUTES = ONE_SECONDS * 60; @@ -15,15 +15,15 @@ const ONE_DAY = ONE_HOUR * 24; export default defineComponent({ - name: 'Time', + name: "Time", props: { value: propTypes.oneOfType([propTypes.number, propTypes.instanceOf(Date), propTypes.string]) .isRequired, step: propTypes.number.def(60), - mode: propTypes.oneOf(['date', 'datetime', 'relative']).def('relative'), + mode: propTypes.oneOf(["date", "datetime", "relative"]).def("relative"), }, setup(props) { - const date = ref(''); + const date = ref(""); const { t } = useI18n(); @@ -54,12 +54,12 @@ function setTime() { const { mode, value } = props; const time = getTime(); - if (mode === 'relative') { + if (mode === "relative") { date.value = getRelativeTime(time); } else { - if (mode === 'datetime') { + if (mode === "datetime") { date.value = formatToDateTime(value); - } else if (mode === 'date') { + } else if (mode === "date") { date.value = formatToDate(value); } } @@ -76,28 +76,28 @@ diff = -diff; } - let resStr = ''; - let dirStr = isBefore ? t('component.time.before') : t('component.time.after'); + let resStr = ""; + let dirStr = isBefore ? t("component.time.before") : t("component.time.after"); if (diff < ONE_SECONDS) { - resStr = t('component.time.just'); + resStr = t("component.time.just"); // Less than or equal to 59 seconds } else if (diff < ONE_MINUTES) { - resStr = parseInt(diff / ONE_SECONDS) + t('component.time.seconds') + dirStr; + resStr = parseInt(diff / ONE_SECONDS) + t("component.time.seconds") + dirStr; // More than 59 seconds, less than or equal to 59 minutes and 59 seconds } else if (diff >= ONE_MINUTES && diff < ONE_HOUR) { - resStr = Math.floor(diff / ONE_MINUTES) + t('component.time.minutes') + dirStr; + resStr = Math.floor(diff / ONE_MINUTES) + t("component.time.minutes") + dirStr; // More than 59 minutes and 59 seconds, less than or equal to 23 hours, 59 minutes and 59 seconds } else if (diff >= ONE_HOUR && diff < ONE_DAY) { - resStr = Math.floor(diff / ONE_HOUR) + t('component.time.hours') + dirStr; + resStr = Math.floor(diff / ONE_HOUR) + t("component.time.hours") + dirStr; // More than 23 hours, 59 minutes and 59 seconds, less than or equal to 29 days, 59 minutes and 59 seconds } else if (diff >= ONE_DAY && diff < 2623860000) { - resStr = Math.floor(diff / ONE_DAY) + t('component.time.days') + dirStr; + resStr = Math.floor(diff / ONE_DAY) + t("component.time.days") + dirStr; // More than 29 days, 59 minutes, 59 seconds, less than 364 days, 23 hours, 59 minutes, 59 seconds, and the incoming timestamp is earlier than the current } else if (diff >= 2623860000 && diff <= 31567860000 && isBefore) { - resStr = dateUtil(timeStamp).format('MM-DD-HH-mm'); + resStr = dateUtil(timeStamp).format("MM-DD-HH-mm"); } else { - resStr = dateUtil(timeStamp).format('YYYY'); + resStr = dateUtil(timeStamp).format("YYYY"); } return resStr; } diff --git a/src/components/Tinymce/index.ts b/src/components/Tinymce/index.ts index ce07f95..f0fe057 100644 --- a/src/components/Tinymce/index.ts +++ b/src/components/Tinymce/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils/index'; -import tinymce from './src/Editor.vue'; +import { withInstall } from "/@/utils/index"; +import tinymce from "./src/Editor.vue"; export const Tinymce = withInstall(tinymce); diff --git a/src/components/Tinymce/src/Editor.vue b/src/components/Tinymce/src/Editor.vue index b84c5fb..d02ccca 100644 --- a/src/components/Tinymce/src/Editor.vue +++ b/src/components/Tinymce/src/Editor.vue @@ -19,39 +19,39 @@ </template> <script lang="ts"> - import type { Editor, RawEditorSettings } from 'tinymce'; - import tinymce from 'tinymce/tinymce'; - import 'tinymce/themes/silver'; - import 'tinymce/icons/default/icons'; - import 'tinymce/plugins/advlist'; - import 'tinymce/plugins/anchor'; - import 'tinymce/plugins/autolink'; - import 'tinymce/plugins/autosave'; - import 'tinymce/plugins/code'; - import 'tinymce/plugins/codesample'; - import 'tinymce/plugins/directionality'; - import 'tinymce/plugins/fullscreen'; - import 'tinymce/plugins/hr'; - import 'tinymce/plugins/insertdatetime'; - import 'tinymce/plugins/link'; - import 'tinymce/plugins/lists'; - import 'tinymce/plugins/media'; - import 'tinymce/plugins/nonbreaking'; - import 'tinymce/plugins/noneditable'; - import 'tinymce/plugins/pagebreak'; - import 'tinymce/plugins/paste'; - import 'tinymce/plugins/preview'; - import 'tinymce/plugins/print'; - import 'tinymce/plugins/save'; - import 'tinymce/plugins/searchreplace'; - import 'tinymce/plugins/spellchecker'; - import 'tinymce/plugins/tabfocus'; + import type { Editor, RawEditorSettings } from "tinymce"; + import tinymce from "tinymce/tinymce"; + import "tinymce/themes/silver"; + import "tinymce/icons/default/icons"; + import "tinymce/plugins/advlist"; + import "tinymce/plugins/anchor"; + import "tinymce/plugins/autolink"; + import "tinymce/plugins/autosave"; + import "tinymce/plugins/code"; + import "tinymce/plugins/codesample"; + import "tinymce/plugins/directionality"; + import "tinymce/plugins/fullscreen"; + import "tinymce/plugins/hr"; + import "tinymce/plugins/insertdatetime"; + import "tinymce/plugins/link"; + import "tinymce/plugins/lists"; + import "tinymce/plugins/media"; + import "tinymce/plugins/nonbreaking"; + import "tinymce/plugins/noneditable"; + import "tinymce/plugins/pagebreak"; + import "tinymce/plugins/paste"; + import "tinymce/plugins/preview"; + import "tinymce/plugins/print"; + import "tinymce/plugins/save"; + import "tinymce/plugins/searchreplace"; + import "tinymce/plugins/spellchecker"; + import "tinymce/plugins/tabfocus"; // import 'tinymce/plugins/table'; - import 'tinymce/plugins/template'; - import 'tinymce/plugins/textpattern'; - import 'tinymce/plugins/visualblocks'; - import 'tinymce/plugins/visualchars'; - import 'tinymce/plugins/wordcount'; + import "tinymce/plugins/template"; + import "tinymce/plugins/textpattern"; + import "tinymce/plugins/visualblocks"; + import "tinymce/plugins/visualchars"; + import "tinymce/plugins/wordcount"; import { defineComponent, @@ -62,16 +62,16 @@ watch, onDeactivated, onBeforeUnmount, - } from 'vue'; - import ImgUpload from './ImgUpload.vue'; - import { toolbar, plugins } from './tinymce'; - import { buildShortUUID } from '/@/utils/uuid'; - import { bindHandlers } from './helper'; - import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { isNumber } from '/@/utils/is'; - import { useLocale } from '/@/locales/useLocale'; - import { useAppStore } from '/@/store/modules/app'; + } from "vue"; + import ImgUpload from "./ImgUpload.vue"; + import { toolbar, plugins } from "./tinymce"; + import { buildShortUUID } from "/@/utils/uuid"; + import { bindHandlers } from "./helper"; + import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { isNumber } from "/@/utils/is"; + import { useLocale } from "/@/locales/useLocale"; + import { useAppStore } from "/@/store/modules/app"; const tinymceProps = { options: { @@ -101,7 +101,7 @@ width: { type: [Number, String] as PropType<string | number>, required: false, - default: 'auto', + default: "auto", }, showImageUpload: { type: Boolean, @@ -110,18 +110,18 @@ }; export default defineComponent({ - name: 'Tinymce', + name: "Tinymce", components: { ImgUpload }, inheritAttrs: false, props: tinymceProps, - emits: ['change', 'update:modelValue', 'inited', 'init-error'], + emits: ["change", "update:modelValue", "inited", "init-error"], setup(props, { emit, attrs }) { const editorRef = ref<Nullable<Editor>>(null); const fullscreen = ref(false); - const tinymceId = ref<string>(buildShortUUID('tiny-vue')); + const tinymceId = ref<string>(buildShortUUID("tiny-vue")); const elRef = ref<Nullable<HTMLElement>>(null); - const { prefixCls } = useDesign('tinymce-container'); + const { prefixCls } = useDesign("tinymce-container"); const appStore = useAppStore(); @@ -136,48 +136,48 @@ }); const skinName = computed(() => { - return appStore.getDarkMode === 'light' ? 'oxide' : 'oxide-dark'; + return appStore.getDarkMode === "light" ? "oxide" : "oxide-dark"; }); const langName = computed(() => { const lang = useLocale().getLocale.value; - return ['zh_CN', 'en'].includes(lang) ? lang : 'zh_CN'; + return ["zh_CN", "en"].includes(lang) ? lang : "zh_CN"; }); const initOptions = computed((): RawEditorSettings => { const { height, options, toolbar, plugins } = props; - const publicPath = import.meta.env.VITE_PUBLIC_PATH || '/'; + const publicPath = import.meta.env.VITE_PUBLIC_PATH || "/"; return { selector: `#${unref(tinymceId)}`, height, toolbar, - menubar: 'file edit insert view format table', + menubar: "file edit insert view format table", plugins, - language_url: publicPath + 'resource/tinymce/langs/' + langName.value + '.js', + language_url: publicPath + "resource/tinymce/langs/" + langName.value + ".js", language: langName.value, branding: false, - default_link_target: '_blank', + default_link_target: "_blank", link_title: false, object_resizing: false, auto_focus: true, skin: skinName.value, - skin_url: publicPath + 'resource/tinymce/skins/ui/' + skinName.value, + skin_url: publicPath + "resource/tinymce/skins/ui/" + skinName.value, content_css: - publicPath + 'resource/tinymce/skins/ui/' + skinName.value + '/content.min.css', + publicPath + "resource/tinymce/skins/ui/" + skinName.value + "/content.min.css", ...options, setup: (editor: Editor) => { editorRef.value = editor; - editor.on('init', (e) => initSetup(e)); + editor.on("init", (e) => initSetup(e)); }, }; }); const disabled = computed(() => { const { options } = props; - const getdDisabled = options && Reflect.get(options, 'readonly'); + const getdDisabled = options && Reflect.get(options, "readonly"); const editor = unref(editorRef); if (editor) { - editor.setMode(getdDisabled ? 'readonly' : 'design'); + editor.setMode(getdDisabled ? "readonly" : "design"); } return getdDisabled ?? false; }); @@ -189,13 +189,13 @@ if (!editor) { return; } - editor.setMode(attrs.disabled ? 'readonly' : 'design'); + editor.setMode(attrs.disabled ? "readonly" : "design"); }, ); onMountedOrActivated(() => { if (!initOptions.value.inline) { - tinymceId.value = buildShortUUID('tiny-vue'); + tinymceId.value = buildShortUUID("tiny-vue"); } nextTick(() => { setTimeout(() => { @@ -221,15 +221,15 @@ function initEditor() { const el = unref(elRef); if (el) { - el.style.visibility = ''; + el.style.visibility = ""; } tinymce .init(unref(initOptions)) .then((editor) => { - emit('inited', editor); + emit("inited", editor); }) .catch((err) => { - emit('init-error', err); + emit("init-error", err); }); } @@ -238,7 +238,7 @@ if (!editor) { return; } - const value = props.modelValue || ''; + const value = props.modelValue || ""; editor.setContent(value); bindModelHandlers(editor); @@ -248,7 +248,7 @@ function setValue(editor: Recordable, val: string, prevVal?: string) { if ( editor && - typeof val === 'string' && + typeof val === "string" && val !== prevVal && val !== editor.getContent({ format: attrs.outputFormat }) ) { @@ -258,7 +258,7 @@ function bindModelHandlers(editor: any) { const modelEvents = attrs.modelEvents ? attrs.modelEvents : null; - const normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents; + const normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(" ") : modelEvents; watch( () => props.modelValue, @@ -277,13 +277,13 @@ }, ); - editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', () => { + editor.on(normalizedEvents ? normalizedEvents : "change keyup undo redo", () => { const content = editor.getContent({ format: attrs.outputFormat }); - emit('update:modelValue', content); - emit('change', content); + emit("update:modelValue", content); + emit("change", content); }); - editor.on('FullscreenStateChanged', (e) => { + editor.on("FullscreenStateChanged", (e) => { fullscreen.value = e.state; }); } @@ -293,8 +293,8 @@ if (!editor) { return; } - editor.execCommand('mceInsertContent', false, getUploadingImgName(name)); - const content = editor?.getContent() ?? ''; + editor.execCommand("mceInsertContent", false, getUploadingImgName(name)); + const content = editor?.getContent() ?? ""; setValue(editor, content); } @@ -303,8 +303,8 @@ if (!editor) { return; } - const content = editor?.getContent() ?? ''; - const val = content?.replace(getUploadingImgName(name), `<img src="${url}"/>`) ?? ''; + const content = editor?.getContent() ?? ""; + const val = content?.replace(getUploadingImgName(name), `<img src="${url}"/>`) ?? ""; setValue(editor, val); } @@ -332,7 +332,7 @@ <style lang="less" scoped></style> <style lang="less"> - @prefix-cls: ~'@{namespace}-tinymce-container'; + @prefix-cls: ~"@{namespace}-tinymce-container"; .@{prefix-cls} { position: relative; diff --git a/src/components/Tinymce/src/ImgUpload.vue b/src/components/Tinymce/src/ImgUpload.vue index f878709..a56e96c 100644 --- a/src/components/Tinymce/src/ImgUpload.vue +++ b/src/components/Tinymce/src/ImgUpload.vue @@ -9,21 +9,21 @@ accept=".jpg,.jpeg,.gif,.png,.webp" > <a-button type="primary" v-bind="{ ...getButtonProps }"> - {{ t('component.upload.imgUpload') }} + {{ t("component.upload.imgUpload") }} </a-button> </Upload> </div> </template> <script lang="ts"> - import { defineComponent, computed } from 'vue'; + import { defineComponent, computed } from "vue"; - import { Upload } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useGlobSetting } from '/@/hooks/setting'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { Upload } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useGlobSetting } from "/@/hooks/setting"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ - name: 'TinymceImageUpload', + name: "TinymceImageUpload", components: { Upload }, props: { fullscreen: { @@ -34,13 +34,13 @@ default: false, }, }, - emits: ['uploading', 'done', 'error'], + emits: ["uploading", "done", "error"], setup(props, { emit }) { let uploading = false; const { uploadUrl } = useGlobSetting(); const { t } = useI18n(); - const { prefixCls } = useDesign('tinymce-img-upload'); + const { prefixCls } = useDesign("tinymce-img-upload"); const getButtonProps = computed(() => { const { disabled } = props; @@ -55,16 +55,16 @@ const url = file?.response?.url; const name = file?.name; - if (status === 'uploading') { + if (status === "uploading") { if (!uploading) { - emit('uploading', name); + emit("uploading", name); uploading = true; } - } else if (status === 'done') { - emit('done', name, url); + } else if (status === "done") { + emit("done", name, url); uploading = false; - } else if (status === 'error') { - emit('error'); + } else if (status === "error") { + emit("error"); uploading = false; } } @@ -80,7 +80,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-tinymce-img-upload'; + @prefix-cls: ~"@{namespace}-tinymce-img-upload"; .@{prefix-cls} { position: absolute; diff --git a/src/components/Tinymce/src/helper.ts b/src/components/Tinymce/src/helper.ts index 2526ae7..318aea6 100644 --- a/src/components/Tinymce/src/helper.ts +++ b/src/components/Tinymce/src/helper.ts @@ -1,66 +1,66 @@ const validEvents = [ - 'onActivate', - 'onAddUndo', - 'onBeforeAddUndo', - 'onBeforeExecCommand', - 'onBeforeGetContent', - 'onBeforeRenderUI', - 'onBeforeSetContent', - 'onBeforePaste', - 'onBlur', - 'onChange', - 'onClearUndos', - 'onClick', - 'onContextMenu', - 'onCopy', - 'onCut', - 'onDblclick', - 'onDeactivate', - 'onDirty', - 'onDrag', - 'onDragDrop', - 'onDragEnd', - 'onDragGesture', - 'onDragOver', - 'onDrop', - 'onExecCommand', - 'onFocus', - 'onFocusIn', - 'onFocusOut', - 'onGetContent', - 'onHide', - 'onInit', - 'onKeyDown', - 'onKeyPress', - 'onKeyUp', - 'onLoadContent', - 'onMouseDown', - 'onMouseEnter', - 'onMouseLeave', - 'onMouseMove', - 'onMouseOut', - 'onMouseOver', - 'onMouseUp', - 'onNodeChange', - 'onObjectResizeStart', - 'onObjectResized', - 'onObjectSelected', - 'onPaste', - 'onPostProcess', - 'onPostRender', - 'onPreProcess', - 'onProgressState', - 'onRedo', - 'onRemove', - 'onReset', - 'onSaveContent', - 'onSelectionChange', - 'onSetAttrib', - 'onSetContent', - 'onShow', - 'onSubmit', - 'onUndo', - 'onVisualAid', + "onActivate", + "onAddUndo", + "onBeforeAddUndo", + "onBeforeExecCommand", + "onBeforeGetContent", + "onBeforeRenderUI", + "onBeforeSetContent", + "onBeforePaste", + "onBlur", + "onChange", + "onClearUndos", + "onClick", + "onContextMenu", + "onCopy", + "onCut", + "onDblclick", + "onDeactivate", + "onDirty", + "onDrag", + "onDragDrop", + "onDragEnd", + "onDragGesture", + "onDragOver", + "onDrop", + "onExecCommand", + "onFocus", + "onFocusIn", + "onFocusOut", + "onGetContent", + "onHide", + "onInit", + "onKeyDown", + "onKeyPress", + "onKeyUp", + "onLoadContent", + "onMouseDown", + "onMouseEnter", + "onMouseLeave", + "onMouseMove", + "onMouseOut", + "onMouseOver", + "onMouseUp", + "onNodeChange", + "onObjectResizeStart", + "onObjectResized", + "onObjectSelected", + "onPaste", + "onPostProcess", + "onPostRender", + "onPreProcess", + "onProgressState", + "onRedo", + "onRemove", + "onReset", + "onSaveContent", + "onSelectionChange", + "onSetAttrib", + "onSetContent", + "onShow", + "onSubmit", + "onUndo", + "onVisualAid", ]; const isValidKey = (key: string) => validEvents.indexOf(key) !== -1; @@ -70,8 +70,8 @@ export const bindHandlers = (initEvent: Event, listeners: any, editor: any): voi .filter(isValidKey) .forEach((key: string) => { const handler = listeners[key]; - if (typeof handler === 'function') { - if (key === 'onInit') { + if (typeof handler === "function") { + if (key === "onInit") { handler(initEvent, editor); } else { editor.on(key.substring(2), (e: any) => handler(e, editor)); diff --git a/src/components/Tinymce/src/tinymce.ts b/src/components/Tinymce/src/tinymce.ts index 1374b4d..ba7d6ba 100644 --- a/src/components/Tinymce/src/tinymce.ts +++ b/src/components/Tinymce/src/tinymce.ts @@ -4,10 +4,10 @@ // colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration export const plugins = [ - 'advlist anchor autolink autosave code codesample directionality fullscreen hr insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus template textpattern visualblocks visualchars wordcount', + "advlist anchor autolink autosave code codesample directionality fullscreen hr insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus template textpattern visualblocks visualchars wordcount", ]; export const toolbar = [ - 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', - 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen', + "fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample", + "hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen", ]; diff --git a/src/components/Transition/index.ts b/src/components/Transition/index.ts index 7eb79b5..24f36c1 100644 --- a/src/components/Transition/index.ts +++ b/src/components/Transition/index.ts @@ -1,27 +1,27 @@ -import { createSimpleTransition, createJavascriptTransition } from './src/CreateTransition'; +import { createSimpleTransition, createJavascriptTransition } from "./src/CreateTransition"; -import ExpandTransitionGenerator from './src/ExpandTransition'; +import ExpandTransitionGenerator from "./src/ExpandTransition"; -export { default as CollapseTransition } from './src/CollapseTransition.vue'; +export { default as CollapseTransition } from "./src/CollapseTransition.vue"; -export const FadeTransition = createSimpleTransition('fade-transition'); -export const ScaleTransition = createSimpleTransition('scale-transition'); -export const SlideYTransition = createSimpleTransition('slide-y-transition'); -export const ScrollYTransition = createSimpleTransition('scroll-y-transition'); -export const SlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition'); -export const ScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition'); -export const SlideXTransition = createSimpleTransition('slide-x-transition'); -export const ScrollXTransition = createSimpleTransition('scroll-x-transition'); -export const SlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition'); -export const ScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition'); -export const ScaleRotateTransition = createSimpleTransition('scale-rotate-transition'); +export const FadeTransition = createSimpleTransition("fade-transition"); +export const ScaleTransition = createSimpleTransition("scale-transition"); +export const SlideYTransition = createSimpleTransition("slide-y-transition"); +export const ScrollYTransition = createSimpleTransition("scroll-y-transition"); +export const SlideYReverseTransition = createSimpleTransition("slide-y-reverse-transition"); +export const ScrollYReverseTransition = createSimpleTransition("scroll-y-reverse-transition"); +export const SlideXTransition = createSimpleTransition("slide-x-transition"); +export const ScrollXTransition = createSimpleTransition("scroll-x-transition"); +export const SlideXReverseTransition = createSimpleTransition("slide-x-reverse-transition"); +export const ScrollXReverseTransition = createSimpleTransition("scroll-x-reverse-transition"); +export const ScaleRotateTransition = createSimpleTransition("scale-rotate-transition"); export const ExpandXTransition = createJavascriptTransition( - 'expand-x-transition', - ExpandTransitionGenerator('', true), + "expand-x-transition", + ExpandTransitionGenerator("", true), ); export const ExpandTransition = createJavascriptTransition( - 'expand-transition', - ExpandTransitionGenerator(''), + "expand-transition", + ExpandTransitionGenerator(""), ); diff --git a/src/components/Transition/src/CollapseTransition.vue b/src/components/Transition/src/CollapseTransition.vue index 6b50fa1..1502ae1 100644 --- a/src/components/Transition/src/CollapseTransition.vue +++ b/src/components/Transition/src/CollapseTransition.vue @@ -4,22 +4,22 @@ </transition> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { addClass, removeClass } from '/@/utils/domUtils'; + import { defineComponent } from "vue"; + import { addClass, removeClass } from "/@/utils/domUtils"; export default defineComponent({ - name: 'CollapseTransition', + name: "CollapseTransition", setup() { return { on: { beforeEnter(el) { - addClass(el, 'collapse-transition'); + addClass(el, "collapse-transition"); if (!el.dataset) el.dataset = {}; el.dataset.oldPaddingTop = el.style.paddingTop; el.dataset.oldPaddingBottom = el.style.paddingBottom; - el.style.height = '0'; + el.style.height = "0"; el.style.paddingTop = 0; el.style.paddingBottom = 0; }, @@ -27,21 +27,21 @@ enter(el) { el.dataset.oldOverflow = el.style.overflow; if (el.scrollHeight !== 0) { - el.style.height = el.scrollHeight + 'px'; + el.style.height = el.scrollHeight + "px"; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } else { - el.style.height = ''; + el.style.height = ""; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } - el.style.overflow = 'hidden'; + el.style.overflow = "hidden"; }, afterEnter(el) { - removeClass(el, 'collapse-transition'); - el.style.height = ''; + removeClass(el, "collapse-transition"); + el.style.height = ""; el.style.overflow = el.dataset.oldOverflow; }, @@ -51,13 +51,13 @@ el.dataset.oldPaddingBottom = el.style.paddingBottom; el.dataset.oldOverflow = el.style.overflow; - el.style.height = el.scrollHeight + 'px'; - el.style.overflow = 'hidden'; + el.style.height = el.scrollHeight + "px"; + el.style.overflow = "hidden"; }, leave(el) { if (el.scrollHeight !== 0) { - addClass(el, 'collapse-transition'); + addClass(el, "collapse-transition"); el.style.height = 0; el.style.paddingTop = 0; el.style.paddingBottom = 0; @@ -65,8 +65,8 @@ }, afterLeave(el) { - removeClass(el, 'collapse-transition'); - el.style.height = ''; + removeClass(el, "collapse-transition"); + el.style.height = ""; el.style.overflow = el.dataset.oldOverflow; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; diff --git a/src/components/Transition/src/CreateTransition.tsx b/src/components/Transition/src/CreateTransition.tsx index d12518d..9c8f3b9 100644 --- a/src/components/Transition/src/CreateTransition.tsx +++ b/src/components/Transition/src/CreateTransition.tsx @@ -1,11 +1,11 @@ -import type { PropType } from 'vue'; +import type { PropType } from "vue"; -import { defineComponent, Transition, TransitionGroup } from 'vue'; -import { getSlot } from '/@/utils/helper/tsxHelper'; +import { defineComponent, Transition, TransitionGroup } from "vue"; +import { getSlot } from "/@/utils/helper/tsxHelper"; -type Mode = 'in-out' | 'out-in' | 'default' | undefined; +type Mode = "in-out" | "out-in" | "default" | undefined; -export function createSimpleTransition(name: string, origin = 'top center 0', mode?: Mode) { +export function createSimpleTransition(name: string, origin = "top center 0", mode?: Mode) { return defineComponent({ name, props: { @@ -41,7 +41,7 @@ export function createSimpleTransition(name: string, origin = 'top center 0', mo export function createJavascriptTransition( name: string, functions: Recordable, - mode: Mode = 'in-out', + mode: Mode = "in-out", ) { return defineComponent({ name, diff --git a/src/components/Transition/src/ExpandTransition.ts b/src/components/Transition/src/ExpandTransition.ts index 2aaef9a..0774bc0 100644 --- a/src/components/Transition/src/ExpandTransition.ts +++ b/src/components/Transition/src/ExpandTransition.ts @@ -15,9 +15,9 @@ interface HTMLExpandElement extends HTMLElement { }; } -export default function (expandedParentClass = '', x = false) { - const sizeProperty = x ? 'width' : ('height' as 'width' | 'height'); - const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'; +export default function (expandedParentClass = "", x = false) { + const sizeProperty = x ? "width" : ("height" as "width" | "height"); + const offsetProperty = `offset${upperFirst(sizeProperty)}` as "offsetHeight" | "offsetWidth"; return { beforeEnter(el: HTMLExpandElement) { @@ -32,8 +32,8 @@ export default function (expandedParentClass = '', x = false) { enter(el: HTMLExpandElement) { const initialStyle = el._initialStyle; - el.style.setProperty('transition', 'none', 'important'); - el.style.overflow = 'hidden'; + el.style.setProperty("transition", "none", "important"); + el.style.overflow = "hidden"; // const offset = `${el[offsetProperty]}px`; // el.style[sizeProperty] = '0'; @@ -56,17 +56,17 @@ export default function (expandedParentClass = '', x = false) { leave(el: HTMLExpandElement) { el._initialStyle = { - transition: '', + transition: "", overflow: el.style.overflow, [sizeProperty]: el.style[sizeProperty], }; - el.style.overflow = 'hidden'; + el.style.overflow = "hidden"; el.style[sizeProperty] = `${el[offsetProperty]}px`; /* eslint-disable-next-line */ void el.offsetHeight; // force reflow - requestAnimationFrame(() => (el.style[sizeProperty] = '0')); + requestAnimationFrame(() => (el.style[sizeProperty] = "0")); }, afterLeave, @@ -84,6 +84,6 @@ export default function (expandedParentClass = '', x = false) { const size = el._initialStyle[sizeProperty]; el.style.overflow = el._initialStyle.overflow!; if (size != null) el.style[sizeProperty] = size; - Reflect.deleteProperty(el, '_initialStyle'); + Reflect.deleteProperty(el, "_initialStyle"); } } diff --git a/src/components/Tree/index.ts b/src/components/Tree/index.ts index f47820d..fe53b98 100644 --- a/src/components/Tree/index.ts +++ b/src/components/Tree/index.ts @@ -1,5 +1,5 @@ -import BasicTree from './src/Tree.vue'; +import BasicTree from "./src/Tree.vue"; export { BasicTree }; -export type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; -export * from './src/typing'; +export type { ContextMenuItem } from "/@/hooks/web/useContextMenu"; +export * from "./src/typing"; diff --git a/src/components/Tree/src/Tree.vue b/src/components/Tree/src/Tree.vue index a8bd8c4..073dcf4 100644 --- a/src/components/Tree/src/Tree.vue +++ b/src/components/Tree/src/Tree.vue @@ -1,5 +1,5 @@ <script lang="tsx"> - import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from './typing'; + import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from "./typing"; import { defineComponent, @@ -12,25 +12,25 @@ watch, CSSProperties, onMounted, - } from 'vue'; - import { Tree, Empty } from 'ant-design-vue'; - import { TreeIcon } from './TreeIcon'; - import TreeHeader from './TreeHeader.vue'; - import { ScrollContainer } from '/@/components/Container'; + } from "vue"; + import { Tree, Empty } from "ant-design-vue"; + import { TreeIcon } from "./TreeIcon"; + import TreeHeader from "./TreeHeader.vue"; + import { ScrollContainer } from "/@/components/Container"; - import { omit, get, difference } from 'lodash-es'; - import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is'; - import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper'; - import { filter, treeToList } from '/@/utils/helper/treeHelper'; + import { omit, get, difference } from "lodash-es"; + import { isArray, isBoolean, isEmpty, isFunction } from "/@/utils/is"; + import { extendSlots, getSlot } from "/@/utils/helper/tsxHelper"; + import { filter, treeToList } from "/@/utils/helper/treeHelper"; - import { useTree } from './useTree'; - import { useContextMenu } from '/@/hooks/web/useContextMenu'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useTree } from "./useTree"; + import { useContextMenu } from "/@/hooks/web/useContextMenu"; + import { useDesign } from "/@/hooks/web/useDesign"; - import { basicProps } from './props'; - import { CreateContextOptions } from '/@/components/ContextMenu'; + import { basicProps } from "./props"; + import { CreateContextOptions } from "/@/components/ContextMenu"; - import { CheckEvent } from './typing'; + import { CheckEvent } from "./typing"; interface State { expandedKeys: Keys; @@ -39,16 +39,16 @@ checkStrictly: boolean; } export default defineComponent({ - name: 'BasicTree', + name: "BasicTree", inheritAttrs: false, props: basicProps, emits: [ - 'update:expandedKeys', - 'update:selectedKeys', - 'update:value', - 'change', - 'check', - 'update:searchValue', + "update:expandedKeys", + "update:selectedKeys", + "update:value", + "change", + "check", + "update:searchValue", ], setup(props, { attrs, slots, emit, expose }) { const state = reactive<State>({ @@ -60,21 +60,21 @@ const searchState = reactive({ startSearch: false, - searchText: '', + searchText: "", searchData: [] as TreeItem[], }); const treeDataRef = ref<TreeItem[]>([]); const [createContextMenu] = useContextMenu(); - const { prefixCls } = useDesign('basic-tree'); + const { prefixCls } = useDesign("basic-tree"); const getReplaceFields = computed((): Required<ReplaceFields> => { const { replaceFields } = props; return { - children: 'children', - title: 'title', - key: 'key', + children: "children", + title: "title", + key: "key", ...replaceFields, }; }); @@ -89,13 +89,13 @@ checkedKeys: state.checkedKeys, checkStrictly: state.checkStrictly, replaceFields: unref(getReplaceFields), - 'onUpdate:expandedKeys': (v: Keys) => { + "onUpdate:expandedKeys": (v: Keys) => { state.expandedKeys = v; - emit('update:expandedKeys', v); + emit("update:expandedKeys", v); }, - 'onUpdate:selectedKeys': (v: Keys) => { + "onUpdate:selectedKeys": (v: Keys) => { state.selectedKeys = v; - emit('update:selectedKeys', v); + emit("update:selectedKeys", v); }, onCheck: (v: CheckKeys, e: CheckEvent) => { let currentValue = toRaw(state.checkedKeys) as Keys; @@ -111,12 +111,12 @@ } const rawVal = toRaw(state.checkedKeys); - emit('update:value', rawVal); - emit('check', rawVal, e); + emit("update:value", rawVal); + emit("check", rawVal, e); }, onRightClick: handleRightClick, }; - return omit(propsData, 'treeData', 'class'); + return omit(propsData, "treeData", "class"); }); const getTreeData = computed((): TreeItem[] => @@ -223,7 +223,7 @@ function handleSearch(searchValue: string) { if (searchValue !== searchState.searchText) searchState.searchText = searchValue; - emit('update:searchValue', searchValue); + emit("update:searchValue", searchValue); if (!searchValue) { searchState.startSearch = false; return; @@ -316,8 +316,8 @@ () => state.checkedKeys, () => { const v = toRaw(state.checkedKeys); - emit('update:value', v); - emit('change', v); + emit("update:value", v); + emit("change", v); }, ); @@ -394,7 +394,7 @@ children: childrenField, } = unref(getReplaceFields); - const propsData = omit(item, 'title'); + const propsData = omit(item, "title"); const icon = getIcon({ ...item, level }, item.icon); const children = get(item, childrenField) || []; const title = get(item, titleField); @@ -402,10 +402,10 @@ const searchIdx = searchText ? title.indexOf(searchText) : -1; const isHighlight = searchState.startSearch && !isEmpty(searchText) && highlight && searchIdx !== -1; - const highlightStyle = `color: ${isBoolean(highlight) ? '#f50' : highlight}`; + const highlightStyle = `color: ${isBoolean(highlight) ? "#f50" : highlight}`; const titleDom = isHighlight ? ( - <span class={unref(getBindValues)?.blockNode ? `${prefixCls}__content` : ''}> + <span class={unref(getBindValues)?.blockNode ? `${prefixCls}__content` : ""}> <span>{title.substr(0, searchIdx)}</span> <span style={highlightStyle}>{searchText}</span> <span>{title.substr(searchIdx + (searchText as string).length)}</span> @@ -445,9 +445,9 @@ return () => { const { title, helpMessage, toolbar, search, checkable } = props; const showTitle = title || toolbar || search || slots.headerTitle; - const scrollStyle: CSSProperties = { height: 'calc(100% - 38px)' }; + const scrollStyle: CSSProperties = { height: "calc(100% - 38px)" }; return ( - <div class={[prefixCls, 'h-full', attrs.class]}> + <div class={[prefixCls, "h-full", attrs.class]}> {showTitle && ( <TreeHeader checkable={checkable} @@ -482,7 +482,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-basic-tree'; + @prefix-cls: ~"@{namespace}-basic-tree"; .@{prefix-cls} { background-color: @component-background; diff --git a/src/components/Tree/src/TreeHeader.vue b/src/components/Tree/src/TreeHeader.vue index 57739d5..e12c556 100644 --- a/src/components/Tree/src/TreeHeader.vue +++ b/src/components/Tree/src/TreeHeader.vue @@ -34,17 +34,17 @@ </div> </template> <script lang="ts"> - import { PropType } from 'vue'; - import { defineComponent, computed, ref, watch } from 'vue'; + import { PropType } from "vue"; + import { defineComponent, computed, ref, watch } from "vue"; - import { Dropdown, Menu, Input } from 'ant-design-vue'; - import { Icon } from '/@/components/Icon'; - import { BasicTitle } from '/@/components/Basic'; + import { Dropdown, Menu, Input } from "ant-design-vue"; + import { Icon } from "/@/components/Icon"; + import { BasicTitle } from "/@/components/Basic"; - import { propTypes } from '/@/utils/propTypes'; + import { propTypes } from "/@/utils/propTypes"; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDebounceFn } from '@vueuse/core'; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDebounceFn } from "@vueuse/core"; enum ToolbarEnum { SELECT_ALL, @@ -59,7 +59,7 @@ key: ToolbarEnum; } export default defineComponent({ - name: 'BasicTreeHeader', + name: "BasicTreeHeader", components: { BasicTitle, Icon, @@ -72,7 +72,7 @@ props: { helpMessage: { type: [String, Array] as PropType<string | string[]>, - default: '', + default: "", }, title: propTypes.string, toolbar: propTypes.bool, @@ -82,19 +82,19 @@ expandAll: propTypes.func, searchText: propTypes.string, }, - emits: ['strictly-change', 'search'], + emits: ["strictly-change", "search"], setup(props, { emit, slots }) { const { t } = useI18n(); - const searchValue = ref(''); + const searchValue = ref(""); const getInputSearchCls = computed(() => { const titleExists = slots.headerTitle || props.title; return [ - 'mr-1', - 'w-full', + "mr-1", + "w-full", // titleExists ? 'w-2/3' : 'w-full', { - ['ml-5']: titleExists, + ["ml-5"]: titleExists, }, ]; }); @@ -102,9 +102,9 @@ const toolbarList = computed(() => { const { checkable } = props; const defaultToolbarList = [ - { label: t('component.tree.expandAll'), value: ToolbarEnum.EXPAND_ALL }, + { label: t("component.tree.expandAll"), value: ToolbarEnum.EXPAND_ALL }, { - label: t('component.tree.unExpandAll'), + label: t("component.tree.unExpandAll"), value: ToolbarEnum.UN_EXPAND_ALL, divider: checkable, }, @@ -112,15 +112,15 @@ return checkable ? [ - { label: t('component.tree.selectAll'), value: ToolbarEnum.SELECT_ALL }, + { label: t("component.tree.selectAll"), value: ToolbarEnum.SELECT_ALL }, { - label: t('component.tree.unSelectAll'), + label: t("component.tree.unSelectAll"), value: ToolbarEnum.UN_SELECT_ALL, divider: checkable, }, ...defaultToolbarList, - { label: t('component.tree.checkStrictly'), value: ToolbarEnum.CHECK_STRICTLY }, - { label: t('component.tree.checkUnStrictly'), value: ToolbarEnum.CHECK_UN_STRICTLY }, + { label: t("component.tree.checkStrictly"), value: ToolbarEnum.CHECK_STRICTLY }, + { label: t("component.tree.checkUnStrictly"), value: ToolbarEnum.CHECK_UN_STRICTLY }, ] : defaultToolbarList; }); @@ -141,16 +141,16 @@ props.expandAll?.(false); break; case ToolbarEnum.CHECK_STRICTLY: - emit('strictly-change', false); + emit("strictly-change", false); break; case ToolbarEnum.CHECK_UN_STRICTLY: - emit('strictly-change', true); + emit("strictly-change", true); break; } } function emitChange(value?: string): void { - emit('search', value); + emit("search", value); } const debounceEmitChange = useDebounceFn(emitChange, 200); diff --git a/src/components/Tree/src/TreeIcon.ts b/src/components/Tree/src/TreeIcon.ts index 69e7cd0..cd5a81e 100644 --- a/src/components/Tree/src/TreeIcon.ts +++ b/src/components/Tree/src/TreeIcon.ts @@ -1,8 +1,8 @@ -import type { VNode, FunctionalComponent } from 'vue'; +import type { VNode, FunctionalComponent } from "vue"; -import { h } from 'vue'; -import { isString } from '/@/utils/is'; -import { Icon } from '/@/components/Icon'; +import { h } from "vue"; +import { isString } from "/@/utils/is"; +import { Icon } from "/@/components/Icon"; export interface ComponentProps { icon: VNode | string; @@ -11,7 +11,7 @@ export interface ComponentProps { export const TreeIcon: FunctionalComponent = ({ icon }: ComponentProps) => { if (!icon) return null; if (isString(icon)) { - return h(Icon, { icon, class: 'mr-1' }); + return h(Icon, { icon, class: "mr-1" }); } return Icon; }; diff --git a/src/components/Tree/src/props.ts b/src/components/Tree/src/props.ts index faa5c03..7dabf2d 100644 --- a/src/components/Tree/src/props.ts +++ b/src/components/Tree/src/props.ts @@ -1,4 +1,4 @@ -import type { PropType } from 'vue'; +import type { PropType } from "vue"; import type { ReplaceFields, ActionItem, @@ -6,10 +6,10 @@ import type { CheckKeys, ContextMenuOptions, TreeItem, -} from './typing'; -import type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; -import { propTypes } from '/@/utils/propTypes'; +} from "./typing"; +import type { ContextMenuItem } from "/@/hooks/web/useContextMenu"; +import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; +import { propTypes } from "/@/utils/propTypes"; export const basicProps = { value: { @@ -21,7 +21,7 @@ export const basicProps = { helpMessage: { type: [String, Array] as PropType<string | string[]>, - default: '', + default: "", }, title: propTypes.string, @@ -33,7 +33,7 @@ export const basicProps = { checkable: propTypes.bool.def(false), defaultExpandLevel: { type: [String, Number] as PropType<string | number>, - default: '', + default: "", }, defaultExpandAll: propTypes.bool.def(false), diff --git a/src/components/Tree/src/typing.ts b/src/components/Tree/src/typing.ts index df8d6d9..828fab0 100644 --- a/src/components/Tree/src/typing.ts +++ b/src/components/Tree/src/typing.ts @@ -1,5 +1,5 @@ -import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree'; -import { ContextMenuItem } from '/@/hooks/web/useContextMenu'; +import type { TreeDataItem, CheckEvent as CheckEventOrigin } from "ant-design-vue/es/tree/Tree"; +import { ContextMenuItem } from "/@/hooks/web/useContextMenu"; export interface ActionItem { render: (record: Recordable) => any; show?: boolean | ((record: Recordable) => boolean); @@ -33,7 +33,7 @@ export interface TreeActionType { insertNodeByKey: (opt: InsertNodeParams) => void; insertNodesByKey: (opt: InsertNodeParams) => void; deleteNodeByKey: (key: string) => void; - updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void; + updateNodeByKey: (key: string, node: Omit<TreeDataItem, "key">) => void; setSearchValue: (value: string) => void; getSearchValue: () => string; } @@ -42,7 +42,7 @@ export interface InsertNodeParams { parentKey: string | null; node: TreeDataItem; list?: TreeDataItem[]; - push?: 'push' | 'unshift'; + push?: "push" | "unshift"; } export interface ContextMenuOptions { diff --git a/src/components/Tree/src/useTree.ts b/src/components/Tree/src/useTree.ts index 840e5bc..92e966e 100644 --- a/src/components/Tree/src/useTree.ts +++ b/src/components/Tree/src/useTree.ts @@ -1,10 +1,10 @@ -import type { InsertNodeParams, Keys, ReplaceFields } from './typing'; -import type { Ref, ComputedRef } from 'vue'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; +import type { InsertNodeParams, Keys, ReplaceFields } from "./typing"; +import type { Ref, ComputedRef } from "vue"; +import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; -import { cloneDeep } from 'lodash-es'; -import { unref } from 'vue'; -import { forEach } from '/@/utils/helper/treeHelper'; +import { cloneDeep } from "lodash-es"; +import { unref } from "vue"; +import { forEach } from "/@/utils/helper/treeHelper"; export function useTree( treeDataRef: Ref<TreeDataItem[]>, @@ -98,7 +98,7 @@ export function useTree( const item = data[index]; const { key: keyField, children: childrenField } = unref(getReplaceFields); - const key = keyField ? item[keyField] : ''; + const key = keyField ? item[keyField] : ""; const children = childrenField ? item[childrenField] : []; res.push(key); if (children && children.length && currentLevel < level) { @@ -112,7 +112,7 @@ export function useTree( /** * 添加节点 */ - function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) { + function insertNodeByKey({ parentKey = null, node, push = "push" }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!parentKey) { treeData[push](node); @@ -134,7 +134,7 @@ export function useTree( /** * 批量添加节点 */ - function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) { + function insertNodesByKey({ parentKey = null, list, push = "push" }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!list || list.length < 1) { return; diff --git a/src/components/Upload/index.ts b/src/components/Upload/index.ts index 568a7d9..5fbb9e8 100644 --- a/src/components/Upload/index.ts +++ b/src/components/Upload/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils'; -import basicUpload from './src/BasicUpload.vue'; +import { withInstall } from "/@/utils"; +import basicUpload from "./src/BasicUpload.vue"; export const BasicUpload = withInstall(basicUpload); diff --git a/src/components/Upload/src/BasicUpload.vue b/src/components/Upload/src/BasicUpload.vue index 0d3ea23..0fcb356 100644 --- a/src/components/Upload/src/BasicUpload.vue +++ b/src/components/Upload/src/BasicUpload.vue @@ -2,11 +2,11 @@ <div> <a-button-group> <a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload"> - {{ t('component.upload.upload') }} + {{ t("component.upload.upload") }} </a-button> <Tooltip placement="bottom" v-if="showPreview"> <template #title> - {{ t('component.upload.uploaded') }} + {{ t("component.upload.uploaded") }} <template v-if="fileList.length"> {{ fileList.length }} </template> @@ -37,22 +37,22 @@ </div> </template> <script lang="ts"> - import { defineComponent, ref, watch, unref, computed } from 'vue'; - import UploadModal from './UploadModal.vue'; - import UploadPreviewModal from './UploadPreviewModal.vue'; - import { Icon } from '/@/components/Icon'; - import { Tooltip } from 'ant-design-vue'; - import { useModal } from '/@/components/Modal'; - import { uploadContainerProps } from './props'; - import { omit } from 'lodash-es'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { isArray } from '/@/utils/is'; + import { defineComponent, ref, watch, unref, computed } from "vue"; + import UploadModal from "./UploadModal.vue"; + import UploadPreviewModal from "./UploadPreviewModal.vue"; + import { Icon } from "/@/components/Icon"; + import { Tooltip } from "ant-design-vue"; + import { useModal } from "/@/components/Modal"; + import { uploadContainerProps } from "./props"; + import { omit } from "lodash-es"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { isArray } from "/@/utils/is"; export default defineComponent({ - name: 'BasicUpload', + name: "BasicUpload", components: { UploadModal, UploadPreviewModal, Icon, Tooltip }, props: uploadContainerProps, - emits: ['change', 'delete', 'preview-delete', 'update:value'], + emits: ["change", "delete", "preview-delete", "update:value"], setup(props, { emit, attrs }) { const { t } = useI18n(); @@ -72,7 +72,7 @@ const bindValue = computed(() => { const value = { ...attrs, ...props }; - return omit(value, 'onChange'); + return omit(value, "onChange"); }); watch( @@ -86,23 +86,23 @@ // 上传modal保存操作 function handleChange(urls: string[]) { fileList.value = [...unref(fileList), ...(urls || [])]; - emit('update:value', fileList.value); - emit('change', fileList.value); + emit("update:value", fileList.value); + emit("change", fileList.value); } // 预览modal保存操作 function handlePreviewChange(urls: string[]) { fileList.value = [...(urls || [])]; - emit('update:value', fileList.value); - emit('change', fileList.value); + emit("update:value", fileList.value); + emit("change", fileList.value); } function handleDelete(record: Recordable) { - emit('delete', record); + emit("delete", record); } function handlePreviewDelete(url: string) { - emit('preview-delete', url); + emit("preview-delete", url); } return { diff --git a/src/components/Upload/src/FileList.vue b/src/components/Upload/src/FileList.vue index ddb087e..0c1c122 100644 --- a/src/components/Upload/src/FileList.vue +++ b/src/components/Upload/src/FileList.vue @@ -1,11 +1,11 @@ <script lang="tsx"> - import { defineComponent, CSSProperties, watch, nextTick } from 'vue'; - import { fileListProps } from './props'; - import { isFunction } from '/@/utils/is'; - import { useModalContext } from '/@/components/Modal/src/hooks/useModalContext'; + import { defineComponent, CSSProperties, watch, nextTick } from "vue"; + import { fileListProps } from "./props"; + import { isFunction } from "/@/utils/is"; + import { useModalContext } from "/@/components/Modal/src/hooks/useModalContext"; export default defineComponent({ - name: 'FileList', + name: "FileList", props: fileListProps, setup(props) { const modalFn = useModalContext(); @@ -35,9 +35,9 @@ <thead> <tr class="file-table-tr"> {columnList.map((item) => { - const { title = '', align = 'center', dataIndex } = item; + const { title = "", align = "center", dataIndex } = item; return ( - <th class={['file-table-th', align]} key={dataIndex}> + <th class={["file-table-th", align]} key={dataIndex}> {title} </th> ); @@ -47,12 +47,12 @@ <tbody> {dataSource.map((record = {}, index) => { return ( - <tr class="file-table-tr" key={`${index + record.name || ''}`}> + <tr class="file-table-tr" key={`${index + record.name || ""}`}> {columnList.map((item) => { - const { dataIndex = '', customRender, align = 'center' } = item; + const { dataIndex = "", customRender, align = "center" } = item; const render = customRender && isFunction(customRender); return ( - <td class={['file-table-td', align]} key={dataIndex}> + <td class={["file-table-td", align]} key={dataIndex}> {render ? customRender?.({ text: record[dataIndex], record }) : record[dataIndex]} diff --git a/src/components/Upload/src/ThumbUrl.vue b/src/components/Upload/src/ThumbUrl.vue index 80fb203..74d8a62 100644 --- a/src/components/Upload/src/ThumbUrl.vue +++ b/src/components/Upload/src/ThumbUrl.vue @@ -4,15 +4,15 @@ </span> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { propTypes } from '/@/utils/propTypes'; - import { Image } from 'ant-design-vue'; + import { defineComponent } from "vue"; + import { propTypes } from "/@/utils/propTypes"; + import { Image } from "ant-design-vue"; export default defineComponent({ components: { Image }, props: { - fileUrl: propTypes.string.def(''), - fileName: propTypes.string.def(''), + fileUrl: propTypes.string.def(""), + fileName: propTypes.string.def(""), }, }); </script> diff --git a/src/components/Upload/src/UploadModal.vue b/src/components/Upload/src/UploadModal.vue index 41ed861..7b21aa0 100644 --- a/src/components/Upload/src/UploadModal.vue +++ b/src/components/Upload/src/UploadModal.vue @@ -34,7 +34,7 @@ class="upload-modal-toolbar__btn" > <a-button type="primary"> - {{ t('component.upload.choose') }} + {{ t("component.upload.choose") }} </a-button> </Upload> </div> @@ -42,24 +42,24 @@ </BasicModal> </template> <script lang="ts"> - import { defineComponent, reactive, ref, toRefs, unref, computed, PropType } from 'vue'; - import { Upload, Alert } from 'ant-design-vue'; - import { BasicModal, useModalInner } from '/@/components/Modal'; + import { defineComponent, reactive, ref, toRefs, unref, computed, PropType } from "vue"; + import { Upload, Alert } from "ant-design-vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; // import { BasicTable, useTable } from '/@/components/Table'; // hooks - import { useUploadType } from './useUpload'; - import { useMessage } from '/@/hooks/web/useMessage'; + import { useUploadType } from "./useUpload"; + import { useMessage } from "/@/hooks/web/useMessage"; // types - import { FileItem, UploadResultStatus } from './typing'; - import { basicProps } from './props'; - import { createTableColumns, createActionColumn } from './data'; + import { FileItem, UploadResultStatus } from "./typing"; + import { basicProps } from "./props"; + import { createTableColumns, createActionColumn } from "./data"; // utils - import { checkFileType, checkImgType, getBase64WithFile } from './helper'; - import { buildUUID } from '/@/utils/uuid'; - import { isFunction } from '/@/utils/is'; - import { warn } from '/@/utils/log'; - import FileList from './FileList.vue'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { checkFileType, checkImgType, getBase64WithFile } from "./helper"; + import { buildUUID } from "/@/utils/uuid"; + import { isFunction } from "/@/utils/is"; + import { warn } from "/@/utils/log"; + import FileList from "./FileList.vue"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ components: { BasicModal, Upload, Alert, FileList }, @@ -70,7 +70,7 @@ default: () => [], }, }, - emits: ['change', 'register', 'delete'], + emits: ["change", "register", "delete"], setup(props, { emit }) { const state = reactive<{ fileList: FileItem[] }>({ fileList: [], @@ -114,10 +114,10 @@ (item) => item.status === UploadResultStatus.ERROR, ); return isUploadingRef.value - ? t('component.upload.uploading') + ? t("component.upload.uploading") : someError - ? t('component.upload.reUploadFailed') - : t('component.upload.startUpload'); + ? t("component.upload.reUploadFailed") + : t("component.upload.startUpload"); }); // 上传前校验 @@ -127,13 +127,13 @@ const accept = unref(getAccept); // 设置最大值,则判断 if (maxSize && file.size / 1024 / 1024 >= maxSize) { - createMessage.error(t('component.upload.maxSizeMultiple', [maxSize])); + createMessage.error(t("component.upload.maxSizeMultiple", [maxSize])); return false; } // 设置类型,则判断 if (accept.length > 0 && !checkFileType(file, accept)) { - createMessage.error!(t('component.upload.acceptUpload', [accept.join(',')])); + createMessage.error!(t("component.upload.acceptUpload", [accept.join(",")])); return false; } const commonItem = { @@ -142,7 +142,7 @@ size, name, percent: 0, - type: name.split('.').pop(), + type: name.split(".").pop(), }; // 生成图片缩略图 if (checkImgType(file)) { @@ -167,7 +167,7 @@ function handleRemove(record: FileItem) { const index = fileListRef.value.findIndex((item) => item.uuid === record.uuid); index !== -1 && fileListRef.value.splice(index, 1); - emit('delete', record); + emit("delete", record); } // 预览 @@ -181,7 +181,7 @@ async function uploadApiByItem(item: FileItem) { const { api } = props; if (!api || !isFunction(api)) { - return warn('upload api must exist and be a function'); + return warn("upload api must exist and be a function"); } try { item.status = UploadResultStatus.UPLOADING; @@ -219,7 +219,7 @@ async function handleStartUpload() { const { maxNumber } = props; if ((fileListRef.value.length + props.previewFileList?.length ?? 0) > maxNumber) { - return createMessage.warning(t('component.upload.maxNumber', [maxNumber])); + return createMessage.warning(t("component.upload.maxNumber", [maxNumber])); } try { isUploadingRef.value = true; @@ -246,10 +246,10 @@ const { maxNumber } = props; if (fileListRef.value.length > maxNumber) { - return createMessage.warning(t('component.upload.maxNumber', [maxNumber])); + return createMessage.warning(t("component.upload.maxNumber", [maxNumber])); } if (isUploadingRef.value) { - return createMessage.warning(t('component.upload.saveWarn')); + return createMessage.warning(t("component.upload.saveWarn")); } const fileList: string[] = []; @@ -261,11 +261,11 @@ } // 存在一个上传成功的即可保存 if (fileList.length <= 0) { - return createMessage.warning(t('component.upload.saveError')); + return createMessage.warning(t("component.upload.saveError")); } fileListRef.value = []; closeModal(); - emit('change', fileList); + emit("change", fileList); } // 点击关闭:则所有操作不保存,包括上传的 @@ -274,7 +274,7 @@ fileListRef.value = []; return true; } else { - createMessage.warning(t('component.upload.uploadWait')); + createMessage.warning(t("component.upload.uploadWait")); return false; } } diff --git a/src/components/Upload/src/UploadPreviewModal.vue b/src/components/Upload/src/UploadPreviewModal.vue index 48392d6..ba523de 100644 --- a/src/components/Upload/src/UploadPreviewModal.vue +++ b/src/components/Upload/src/UploadPreviewModal.vue @@ -11,21 +11,21 @@ </BasicModal> </template> <script lang="ts"> - import { defineComponent, watch, ref } from 'vue'; + import { defineComponent, watch, ref } from "vue"; // import { BasicTable, useTable } from '/@/components/Table'; - import FileList from './FileList.vue'; - import { BasicModal, useModalInner } from '/@/components/Modal'; - import { previewProps } from './props'; - import { PreviewFileItem } from './typing'; - import { downloadByUrl } from '/@/utils/file/download'; - import { createPreviewColumns, createPreviewActionColumn } from './data'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { isArray } from '/@/utils/is'; + import FileList from "./FileList.vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { previewProps } from "./props"; + import { PreviewFileItem } from "./typing"; + import { downloadByUrl } from "/@/utils/file/download"; + import { createPreviewColumns, createPreviewActionColumn } from "./data"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { isArray } from "/@/utils/is"; export default defineComponent({ components: { BasicModal, FileList }, props: previewProps, - emits: ['list-change', 'register', 'delete'], + emits: ["list-change", "register", "delete"], setup(props, { emit }) { const [register, { closeModal }] = useModalInner(); const { t } = useI18n(); @@ -40,8 +40,8 @@ .map((item) => { return { url: item, - type: item.split('.').pop() || '', - name: item.split('/').pop() || '', + type: item.split(".").pop() || "", + name: item.split("/").pop() || "", }; }); }, @@ -53,9 +53,9 @@ const index = fileListRef.value.findIndex((item) => item.url === record.url); if (index !== -1) { const removed = fileListRef.value.splice(index, 1); - emit('delete', removed[0].url); + emit("delete", removed[0].url); emit( - 'list-change', + "list-change", fileListRef.value.map((item) => item.url), ); } @@ -71,7 +71,7 @@ // 下载 function handleDownload(record: PreviewFileItem) { - const { url = '' } = record; + const { url = "" } = record; downloadByUrl({ url }); } diff --git a/src/components/Upload/src/data.tsx b/src/components/Upload/src/data.tsx index 8e08833..02f88d4 100644 --- a/src/components/Upload/src/data.tsx +++ b/src/components/Upload/src/data.tsx @@ -1,13 +1,13 @@ -import type { BasicColumn, ActionItem } from '/@/components/Table'; -import { FileItem, PreviewFileItem, UploadResultStatus } from './typing'; +import type { BasicColumn, ActionItem } from "/@/components/Table"; +import { FileItem, PreviewFileItem, UploadResultStatus } from "./typing"; import { // checkImgType, isImgTypeByName, -} from './helper'; -import { Progress, Tag } from 'ant-design-vue'; -import TableAction from '/@/components/Table/src/components/TableAction.vue'; -import ThumbUrl from './ThumbUrl.vue'; -import { useI18n } from '/@/hooks/web/useI18n'; +} from "./helper"; +import { Progress, Tag } from "ant-design-vue"; +import TableAction from "/@/components/Table/src/components/TableAction.vue"; +import ThumbUrl from "./ThumbUrl.vue"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); @@ -15,8 +15,8 @@ const { t } = useI18n(); export function createTableColumns(): BasicColumn[] { return [ { - dataIndex: 'thumbUrl', - title: t('component.upload.legend'), + dataIndex: "thumbUrl", + title: t("component.upload.legend"), width: 100, customRender: ({ record }) => { const { thumbUrl } = (record as FileItem) || {}; @@ -24,18 +24,18 @@ export function createTableColumns(): BasicColumn[] { }, }, { - dataIndex: 'name', - title: t('component.upload.fileName'), - align: 'left', + dataIndex: "name", + title: t("component.upload.fileName"), + align: "left", customRender: ({ text, record }) => { const { percent, status: uploadStatus } = (record as FileItem) || {}; - let status: 'normal' | 'exception' | 'active' | 'success' = 'normal'; + let status: "normal" | "exception" | "active" | "success" = "normal"; if (uploadStatus === UploadResultStatus.ERROR) { - status = 'exception'; + status = "exception"; } else if (uploadStatus === UploadResultStatus.UPLOADING) { - status = 'active'; + status = "active"; } else if (uploadStatus === UploadResultStatus.SUCCESS) { - status = 'success'; + status = "success"; } return ( <span> @@ -48,11 +48,11 @@ export function createTableColumns(): BasicColumn[] { }, }, { - dataIndex: 'size', - title: t('component.upload.fileSize'), + dataIndex: "size", + title: t("component.upload.fileSize"), width: 100, customRender: ({ text = 0 }) => { - return text && (text / 1024).toFixed(2) + 'KB'; + return text && (text / 1024).toFixed(2) + "KB"; }, }, // { @@ -61,16 +61,16 @@ export function createTableColumns(): BasicColumn[] { // width: 100, // }, { - dataIndex: 'status', - title: t('component.upload.fileStatue'), + dataIndex: "status", + title: t("component.upload.fileStatue"), width: 100, customRender: ({ text }) => { if (text === UploadResultStatus.SUCCESS) { - return <Tag color="green">{() => t('component.upload.uploadSuccess')}</Tag>; + return <Tag color="green">{() => t("component.upload.uploadSuccess")}</Tag>; } else if (text === UploadResultStatus.ERROR) { - return <Tag color="red">{() => t('component.upload.uploadError')}</Tag>; + return <Tag color="red">{() => t("component.upload.uploadError")}</Tag>; } else if (text === UploadResultStatus.UPLOADING) { - return <Tag color="blue">{() => t('component.upload.uploading')}</Tag>; + return <Tag color="blue">{() => t("component.upload.uploading")}</Tag>; } return text; @@ -81,14 +81,14 @@ export function createTableColumns(): BasicColumn[] { export function createActionColumn(handleRemove: Function): BasicColumn { return { width: 120, - title: t('component.upload.operating'), - dataIndex: 'action', + title: t("component.upload.operating"), + dataIndex: "action", fixed: false, customRender: ({ record }) => { const actions: ActionItem[] = [ { - label: t('component.upload.del'), - color: 'error', + label: t("component.upload.del"), + color: "error", onClick: handleRemove.bind(null, record), }, ]; @@ -106,8 +106,8 @@ export function createActionColumn(handleRemove: Function): BasicColumn { export function createPreviewColumns(): BasicColumn[] { return [ { - dataIndex: 'url', - title: t('component.upload.legend'), + dataIndex: "url", + title: t("component.upload.legend"), width: 100, customRender: ({ record }) => { const { url } = (record as PreviewFileItem) || {}; @@ -115,9 +115,9 @@ export function createPreviewColumns(): BasicColumn[] { }, }, { - dataIndex: 'name', - title: t('component.upload.fileName'), - align: 'left', + dataIndex: "name", + title: t("component.upload.fileName"), + align: "left", }, ]; } @@ -131,18 +131,18 @@ export function createPreviewActionColumn({ }): BasicColumn { return { width: 160, - title: t('component.upload.operating'), - dataIndex: 'action', + title: t("component.upload.operating"), + dataIndex: "action", fixed: false, customRender: ({ record }) => { const actions: ActionItem[] = [ { - label: t('component.upload.del'), - color: 'error', + label: t("component.upload.del"), + color: "error", onClick: handleRemove.bind(null, record), }, { - label: t('component.upload.download'), + label: t("component.upload.download"), onClick: handleDownload.bind(null, record), }, ]; diff --git a/src/components/Upload/src/helper.ts b/src/components/Upload/src/helper.ts index a0c574b..fec69fc 100644 --- a/src/components/Upload/src/helper.ts +++ b/src/components/Upload/src/helper.ts @@ -1,7 +1,7 @@ export function checkFileType(file: File, accepts: string[]) { - const newTypes = accepts.join('|'); + const newTypes = accepts.join("|"); // const reg = /\.(jpg|jpeg|png|gif|txt|doc|docx|xls|xlsx|xml)$/i; - const reg = new RegExp('\\.(' + newTypes + ')$', 'i'); + const reg = new RegExp("\\.(" + newTypes + ")$", "i"); return reg.test(file.name); } diff --git a/src/components/Upload/src/props.ts b/src/components/Upload/src/props.ts index 413b95d..90c3e9b 100644 --- a/src/components/Upload/src/props.ts +++ b/src/components/Upload/src/props.ts @@ -1,10 +1,10 @@ -import type { PropType } from 'vue'; -import { FileBasicColumn } from './typing'; +import type { PropType } from "vue"; +import { FileBasicColumn } from "./typing"; export const basicProps = { helpText: { type: String as PropType<string>, - default: '', + default: "", }, // 文件最大多少MB maxSize: { @@ -36,7 +36,7 @@ export const basicProps = { }, name: { type: String as PropType<string>, - default: 'file', + default: "file", }, filename: { type: String as PropType<string>, diff --git a/src/components/Upload/src/typing.ts b/src/components/Upload/src/typing.ts index c630110..7214069 100644 --- a/src/components/Upload/src/typing.ts +++ b/src/components/Upload/src/typing.ts @@ -1,9 +1,9 @@ -import { UploadApiResult } from '/@/api/sys/model/uploadModel'; +import { UploadApiResult } from "/@/api/sys/model/uploadModel"; export enum UploadResultStatus { - SUCCESS = 'success', - ERROR = 'error', - UPLOADING = 'uploading', + SUCCESS = "success", + ERROR = "error", + UPLOADING = "uploading", } export interface FileItem { @@ -51,5 +51,5 @@ export interface FileBasicColumn { * @default 'left' * @type string */ - align?: 'left' | 'right' | 'center'; + align?: "left" | "right" | "center"; } diff --git a/src/components/Upload/src/useUpload.ts b/src/components/Upload/src/useUpload.ts index 694cc27..c05ab3c 100644 --- a/src/components/Upload/src/useUpload.ts +++ b/src/components/Upload/src/useUpload.ts @@ -1,5 +1,5 @@ -import { Ref, unref, computed } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; +import { Ref, unref, computed } from "vue"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); export function useUploadType({ acceptRef, @@ -23,13 +23,13 @@ export function useUploadType({ const getStringAccept = computed(() => { return unref(getAccept) .map((item) => { - if (item.indexOf('/') > 0 || item.startsWith('.')) { + if (item.indexOf("/") > 0 || item.startsWith(".")) { return item; } else { return `.${item}`; } }) - .join(','); + .join(","); }); // 支持jpg、jpeg、png格式,不超过2M,最多可选择10张图片,。 @@ -42,19 +42,19 @@ export function useUploadType({ const accept = unref(acceptRef); if (accept.length > 0) { - helpTexts.push(t('component.upload.accept', [accept.join(',')])); + helpTexts.push(t("component.upload.accept", [accept.join(",")])); } const maxSize = unref(maxSizeRef); if (maxSize) { - helpTexts.push(t('component.upload.maxSize', [maxSize])); + helpTexts.push(t("component.upload.maxSize", [maxSize])); } const maxNumber = unref(maxNumberRef); if (maxNumber && maxNumber !== Infinity) { - helpTexts.push(t('component.upload.maxNumber', [maxNumber])); + helpTexts.push(t("component.upload.maxNumber", [maxNumber])); } - return helpTexts.join(','); + return helpTexts.join(","); }); return { getAccept, getStringAccept, getHelpText }; } diff --git a/src/components/Verify/index.ts b/src/components/Verify/index.ts index 7c67101..2df9d93 100644 --- a/src/components/Verify/index.ts +++ b/src/components/Verify/index.ts @@ -1,7 +1,7 @@ -import { withInstall } from '/@/utils/index'; -import basicDragVerify from './src/DragVerify.vue'; -import rotateDragVerify from './src/ImgRotate.vue'; +import { withInstall } from "/@/utils/index"; +import basicDragVerify from "./src/DragVerify.vue"; +import rotateDragVerify from "./src/ImgRotate.vue"; export const BasicDragVerify = withInstall(basicDragVerify); export const RotateDragVerify = withInstall(rotateDragVerify); -export * from './src/typing'; +export * from "./src/typing"; diff --git a/src/components/Verify/src/DragVerify.vue b/src/components/Verify/src/DragVerify.vue index c457bc0..cb6ce2f 100644 --- a/src/components/Verify/src/DragVerify.vue +++ b/src/components/Verify/src/DragVerify.vue @@ -1,16 +1,16 @@ <script lang="tsx"> - import type { Ref } from 'vue'; - import { defineComponent, ref, computed, unref, reactive, watch, watchEffect } from 'vue'; - import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - import { useEventListener } from '/@/hooks/event/useEventListener'; - import { basicProps } from './props'; - import { getSlot } from '/@/utils/helper/tsxHelper'; - import { CheckOutlined, DoubleRightOutlined } from '@ant-design/icons-vue'; + import type { Ref } from "vue"; + import { defineComponent, ref, computed, unref, reactive, watch, watchEffect } from "vue"; + import { useTimeoutFn } from "/@/hooks/core/useTimeout"; + import { useEventListener } from "/@/hooks/event/useEventListener"; + import { basicProps } from "./props"; + import { getSlot } from "/@/utils/helper/tsxHelper"; + import { CheckOutlined, DoubleRightOutlined } from "@ant-design/icons-vue"; export default defineComponent({ - name: 'BaseDargVerify', + name: "BaseDargVerify", props: basicProps, - emits: ['success', 'update:value', 'change', 'start', 'move', 'end'], + emits: ["success", "update:value", "change", "start", "move", "end"], setup(props, { emit, slots, expose }) { const state = reactive({ isMoving: false, @@ -28,7 +28,7 @@ useEventListener({ el: document, - name: 'mouseup', + name: "mouseup", listener: () => { if (state.isMoving) { resume(); @@ -55,7 +55,7 @@ width: w, height: `${h}px`, lineHeight: `${h}px`, - borderRadius: circle ? h / 2 + 'px' : 0, + borderRadius: circle ? h / 2 + "px" : 0, ...wrapStyle, }; }); @@ -65,7 +65,7 @@ const h = parseInt(height as string); return { height: `${h}px`, - borderRadius: circle ? h / 2 + 'px 0 0 ' + h / 2 + 'px' : 0, + borderRadius: circle ? h / 2 + "px 0 0 " + h / 2 + "px" : 0, ...barStyle, }; }); @@ -88,9 +88,9 @@ if (isPassing) { const { startTime, endTime } = state; const time = (endTime - startTime) / 1000; - emit('success', { isPassing, time: time.toFixed(1) }); - emit('update:value', isPassing); - emit('change', isPassing); + emit("success", { isPassing, time: time.toFixed(1) }); + emit("update:value", isPassing); + emit("change", isPassing); } }, ); @@ -109,8 +109,8 @@ } const actionEl = unref(actionElRef); if (!actionEl) return; - emit('start', e); - state.moveDistance = getEventPageX(e) - parseInt(actionEl.style.left.replace('px', ''), 10); + emit("start", e); + state.moveDistance = getEventPageX(e) - parseInt(actionEl.style.left.replace("px", ""), 10); state.startTime = new Date().getTime(); state.isMoving = true; } @@ -132,7 +132,7 @@ const { offset, widthNum, actionWidth } = getOffset(actionEl); const moveX = getEventPageX(e) - moveDistance; - emit('move', { + emit("move", { event: e, moveDistance, moveX, @@ -153,7 +153,7 @@ function handleDragOver(e: MouseEvent | TouchEvent) { const { isMoving, isPassing, moveDistance } = state; if (isMoving && !isPassing) { - emit('end', e); + emit("end", e); const actionEl = unref(actionElRef); const barEl = unref(barElRef); if (!actionEl || !barEl) return; @@ -207,8 +207,8 @@ state.toLeft = true; useTimeoutFn(() => { state.toLeft = false; - actionEl.style.left = '0'; - barEl.style.width = '0'; + actionEl.style.left = "0"; + barEl.style.width = "0"; // The time is consistent with the animation time }, 300); contentEl.style.width = unref(getContentStyleRef).width; @@ -222,7 +222,7 @@ const renderBar = () => { const cls = [`darg-verify-bar`]; if (state.toLeft) { - cls.push('to-left'); + cls.push("to-left"); } return <div class={cls} ref={barElRef} style={unref(getBarStyleRef)} />; }; @@ -232,11 +232,11 @@ const { isPassing } = state; const { text, successText } = props; - isPassing && cls.push('success'); + isPassing && cls.push("success"); return ( <div class={cls} ref={contentElRef} style={unref(getContentStyleRef)}> - {getSlot(slots, 'text', isPassing) || (isPassing ? successText : text)} + {getSlot(slots, "text", isPassing) || (isPassing ? successText : text)} </div> ); }; @@ -245,7 +245,7 @@ const cls = [`darg-verify-action`]; const { toLeft, isPassing } = state; if (toLeft) { - cls.push('to-left'); + cls.push("to-left"); } return ( <div @@ -255,7 +255,7 @@ style={unref(getActionStyleRef)} ref={actionElRef} > - {getSlot(slots, 'actionIcon', isPassing) || + {getSlot(slots, "actionIcon", isPassing) || (isPassing ? ( <CheckOutlined class={`darg-verify-action__icon`} /> ) : ( diff --git a/src/components/Verify/src/ImgRotate.vue b/src/components/Verify/src/ImgRotate.vue index 53788ed..e0ccbbc 100644 --- a/src/components/Verify/src/ImgRotate.vue +++ b/src/components/Verify/src/ImgRotate.vue @@ -1,17 +1,17 @@ <script lang="tsx"> - import type { MoveData, DragVerifyActionType } from './typing'; - import { defineComponent, computed, unref, reactive, watch, ref } from 'vue'; - import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - import BasicDragVerify from './DragVerify.vue'; - import { hackCss } from '/@/utils/domUtils'; - import { rotateProps } from './props'; - import { useI18n } from '/@/hooks/web/useI18n'; + import type { MoveData, DragVerifyActionType } from "./typing"; + import { defineComponent, computed, unref, reactive, watch, ref } from "vue"; + import { useTimeoutFn } from "/@/hooks/core/useTimeout"; + import BasicDragVerify from "./DragVerify.vue"; + import { hackCss } from "/@/utils/domUtils"; + import { rotateProps } from "./props"; + import { useI18n } from "/@/hooks/web/useI18n"; export default defineComponent({ - name: 'ImgRotateDragVerify', + name: "ImgRotateDragVerify", inheritAttrs: false, props: rotateProps, - emits: ['success', 'change', 'update:value'], + emits: ["success", "change", "update:value"], setup(props, { emit, attrs, expose }) { const basicRef = ref<Nullable<DragVerifyActionType>>(null); const state = reactive({ @@ -33,9 +33,9 @@ if (isPassing) { const { startTime, endTime } = state; const time = (endTime - startTime) / 1000; - emit('success', { isPassing, time: time.toFixed(1) }); - emit('change', isPassing); - emit('update:value', isPassing); + emit("success", { isPassing, time: time.toFixed(1) }); + emit("change", isPassing); + emit("update:value", isPassing); } }, ); @@ -68,14 +68,14 @@ (moveX / (imgWidth! - parseInt(height as string))) * maxDegree! * unref(getFactorRef), ); state.currentRotate = currentRotate; - state.imgStyle = hackCss('transform', `rotateZ(${state.randomRotate - currentRotate}deg)`); + state.imgStyle = hackCss("transform", `rotateZ(${state.randomRotate - currentRotate}deg)`); } function handleImgOnLoad() { const { minDegree, maxDegree } = props; const ranRotate = Math.floor(minDegree! + Math.random() * (maxDegree! - minDegree!)); // 生成随机角度 state.randomRotate = ranRotate; - state.imgStyle = hackCss('transform', `rotateZ(${ranRotate}deg)`); + state.imgStyle = hackCss("transform", `rotateZ(${ranRotate}deg)`); } function handleDragEnd() { @@ -83,7 +83,7 @@ const { diffDegree } = props; if (Math.abs(randomRotate - currentRotate) >= (diffDegree || 20)) { - state.imgStyle = hackCss('transform', `rotateZ(${randomRotate}deg)`); + state.imgStyle = hackCss("transform", `rotateZ(${randomRotate}deg)`); state.toOrigin = true; useTimeoutFn(() => { state.toOrigin = false; @@ -120,7 +120,7 @@ const { toOrigin, isPassing, startTime, endTime } = state; const imgCls: string[] = []; if (toOrigin) { - imgCls.push('to-origin'); + imgCls.push("to-origin"); } const time = (endTime - startTime) / 1000; @@ -139,14 +139,14 @@ alt="verify" /> {state.showTip && ( - <span class={[`ir-dv-img__tip`, state.isPassing ? 'success' : 'error']}> + <span class={[`ir-dv-img__tip`, state.isPassing ? "success" : "error"]}> {state.isPassing - ? t('component.verify.time', { time: time.toFixed(1) }) - : t('component.verify.error')} + ? t("component.verify.time", { time: time.toFixed(1) }) + : t("component.verify.error")} </span> )} {!state.showTip && !state.draged && ( - <span class={[`ir-dv-img__tip`, 'normal']}>{t('component.verify.redoTip')}</span> + <span class={[`ir-dv-img__tip`, "normal"]}>{t("component.verify.redoTip")}</span> )} </div> <BasicDragVerify diff --git a/src/components/Verify/src/props.ts b/src/components/Verify/src/props.ts index 1e14970..55bb9d9 100644 --- a/src/components/Verify/src/props.ts +++ b/src/components/Verify/src/props.ts @@ -1,5 +1,5 @@ -import type { PropType } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { PropType } from "vue"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); export const basicProps = { @@ -15,11 +15,11 @@ export const basicProps = { text: { type: [String] as PropType<string>, - default: t('component.verify.dragText'), + default: t("component.verify.dragText"), }, successText: { type: [String] as PropType<string>, - default: t('component.verify.successText'), + default: t("component.verify.successText"), }, height: { type: [Number, String] as PropType<number | string>, diff --git a/src/components/VirtualScroll/index.ts b/src/components/VirtualScroll/index.ts index a4c6089..8aead6e 100644 --- a/src/components/VirtualScroll/index.ts +++ b/src/components/VirtualScroll/index.ts @@ -1,4 +1,4 @@ -import { withInstall } from '/@/utils/index'; -import vScroll from './src/VirtualScroll.vue'; +import { withInstall } from "/@/utils/index"; +import vScroll from "./src/VirtualScroll.vue"; export const VScroll = withInstall(vScroll); diff --git a/src/components/VirtualScroll/src/VirtualScroll.vue b/src/components/VirtualScroll/src/VirtualScroll.vue index b37a058..df17b8f 100644 --- a/src/components/VirtualScroll/src/VirtualScroll.vue +++ b/src/components/VirtualScroll/src/VirtualScroll.vue @@ -9,9 +9,9 @@ watch, nextTick, CSSProperties, - } from 'vue'; - import { useEventListener } from '/@/hooks/event/useEventListener'; - import { getSlot } from '/@/utils/helper/tsxHelper'; + } from "vue"; + import { useEventListener } from "/@/hooks/event/useEventListener"; + import { getSlot } from "/@/utils/helper/tsxHelper"; type NumberOrNumberString = PropType<string | number | undefined>; @@ -36,10 +36,10 @@ }, }; - const prefixCls = 'virtual-scroll'; + const prefixCls = "virtual-scroll"; - function convertToUnit(str: string | number | null | undefined, unit = 'px'): string | undefined { - if (str == null || str === '') { + function convertToUnit(str: string | number | null | undefined, unit = "px"): string | undefined { + if (str == null || str === "") { return undefined; } else if (isNaN(+str!)) { return String(str); @@ -49,7 +49,7 @@ } export default defineComponent({ - name: 'VirtualScroll', + name: "VirtualScroll", props, setup(props, { slots }) { const wrapElRef = ref<HTMLDivElement | null>(null); @@ -137,7 +137,7 @@ const top = convertToUnit(index * unref(getItemHeightRef)); return ( <div class={`${prefixCls}__item`} style={{ top }} key={index}> - {getSlot(slots, 'default', { index, item })} + {getSlot(slots, "default", { index, item })} </div> ); } @@ -151,7 +151,7 @@ } useEventListener({ el: wrapEl, - name: 'scroll', + name: "scroll", listener: onScroll, wait: 0, }); diff --git a/src/components/registerGlobComp.ts b/src/components/registerGlobComp.ts index feb060e..6f4bb29 100644 --- a/src/components/registerGlobComp.ts +++ b/src/components/registerGlobComp.ts @@ -1,11 +1,11 @@ -import type { App } from 'vue'; -import { Button } from './Button'; +import type { App } from "vue"; +import { Button } from "./Button"; import { // Need Button as AntButton, Input, Layout, -} from 'ant-design-vue'; +} from "ant-design-vue"; const compList = [AntButton.Group]; diff --git a/src/directives/clickOutside.ts b/src/directives/clickOutside.ts index f6f3051..f18c822 100644 --- a/src/directives/clickOutside.ts +++ b/src/directives/clickOutside.ts @@ -1,6 +1,6 @@ -import { on } from '/@/utils/domUtils'; -import { isServer } from '/@/utils/is'; -import type { ComponentPublicInstance, DirectiveBinding, ObjectDirective } from 'vue'; +import { on } from "/@/utils/domUtils"; +import { isServer } from "/@/utils/is"; +import type { ComponentPublicInstance, DirectiveBinding, ObjectDirective } from "vue"; type DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void; @@ -17,8 +17,8 @@ const nodeList: FlushList = new Map(); let startClick: MouseEvent; if (!isServer) { - on(document, 'mousedown', (e: MouseEvent) => (startClick = e)); - on(document, 'mouseup', (e: MouseEvent) => { + on(document, "mousedown", (e: MouseEvent) => (startClick = e)); + on(document, "mouseup", (e: MouseEvent) => { for (const { documentHandler } of nodeList.values()) { documentHandler(e, startClick); } diff --git a/src/directives/index.ts b/src/directives/index.ts index 0329eb6..536e734 100644 --- a/src/directives/index.ts +++ b/src/directives/index.ts @@ -1,9 +1,9 @@ /** * Configure and register global directives */ -import type { App } from 'vue'; -import { setupPermissionDirective } from './permission'; -import { setupLoadingDirective } from './loading'; +import type { App } from "vue"; +import { setupPermissionDirective } from "./permission"; +import { setupLoadingDirective } from "./loading"; export function setupGlobDirectives(app: App) { setupPermissionDirective(app); diff --git a/src/directives/loading.ts b/src/directives/loading.ts index 06101ad..78a8e3e 100644 --- a/src/directives/loading.ts +++ b/src/directives/loading.ts @@ -1,17 +1,17 @@ -import { createLoading } from '/@/components/Loading'; -import type { Directive, App } from 'vue'; +import { createLoading } from "/@/components/Loading"; +import type { Directive, App } from "vue"; const loadingDirective: Directive = { mounted(el, binding) { - const tip = el.getAttribute('loading-tip'); - const background = el.getAttribute('loading-background'); - const size = el.getAttribute('loading-size'); + const tip = el.getAttribute("loading-tip"); + const background = el.getAttribute("loading-background"); + const size = el.getAttribute("loading-size"); const fullscreen = !!binding.modifiers.fullscreen; const instance = createLoading( { tip, background, - size: size || 'large', + size: size || "large", loading: !!binding.value, absolute: !fullscreen, }, @@ -22,7 +22,7 @@ const loadingDirective: Directive = { updated(el, binding) { const instance = el.instance; if (!instance) return; - instance.setTip(el.getAttribute('loading-tip')); + instance.setTip(el.getAttribute("loading-tip")); if (binding.oldValue !== binding.value) { if (binding.oldValue !== binding.value) { instance.setLoading?.(binding.value && !instance.loading); @@ -35,7 +35,7 @@ const loadingDirective: Directive = { }; export function setupLoadingDirective(app: App) { - app.directive('loading', loadingDirective); + app.directive("loading", loadingDirective); } export default loadingDirective; diff --git a/src/directives/permission.ts b/src/directives/permission.ts index ca5d0fc..df447da 100644 --- a/src/directives/permission.ts +++ b/src/directives/permission.ts @@ -3,9 +3,9 @@ * Used for fine-grained control of component permissions * @Example v-auth="RoleEnum.TEST" */ -import type { App, Directive, DirectiveBinding } from 'vue'; +import type { App, Directive, DirectiveBinding } from "vue"; -import { usePermission } from '/@/hooks/web/usePermission'; +import { usePermission } from "/@/hooks/web/usePermission"; function isAuth(el: Element, binding: any) { const { hasPermission } = usePermission(); @@ -26,7 +26,7 @@ const authDirective: Directive = { }; export function setupPermissionDirective(app: App) { - app.directive('auth', authDirective); + app.directive("auth", authDirective); } export default authDirective; diff --git a/src/directives/repeatClick.ts b/src/directives/repeatClick.ts index d4ef150..7d674b4 100644 --- a/src/directives/repeatClick.ts +++ b/src/directives/repeatClick.ts @@ -2,8 +2,8 @@ * Prevent repeated clicks * @Example v-repeat-click="()=>{}" */ -import { on, once } from '/@/utils/domUtils'; -import type { Directive, DirectiveBinding } from 'vue'; +import { on, once } from "/@/utils/domUtils"; +import type { Directive, DirectiveBinding } from "vue"; const repeatDirective: Directive = { beforeMount(el: Element, binding: DirectiveBinding<any>) { @@ -18,10 +18,10 @@ const repeatDirective: Directive = { interval = null; }; - on(el, 'mousedown', (e: MouseEvent): void => { + on(el, "mousedown", (e: MouseEvent): void => { if ((e as any).button !== 0) return; startTime = Date.now(); - once(document as any, 'mouseup', clear); + once(document as any, "mouseup", clear); interval && clearInterval(interval); interval = setInterval(handler, 100); }); diff --git a/src/directives/ripple/index.ts b/src/directives/ripple/index.ts index 85a80e8..036024d 100644 --- a/src/directives/ripple/index.ts +++ b/src/directives/ripple/index.ts @@ -1,5 +1,5 @@ -import type { Directive } from 'vue'; -import './index.less'; +import type { Directive } from "vue"; +import "./index.less"; export interface RippleOptions { event: string; transition: number; @@ -13,7 +13,7 @@ export interface RippleProto { export type EventType = Event & MouseEvent & TouchEvent; const options: RippleOptions = { - event: 'mousedown', + event: "mousedown", transition: 400, }; @@ -21,7 +21,7 @@ const RippleDirective: Directive & RippleProto = { beforeMount: (el: HTMLElement, binding) => { if (binding.value === false) return; - const bg = el.getAttribute('ripple-background'); + const bg = el.getAttribute("ripple-background"); setProps(Object.keys(binding.modifiers), options); const background = bg || RippleDirective.background; @@ -41,7 +41,7 @@ const RippleDirective: Directive & RippleProto = { el?.clearRipple?.(); return; } - const bg = el.getAttribute('ripple-background'); + const bg = el.getAttribute("ripple-background"); el?.setBackground?.(bg); }, }; @@ -52,7 +52,7 @@ function rippler({ zIndex, background, }: { event: EventType; el: HTMLElement } & RippleProto) { - const targetBorder = parseInt(getComputedStyle(el).borderWidth.replace('px', '')); + const targetBorder = parseInt(getComputedStyle(el).borderWidth.replace("px", "")); const clientX = event.clientX || event.touches[0].clientX; const clientY = event.clientY || event.touches[0].clientY; @@ -68,42 +68,42 @@ function rippler({ const radius = Math.sqrt(maxX * maxX + maxY * maxY); const border = targetBorder > 0 ? targetBorder : 0; - const ripple = document.createElement('div'); - const rippleContainer = document.createElement('div'); + const ripple = document.createElement("div"); + const rippleContainer = document.createElement("div"); // Styles for ripple - ripple.className = 'ripple'; + ripple.className = "ripple"; Object.assign(ripple.style ?? {}, { - marginTop: '0px', - marginLeft: '0px', - width: '1px', - height: '1px', + marginTop: "0px", + marginLeft: "0px", + width: "1px", + height: "1px", transition: `all ${transition}ms cubic-bezier(0.4, 0, 0.2, 1)`, - borderRadius: '50%', - pointerEvents: 'none', - position: 'relative', - zIndex: zIndex ?? '9999', - backgroundColor: background ?? 'rgba(0, 0, 0, 0.12)', + borderRadius: "50%", + pointerEvents: "none", + position: "relative", + zIndex: zIndex ?? "9999", + backgroundColor: background ?? "rgba(0, 0, 0, 0.12)", }); // Styles for rippleContainer - rippleContainer.className = 'ripple-container'; + rippleContainer.className = "ripple-container"; Object.assign(rippleContainer.style ?? {}, { - position: 'absolute', + position: "absolute", left: `${0 - border}px`, top: `${0 - border}px`, - height: '0', - width: '0', - pointerEvents: 'none', - overflow: 'hidden', + height: "0", + width: "0", + pointerEvents: "none", + overflow: "hidden", }); const storedTargetPosition = el.style.position.length > 0 ? el.style.position : getComputedStyle(el).position; - if (storedTargetPosition !== 'relative') { - el.style.position = 'relative'; + if (storedTargetPosition !== "relative") { + el.style.position = "relative"; } rippleContainer.appendChild(ripple); @@ -123,7 +123,7 @@ function rippler({ Object.assign(rippleContainer.style, { width: `${width}px`, height: `${height}px`, - direction: 'ltr', + direction: "ltr", borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, @@ -142,33 +142,33 @@ function rippler({ function clearRipple() { setTimeout(() => { - ripple.style.backgroundColor = 'rgba(0, 0, 0, 0)'; + ripple.style.backgroundColor = "rgba(0, 0, 0, 0)"; }, 250); setTimeout(() => { rippleContainer?.parentNode?.removeChild(rippleContainer); }, 850); - el.removeEventListener('mouseup', clearRipple, false); - el.removeEventListener('mouseleave', clearRipple, false); - el.removeEventListener('dragstart', clearRipple, false); + el.removeEventListener("mouseup", clearRipple, false); + el.removeEventListener("mouseleave", clearRipple, false); + el.removeEventListener("dragstart", clearRipple, false); setTimeout(() => { let clearPosition = true; for (let i = 0; i < el.childNodes.length; i++) { - if ((el.childNodes[i] as Recordable).className === 'ripple-container') { + if ((el.childNodes[i] as Recordable).className === "ripple-container") { clearPosition = false; } } if (clearPosition) { - el.style.position = storedTargetPosition !== 'static' ? storedTargetPosition : ''; + el.style.position = storedTargetPosition !== "static" ? storedTargetPosition : ""; } }, options.transition + 260); } - if (event.type === 'mousedown') { - el.addEventListener('mouseup', clearRipple, false); - el.addEventListener('mouseleave', clearRipple, false); - el.addEventListener('dragstart', clearRipple, false); + if (event.type === "mousedown") { + el.addEventListener("mouseup", clearRipple, false); + el.addEventListener("mouseleave", clearRipple, false); + el.addEventListener("dragstart", clearRipple, false); } else { clearRipple(); } diff --git a/src/enums/appEnum.ts b/src/enums/appEnum.ts index 63869d2..894c3a0 100644 --- a/src/enums/appEnum.ts +++ b/src/enums/appEnum.ts @@ -3,21 +3,21 @@ export const SIDE_BAR_SHOW_TIT_MINI_WIDTH = 80; export enum ContentEnum { // auto width - FULL = 'full', + FULL = "full", // fixed width - FIXED = 'fixed', + FIXED = "fixed", } // menu theme enum export enum ThemeEnum { - DARK = 'dark', - LIGHT = 'light', + DARK = "dark", + LIGHT = "light", } export enum SettingButtonPositionEnum { - AUTO = 'auto', - HEADER = 'header', - FIXED = 'fixed', + AUTO = "auto", + HEADER = "header", + FIXED = "fixed", } export enum SessionTimeoutProcessingEnum { @@ -30,19 +30,19 @@ export enum SessionTimeoutProcessingEnum { */ export enum PermissionModeEnum { // role - ROLE = 'ROLE', + ROLE = "ROLE", // black - BACK = 'BACK', + BACK = "BACK", // route mapping - ROUTE_MAPPING = 'ROUTE_MAPPING', + ROUTE_MAPPING = "ROUTE_MAPPING", } // Route switching animation export enum RouterTransitionEnum { - ZOOM_FADE = 'zoom-fade', - ZOOM_OUT = 'zoom-out', - FADE_SIDE = 'fade-slide', - FADE = 'fade', - FADE_BOTTOM = 'fade-bottom', - FADE_SCALE = 'fade-scale', + ZOOM_FADE = "zoom-fade", + ZOOM_OUT = "zoom-out", + FADE_SIDE = "fade-slide", + FADE = "fade", + FADE_BOTTOM = "fade-bottom", + FADE_SCALE = "fade-scale", } diff --git a/src/enums/breakpointEnum.ts b/src/enums/breakpointEnum.ts index 93acc1a..12386b7 100644 --- a/src/enums/breakpointEnum.ts +++ b/src/enums/breakpointEnum.ts @@ -1,10 +1,10 @@ export enum sizeEnum { - XS = 'XS', - SM = 'SM', - MD = 'MD', - LG = 'LG', - XL = 'XL', - XXL = 'XXL', + XS = "XS", + SM = "SM", + MD = "MD", + LG = "LG", + XL = "XL", + XXL = "XXL", } export enum screenEnum { diff --git a/src/enums/cacheEnum.ts b/src/enums/cacheEnum.ts index 4a5cc11..de1c271 100644 --- a/src/enums/cacheEnum.ts +++ b/src/enums/cacheEnum.ts @@ -1,29 +1,29 @@ // token key -export const TOKEN_KEY = 'TOKEN__'; +export const TOKEN_KEY = "TOKEN__"; -export const LOCALE_KEY = 'LOCALE__'; +export const LOCALE_KEY = "LOCALE__"; // user info key -export const USER_INFO_KEY = 'USER__INFO__'; +export const USER_INFO_KEY = "USER__INFO__"; // role info key -export const ROLES_KEY = 'ROLES__KEY__'; +export const ROLES_KEY = "ROLES__KEY__"; // project config key -export const PROJ_CFG_KEY = 'PROJ__CFG__KEY__'; +export const PROJ_CFG_KEY = "PROJ__CFG__KEY__"; // lock info -export const LOCK_INFO_KEY = 'LOCK__INFO__KEY__'; +export const LOCK_INFO_KEY = "LOCK__INFO__KEY__"; -export const MULTIPLE_TABS_KEY = 'MULTIPLE_TABS__KEY__'; +export const MULTIPLE_TABS_KEY = "MULTIPLE_TABS__KEY__"; -export const APP_DARK_MODE_KEY_ = '__APP__DARK__MODE__'; +export const APP_DARK_MODE_KEY_ = "__APP__DARK__MODE__"; // base global local key -export const APP_LOCAL_CACHE_KEY = 'COMMON__LOCAL__KEY__'; +export const APP_LOCAL_CACHE_KEY = "COMMON__LOCAL__KEY__"; // base global session key -export const APP_SESSION_CACHE_KEY = 'COMMON__SESSION__KEY__'; +export const APP_SESSION_CACHE_KEY = "COMMON__SESSION__KEY__"; export enum CacheTypeEnum { SESSION, diff --git a/src/enums/exceptionEnum.ts b/src/enums/exceptionEnum.ts index d28f4d0..521f145 100644 --- a/src/enums/exceptionEnum.ts +++ b/src/enums/exceptionEnum.ts @@ -19,9 +19,9 @@ export enum ExceptionEnum { } export enum ErrorTypeEnum { - VUE = 'vue', - SCRIPT = 'script', - RESOURCE = 'resource', - AJAX = 'ajax', - PROMISE = 'promise', + VUE = "vue", + SCRIPT = "script", + RESOURCE = "resource", + AJAX = "ajax", + PROMISE = "promise", } diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts index 4944af5..7d43acc 100644 --- a/src/enums/httpEnum.ts +++ b/src/enums/httpEnum.ts @@ -5,17 +5,17 @@ export enum ResultEnum { SUCCESS = 0, ERROR = 1, TIMEOUT = 401, - TYPE = 'success', + TYPE = "success", } /** * @description: request method */ export enum RequestEnum { - GET = 'GET', - POST = 'POST', - PUT = 'PUT', - DELETE = 'DELETE', + GET = "GET", + POST = "POST", + PUT = "PUT", + DELETE = "DELETE", } /** @@ -23,9 +23,9 @@ export enum RequestEnum { */ export enum ContentTypeEnum { // json - JSON = 'application/json;charset=UTF-8', + JSON = "application/json;charset=UTF-8", // form-data qs - FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', + FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8", // form-data upload - FORM_DATA = 'multipart/form-data;charset=UTF-8', + FORM_DATA = "multipart/form-data;charset=UTF-8", } diff --git a/src/enums/menuEnum.ts b/src/enums/menuEnum.ts index 89cfa9f..d5e02fe 100644 --- a/src/enums/menuEnum.ts +++ b/src/enums/menuEnum.ts @@ -3,33 +3,33 @@ */ export enum MenuTypeEnum { // left menu - SIDEBAR = 'sidebar', + SIDEBAR = "sidebar", - MIX_SIDEBAR = 'mix-sidebar', + MIX_SIDEBAR = "mix-sidebar", // mixin menu - MIX = 'mix', + MIX = "mix", // top menu - TOP_MENU = 'top-menu', + TOP_MENU = "top-menu", } // 折叠触发器位置 export enum TriggerEnum { // 不显示 - NONE = 'NONE', + NONE = "NONE", // 菜单底部 - FOOTER = 'FOOTER', + FOOTER = "FOOTER", // 头部 - HEADER = 'HEADER', + HEADER = "HEADER", } -export type Mode = 'vertical' | 'vertical-right' | 'horizontal' | 'inline'; +export type Mode = "vertical" | "vertical-right" | "horizontal" | "inline"; // menu mode export enum MenuModeEnum { - VERTICAL = 'vertical', - HORIZONTAL = 'horizontal', - VERTICAL_RIGHT = 'vertical-right', - INLINE = 'inline', + VERTICAL = "vertical", + HORIZONTAL = "horizontal", + VERTICAL_RIGHT = "vertical-right", + INLINE = "inline", } export enum MenuSplitTyeEnum { @@ -39,12 +39,12 @@ export enum MenuSplitTyeEnum { } export enum TopMenuAlignEnum { - CENTER = 'center', - START = 'start', - END = 'end', + CENTER = "center", + START = "start", + END = "end", } export enum MixSidebarTriggerEnum { - HOVER = 'hover', - CLICK = 'click', + HOVER = "hover", + CLICK = "click", } diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index c7ca363..317c76f 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -1,10 +1,10 @@ export enum PageEnum { // basic login path - BASE_LOGIN = '/login', + BASE_LOGIN = "/login", // basic home path - BASE_HOME = '/dashboard', + BASE_HOME = "/dashboard", // error page path - ERROR_PAGE = '/exception', + ERROR_PAGE = "/exception", // error log page path - ERROR_LOG_PAGE = '/error-log/list', + ERROR_LOG_PAGE = "/error-log/list", } diff --git a/src/enums/roleEnum.ts b/src/enums/roleEnum.ts index 857868d..ff8b8f0 100644 --- a/src/enums/roleEnum.ts +++ b/src/enums/roleEnum.ts @@ -1,7 +1,7 @@ export enum RoleEnum { // super admin - SUPER = 'super', + SUPER = "super", // tester - TEST = 'test', + TEST = "test", } diff --git a/src/enums/sizeEnum.ts b/src/enums/sizeEnum.ts index 9bac184..d4694df 100644 --- a/src/enums/sizeEnum.ts +++ b/src/enums/sizeEnum.ts @@ -1,7 +1,7 @@ export enum SizeEnum { - DEFAULT = 'default', - SMALL = 'small', - LARGE = 'large', + DEFAULT = "default", + SMALL = "small", + LARGE = "large", } export enum SizeNumberEnum { diff --git a/src/hooks/component/useFormItem.ts b/src/hooks/component/useFormItem.ts index cee415e..25f8875 100644 --- a/src/hooks/component/useFormItem.ts +++ b/src/hooks/component/useFormItem.ts @@ -1,4 +1,4 @@ -import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from 'vue'; +import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from "vue"; import { reactive, readonly, @@ -8,9 +8,9 @@ import { unref, nextTick, toRaw, -} from 'vue'; +} from "vue"; -import { isEqual } from 'lodash-es'; +import { isEqual } from "lodash-es"; export function useRuleFormItem<T extends Recordable, K extends keyof T, V = UnwrapRef<T[K]>>( props: T, @@ -21,8 +21,8 @@ export function useRuleFormItem<T extends Recordable, K extends keyof T, V = Unw export function useRuleFormItem<T extends Recordable>( props: T, - key: keyof T = 'value', - changeEvent = 'change', + key: keyof T = "value", + changeEvent = "change", emitData?: Ref<any[]>, ) { const instance = getCurrentInstance(); diff --git a/src/hooks/component/usePageContext.ts b/src/hooks/component/usePageContext.ts index 12cc160..10a3256 100644 --- a/src/hooks/component/usePageContext.ts +++ b/src/hooks/component/usePageContext.ts @@ -1,5 +1,5 @@ -import type { InjectionKey, ComputedRef, Ref } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import type { InjectionKey, ComputedRef, Ref } from "vue"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface PageContextProps { contentHeight: ComputedRef<number>; diff --git a/src/hooks/core/onMountedOrActivated.ts b/src/hooks/core/onMountedOrActivated.ts index ffabf18..1570d2f 100644 --- a/src/hooks/core/onMountedOrActivated.ts +++ b/src/hooks/core/onMountedOrActivated.ts @@ -1,4 +1,4 @@ -import { nextTick, onMounted, onActivated } from 'vue'; +import { nextTick, onMounted, onActivated } from "vue"; export function onMountedOrActivated(hook: Fn) { let mounted: boolean; diff --git a/src/hooks/core/useAttrs.ts b/src/hooks/core/useAttrs.ts index a7c5bd7..72a9abb 100644 --- a/src/hooks/core/useAttrs.ts +++ b/src/hooks/core/useAttrs.ts @@ -1,12 +1,12 @@ -import { getCurrentInstance, reactive, shallowRef, watchEffect } from 'vue'; -import type { Ref } from 'vue'; +import { getCurrentInstance, reactive, shallowRef, watchEffect } from "vue"; +import type { Ref } from "vue"; interface Params { excludeListeners?: boolean; excludeKeys?: string[]; excludeDefaultKeys?: boolean; } -const DEFAULT_EXCLUDE_KEYS = ['class', 'style']; +const DEFAULT_EXCLUDE_KEYS = ["class", "style"]; const LISTENER_PREFIX = /^on[A-Z]/; export function entries<T>(obj: Recordable<T>): [string, T][] { diff --git a/src/hooks/core/useContext.ts b/src/hooks/core/useContext.ts index 522e10b..c8c55f9 100644 --- a/src/hooks/core/useContext.ts +++ b/src/hooks/core/useContext.ts @@ -6,7 +6,7 @@ import { readonly as defineReadonly, // defineComponent, UnwrapRef, -} from 'vue'; +} from "vue"; export interface CreateContextOptions { readonly?: boolean; diff --git a/src/hooks/core/useLockFn.ts b/src/hooks/core/useLockFn.ts index 0a8b3a7..02c1c29 100644 --- a/src/hooks/core/useLockFn.ts +++ b/src/hooks/core/useLockFn.ts @@ -1,4 +1,4 @@ -import { ref, unref } from 'vue'; +import { ref, unref } from "vue"; export function useLockFn<P extends any[] = any[], V = any>(fn: (...args: P) => Promise<V>) { const lockRef = ref(false); diff --git a/src/hooks/core/useRefs.ts b/src/hooks/core/useRefs.ts index 180bb14..f9f68f9 100644 --- a/src/hooks/core/useRefs.ts +++ b/src/hooks/core/useRefs.ts @@ -1,5 +1,5 @@ -import type { Ref } from 'vue'; -import { ref, onBeforeUpdate } from 'vue'; +import type { Ref } from "vue"; +import { ref, onBeforeUpdate } from "vue"; export function useRefs(): [Ref<HTMLElement[]>, (index: number) => (el: HTMLElement) => void] { const refs = ref([]) as Ref<HTMLElement[]>; diff --git a/src/hooks/core/useTimeout.ts b/src/hooks/core/useTimeout.ts index 9905c2b..e0710c1 100644 --- a/src/hooks/core/useTimeout.ts +++ b/src/hooks/core/useTimeout.ts @@ -1,10 +1,10 @@ -import { ref, watch } from 'vue'; -import { tryOnUnmounted } from '@vueuse/core'; -import { isFunction } from '/@/utils/is'; +import { ref, watch } from "vue"; +import { tryOnUnmounted } from "@vueuse/core"; +import { isFunction } from "/@/utils/is"; export function useTimeoutFn(handle: Fn<any>, wait: number, native = false) { if (!isFunction(handle)) { - throw new Error('handle is not Function!'); + throw new Error("handle is not Function!"); } const { readyRef, stop, start } = useTimeoutRef(wait); diff --git a/src/hooks/event/useBreakpoint.ts b/src/hooks/event/useBreakpoint.ts index 01bbbec..106533b 100644 --- a/src/hooks/event/useBreakpoint.ts +++ b/src/hooks/event/useBreakpoint.ts @@ -1,6 +1,6 @@ -import { ref, computed, ComputedRef, unref } from 'vue'; -import { useEventListener } from '/@/hooks/event/useEventListener'; -import { screenMap, sizeEnum, screenEnum } from '/@/enums/breakpointEnum'; +import { ref, computed, ComputedRef, unref } from "vue"; +import { useEventListener } from "/@/hooks/event/useEventListener"; +import { screenMap, sizeEnum, screenEnum } from "/@/enums/breakpointEnum"; let globalScreenRef: ComputedRef<sizeEnum | undefined>; let globalWidthRef: ComputedRef<number>; @@ -54,7 +54,7 @@ export function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) useEventListener({ el: window, - name: 'resize', + name: "resize", listener: () => { getWindowWidth(); diff --git a/src/hooks/event/useEventListener.ts b/src/hooks/event/useEventListener.ts index 892cd92..89915ff 100644 --- a/src/hooks/event/useEventListener.ts +++ b/src/hooks/event/useEventListener.ts @@ -1,6 +1,6 @@ -import type { Ref } from 'vue'; -import { ref, watch, unref } from 'vue'; -import { useThrottleFn, useDebounceFn } from '@vueuse/core'; +import type { Ref } from "vue"; +import { ref, watch, unref } from "vue"; +import { useThrottleFn, useDebounceFn } from "@vueuse/core"; export type RemoveEventFn = () => void; export interface UseEventParams { diff --git a/src/hooks/event/useIntersectionObserver.ts b/src/hooks/event/useIntersectionObserver.ts index b9badca..285a27f 100644 --- a/src/hooks/event/useIntersectionObserver.ts +++ b/src/hooks/event/useIntersectionObserver.ts @@ -1,4 +1,4 @@ -import { Ref, watchEffect, ref } from 'vue'; +import { Ref, watchEffect, ref } from "vue"; interface IntersectionObserverProps { target: Ref<Element | null | undefined>; @@ -12,7 +12,7 @@ export function useIntersectionObserver({ target, root, onIntersect, - rootMargin = '0px', + rootMargin = "0px", threshold = 0.1, }: IntersectionObserverProps) { let cleanup = () => {}; diff --git a/src/hooks/event/useScroll.ts b/src/hooks/event/useScroll.ts index cc60f9b..8296886 100644 --- a/src/hooks/event/useScroll.ts +++ b/src/hooks/event/useScroll.ts @@ -1,8 +1,8 @@ -import type { Ref } from 'vue'; +import type { Ref } from "vue"; -import { ref, onMounted, watch, onUnmounted } from 'vue'; -import { isWindow, isObject } from '/@/utils/is'; -import { useThrottleFn } from '@vueuse/core'; +import { ref, onMounted, watch, onUnmounted } from "vue"; +import { isWindow, isObject } from "/@/utils/is"; +import { useThrottleFn } from "@vueuse/core"; export function useScroll( refEl: Ref<Element | Window | null>, @@ -28,7 +28,7 @@ export function useScroll( let wait = 0; if (options.wait && options.wait > 0) { wait = options.wait; - Reflect.deleteProperty(options, 'wait'); + Reflect.deleteProperty(options, "wait"); } handler = useThrottleFn(handler, wait); @@ -40,13 +40,13 @@ export function useScroll( refEl, (el, prevEl, onCleanup) => { if (el) { - el.addEventListener('scroll', handler); + el.addEventListener("scroll", handler); } else if (prevEl) { - prevEl.removeEventListener('scroll', handler); + prevEl.removeEventListener("scroll", handler); } onCleanup(() => { refX.value = refY.value = 0; - el && el.removeEventListener('scroll', handler); + el && el.removeEventListener("scroll", handler); }); }, { immediate: true }, @@ -54,7 +54,7 @@ export function useScroll( }); onUnmounted(() => { - refEl.value && refEl.value.removeEventListener('scroll', handler); + refEl.value && refEl.value.removeEventListener("scroll", handler); }); function stop() { diff --git a/src/hooks/event/useScrollTo.ts b/src/hooks/event/useScrollTo.ts index f6d5dc6..8a87546 100644 --- a/src/hooks/event/useScrollTo.ts +++ b/src/hooks/event/useScrollTo.ts @@ -1,5 +1,5 @@ -import { isFunction, isUnDef } from '/@/utils/is'; -import { ref, unref } from 'vue'; +import { isFunction, isUnDef } from "/@/utils/is"; +import { ref, unref } from "vue"; export interface ScrollToParams { el: any; diff --git a/src/hooks/event/useWindowSizeFn.ts b/src/hooks/event/useWindowSizeFn.ts index 7b18ca0..e1f531e 100644 --- a/src/hooks/event/useWindowSizeFn.ts +++ b/src/hooks/event/useWindowSizeFn.ts @@ -1,5 +1,5 @@ -import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'; -import { useDebounceFn } from '@vueuse/core'; +import { tryOnMounted, tryOnUnmounted } from "@vueuse/core"; +import { useDebounceFn } from "@vueuse/core"; interface WindowSizeOptions { once?: boolean; @@ -18,11 +18,11 @@ export function useWindowSizeFn<T>(fn: Fn<T>, wait = 150, options?: WindowSizeOp if (options && options.immediate) { handler(); } - window.addEventListener('resize', handler); + window.addEventListener("resize", handler); }; const stop = () => { - window.removeEventListener('resize', handler); + window.removeEventListener("resize", handler); }; tryOnMounted(() => { diff --git a/src/hooks/setting/index.ts b/src/hooks/setting/index.ts index 56e393f..e8c9586 100644 --- a/src/hooks/setting/index.ts +++ b/src/hooks/setting/index.ts @@ -1,7 +1,7 @@ -import type { GlobConfig } from '/#/config'; +import type { GlobConfig } from "/#/config"; -import { warn } from '/@/utils/log'; -import { getAppEnvConfig } from '/@/utils/env'; +import { warn } from "/@/utils/log"; +import { getAppEnvConfig } from "/@/utils/env"; export const useGlobSetting = (): Readonly<GlobConfig> => { const { diff --git a/src/hooks/setting/useHeaderSetting.ts b/src/hooks/setting/useHeaderSetting.ts index d590be8..bad96e0 100644 --- a/src/hooks/setting/useHeaderSetting.ts +++ b/src/hooks/setting/useHeaderSetting.ts @@ -1,13 +1,13 @@ -import type { HeaderSetting } from '/#/config'; +import type { HeaderSetting } from "/#/config"; -import { computed, unref } from 'vue'; +import { computed, unref } from "vue"; -import { useAppStore } from '/@/store/modules/app'; +import { useAppStore } from "/@/store/modules/app"; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; -import { useFullContent } from '/@/hooks/web/useFullContent'; -import { MenuModeEnum } from '/@/enums/menuEnum'; +import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; +import { useRootSetting } from "/@/hooks/setting/useRootSetting"; +import { useFullContent } from "/@/hooks/web/useFullContent"; +import { MenuModeEnum } from "/@/enums/menuEnum"; export function useHeaderSetting() { const { getFullContent } = useFullContent(); diff --git a/src/hooks/setting/useMenuSetting.ts b/src/hooks/setting/useMenuSetting.ts index 62ccf42..eb6e61d 100644 --- a/src/hooks/setting/useMenuSetting.ts +++ b/src/hooks/setting/useMenuSetting.ts @@ -1,12 +1,12 @@ -import type { MenuSetting } from '/#/config'; +import type { MenuSetting } from "/#/config"; -import { computed, unref, ref } from 'vue'; +import { computed, unref, ref } from "vue"; -import { useAppStore } from '/@/store/modules/app'; +import { useAppStore } from "/@/store/modules/app"; -import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum'; -import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum'; -import { useFullContent } from '/@/hooks/web/useFullContent'; +import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from "/@/enums/appEnum"; +import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from "/@/enums/menuEnum"; +import { useFullContent } from "/@/hooks/web/useFullContent"; const mixSideHasChildren = ref(false); diff --git a/src/hooks/setting/useMultipleTabSetting.ts b/src/hooks/setting/useMultipleTabSetting.ts index 7caa753..772248f 100644 --- a/src/hooks/setting/useMultipleTabSetting.ts +++ b/src/hooks/setting/useMultipleTabSetting.ts @@ -1,8 +1,8 @@ -import type { MultiTabsSetting } from '/#/config'; +import type { MultiTabsSetting } from "/#/config"; -import { computed } from 'vue'; +import { computed } from "vue"; -import { useAppStore } from '/@/store/modules/app'; +import { useAppStore } from "/@/store/modules/app"; export function useMultipleTabSetting() { const appStore = useAppStore(); diff --git a/src/hooks/setting/useRootSetting.ts b/src/hooks/setting/useRootSetting.ts index 4976e40..2e53503 100644 --- a/src/hooks/setting/useRootSetting.ts +++ b/src/hooks/setting/useRootSetting.ts @@ -1,13 +1,13 @@ -import type { ProjectConfig } from '/#/config'; +import type { ProjectConfig } from "/#/config"; -import { computed } from 'vue'; +import { computed } from "vue"; -import { useAppStore } from '/@/store/modules/app'; -import { ContentEnum, ThemeEnum } from '/@/enums/appEnum'; +import { useAppStore } from "/@/store/modules/app"; +import { ContentEnum, ThemeEnum } from "/@/enums/appEnum"; type RootSetting = Omit< ProjectConfig, - 'locale' | 'headerSetting' | 'menuSetting' | 'multiTabsSetting' + "locale" | "headerSetting" | "menuSetting" | "multiTabsSetting" >; export function useRootSetting() { diff --git a/src/hooks/setting/useTransitionSetting.ts b/src/hooks/setting/useTransitionSetting.ts index b6d421a..105794c 100644 --- a/src/hooks/setting/useTransitionSetting.ts +++ b/src/hooks/setting/useTransitionSetting.ts @@ -1,8 +1,8 @@ -import type { TransitionSetting } from '/#/config'; +import type { TransitionSetting } from "/#/config"; -import { computed } from 'vue'; +import { computed } from "vue"; -import { useAppStore } from '/@/store/modules/app'; +import { useAppStore } from "/@/store/modules/app"; export function useTransitionSetting() { const appStore = useAppStore(); diff --git a/src/hooks/web/useAppInject.ts b/src/hooks/web/useAppInject.ts index 7d6efb2..db0c7ce 100644 --- a/src/hooks/web/useAppInject.ts +++ b/src/hooks/web/useAppInject.ts @@ -1,5 +1,5 @@ -import { useAppProviderContext } from '/@/components/Application'; -import { computed, unref } from 'vue'; +import { useAppProviderContext } from "/@/components/Application"; +import { computed, unref } from "vue"; export function useAppInject() { const values = useAppProviderContext(); diff --git a/src/hooks/web/useContentHeight.ts b/src/hooks/web/useContentHeight.ts index d51f4ca..59c4ab4 100644 --- a/src/hooks/web/useContentHeight.ts +++ b/src/hooks/web/useContentHeight.ts @@ -1,9 +1,9 @@ -import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue'; -import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; -import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight'; -import { getViewportOffset } from '/@/utils/domUtils'; -import { isNumber, isString } from '/@/utils/is'; +import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from "vue"; +import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; +import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; +import { useLayoutHeight } from "/@/layouts/default/content/useContentViewHeight"; +import { getViewportOffset } from "/@/utils/domUtils"; +import { isNumber, isString } from "/@/utils/is"; export interface CompensationHeight { // 使用 layout Footer 高度作为判断补偿高度的条件 @@ -52,25 +52,25 @@ export function useContentHeight( function calcSubtractSpace( element: Element | null | undefined, - direction: 'all' | 'top' | 'bottom' = 'all', + direction: "all" | "top" | "bottom" = "all", ): number { function numberPx(px: string) { - return Number(px.replace(/[^\d]/g, '')); + return Number(px.replace(/[^\d]/g, "")); } let subtractHeight = 0; - const ZERO_PX = '0px'; + const ZERO_PX = "0px"; if (element) { const cssStyle = getComputedStyle(element); const marginTop = numberPx(cssStyle?.marginTop ?? ZERO_PX); const marginBottom = numberPx(cssStyle?.marginBottom ?? ZERO_PX); const paddingTop = numberPx(cssStyle?.paddingTop ?? ZERO_PX); const paddingBottom = numberPx(cssStyle?.paddingBottom ?? ZERO_PX); - if (direction === 'all') { + if (direction === "all") { subtractHeight += marginTop; subtractHeight += marginBottom; subtractHeight += paddingTop; subtractHeight += paddingBottom; - } else if (direction === 'top') { + } else if (direction === "top") { subtractHeight += marginTop; subtractHeight += paddingTop; } else { @@ -121,14 +121,14 @@ export function useContentHeight( if (parent) { if (isString(upwardLvlOrClass)) { if (!parent.classList.contains(upwardLvlOrClass)) { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); + upwardSpaceHeight += calcSubtractSpace(parent, "bottom"); upward(parent, upwardLvlOrClass); } else { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); + upwardSpaceHeight += calcSubtractSpace(parent, "bottom"); } } else if (isNumber(upwardLvlOrClass)) { if (upwardLvlOrClass > 0) { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); + upwardSpaceHeight += calcSubtractSpace(parent, "bottom"); upward(parent, --upwardLvlOrClass); } } @@ -182,7 +182,7 @@ export function useContentHeight( calcContentHeight(); }, { - flush: 'post', + flush: "post", immediate: true, }, ); diff --git a/src/hooks/web/useContextMenu.ts b/src/hooks/web/useContextMenu.ts index d3c53ce..c37c8d1 100644 --- a/src/hooks/web/useContextMenu.ts +++ b/src/hooks/web/useContextMenu.ts @@ -1,6 +1,6 @@ -import { onUnmounted, getCurrentInstance } from 'vue'; -import { createContextMenu, destroyContextMenu } from '/@/components/ContextMenu'; -import type { ContextMenuItem } from '/@/components/ContextMenu'; +import { onUnmounted, getCurrentInstance } from "vue"; +import { createContextMenu, destroyContextMenu } from "/@/components/ContextMenu"; +import type { ContextMenuItem } from "/@/components/ContextMenu"; export type { ContextMenuItem }; export function useContextMenu(authRemove = true) { if (getCurrentInstance() && authRemove) { diff --git a/src/hooks/web/useCopyToClipboard.ts b/src/hooks/web/useCopyToClipboard.ts index 69abf26..195e2c7 100644 --- a/src/hooks/web/useCopyToClipboard.ts +++ b/src/hooks/web/useCopyToClipboard.ts @@ -1,11 +1,11 @@ -import { ref, watch } from 'vue'; +import { ref, watch } from "vue"; -import { isDef } from '/@/utils/is'; +import { isDef } from "/@/utils/is"; interface Options { target?: HTMLElement; } export function useCopyToClipboard(initial?: string) { - const clipboardRef = ref(initial || ''); + const clipboardRef = ref(initial || ""); const isSuccessRef = ref(false); const copiedRef = ref(false); @@ -17,24 +17,24 @@ export function useCopyToClipboard(initial?: string) { isSuccessRef.value = copyTextToClipboard(str); } }, - { immediate: !!initial, flush: 'sync' }, + { immediate: !!initial, flush: "sync" }, ); return { clipboardRef, isSuccessRef, copiedRef }; } export function copyTextToClipboard(input: string, { target = document.body }: Options = {}) { - const element = document.createElement('textarea'); + const element = document.createElement("textarea"); const previouslyFocusedElement = document.activeElement; element.value = input; - element.setAttribute('readonly', ''); + element.setAttribute("readonly", ""); - (element.style as any).contain = 'strict'; - element.style.position = 'absolute'; - element.style.left = '-9999px'; - element.style.fontSize = '12pt'; + (element.style as any).contain = "strict"; + element.style.position = "absolute"; + element.style.left = "-9999px"; + element.style.fontSize = "12pt"; const selection = document.getSelection(); let originalRange; @@ -50,7 +50,7 @@ export function copyTextToClipboard(input: string, { target = document.body }: O let isSuccess = false; try { - isSuccess = document.execCommand('copy'); + isSuccess = document.execCommand("copy"); } catch (e: any) { throw new Error(e); } diff --git a/src/hooks/web/useDesign.ts b/src/hooks/web/useDesign.ts index 046674b..0cc450e 100644 --- a/src/hooks/web/useDesign.ts +++ b/src/hooks/web/useDesign.ts @@ -1,4 +1,4 @@ -import { useAppProviderContext } from '/@/components/Application'; +import { useAppProviderContext } from "/@/components/Application"; // import { computed } from 'vue'; // import { lowerFirst } from 'lodash-es'; export function useDesign(scope: string) { diff --git a/src/hooks/web/useECharts.ts b/src/hooks/web/useECharts.ts index fa93e60..c7ab2d7 100644 --- a/src/hooks/web/useECharts.ts +++ b/src/hooks/web/useECharts.ts @@ -1,22 +1,22 @@ -import type { EChartsOption } from 'echarts'; -import type { Ref } from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { tryOnUnmounted } from '@vueuse/core'; -import { unref, nextTick, watch, computed, ref } from 'vue'; -import { useDebounceFn } from '@vueuse/core'; -import { useEventListener } from '/@/hooks/event/useEventListener'; -import { useBreakpoint } from '/@/hooks/event/useBreakpoint'; -import echarts from '/@/utils/lib/echarts'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; +import type { EChartsOption } from "echarts"; +import type { Ref } from "vue"; +import { useTimeoutFn } from "/@/hooks/core/useTimeout"; +import { tryOnUnmounted } from "@vueuse/core"; +import { unref, nextTick, watch, computed, ref } from "vue"; +import { useDebounceFn } from "@vueuse/core"; +import { useEventListener } from "/@/hooks/event/useEventListener"; +import { useBreakpoint } from "/@/hooks/event/useBreakpoint"; +import echarts from "/@/utils/lib/echarts"; +import { useRootSetting } from "/@/hooks/setting/useRootSetting"; export function useECharts( elRef: Ref<HTMLDivElement>, - theme: 'light' | 'dark' | 'default' = 'default', + theme: "light" | "dark" | "default" = "default", ) { const { getDarkMode: getSysDarkMode } = useRootSetting(); const getDarkMode = computed(() => { - return theme === 'default' ? getSysDarkMode.value : theme; + return theme === "default" ? getSysDarkMode.value : theme; }); let chartInstance: echarts.ECharts | null = null; let resizeFn: Fn = resize; @@ -26,11 +26,11 @@ export function useECharts( resizeFn = useDebounceFn(resize, 200); const getOptions = computed(() => { - if (getDarkMode.value !== 'dark') { + if (getDarkMode.value !== "dark") { return cacheOptions.value as EChartsOption; } return { - backgroundColor: 'transparent', + backgroundColor: "transparent", ...cacheOptions.value, } as EChartsOption; }); @@ -44,7 +44,7 @@ export function useECharts( chartInstance = echarts.init(el, t); const { removeEvent } = useEventListener({ el: window, - name: 'resize', + name: "resize", listener: resizeFn, }); removeResizeFn = removeEvent; @@ -67,7 +67,7 @@ export function useECharts( nextTick(() => { useTimeoutFn(() => { if (!chartInstance) { - initCharts(getDarkMode.value as 'default'); + initCharts(getDarkMode.value as "default"); if (!chartInstance) return; } @@ -87,7 +87,7 @@ export function useECharts( (theme) => { if (chartInstance) { chartInstance.dispose(); - initCharts(theme as 'default'); + initCharts(theme as "default"); setOptions(cacheOptions.value); } }, @@ -102,7 +102,7 @@ export function useECharts( function getInstance(): echarts.ECharts | null { if (!chartInstance) { - initCharts(getDarkMode.value as 'default'); + initCharts(getDarkMode.value as "default"); } return chartInstance; } diff --git a/src/hooks/web/useFullContent.ts b/src/hooks/web/useFullContent.ts index 7dea077..d4405aa 100644 --- a/src/hooks/web/useFullContent.ts +++ b/src/hooks/web/useFullContent.ts @@ -1,8 +1,8 @@ -import { computed, unref } from 'vue'; +import { computed, unref } from "vue"; -import { useAppStore } from '/@/store/modules/app'; +import { useAppStore } from "/@/store/modules/app"; -import { useRouter } from 'vue-router'; +import { useRouter } from "vue-router"; /** * @description: Full screen display content @@ -17,7 +17,7 @@ export const useFullContent = () => { // Query parameters, the full screen is displayed when the address bar has a full parameter const route = unref(currentRoute); const query = route.query; - if (query && Reflect.has(query, '__full__')) { + if (query && Reflect.has(query, "__full__")) { return true; } // Return to the configuration in the configuration file diff --git a/src/hooks/web/useI18n.ts b/src/hooks/web/useI18n.ts index 2a777b7..2f300bc 100644 --- a/src/hooks/web/useI18n.ts +++ b/src/hooks/web/useI18n.ts @@ -1,4 +1,4 @@ -import { i18n } from '/@/locales/setupI18n'; +import { i18n } from "/@/locales/setupI18n"; type I18nGlobalTranslation = { (key: string): string; @@ -37,8 +37,8 @@ export function useI18n(namespace?: string): { const { t, ...methods } = i18n.global; const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => { - if (!key) return ''; - if (!key.includes('.') && !namespace) return key; + if (!key) return ""; + if (!key.includes(".") && !namespace) return key; return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters)); }; return { diff --git a/src/hooks/web/useLockPage.ts b/src/hooks/web/useLockPage.ts index c543be9..1281493 100644 --- a/src/hooks/web/useLockPage.ts +++ b/src/hooks/web/useLockPage.ts @@ -1,11 +1,11 @@ -import { computed, onUnmounted, unref, watchEffect } from 'vue'; -import { useThrottleFn } from '@vueuse/core'; +import { computed, onUnmounted, unref, watchEffect } from "vue"; +import { useThrottleFn } from "@vueuse/core"; -import { useAppStore } from '/@/store/modules/app'; -import { useLockStore } from '/@/store/modules/lock'; +import { useAppStore } from "/@/store/modules/app"; +import { useLockStore } from "/@/store/modules/lock"; -import { useUserStore } from '/@/store/modules/user'; -import { useRootSetting } from '../setting/useRootSetting'; +import { useUserStore } from "/@/store/modules/user"; +import { useRootSetting } from "../setting/useRootSetting"; export function useLockPage() { const { getLockTime } = useRootSetting(); diff --git a/src/hooks/web/useMessage.tsx b/src/hooks/web/useMessage.tsx index 91112f3..8dc856b 100644 --- a/src/hooks/web/useMessage.tsx +++ b/src/hooks/web/useMessage.tsx @@ -1,11 +1,11 @@ -import type { ModalFunc, ModalFuncProps } from 'ant-design-vue/lib/modal/Modal'; +import type { ModalFunc, ModalFuncProps } from "ant-design-vue/lib/modal/Modal"; -import { Modal, message as Message, notification } from 'ant-design-vue'; -import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons-vue'; +import { Modal, message as Message, notification } from "ant-design-vue"; +import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from "@ant-design/icons-vue"; -import { NotificationArgsProps, ConfigProps } from 'ant-design-vue/lib/notification'; -import { useI18n } from './useI18n'; -import { isString } from '/@/utils/is'; +import { NotificationArgsProps, ConfigProps } from "ant-design-vue/lib/notification"; +import { useI18n } from "./useI18n"; +import { isString } from "/@/utils/is"; export interface NotifyApi { info(config: NotificationArgsProps): void; @@ -19,12 +19,12 @@ export interface NotifyApi { destroy(): void; } -export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'; -export declare type IconType = 'success' | 'info' | 'error' | 'warning'; -export interface ModalOptionsEx extends Omit<ModalFuncProps, 'iconType'> { - iconType: 'warning' | 'success' | 'error' | 'info'; +export declare type NotificationPlacement = "topLeft" | "topRight" | "bottomLeft" | "bottomRight"; +export declare type IconType = "success" | "info" | "error" | "warning"; +export interface ModalOptionsEx extends Omit<ModalFuncProps, "iconType"> { + iconType: "warning" | "success" | "error" | "info"; } -export type ModalOptionsPartial = Partial<ModalOptionsEx> & Pick<ModalOptionsEx, 'content'>; +export type ModalOptionsPartial = Partial<ModalOptionsEx> & Pick<ModalOptionsEx, "content">; interface ConfirmOptions { info: ModalFunc; @@ -35,18 +35,18 @@ interface ConfirmOptions { } function getIcon(iconType: string) { - if (iconType === 'warning') { + if (iconType === "warning") { return <InfoCircleFilled class="modal-icon-warning" />; - } else if (iconType === 'success') { + } else if (iconType === "success") { return <CheckCircleFilled class="modal-icon-success" />; - } else if (iconType === 'info') { + } else if (iconType === "info") { return <InfoCircleFilled class="modal-icon-info" />; } else { return <CloseCircleFilled class="modal-icon-error" />; } } -function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) { +function renderContent({ content }: Pick<ModalOptionsEx, "content">) { if (isString(content)) { return <div innerHTML={`<div>${content as string}</div>`}></div>; } else { @@ -58,8 +58,8 @@ function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) { * @description: Create confirmation box */ function createConfirm(options: ModalOptionsEx): ConfirmOptions { - const iconType = options.iconType || 'warning'; - Reflect.deleteProperty(options, 'iconType'); + const iconType = options.iconType || "warning"; + Reflect.deleteProperty(options, "iconType"); const opt: ModalFuncProps = { centered: true, icon: getIcon(iconType), @@ -72,7 +72,7 @@ function createConfirm(options: ModalOptionsEx): ConfirmOptions { const getBaseOptions = () => { const { t } = useI18n(); return { - okText: t('common.okText'), + okText: t("common.okText"), centered: true, }; }; @@ -87,23 +87,23 @@ function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOp } function createSuccessModal(options: ModalOptionsPartial) { - return Modal.success(createModalOptions(options, 'success')); + return Modal.success(createModalOptions(options, "success")); } function createErrorModal(options: ModalOptionsPartial) { - return Modal.error(createModalOptions(options, 'close')); + return Modal.error(createModalOptions(options, "close")); } function createInfoModal(options: ModalOptionsPartial) { - return Modal.info(createModalOptions(options, 'info')); + return Modal.info(createModalOptions(options, "info")); } function createWarningModal(options: ModalOptionsPartial) { - return Modal.warning(createModalOptions(options, 'warning')); + return Modal.warning(createModalOptions(options, "warning")); } notification.config({ - placement: 'topRight', + placement: "topRight", duration: 3, }); diff --git a/src/hooks/web/usePage.ts b/src/hooks/web/usePage.ts index ffe1ebc..4c9b475 100644 --- a/src/hooks/web/usePage.ts +++ b/src/hooks/web/usePage.ts @@ -1,13 +1,13 @@ -import type { RouteLocationRaw, Router } from 'vue-router'; +import type { RouteLocationRaw, Router } from "vue-router"; -import { PageEnum } from '/@/enums/pageEnum'; -import { isString } from '/@/utils/is'; -import { unref } from 'vue'; +import { PageEnum } from "/@/enums/pageEnum"; +import { isString } from "/@/utils/is"; +import { unref } from "vue"; -import { useRouter } from 'vue-router'; -import { REDIRECT_NAME } from '/@/router/constant'; +import { useRouter } from "vue-router"; +import { REDIRECT_NAME } from "/@/router/constant"; -export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & { path: PageEnum }; +export type RouteLocationRawEx = Omit<RouteLocationRaw, "path"> & { path: PageEnum }; function handleError(e: Error) { console.error(e); @@ -47,11 +47,11 @@ export const useRedo = (_router?: Router) => { return; } if (name && Object.keys(params).length > 0) { - params['_redirect_type'] = 'name'; - params['path'] = String(name); + params["_redirect_type"] = "name"; + params["path"] = String(name); } else { - params['_redirect_type'] = 'path'; - params['path'] = fullPath; + params["_redirect_type"] = "path"; + params["path"] = fullPath; } push({ name: REDIRECT_NAME, params, query }).then(() => resolve(true)); }); diff --git a/src/hooks/web/usePagination.ts b/src/hooks/web/usePagination.ts index 1e19913..a8c266d 100644 --- a/src/hooks/web/usePagination.ts +++ b/src/hooks/web/usePagination.ts @@ -1,5 +1,5 @@ -import type { Ref } from 'vue'; -import { ref, unref, computed } from 'vue'; +import type { Ref } from "vue"; +import { ref, unref, computed } from "vue"; function pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] { const offset = (pageNo - 1) * Number(pageSize); diff --git a/src/hooks/web/usePermission.ts b/src/hooks/web/usePermission.ts index cb2d442..daf2421 100644 --- a/src/hooks/web/usePermission.ts +++ b/src/hooks/web/usePermission.ts @@ -1,21 +1,21 @@ -import type { RouteRecordRaw } from 'vue-router'; +import type { RouteRecordRaw } from "vue-router"; -import { useAppStore } from '/@/store/modules/app'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { useUserStore } from '/@/store/modules/user'; +import { useAppStore } from "/@/store/modules/app"; +import { usePermissionStore } from "/@/store/modules/permission"; +import { useUserStore } from "/@/store/modules/user"; -import { useTabs } from './useTabs'; +import { useTabs } from "./useTabs"; -import { router, resetRouter } from '/@/router'; +import { router, resetRouter } from "/@/router"; // import { RootRoute } from '/@/router/routes'; -import projectSetting from '/@/settings/projectSetting'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { RoleEnum } from '/@/enums/roleEnum'; +import projectSetting from "/@/settings/projectSetting"; +import { PermissionModeEnum } from "/@/enums/appEnum"; +import { RoleEnum } from "/@/enums/roleEnum"; -import { intersection } from 'lodash-es'; -import { isArray } from '/@/utils/is'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; +import { intersection } from "lodash-es"; +import { isArray } from "/@/utils/is"; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; // User permissions related operations export function usePermission() { @@ -88,7 +88,7 @@ export function usePermission() { async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> { if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) { throw new Error( - 'Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!', + "Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!", ); } diff --git a/src/hooks/web/useScript.ts b/src/hooks/web/useScript.ts index 9707116..3c36cc5 100644 --- a/src/hooks/web/useScript.ts +++ b/src/hooks/web/useScript.ts @@ -1,4 +1,4 @@ -import { onMounted, onUnmounted, ref } from 'vue'; +import { onMounted, onUnmounted, ref } from "vue"; interface ScriptOptions { src: string; @@ -12,13 +12,13 @@ export function useScript(opts: ScriptOptions) { const promise = new Promise((resolve, reject) => { onMounted(() => { - script = document.createElement('script'); - script.type = 'text/javascript'; + script = document.createElement("script"); + script.type = "text/javascript"; script.onload = function () { isLoading.value = false; success.value = true; error.value = false; - resolve(''); + resolve(""); }; script.onerror = function (err) { diff --git a/src/hooks/web/useSortable.ts b/src/hooks/web/useSortable.ts index 4c66b6a..f94ab58 100644 --- a/src/hooks/web/useSortable.ts +++ b/src/hooks/web/useSortable.ts @@ -1,13 +1,13 @@ -import { nextTick, unref } from 'vue'; -import type { Ref } from 'vue'; -import type { Options } from 'sortablejs'; +import { nextTick, unref } from "vue"; +import type { Ref } from "vue"; +import type { Options } from "sortablejs"; export function useSortable(el: HTMLElement | Ref<HTMLElement>, options?: Options) { function initSortable() { nextTick(async () => { if (!el) return; - const Sortable = (await import('sortablejs')).default; + const Sortable = (await import("sortablejs")).default; Sortable.create(unref(el), { animation: 500, delay: 400, diff --git a/src/hooks/web/useTabs.ts b/src/hooks/web/useTabs.ts index 926d90b..a9b8d0a 100644 --- a/src/hooks/web/useTabs.ts +++ b/src/hooks/web/useTabs.ts @@ -1,10 +1,10 @@ -import type { RouteLocationNormalized, Router } from 'vue-router'; +import type { RouteLocationNormalized, Router } from "vue-router"; -import { useRouter } from 'vue-router'; -import { unref } from 'vue'; +import { useRouter } from "vue-router"; +import { unref } from "vue"; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { useAppStore } from '/@/store/modules/app'; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; +import { useAppStore } from "/@/store/modules/app"; enum TableActionEnum { REFRESH, @@ -22,7 +22,7 @@ export function useTabs(_router?: Router) { function canIUseTabs(): boolean { const { show } = appStore.getMultiTabsSetting; if (!show) { - throw new Error('The multi-tab page is currently not open, please open it in the settings!'); + throw new Error("The multi-tab page is currently not open, please open it in the settings!"); } return !!show; } diff --git a/src/hooks/web/useTitle.ts b/src/hooks/web/useTitle.ts index a7f48d8..335450c 100644 --- a/src/hooks/web/useTitle.ts +++ b/src/hooks/web/useTitle.ts @@ -1,11 +1,11 @@ -import { watch, unref } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useTitle as usePageTitle } from '@vueuse/core'; -import { useGlobSetting } from '/@/hooks/setting'; -import { useRouter } from 'vue-router'; -import { useLocaleStore } from '/@/store/modules/locale'; +import { watch, unref } from "vue"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { useTitle as usePageTitle } from "@vueuse/core"; +import { useGlobSetting } from "/@/hooks/setting"; +import { useRouter } from "vue-router"; +import { useLocaleStore } from "/@/store/modules/locale"; -import { REDIRECT_NAME } from '/@/router/constant'; +import { REDIRECT_NAME } from "/@/router/constant"; /** * Listening to page changes and dynamically changing site titles diff --git a/src/hooks/web/useWatermark.ts b/src/hooks/web/useWatermark.ts index a42b84b..01f7bb9 100644 --- a/src/hooks/web/useWatermark.ts +++ b/src/hooks/web/useWatermark.ts @@ -1,9 +1,9 @@ -import { getCurrentInstance, onBeforeUnmount, ref, Ref, shallowRef, unref } from 'vue'; -import { useRafThrottle } from '/@/utils/domUtils'; -import { addResizeListener, removeResizeListener } from '/@/utils/event'; -import { isDef } from '/@/utils/is'; +import { getCurrentInstance, onBeforeUnmount, ref, Ref, shallowRef, unref } from "vue"; +import { useRafThrottle } from "/@/utils/domUtils"; +import { addResizeListener, removeResizeListener } from "/@/utils/event"; +import { isDef } from "/@/utils/is"; -const domSymbol = Symbol('watermark-dom'); +const domSymbol = Symbol("watermark-dom"); export function useWatermark( appendEl: Ref<HTMLElement | null> = ref(document.body) as Ref<HTMLElement>, @@ -27,21 +27,21 @@ export function useWatermark( }; function createBase64(str: string) { - const can = document.createElement('canvas'); + const can = document.createElement("canvas"); const width = 300; const height = 240; Object.assign(can, { width, height }); - const cans = can.getContext('2d'); + const cans = can.getContext("2d"); if (cans) { cans.rotate((-20 * Math.PI) / 120); - cans.font = '15px Vedana'; - cans.fillStyle = 'rgba(0, 0, 0, 0.15)'; - cans.textAlign = 'left'; - cans.textBaseline = 'middle'; + cans.font = "15px Vedana"; + cans.fillStyle = "rgba(0, 0, 0, 0.15)"; + cans.textAlign = "left"; + cans.textBaseline = "middle"; cans.fillText(str, width / 20, height); } - return can.toDataURL('image/png'); + return can.toDataURL("image/png"); } function updateWatermark( @@ -69,14 +69,14 @@ export function useWatermark( updateWatermark({ str }); return id; } - const div = document.createElement('div'); + const div = document.createElement("div"); watermarkEl.value = div; div.id = id; - div.style.pointerEvents = 'none'; - div.style.top = '0px'; - div.style.left = '0px'; - div.style.position = 'absolute'; - div.style.zIndex = '100000'; + div.style.pointerEvents = "none"; + div.style.top = "0px"; + div.style.left = "0px"; + div.style.position = "absolute"; + div.style.zIndex = "100000"; const el = unref(appendEl); if (!el) return id; const { clientHeight: height, clientWidth: width } = el; diff --git a/src/layouts/default/content/index.vue b/src/layouts/default/content/index.vue index 3f6d193..e6c1b7d 100644 --- a/src/layouts/default/content/index.vue +++ b/src/layouts/default/content/index.vue @@ -4,18 +4,18 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import PageLayout from '/@/layouts/page/index.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; - import { useContentViewHeight } from './useContentViewHeight'; + import { defineComponent } from "vue"; + import PageLayout from "/@/layouts/page/index.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { useTransitionSetting } from "/@/hooks/setting/useTransitionSetting"; + import { useContentViewHeight } from "./useContentViewHeight"; export default defineComponent({ - name: 'LayoutContent', + name: "LayoutContent", components: { PageLayout }, setup() { - const { prefixCls } = useDesign('layout-content'); + const { prefixCls } = useDesign("layout-content"); const { getOpenPageLoading } = useTransitionSetting(); const { getLayoutContentMode, getPageLoading } = useRootSetting(); @@ -30,7 +30,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-content'; + @prefix-cls: ~"@{namespace}-layout-content"; .@{prefix-cls} { position: relative; diff --git a/src/layouts/default/content/useContentContext.ts b/src/layouts/default/content/useContentContext.ts index f12e77b..3e73492 100644 --- a/src/layouts/default/content/useContentContext.ts +++ b/src/layouts/default/content/useContentContext.ts @@ -1,5 +1,5 @@ -import type { InjectionKey, ComputedRef } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; +import type { InjectionKey, ComputedRef } from "vue"; +import { createContext, useContext } from "/@/hooks/core/useContext"; export interface ContentContextProps { contentHeight: ComputedRef<number>; diff --git a/src/layouts/default/content/useContentViewHeight.ts b/src/layouts/default/content/useContentViewHeight.ts index f620a33..bb87d2f 100644 --- a/src/layouts/default/content/useContentViewHeight.ts +++ b/src/layouts/default/content/useContentViewHeight.ts @@ -1,6 +1,6 @@ -import { ref, computed, unref } from 'vue'; -import { createPageContext } from '/@/hooks/component/usePageContext'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; +import { ref, computed, unref } from "vue"; +import { createPageContext } from "/@/hooks/component/usePageContext"; +import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; const headerHeightRef = ref(0); const footerHeightRef = ref(0); diff --git a/src/layouts/default/feature/index.vue b/src/layouts/default/feature/index.vue index 0787014..5ebc30c 100644 --- a/src/layouts/default/feature/index.vue +++ b/src/layouts/default/feature/index.vue @@ -1,29 +1,29 @@ <script lang="ts"> - import { defineComponent, computed, unref } from 'vue'; - import { BackTop } from 'ant-design-vue'; + import { defineComponent, computed, unref } from "vue"; + import { BackTop } from "ant-design-vue"; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useUserStoreWithOut } from '/@/store/modules/user'; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useUserStoreWithOut } from "/@/store/modules/user"; - import { SettingButtonPositionEnum } from '/@/enums/appEnum'; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; + import { SettingButtonPositionEnum } from "/@/enums/appEnum"; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; - import SessionTimeoutLogin from '/@/views/sys/login/SessionTimeoutLogin.vue'; + import SessionTimeoutLogin from "/@/views/sys/login/SessionTimeoutLogin.vue"; export default defineComponent({ - name: 'LayoutFeatures', + name: "LayoutFeatures", components: { BackTop, - LayoutLockPage: createAsyncComponent(() => import('/@/views/sys/lock/index.vue')), - SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue')), + LayoutLockPage: createAsyncComponent(() => import("/@/views/sys/lock/index.vue")), + SettingDrawer: createAsyncComponent(() => import("/@/layouts/default/setting/index.vue")), SessionTimeoutLogin, }, setup() { const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } = useRootSetting(); const userStore = useUserStoreWithOut(); - const { prefixCls } = useDesign('setting-drawer-fearure'); + const { prefixCls } = useDesign("setting-drawer-fearure"); const { getShowHeader } = useHeaderSetting(); const getIsSessionTimeout = computed(() => userStore.getSessionTimeout); @@ -59,7 +59,7 @@ </template> <style lang="less"> - @prefix-cls: ~'@{namespace}-setting-drawer-fearure'; + @prefix-cls: ~"@{namespace}-setting-drawer-fearure"; .@{prefix-cls} { position: absolute; diff --git a/src/layouts/default/footer/index.vue b/src/layouts/default/footer/index.vue index 62e3c5e..4e87603 100644 --- a/src/layouts/default/footer/index.vue +++ b/src/layouts/default/footer/index.vue @@ -1,39 +1,39 @@ <template> <Footer :class="prefixCls" v-if="getShowLayoutFooter" ref="footerRef"> <div :class="`${prefixCls}__links`"> - <a @click="openWindow(SITE_URL)">{{ t('layout.footer.onlinePreview') }}</a> + <a @click="openWindow(SITE_URL)">{{ t("layout.footer.onlinePreview") }}</a> <GithubFilled @click="openWindow(GITHUB_URL)" :class="`${prefixCls}__github`" /> - <a @click="openWindow(DOC_URL)">{{ t('layout.footer.onlineDocument') }}</a> + <a @click="openWindow(DOC_URL)">{{ t("layout.footer.onlineDocument") }}</a> </div> <div>Copyright ©2020 Vben Admin</div> </Footer> </template> <script lang="ts"> - import { computed, defineComponent, unref, ref } from 'vue'; - import { Layout } from 'ant-design-vue'; + import { computed, defineComponent, unref, ref } from "vue"; + import { Layout } from "ant-design-vue"; - import { GithubFilled } from '@ant-design/icons-vue'; + import { GithubFilled } from "@ant-design/icons-vue"; - import { DOC_URL, GITHUB_URL, SITE_URL } from '/@/settings/siteSetting'; - import { openWindow } from '/@/utils'; + import { DOC_URL, GITHUB_URL, SITE_URL } from "/@/settings/siteSetting"; + import { openWindow } from "/@/utils"; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { useRouter } from 'vue-router'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLayoutHeight } from '../content/useContentViewHeight'; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { useRouter } from "vue-router"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useLayoutHeight } from "../content/useContentViewHeight"; export default defineComponent({ - name: 'LayoutFooter', + name: "LayoutFooter", components: { Footer: Layout.Footer, GithubFilled }, setup() { const { t } = useI18n(); const { getShowFooter } = useRootSetting(); const { currentRoute } = useRouter(); - const { prefixCls } = useDesign('layout-footer'); + const { prefixCls } = useDesign("layout-footer"); const footerRef = ref<ComponentRef>(null); const { setFooterHeight } = useLayoutHeight(); @@ -62,7 +62,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-layout-footer'; + @prefix-cls: ~"@{namespace}-layout-footer"; @normal-color: rgba(0, 0, 0, 0.45); diff --git a/src/layouts/default/header/MultipleHeader.vue b/src/layouts/default/header/MultipleHeader.vue index c852b7e..c568a6c 100644 --- a/src/layouts/default/header/MultipleHeader.vue +++ b/src/layouts/default/header/MultipleHeader.vue @@ -6,28 +6,28 @@ </div> </template> <script lang="ts"> - import { defineComponent, unref, computed, CSSProperties } from 'vue'; + import { defineComponent, unref, computed, CSSProperties } from "vue"; - import LayoutHeader from './index.vue'; - import MultipleTabs from '../tabs/index.vue'; + import LayoutHeader from "./index.vue"; + import MultipleTabs from "../tabs/index.vue"; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useFullContent } from '/@/hooks/web/useFullContent'; - import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; - import { useAppInject } from '/@/hooks/web/useAppInject'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLayoutHeight } from '../content/useContentViewHeight'; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useFullContent } from "/@/hooks/web/useFullContent"; + import { useMultipleTabSetting } from "/@/hooks/setting/useMultipleTabSetting"; + import { useAppInject } from "/@/hooks/web/useAppInject"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useLayoutHeight } from "../content/useContentViewHeight"; const HEADER_HEIGHT = 48; const TABS_HEIGHT = 32; export default defineComponent({ - name: 'LayoutMultipleHeader', + name: "LayoutMultipleHeader", components: { LayoutHeader, MultipleTabs }, setup() { const { setHeaderHeight } = useLayoutHeight(); - const { prefixCls } = useDesign('layout-multiple-header'); + const { prefixCls } = useDesign("layout-multiple-header"); const { getCalcContentWidth, getSplit } = useMenuSetting(); const { getIsMobile } = useAppInject(); @@ -54,7 +54,7 @@ const getWrapStyle = computed((): CSSProperties => { const style: CSSProperties = {}; if (unref(getFixed)) { - style.width = unref(getIsMobile) ? '100%' : unref(getCalcContentWidth); + style.width = unref(getIsMobile) ? "100%" : unref(getCalcContentWidth); } if (unref(getShowFullHeaderRef)) { style.top = `${HEADER_HEIGHT}px`; @@ -106,7 +106,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-layout-multiple-header'; + @prefix-cls: ~"@{namespace}-layout-multiple-header"; .@{prefix-cls} { transition: width 0.2s; diff --git a/src/layouts/default/header/components/Breadcrumb.vue b/src/layouts/default/header/components/Breadcrumb.vue index 9f2e77b..ce28948 100644 --- a/src/layouts/default/header/components/Breadcrumb.vue +++ b/src/layouts/default/header/components/Breadcrumb.vue @@ -14,38 +14,38 @@ </div> </template> <script lang="ts"> - import type { RouteLocationMatched } from 'vue-router'; - import { useRouter } from 'vue-router'; - import type { Menu } from '/@/router/types'; + import type { RouteLocationMatched } from "vue-router"; + import { useRouter } from "vue-router"; + import type { Menu } from "/@/router/types"; - import { defineComponent, ref, watchEffect } from 'vue'; + import { defineComponent, ref, watchEffect } from "vue"; - import { Breadcrumb } from 'ant-design-vue'; - import Icon from '/@/components/Icon'; + import { Breadcrumb } from "ant-design-vue"; + import Icon from "/@/components/Icon"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { useGo } from '/@/hooks/web/usePage'; - import { useI18n } from '/@/hooks/web/useI18n'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { useGo } from "/@/hooks/web/usePage"; + import { useI18n } from "/@/hooks/web/useI18n"; - import { propTypes } from '/@/utils/propTypes'; - import { isString } from '/@/utils/is'; - import { filter } from '/@/utils/helper/treeHelper'; - import { getMenus } from '/@/router/menus'; + import { propTypes } from "/@/utils/propTypes"; + import { isString } from "/@/utils/is"; + import { filter } from "/@/utils/helper/treeHelper"; + import { getMenus } from "/@/router/menus"; - import { REDIRECT_NAME } from '/@/router/constant'; - import { getAllParentPath } from '/@/router/helper/menuHelper'; + import { REDIRECT_NAME } from "/@/router/constant"; + import { getAllParentPath } from "/@/router/helper/menuHelper"; export default defineComponent({ - name: 'LayoutBreadcrumb', + name: "LayoutBreadcrumb", components: { Icon, [Breadcrumb.name]: Breadcrumb }, props: { - theme: propTypes.oneOf(['dark', 'light']), + theme: propTypes.oneOf(["dark", "light"]), }, setup() { const routes = ref<RouteLocationMatched[]>([]); const { currentRoute } = useRouter(); - const { prefixCls } = useDesign('layout-breadcrumb'); + const { prefixCls } = useDesign("layout-breadcrumb"); const { getShowBreadCrumbIcon } = useRootSetting(); const go = useGo(); @@ -124,12 +124,12 @@ if (redirect && isString(redirect)) { go(redirect); } else { - let goPath = ''; + let goPath = ""; if (paths.length === 1) { goPath = paths[0]; } else { const ps = paths.slice(1); - const lastPath = ps.pop() || ''; + const lastPath = ps.pop() || ""; goPath = `${lastPath}`; } goPath = /^\//.test(goPath) ? goPath : `/${goPath}`; @@ -150,7 +150,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-breadcrumb'; + @prefix-cls: ~"@{namespace}-layout-breadcrumb"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/header/components/ErrorAction.vue b/src/layouts/default/header/components/ErrorAction.vue index 243e587..a391800 100644 --- a/src/layouts/default/header/components/ErrorAction.vue +++ b/src/layouts/default/header/components/ErrorAction.vue @@ -11,18 +11,18 @@ </Tooltip> </template> <script lang="ts"> - import { defineComponent, computed } from 'vue'; - import { Tooltip, Badge } from 'ant-design-vue'; - import Icon from '/@/components/Icon'; + import { defineComponent, computed } from "vue"; + import { Tooltip, Badge } from "ant-design-vue"; + import Icon from "/@/components/Icon"; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useErrorLogStore } from '/@/store/modules/errorLog'; - import { PageEnum } from '/@/enums/pageEnum'; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useErrorLogStore } from "/@/store/modules/errorLog"; + import { PageEnum } from "/@/enums/pageEnum"; - import { useRouter } from 'vue-router'; + import { useRouter } from "vue-router"; export default defineComponent({ - name: 'ErrorAction', + name: "ErrorAction", components: { Icon, Tooltip, Badge }, setup() { diff --git a/src/layouts/default/header/components/FullScreen.vue b/src/layouts/default/header/components/FullScreen.vue index 374ee76..ff91fc4 100644 --- a/src/layouts/default/header/components/FullScreen.vue +++ b/src/layouts/default/header/components/FullScreen.vue @@ -7,14 +7,14 @@ </Tooltip> </template> <script lang="ts"> - import { defineComponent, computed, unref } from 'vue'; - import { Tooltip } from 'ant-design-vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useFullscreen } from '@vueuse/core'; + import { defineComponent, computed, unref } from "vue"; + import { Tooltip } from "ant-design-vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useFullscreen } from "@vueuse/core"; - import { FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons-vue'; + import { FullscreenExitOutlined, FullscreenOutlined } from "@ant-design/icons-vue"; export default defineComponent({ - name: 'FullScreen', + name: "FullScreen", components: { FullscreenExitOutlined, FullscreenOutlined, Tooltip }, setup() { @@ -23,8 +23,8 @@ const getTitle = computed(() => { return unref(isFullscreen) - ? t('layout.header.tooltipExitFull') - : t('layout.header.tooltipEntryFull'); + ? t("layout.header.tooltipExitFull") + : t("layout.header.tooltipEntryFull"); }); return { diff --git a/src/layouts/default/header/components/index.ts b/src/layouts/default/header/components/index.ts index 09e767e..f64dda3 100644 --- a/src/layouts/default/header/components/index.ts +++ b/src/layouts/default/header/components/index.ts @@ -1,14 +1,14 @@ -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; -import FullScreen from './FullScreen.vue'; +import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; +import FullScreen from "./FullScreen.vue"; -export const UserDropDown = createAsyncComponent(() => import('./user-dropdown/index.vue'), { +export const UserDropDown = createAsyncComponent(() => import("./user-dropdown/index.vue"), { loading: true, }); -export const LayoutBreadcrumb = createAsyncComponent(() => import('./Breadcrumb.vue')); +export const LayoutBreadcrumb = createAsyncComponent(() => import("./Breadcrumb.vue")); -export const Notify = createAsyncComponent(() => import('./notify/index.vue')); +export const Notify = createAsyncComponent(() => import("./notify/index.vue")); -export const ErrorAction = createAsyncComponent(() => import('./ErrorAction.vue')); +export const ErrorAction = createAsyncComponent(() => import("./ErrorAction.vue")); export { FullScreen }; diff --git a/src/layouts/default/header/components/lock/LockModal.vue b/src/layouts/default/header/components/lock/LockModal.vue index 90a3f7c..eae1ff4 100644 --- a/src/layouts/default/header/components/lock/LockModal.vue +++ b/src/layouts/default/header/components/lock/LockModal.vue @@ -18,29 +18,29 @@ <div :class="`${prefixCls}__footer`"> <a-button type="primary" block class="mt-2" @click="handleLock"> - {{ t('layout.header.lockScreenBtn') }} + {{ t("layout.header.lockScreenBtn") }} </a-button> </div> </div> </BasicModal> </template> <script lang="ts"> - import { defineComponent, computed } from 'vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { BasicModal, useModalInner } from '/@/components/Modal/index'; - import { BasicForm, useForm } from '/@/components/Form/index'; + import { defineComponent, computed } from "vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { BasicModal, useModalInner } from "/@/components/Modal/index"; + import { BasicForm, useForm } from "/@/components/Form/index"; - import { useUserStore } from '/@/store/modules/user'; - import { useLockStore } from '/@/store/modules/lock'; - import headerImg from '/@/assets/images/header.jpg'; + import { useUserStore } from "/@/store/modules/user"; + import { useLockStore } from "/@/store/modules/lock"; + import headerImg from "/@/assets/images/header.jpg"; export default defineComponent({ - name: 'LockModal', + name: "LockModal", components: { BasicModal, BasicForm }, setup() { const { t } = useI18n(); - const { prefixCls } = useDesign('header-lock-modal'); + const { prefixCls } = useDesign("header-lock-modal"); const userStore = useUserStore(); const lockStore = useLockStore(); @@ -51,9 +51,9 @@ showActionButtonGroup: false, schemas: [ { - field: 'password', - label: t('layout.header.lockScreenPassword'), - component: 'InputPassword', + field: "password", + label: t("layout.header.lockScreenPassword"), + component: "InputPassword", required: true, }, ], @@ -89,7 +89,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-header-lock-modal'; + @prefix-cls: ~"@{namespace}-header-lock-modal"; .@{prefix-cls} { &__entry { diff --git a/src/layouts/default/header/components/notify/NoticeList.vue b/src/layouts/default/header/components/notify/NoticeList.vue index dbc0939..71d7248 100644 --- a/src/layouts/default/header/components/notify/NoticeList.vue +++ b/src/layouts/default/header/components/notify/NoticeList.vue @@ -54,11 +54,11 @@ </a-list> </template> <script lang="ts"> - import { computed, defineComponent, PropType, ref, watch, unref } from 'vue'; - import { ListItem } from './data'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { List, Avatar, Tag, Typography } from 'ant-design-vue'; - import { isNumber } from '/@/utils/is'; + import { computed, defineComponent, PropType, ref, watch, unref } from "vue"; + import { ListItem } from "./data"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { List, Avatar, Tag, Typography } from "ant-design-vue"; + import { isNumber } from "/@/utils/is"; export default defineComponent({ components: { [Avatar.name]: Avatar, @@ -93,9 +93,9 @@ type: Function as PropType<(Recordable) => void>, }, }, - emits: ['update:currentPage'], + emits: ["update:currentPage"], setup(props, { emit }) { - const { prefixCls } = useDesign('header-notify-list'); + const { prefixCls } = useDesign("header-notify-list"); const current = ref(props.currentPage || 1); const getData = computed(() => { const { pageSize, list } = props; @@ -120,7 +120,7 @@ current: unref(current), onChange(page) { current.value = page; - emit('update:currentPage', page); + emit("update:currentPage", page); }, }; } else { @@ -137,7 +137,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-header-notify-list'; + @prefix-cls: ~"@{namespace}-header-notify-list"; .@{prefix-cls} { &::-webkit-scrollbar { diff --git a/src/layouts/default/header/components/notify/data.ts b/src/layouts/default/header/components/notify/data.ts index 15d524d..6a9596b 100644 --- a/src/layouts/default/header/components/notify/data.ts +++ b/src/layouts/default/header/components/notify/data.ts @@ -23,170 +23,170 @@ export interface TabItem { export const tabListData: TabItem[] = [ { - key: '1', - name: '通知', + key: "1", + name: "通知", list: [ { - id: '000000001', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '你收到了 14 份新周报', - description: '', - datetime: '2017-08-09', - type: '1', + id: "000000001", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + title: "你收到了 14 份新周报", + description: "", + datetime: "2017-08-09", + type: "1", }, { - id: '000000002', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png', - title: '你推荐的 曲妮妮 已通过第三轮面试', - description: '', - datetime: '2017-08-08', - type: '1', + id: "000000002", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", + title: "你推荐的 曲妮妮 已通过第三轮面试", + description: "", + datetime: "2017-08-08", + type: "1", }, { - id: '000000003', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png', - title: '这种模板可以区分多种通知类型', - description: '', - datetime: '2017-08-07', + id: "000000003", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", + title: "这种模板可以区分多种通知类型", + description: "", + datetime: "2017-08-07", // read: true, - type: '1', + type: "1", }, { - id: '000000004', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000004", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000005', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', + id: "000000005", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", title: - '标题可以设置自动显示省略号,本例中标题行数已设为1行,如果内容超过1行将自动截断并支持tooltip显示完整标题。', - description: '', - datetime: '2017-08-07', - type: '1', + "标题可以设置自动显示省略号,本例中标题行数已设为1行,如果内容超过1行将自动截断并支持tooltip显示完整标题。", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000006', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000006", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000007', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000007", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000008', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000008", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000009', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000009", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, { - id: '000000010', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - description: '', - datetime: '2017-08-07', - type: '1', + id: "000000010", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + description: "", + datetime: "2017-08-07", + type: "1", }, ], }, { - key: '2', - name: '消息', + key: "2", + name: "消息", list: [ { - id: '000000006', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - title: '曲丽丽 评论了你', - description: '描述信息描述信息描述信息', - datetime: '2017-08-07', - type: '2', + id: "000000006", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "曲丽丽 评论了你", + description: "描述信息描述信息描述信息", + datetime: "2017-08-07", + type: "2", clickClose: true, }, { - id: '000000007', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - title: '朱偏右 回复了你', - description: '这种模板用于提醒谁与你发生了互动', - datetime: '2017-08-07', - type: '2', + id: "000000007", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "朱偏右 回复了你", + description: "这种模板用于提醒谁与你发生了互动", + datetime: "2017-08-07", + type: "2", clickClose: true, }, { - id: '000000008', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - title: '标题', + id: "000000008", + avatar: "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "标题", description: - '请将鼠标移动到此处,以便测试超长的消息在此处将如何处理。本例中设置的描述最大行数为2,超过2行的描述内容将被省略并且可以通过tooltip查看完整内容', - datetime: '2017-08-07', - type: '2', + "请将鼠标移动到此处,以便测试超长的消息在此处将如何处理。本例中设置的描述最大行数为2,超过2行的描述内容将被省略并且可以通过tooltip查看完整内容", + datetime: "2017-08-07", + type: "2", clickClose: true, }, ], }, { - key: '3', - name: '待办', + key: "3", + name: "待办", list: [ { - id: '000000009', - avatar: '', - title: '任务名称', - description: '任务需要在 2017-01-12 20:00 前启动', - datetime: '', - extra: '未开始', - color: '', - type: '3', - }, - { - id: '000000010', - avatar: '', - title: '第三方紧急代码变更', - description: '冠霖 需在 2017-01-07 前完成代码变更任务', - datetime: '', - extra: '马上到期', - color: 'red', - type: '3', - }, - { - id: '000000011', - avatar: '', - title: '信息安全考试', - description: '指派竹尔于 2017-01-09 前完成更新并发布', - datetime: '', - extra: '已耗时 8 天', - color: 'gold', - type: '3', - }, - { - id: '000000012', - avatar: '', - title: 'ABCD 版本发布', - description: '指派竹尔于 2017-01-09 前完成更新并发布', - datetime: '', - extra: '进行中', - color: 'blue', - type: '3', + id: "000000009", + avatar: "", + title: "任务名称", + description: "任务需要在 2017-01-12 20:00 前启动", + datetime: "", + extra: "未开始", + color: "", + type: "3", + }, + { + id: "000000010", + avatar: "", + title: "第三方紧急代码变更", + description: "冠霖 需在 2017-01-07 前完成代码变更任务", + datetime: "", + extra: "马上到期", + color: "red", + type: "3", + }, + { + id: "000000011", + avatar: "", + title: "信息安全考试", + description: "指派竹尔于 2017-01-09 前完成更新并发布", + datetime: "", + extra: "已耗时 8 天", + color: "gold", + type: "3", + }, + { + id: "000000012", + avatar: "", + title: "ABCD 版本发布", + description: "指派竹尔于 2017-01-09 前完成更新并发布", + datetime: "", + extra: "进行中", + color: "blue", + type: "3", }, ], }, diff --git a/src/layouts/default/header/components/notify/index.vue b/src/layouts/default/header/components/notify/index.vue index da66aff..d83126c 100644 --- a/src/layouts/default/header/components/notify/index.vue +++ b/src/layouts/default/header/components/notify/index.vue @@ -23,18 +23,18 @@ </div> </template> <script lang="ts"> - import { computed, defineComponent, ref } from 'vue'; - import { Popover, Tabs, Badge } from 'ant-design-vue'; - import { BellOutlined } from '@ant-design/icons-vue'; - import { tabListData, ListItem } from './data'; - import NoticeList from './NoticeList.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useMessage } from '/@/hooks/web/useMessage'; + import { computed, defineComponent, ref } from "vue"; + import { Popover, Tabs, Badge } from "ant-design-vue"; + import { BellOutlined } from "@ant-design/icons-vue"; + import { tabListData, ListItem } from "./data"; + import NoticeList from "./NoticeList.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useMessage } from "/@/hooks/web/useMessage"; export default defineComponent({ components: { Popover, BellOutlined, Tabs, TabPane: Tabs.TabPane, Badge, NoticeList }, setup() { - const { prefixCls } = useDesign('header-notify'); + const { prefixCls } = useDesign("header-notify"); const { createMessage } = useMessage(); const listData = ref(tabListData); @@ -47,7 +47,7 @@ }); function onNoticeClick(record: ListItem) { - createMessage.success('你点击了通知,ID=' + record.id); + createMessage.success("你点击了通知,ID=" + record.id); // 可以直接将其标记为已读(为标题添加删除线),此处演示的代码会切换删除线状态 record.titleDelete = !record.titleDelete; } @@ -63,7 +63,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-header-notify'; + @prefix-cls: ~"@{namespace}-header-notify"; .@{prefix-cls} { padding-top: 2px; diff --git a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue b/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue index aa193d5..d09994c 100644 --- a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue +++ b/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue @@ -7,15 +7,15 @@ </MenuItem> </template> <script lang="ts"> - import { Menu } from 'ant-design-vue'; + import { Menu } from "ant-design-vue"; - import { computed, defineComponent, getCurrentInstance } from 'vue'; + import { computed, defineComponent, getCurrentInstance } from "vue"; - import Icon from '/@/components/Icon/index'; - import { propTypes } from '/@/utils/propTypes'; + import Icon from "/@/components/Icon/index"; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'DropdownMenuItem', + name: "DropdownMenuItem", components: { MenuItem: Menu.Item, Icon }, props: { key: propTypes.string, diff --git a/src/layouts/default/header/components/user-dropdown/index.vue b/src/layouts/default/header/components/user-dropdown/index.vue index 2c3669a..7f3efe5 100644 --- a/src/layouts/default/header/components/user-dropdown/index.vue +++ b/src/layouts/default/header/components/user-dropdown/index.vue @@ -36,46 +36,46 @@ </template> <script lang="ts"> // components - import { Dropdown, Menu } from 'ant-design-vue'; + import { Dropdown, Menu } from "ant-design-vue"; - import { defineComponent, computed } from 'vue'; + import { defineComponent, computed } from "vue"; - import { DOC_URL } from '/@/settings/siteSetting'; + import { DOC_URL } from "/@/settings/siteSetting"; - import { useUserStore } from '/@/store/modules/user'; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useModal } from '/@/components/Modal'; + import { useUserStore } from "/@/store/modules/user"; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useModal } from "/@/components/Modal"; - import headerImg from '/@/assets/images/header.jpg'; - import { propTypes } from '/@/utils/propTypes'; - import { openWindow } from '/@/utils'; + import headerImg from "/@/assets/images/header.jpg"; + import { propTypes } from "/@/utils/propTypes"; + import { openWindow } from "/@/utils"; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; - type MenuEvent = 'logout' | 'doc' | 'lock'; + type MenuEvent = "logout" | "doc" | "lock"; export default defineComponent({ - name: 'UserDropdown', + name: "UserDropdown", components: { Dropdown, Menu, - MenuItem: createAsyncComponent(() => import('./DropMenuItem.vue')), + MenuItem: createAsyncComponent(() => import("./DropMenuItem.vue")), MenuDivider: Menu.Divider, - LockAction: createAsyncComponent(() => import('../lock/LockModal.vue')), + LockAction: createAsyncComponent(() => import("../lock/LockModal.vue")), }, props: { - theme: propTypes.oneOf(['dark', 'light']), + theme: propTypes.oneOf(["dark", "light"]), }, setup() { - const { prefixCls } = useDesign('header-user-dropdown'); + const { prefixCls } = useDesign("header-user-dropdown"); const { t } = useI18n(); const { getShowDoc, getUseLockPage } = useHeaderSetting(); const userStore = useUserStore(); const getUserInfo = computed(() => { - const { realName = '', avatar, desc } = userStore.getUserInfo || {}; + const { realName = "", avatar, desc } = userStore.getUserInfo || {}; return { realName, avatar: avatar || headerImg, desc }; }); @@ -97,13 +97,13 @@ function handleMenuClick(e: { key: MenuEvent }) { switch (e.key) { - case 'logout': + case "logout": handleLoginOut(); break; - case 'doc': + case "doc": openDoc(); break; - case 'lock': + case "lock": handleLock(); break; } @@ -122,7 +122,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-header-user-dropdown'; + @prefix-cls: ~"@{namespace}-header-user-dropdown"; .@{prefix-cls} { height: @header-height; diff --git a/src/layouts/default/header/index.vue b/src/layouts/default/header/index.vue index 6ce6a93..824d92c 100644 --- a/src/layouts/default/header/index.vue +++ b/src/layouts/default/header/index.vue @@ -55,34 +55,34 @@ </Header> </template> <script lang="ts"> - import { defineComponent, unref, computed } from 'vue'; + import { defineComponent, unref, computed } from "vue"; - import { propTypes } from '/@/utils/propTypes'; + import { propTypes } from "/@/utils/propTypes"; - import { Layout } from 'ant-design-vue'; - import { AppLogo } from '/@/components/Application'; - import LayoutMenu from '../menu/index.vue'; - import LayoutTrigger from '../trigger/index.vue'; + import { Layout } from "ant-design-vue"; + import { AppLogo } from "/@/components/Application"; + import LayoutMenu from "../menu/index.vue"; + import LayoutTrigger from "../trigger/index.vue"; - import { AppSearch } from '/@/components/Application'; + import { AppSearch } from "/@/components/Application"; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; - import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; - import { SettingButtonPositionEnum } from '/@/enums/appEnum'; - import { AppLocalePicker } from '/@/components/Application'; + import { MenuModeEnum, MenuSplitTyeEnum } from "/@/enums/menuEnum"; + import { SettingButtonPositionEnum } from "/@/enums/appEnum"; + import { AppLocalePicker } from "/@/components/Application"; - import { UserDropDown, LayoutBreadcrumb, FullScreen, Notify, ErrorAction } from './components'; - import { useAppInject } from '/@/hooks/web/useAppInject'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { UserDropDown, LayoutBreadcrumb, FullScreen, Notify, ErrorAction } from "./components"; + import { useAppInject } from "/@/hooks/web/useAppInject"; + import { useDesign } from "/@/hooks/web/useDesign"; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; - import { useLocale } from '/@/locales/useLocale'; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; + import { useLocale } from "/@/locales/useLocale"; export default defineComponent({ - name: 'LayoutHeader', + name: "LayoutHeader", components: { Header: Layout.Header, AppLogo, @@ -95,7 +95,7 @@ Notify, AppSearch, ErrorAction, - SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue'), { + SettingDrawer: createAsyncComponent(() => import("/@/layouts/default/setting/index.vue"), { loading: true, }), }, @@ -103,7 +103,7 @@ fixed: propTypes.bool, }, setup(props) { - const { prefixCls } = useDesign('layout-header'); + const { prefixCls } = useDesign("layout-header"); const { getShowTopMenu, getShowHeaderTrigger, @@ -197,5 +197,5 @@ }); </script> <style lang="less"> - @import './index.less'; + @import "./index.less"; </style> diff --git a/src/layouts/default/index.vue b/src/layouts/default/index.vue index 4a230ba..2c92a0d 100644 --- a/src/layouts/default/index.vue +++ b/src/layouts/default/index.vue @@ -14,27 +14,27 @@ </template> <script lang="ts"> - import { defineComponent, computed, unref } from 'vue'; - import { Layout } from 'ant-design-vue'; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; + import { defineComponent, computed, unref } from "vue"; + import { Layout } from "ant-design-vue"; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; - import LayoutHeader from './header/index.vue'; - import LayoutContent from './content/index.vue'; - import LayoutSideBar from './sider/index.vue'; - import LayoutMultipleHeader from './header/MultipleHeader.vue'; + import LayoutHeader from "./header/index.vue"; + import LayoutContent from "./content/index.vue"; + import LayoutSideBar from "./sider/index.vue"; + import LayoutMultipleHeader from "./header/MultipleHeader.vue"; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLockPage } from '/@/hooks/web/useLockPage'; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useLockPage } from "/@/hooks/web/useLockPage"; - import { useAppInject } from '/@/hooks/web/useAppInject'; + import { useAppInject } from "/@/hooks/web/useAppInject"; export default defineComponent({ - name: 'DefaultLayout', + name: "DefaultLayout", components: { - LayoutFeatures: createAsyncComponent(() => import('/@/layouts/default/feature/index.vue')), - LayoutFooter: createAsyncComponent(() => import('/@/layouts/default/footer/index.vue')), + LayoutFeatures: createAsyncComponent(() => import("/@/layouts/default/feature/index.vue")), + LayoutFooter: createAsyncComponent(() => import("/@/layouts/default/footer/index.vue")), LayoutHeader, LayoutContent, LayoutSideBar, @@ -42,7 +42,7 @@ Layout, }, setup() { - const { prefixCls } = useDesign('default-layout'); + const { prefixCls } = useDesign("default-layout"); const { getIsMobile } = useAppInject(); const { getShowFullHeaderRef } = useHeaderSetting(); const { getShowSidebar, getIsMixSidebar, getShowMenu } = useMenuSetting(); @@ -51,9 +51,9 @@ const lockEvents = useLockPage(); const layoutClass = computed(() => { - let cls: string[] = ['ant-layout']; + let cls: string[] = ["ant-layout"]; if (unref(getIsMixSidebar) || unref(getShowMenu)) { - cls.push('ant-layout-has-sider'); + cls.push("ant-layout-has-sider"); } return cls; }); @@ -71,7 +71,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-default-layout'; + @prefix-cls: ~"@{namespace}-default-layout"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/menu/index.vue b/src/layouts/default/menu/index.vue index a6b7dff..509ae16 100644 --- a/src/layouts/default/menu/index.vue +++ b/src/layouts/default/menu/index.vue @@ -1,29 +1,29 @@ <script lang="tsx"> - import type { PropType, CSSProperties } from 'vue'; + import type { PropType, CSSProperties } from "vue"; - import { computed, defineComponent, unref, toRef } from 'vue'; - import { BasicMenu } from '/@/components/Menu'; - import { SimpleMenu } from '/@/components/SimpleMenu'; - import { AppLogo } from '/@/components/Application'; + import { computed, defineComponent, unref, toRef } from "vue"; + import { BasicMenu } from "/@/components/Menu"; + import { SimpleMenu } from "/@/components/SimpleMenu"; + import { AppLogo } from "/@/components/Application"; - import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; + import { MenuModeEnum, MenuSplitTyeEnum } from "/@/enums/menuEnum"; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { ScrollContainer } from '/@/components/Container'; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { ScrollContainer } from "/@/components/Container"; - import { useGo } from '/@/hooks/web/usePage'; - import { useSplitMenu } from './useLayoutMenu'; - import { openWindow } from '/@/utils'; - import { propTypes } from '/@/utils/propTypes'; - import { isUrl } from '/@/utils/is'; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - import { useAppInject } from '/@/hooks/web/useAppInject'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useGo } from "/@/hooks/web/usePage"; + import { useSplitMenu } from "./useLayoutMenu"; + import { openWindow } from "/@/utils"; + import { propTypes } from "/@/utils/propTypes"; + import { isUrl } from "/@/utils/is"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { useAppInject } from "/@/hooks/web/useAppInject"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'LayoutMenu', + name: "LayoutMenu", props: { - theme: propTypes.oneOf(['light', 'dark']), + theme: propTypes.oneOf(["light", "dark"]), splitType: { type: Number as PropType<MenuSplitTyeEnum>, @@ -34,7 +34,7 @@ // menu Mode menuMode: { type: [String] as PropType<Nullable<MenuModeEnum>>, - default: '', + default: "", }, }, setup(props) { @@ -53,9 +53,9 @@ } = useMenuSetting(); const { getShowLogo } = useRootSetting(); - const { prefixCls } = useDesign('layout-menu'); + const { prefixCls } = useDesign("layout-menu"); - const { menusRef } = useSplitMenu(toRef(props, 'splitType')); + const { menusRef } = useSplitMenu(toRef(props, "splitType")); const { getIsMobile } = useAppInject(); @@ -78,7 +78,7 @@ const getWrapperStyle = computed((): CSSProperties => { return { - height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`, + height: `calc(100% - ${unref(getIsShowLogo) ? "48px" : "0px"})`, }; }); @@ -172,8 +172,8 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-menu'; - @logo-prefix-cls: ~'@{namespace}-app-logo'; + @prefix-cls: ~"@{namespace}-layout-menu"; + @logo-prefix-cls: ~"@{namespace}-app-logo"; .@{prefix-cls} { &-logo { diff --git a/src/layouts/default/menu/useLayoutMenu.ts b/src/layouts/default/menu/useLayoutMenu.ts index 33c7768..64a1cf9 100644 --- a/src/layouts/default/menu/useLayoutMenu.ts +++ b/src/layouts/default/menu/useLayoutMenu.ts @@ -1,13 +1,13 @@ -import type { Menu } from '/@/router/types'; -import type { Ref } from 'vue'; -import { watch, unref, ref, computed } from 'vue'; -import { useRouter } from 'vue-router'; -import { MenuSplitTyeEnum } from '/@/enums/menuEnum'; -import { useThrottleFn } from '@vueuse/core'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { getChildrenMenus, getCurrentParentPath, getMenus, getShallowMenus } from '/@/router/menus'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { useAppInject } from '/@/hooks/web/useAppInject'; +import type { Menu } from "/@/router/types"; +import type { Ref } from "vue"; +import { watch, unref, ref, computed } from "vue"; +import { useRouter } from "vue-router"; +import { MenuSplitTyeEnum } from "/@/enums/menuEnum"; +import { useThrottleFn } from "@vueuse/core"; +import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; +import { getChildrenMenus, getCurrentParentPath, getMenus, getShallowMenus } from "/@/router/menus"; +import { usePermissionStore } from "/@/store/modules/permission"; +import { useAppInject } from "/@/hooks/web/useAppInject"; export function useSplitMenu(splitType: Ref<MenuSplitTyeEnum>) { // Menu array diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx index c982886..991cdda 100644 --- a/src/layouts/default/setting/SettingDrawer.tsx +++ b/src/layouts/default/setting/SettingDrawer.tsx @@ -1,6 +1,6 @@ -import { defineComponent, computed, unref } from 'vue'; -import { BasicDrawer } from '/@/components/Drawer/index'; -import { Divider } from 'ant-design-vue'; +import { defineComponent, computed, unref } from "vue"; +import { BasicDrawer } from "/@/components/Drawer/index"; +import { Divider } from "ant-design-vue"; import { TypePicker, ThemeColorPicker, @@ -8,20 +8,20 @@ import { SwitchItem, SelectItem, InputNumberItem, -} from './components'; +} from "./components"; -import { AppDarkModeToggle } from '/@/components/Application'; +import { AppDarkModeToggle } from "/@/components/Application"; -import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum'; +import { MenuTypeEnum, TriggerEnum } from "/@/enums/menuEnum"; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; -import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; -import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; -import { useI18n } from '/@/hooks/web/useI18n'; +import { useRootSetting } from "/@/hooks/setting/useRootSetting"; +import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; +import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; +import { useMultipleTabSetting } from "/@/hooks/setting/useMultipleTabSetting"; +import { useTransitionSetting } from "/@/hooks/setting/useTransitionSetting"; +import { useI18n } from "/@/hooks/web/useI18n"; -import { baseHandler } from './handler'; +import { baseHandler } from "./handler"; import { HandlerEnum, @@ -31,18 +31,18 @@ import { routerTransitionOptions, menuTypeList, mixSidebarTriggerOptions, -} from './enum'; +} from "./enum"; import { HEADER_PRESET_BG_COLOR_LIST, SIDE_BAR_BG_COLOR_LIST, APP_PRESET_COLOR_LIST, -} from '/@/settings/designSetting'; +} from "/@/settings/designSetting"; const { t } = useI18n(); export default defineComponent({ - name: 'SettingDrawer', + name: "SettingDrawer", setup(_, { attrs }) { const { getContentMode, @@ -158,78 +158,78 @@ export default defineComponent({ return ( <> <SwitchItem - title={t('layout.setting.splitMenu')} + title={t("layout.setting.splitMenu")} event={HandlerEnum.MENU_SPLIT} def={unref(getSplit)} disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX} /> <SwitchItem - title={t('layout.setting.mixSidebarFixed')} + title={t("layout.setting.mixSidebarFixed")} event={HandlerEnum.MENU_FIXED_MIX_SIDEBAR} def={unref(getMixSideFixed)} disabled={!unref(getIsMixSidebar)} /> <SwitchItem - title={t('layout.setting.closeMixSidebarOnChange')} + title={t("layout.setting.closeMixSidebarOnChange")} event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE} def={unref(getCloseMixSidebarOnChange)} disabled={!unref(getIsMixSidebar)} /> <SwitchItem - title={t('layout.setting.menuCollapse')} + title={t("layout.setting.menuCollapse")} event={HandlerEnum.MENU_COLLAPSED} def={unref(getCollapsed)} disabled={!unref(getShowMenuRef)} /> <SwitchItem - title={t('layout.setting.menuDrag')} + title={t("layout.setting.menuDrag")} event={HandlerEnum.MENU_HAS_DRAG} def={unref(getCanDrag)} disabled={!unref(getShowMenuRef)} /> <SwitchItem - title={t('layout.setting.menuSearch')} + title={t("layout.setting.menuSearch")} event={HandlerEnum.HEADER_SEARCH} def={unref(getShowSearch)} disabled={!unref(getShowHeader)} /> <SwitchItem - title={t('layout.setting.menuAccordion')} + title={t("layout.setting.menuAccordion")} event={HandlerEnum.MENU_ACCORDION} def={unref(getAccordion)} disabled={!unref(getShowMenuRef)} /> <SwitchItem - title={t('layout.setting.collapseMenuDisplayName')} + title={t("layout.setting.collapseMenuDisplayName")} event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE} def={unref(getCollapsedShowTitle)} disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)} /> <SwitchItem - title={t('layout.setting.fixedHeader')} + title={t("layout.setting.fixedHeader")} event={HandlerEnum.HEADER_FIXED} def={unref(getHeaderFixed)} disabled={!unref(getShowHeader)} /> <SwitchItem - title={t('layout.setting.fixedSideBar')} + title={t("layout.setting.fixedSideBar")} event={HandlerEnum.MENU_FIXED} def={unref(getMenuFixed)} disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} /> <SelectItem - title={t('layout.setting.mixSidebarTrigger')} + title={t("layout.setting.mixSidebarTrigger")} event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR} def={unref(getMixSideTrigger)} options={mixSidebarTriggerOptions} disabled={!unref(getIsMixSidebar)} /> <SelectItem - title={t('layout.setting.topMenuLayout')} + title={t("layout.setting.topMenuLayout")} event={HandlerEnum.MENU_TOP_ALIGN} def={unref(getTopMenuAlign)} options={topMenuAlignOptions} @@ -241,31 +241,31 @@ export default defineComponent({ } /> <SelectItem - title={t('layout.setting.menuCollapseButton')} + title={t("layout.setting.menuCollapseButton")} event={HandlerEnum.MENU_TRIGGER} def={triggerDef} options={triggerOptions} disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} /> <SelectItem - title={t('layout.setting.contentMode')} + title={t("layout.setting.contentMode")} event={HandlerEnum.CONTENT_MODE} def={unref(getContentMode)} options={contentModeOptions} /> <InputNumberItem - title={t('layout.setting.autoScreenLock')} + title={t("layout.setting.autoScreenLock")} min={0} event={HandlerEnum.LOCK_TIME} defaultValue={unref(getLockTime)} formatter={(value: string) => { return parseInt(value) === 0 - ? `0(${t('layout.setting.notAutoScreenLock')})` - : `${value}${t('layout.setting.minute')}`; + ? `0(${t("layout.setting.notAutoScreenLock")})` + : `${value}${t("layout.setting.minute")}`; }} /> <InputNumberItem - title={t('layout.setting.expandedMenuWidth')} + title={t("layout.setting.expandedMenuWidth")} max={600} min={100} step={10} @@ -282,54 +282,54 @@ export default defineComponent({ return ( <> <SwitchItem - title={t('layout.setting.breadcrumb')} + title={t("layout.setting.breadcrumb")} event={HandlerEnum.SHOW_BREADCRUMB} def={unref(getShowBreadCrumb)} disabled={!unref(getShowHeader)} /> <SwitchItem - title={t('layout.setting.breadcrumbIcon')} + title={t("layout.setting.breadcrumbIcon")} event={HandlerEnum.SHOW_BREADCRUMB_ICON} def={unref(getShowBreadCrumbIcon)} disabled={!unref(getShowHeader)} /> <SwitchItem - title={t('layout.setting.tabs')} + title={t("layout.setting.tabs")} event={HandlerEnum.TABS_SHOW} def={unref(getShowMultipleTab)} /> <SwitchItem - title={t('layout.setting.tabsRedoBtn')} + title={t("layout.setting.tabsRedoBtn")} event={HandlerEnum.TABS_SHOW_REDO} def={unref(getShowRedo)} disabled={!unref(getShowMultipleTab)} /> <SwitchItem - title={t('layout.setting.tabsQuickBtn')} + title={t("layout.setting.tabsQuickBtn")} event={HandlerEnum.TABS_SHOW_QUICK} def={unref(getShowQuick)} disabled={!unref(getShowMultipleTab)} /> <SwitchItem - title={t('layout.setting.tabsFoldBtn')} + title={t("layout.setting.tabsFoldBtn")} event={HandlerEnum.TABS_SHOW_FOLD} def={unref(getShowFold)} disabled={!unref(getShowMultipleTab)} /> <SwitchItem - title={t('layout.setting.sidebar')} + title={t("layout.setting.sidebar")} event={HandlerEnum.MENU_SHOW_SIDEBAR} def={unref(getShowMenu)} disabled={unref(getIsHorizontal)} /> <SwitchItem - title={t('layout.setting.header')} + title={t("layout.setting.header")} event={HandlerEnum.HEADER_SHOW} def={unref(getShowHeader)} /> @@ -340,24 +340,24 @@ export default defineComponent({ disabled={unref(getIsMixSidebar)} /> <SwitchItem - title={t('layout.setting.footer')} + title={t("layout.setting.footer")} event={HandlerEnum.SHOW_FOOTER} def={unref(getShowFooter)} /> <SwitchItem - title={t('layout.setting.fullContent')} + title={t("layout.setting.fullContent")} event={HandlerEnum.FULL_CONTENT} def={unref(getFullContent)} /> <SwitchItem - title={t('layout.setting.grayMode')} + title={t("layout.setting.grayMode")} event={HandlerEnum.GRAY_MODE} def={unref(getGrayMode)} /> <SwitchItem - title={t('layout.setting.colorWeak')} + title={t("layout.setting.colorWeak")} event={HandlerEnum.COLOR_WEAK} def={unref(getColorWeak)} /> @@ -369,24 +369,24 @@ export default defineComponent({ return ( <> <SwitchItem - title={t('layout.setting.progress')} + title={t("layout.setting.progress")} event={HandlerEnum.OPEN_PROGRESS} def={unref(getOpenNProgress)} /> <SwitchItem - title={t('layout.setting.switchLoading')} + title={t("layout.setting.switchLoading")} event={HandlerEnum.OPEN_PAGE_LOADING} def={unref(getOpenPageLoading)} /> <SwitchItem - title={t('layout.setting.switchAnimation')} + title={t("layout.setting.switchAnimation")} event={HandlerEnum.OPEN_ROUTE_TRANSITION} def={unref(getEnableTransition)} /> <SelectItem - title={t('layout.setting.animationType')} + title={t("layout.setting.animationType")} event={HandlerEnum.ROUTER_TRANSITION} def={unref(getBasicTransition)} options={routerTransitionOptions} @@ -399,25 +399,25 @@ export default defineComponent({ return () => ( <BasicDrawer {...attrs} - title={t('layout.setting.drawerTitle')} + title={t("layout.setting.drawerTitle")} width={330} wrapClassName="setting-drawer" > - {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>} + {unref(getShowDarkModeToggle) && <Divider>{() => t("layout.setting.darkMode")}</Divider>} {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />} - <Divider>{() => t('layout.setting.navMode')}</Divider> + <Divider>{() => t("layout.setting.navMode")}</Divider> {renderSidebar()} - <Divider>{() => t('layout.setting.sysTheme')}</Divider> + <Divider>{() => t("layout.setting.sysTheme")}</Divider> {renderMainTheme()} - <Divider>{() => t('layout.setting.headerTheme')}</Divider> + <Divider>{() => t("layout.setting.headerTheme")}</Divider> {renderHeaderTheme()} - <Divider>{() => t('layout.setting.sidebarTheme')}</Divider> + <Divider>{() => t("layout.setting.sidebarTheme")}</Divider> {renderSiderTheme()} - <Divider>{() => t('layout.setting.interfaceFunction')}</Divider> + <Divider>{() => t("layout.setting.interfaceFunction")}</Divider> {renderFeatures()} - <Divider>{() => t('layout.setting.interfaceDisplay')}</Divider> + <Divider>{() => t("layout.setting.interfaceDisplay")}</Divider> {renderContent()} - <Divider>{() => t('layout.setting.animation')}</Divider> + <Divider>{() => t("layout.setting.animation")}</Divider> {renderTransition()} <Divider /> <SettingFooter /> diff --git a/src/layouts/default/setting/components/InputNumberItem.vue b/src/layouts/default/setting/components/InputNumberItem.vue index a2f5bc5..96c4efd 100644 --- a/src/layouts/default/setting/components/InputNumberItem.vue +++ b/src/layouts/default/setting/components/InputNumberItem.vue @@ -10,15 +10,15 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType } from 'vue'; + import { defineComponent, PropType } from "vue"; - import { InputNumber } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { baseHandler } from '../handler'; - import { HandlerEnum } from '../enum'; + import { InputNumber } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { baseHandler } from "../handler"; + import { HandlerEnum } from "../enum"; export default defineComponent({ - name: 'InputNumberItem', + name: "InputNumberItem", components: { InputNumber }, props: { event: { @@ -29,7 +29,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('setting-input-number-item'); + const { prefixCls } = useDesign("setting-input-number-item"); function handleChange(e) { props.event && baseHandler(props.event, e); @@ -42,7 +42,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-setting-input-number-item'; + @prefix-cls: ~"@{namespace}-setting-input-number-item"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/setting/components/SelectItem.vue b/src/layouts/default/setting/components/SelectItem.vue index 676ca91..56060ab 100644 --- a/src/layouts/default/setting/components/SelectItem.vue +++ b/src/layouts/default/setting/components/SelectItem.vue @@ -12,15 +12,15 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType, computed } from 'vue'; + import { defineComponent, PropType, computed } from "vue"; - import { Select } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { baseHandler } from '../handler'; - import { HandlerEnum } from '../enum'; + import { Select } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { baseHandler } from "../handler"; + import { HandlerEnum } from "../enum"; export default defineComponent({ - name: 'SelectItem', + name: "SelectItem", components: { Select }, props: { event: { @@ -44,7 +44,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('setting-select-item'); + const { prefixCls } = useDesign("setting-select-item"); const getBindValue = computed(() => { return props.def ? { value: props.def, defaultValue: props.initValue || props.def } : {}; }); @@ -61,7 +61,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-setting-select-item'; + @prefix-cls: ~"@{namespace}-setting-select-item"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/setting/components/SettingFooter.vue b/src/layouts/default/setting/components/SettingFooter.vue index 2375664..47c3f7b 100644 --- a/src/layouts/default/setting/components/SettingFooter.vue +++ b/src/layouts/default/setting/components/SettingFooter.vue @@ -2,45 +2,45 @@ <div :class="prefixCls"> <a-button type="primary" block @click="handleCopy"> <CopyOutlined class="mr-2" /> - {{ t('layout.setting.copyBtn') }} + {{ t("layout.setting.copyBtn") }} </a-button> <a-button color="warning" block @click="handleResetSetting" class="my-3"> <RedoOutlined class="mr-2" /> - {{ t('common.resetText') }} + {{ t("common.resetText") }} </a-button> <a-button color="error" block @click="handleClearAndRedo"> <RedoOutlined class="mr-2" /> - {{ t('layout.setting.clearBtn') }} + {{ t("layout.setting.clearBtn") }} </a-button> </div> </template> <script lang="ts"> - import { defineComponent, unref } from 'vue'; + import { defineComponent, unref } from "vue"; - import { CopyOutlined, RedoOutlined } from '@ant-design/icons-vue'; + import { CopyOutlined, RedoOutlined } from "@ant-design/icons-vue"; - import { useAppStore } from '/@/store/modules/app'; - import { usePermissionStore } from '/@/store/modules/permission'; - import { useMultipleTabStore } from '/@/store/modules/multipleTab'; - import { useUserStore } from '/@/store/modules/user'; + import { useAppStore } from "/@/store/modules/app"; + import { usePermissionStore } from "/@/store/modules/permission"; + import { useMultipleTabStore } from "/@/store/modules/multipleTab"; + import { useUserStore } from "/@/store/modules/user"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useMessage } from '/@/hooks/web/useMessage'; - import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useMessage } from "/@/hooks/web/useMessage"; + import { useCopyToClipboard } from "/@/hooks/web/useCopyToClipboard"; - import { updateColorWeak } from '/@/logics/theme/updateColorWeak'; - import { updateGrayMode } from '/@/logics/theme/updateGrayMode'; - import defaultSetting from '/@/settings/projectSetting'; + import { updateColorWeak } from "/@/logics/theme/updateColorWeak"; + import { updateGrayMode } from "/@/logics/theme/updateGrayMode"; + import defaultSetting from "/@/settings/projectSetting"; export default defineComponent({ - name: 'SettingFooter', + name: "SettingFooter", components: { CopyOutlined, RedoOutlined }, setup() { const permissionStore = usePermissionStore(); - const { prefixCls } = useDesign('setting-footer'); + const { prefixCls } = useDesign("setting-footer"); const { t } = useI18n(); const { createSuccessModal, createMessage } = useMessage(); const tabStore = useMultipleTabStore(); @@ -53,8 +53,8 @@ ); unref(isSuccessRef) && createSuccessModal({ - title: t('layout.setting.operatingTitle'), - content: t('layout.setting.operatingContent'), + title: t("layout.setting.operatingTitle"), + content: t("layout.setting.operatingContent"), }); } function handleResetSetting() { @@ -64,7 +64,7 @@ // updateTheme(themeColor); updateColorWeak(colorWeak); updateGrayMode(grayMode); - createMessage.success(t('layout.setting.resetSuccess')); + createMessage.success(t("layout.setting.resetSuccess")); } catch (error: any) { createMessage.error(error); } @@ -89,7 +89,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-setting-footer'; + @prefix-cls: ~"@{namespace}-setting-footer"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/setting/components/SwitchItem.vue b/src/layouts/default/setting/components/SwitchItem.vue index ff27477..eda91c1 100644 --- a/src/layouts/default/setting/components/SwitchItem.vue +++ b/src/layouts/default/setting/components/SwitchItem.vue @@ -11,16 +11,16 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType, computed } from 'vue'; + import { defineComponent, PropType, computed } from "vue"; - import { Switch } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { baseHandler } from '../handler'; - import { HandlerEnum } from '../enum'; + import { Switch } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { baseHandler } from "../handler"; + import { HandlerEnum } from "../enum"; export default defineComponent({ - name: 'SwitchItem', + name: "SwitchItem", components: { Switch }, props: { event: { @@ -37,7 +37,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('setting-switch-item'); + const { prefixCls } = useDesign("setting-switch-item"); const { t } = useI18n(); const getBindValue = computed(() => { @@ -56,7 +56,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-setting-switch-item'; + @prefix-cls: ~"@{namespace}-setting-switch-item"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/setting/components/ThemeColorPicker.vue b/src/layouts/default/setting/components/ThemeColorPicker.vue index d0f28ba..db6bd6f 100644 --- a/src/layouts/default/setting/components/ThemeColorPicker.vue +++ b/src/layouts/default/setting/components/ThemeColorPicker.vue @@ -17,16 +17,16 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType } from 'vue'; - import { CheckOutlined } from '@ant-design/icons-vue'; + import { defineComponent, PropType } from "vue"; + import { CheckOutlined } from "@ant-design/icons-vue"; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useDesign } from "/@/hooks/web/useDesign"; - import { baseHandler } from '../handler'; - import { HandlerEnum } from '../enum'; + import { baseHandler } from "../handler"; + import { HandlerEnum } from "../enum"; export default defineComponent({ - name: 'ThemeColorPicker', + name: "ThemeColorPicker", components: { CheckOutlined }, props: { colorList: { @@ -41,7 +41,7 @@ }, }, setup(props) { - const { prefixCls } = useDesign('setting-theme-picker'); + const { prefixCls } = useDesign("setting-theme-picker"); function handleClick(color: string) { props.event && baseHandler(props.event, color); @@ -54,7 +54,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-setting-theme-picker'; + @prefix-cls: ~"@{namespace}-setting-theme-picker"; .@{prefix-cls} { display: flex; diff --git a/src/layouts/default/setting/components/TypePicker.vue b/src/layouts/default/setting/components/TypePicker.vue index ce8610a..ef1536b 100644 --- a/src/layouts/default/setting/components/TypePicker.vue +++ b/src/layouts/default/setting/components/TypePicker.vue @@ -19,14 +19,14 @@ </div> </template> <script lang="ts"> - import { defineComponent, PropType } from 'vue'; + import { defineComponent, PropType } from "vue"; - import { Tooltip } from 'ant-design-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { Tooltip } from "ant-design-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; - import { menuTypeList } from '../enum'; + import { menuTypeList } from "../enum"; export default defineComponent({ - name: 'MenuTypePicker', + name: "MenuTypePicker", components: { Tooltip }, props: { menuTypeList: { @@ -39,11 +39,11 @@ }, def: { type: String, - default: '', + default: "", }, }, setup() { - const { prefixCls } = useDesign('setting-menu-type-picker'); + const { prefixCls } = useDesign("setting-menu-type-picker"); return { prefixCls, @@ -52,7 +52,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-setting-menu-type-picker'; + @prefix-cls: ~"@{namespace}-setting-menu-type-picker"; .@{prefix-cls} { display: flex; @@ -71,7 +71,7 @@ &::before, &::after { position: absolute; - content: ''; + content: ""; } &--sidebar, diff --git a/src/layouts/default/setting/components/index.ts b/src/layouts/default/setting/components/index.ts index bd24888..d753dd8 100644 --- a/src/layouts/default/setting/components/index.ts +++ b/src/layouts/default/setting/components/index.ts @@ -1,8 +1,8 @@ -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; +import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; -export const TypePicker = createAsyncComponent(() => import('./TypePicker.vue')); -export const ThemeColorPicker = createAsyncComponent(() => import('./ThemeColorPicker.vue')); -export const SettingFooter = createAsyncComponent(() => import('./SettingFooter.vue')); -export const SwitchItem = createAsyncComponent(() => import('./SwitchItem.vue')); -export const SelectItem = createAsyncComponent(() => import('./SelectItem.vue')); -export const InputNumberItem = createAsyncComponent(() => import('./InputNumberItem.vue')); +export const TypePicker = createAsyncComponent(() => import("./TypePicker.vue")); +export const ThemeColorPicker = createAsyncComponent(() => import("./ThemeColorPicker.vue")); +export const SettingFooter = createAsyncComponent(() => import("./SettingFooter.vue")); +export const SwitchItem = createAsyncComponent(() => import("./SwitchItem.vue")); +export const SelectItem = createAsyncComponent(() => import("./SelectItem.vue")); +export const InputNumberItem = createAsyncComponent(() => import("./InputNumberItem.vue")); diff --git a/src/layouts/default/setting/enum.ts b/src/layouts/default/setting/enum.ts index 1e9633a..772f657 100644 --- a/src/layouts/default/setting/enum.ts +++ b/src/layouts/default/setting/enum.ts @@ -1,13 +1,13 @@ -import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum'; +import { ContentEnum, RouterTransitionEnum } from "/@/enums/appEnum"; import { MenuModeEnum, MenuTypeEnum, TopMenuAlignEnum, TriggerEnum, MixSidebarTriggerEnum, -} from '/@/enums/menuEnum'; +} from "/@/enums/menuEnum"; -import { useI18n } from '/@/hooks/web/useI18n'; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); @@ -62,26 +62,26 @@ export enum HandlerEnum { export const contentModeOptions = [ { value: ContentEnum.FULL, - label: t('layout.setting.contentModeFull'), + label: t("layout.setting.contentModeFull"), }, { value: ContentEnum.FIXED, - label: t('layout.setting.contentModeFixed'), + label: t("layout.setting.contentModeFixed"), }, ]; export const topMenuAlignOptions = [ { value: TopMenuAlignEnum.CENTER, - label: t('layout.setting.topMenuAlignRight'), + label: t("layout.setting.topMenuAlignRight"), }, { value: TopMenuAlignEnum.START, - label: t('layout.setting.topMenuAlignLeft'), + label: t("layout.setting.topMenuAlignLeft"), }, { value: TopMenuAlignEnum.END, - label: t('layout.setting.topMenuAlignCenter'), + label: t("layout.setting.topMenuAlignCenter"), }, ]; @@ -89,18 +89,18 @@ export const getMenuTriggerOptions = (hideTop: boolean) => { return [ { value: TriggerEnum.NONE, - label: t('layout.setting.menuTriggerNone'), + label: t("layout.setting.menuTriggerNone"), }, { value: TriggerEnum.FOOTER, - label: t('layout.setting.menuTriggerBottom'), + label: t("layout.setting.menuTriggerBottom"), }, ...(hideTop ? [] : [ { value: TriggerEnum.HEADER, - label: t('layout.setting.menuTriggerTop'), + label: t("layout.setting.menuTriggerTop"), }, ]), ]; @@ -122,23 +122,23 @@ export const routerTransitionOptions = [ export const menuTypeList = [ { - title: t('layout.setting.menuTypeSidebar'), + title: t("layout.setting.menuTypeSidebar"), mode: MenuModeEnum.INLINE, type: MenuTypeEnum.SIDEBAR, }, { - title: t('layout.setting.menuTypeMix'), + title: t("layout.setting.menuTypeMix"), mode: MenuModeEnum.INLINE, type: MenuTypeEnum.MIX, }, { - title: t('layout.setting.menuTypeTopMenu'), + title: t("layout.setting.menuTypeTopMenu"), mode: MenuModeEnum.HORIZONTAL, type: MenuTypeEnum.TOP_MENU, }, { - title: t('layout.setting.menuTypeMixSidebar'), + title: t("layout.setting.menuTypeMixSidebar"), mode: MenuModeEnum.INLINE, type: MenuTypeEnum.MIX_SIDEBAR, }, @@ -147,10 +147,10 @@ export const menuTypeList = [ export const mixSidebarTriggerOptions = [ { value: MixSidebarTriggerEnum.HOVER, - label: t('layout.setting.triggerHover'), + label: t("layout.setting.triggerHover"), }, { value: MixSidebarTriggerEnum.CLICK, - label: t('layout.setting.triggerClick'), + label: t("layout.setting.triggerClick"), }, ]; diff --git a/src/layouts/default/setting/handler.ts b/src/layouts/default/setting/handler.ts index 0909008..0586109 100644 --- a/src/layouts/default/setting/handler.ts +++ b/src/layouts/default/setting/handler.ts @@ -1,13 +1,13 @@ -import { HandlerEnum } from './enum'; -import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground'; -import { updateColorWeak } from '/@/logics/theme/updateColorWeak'; -import { updateGrayMode } from '/@/logics/theme/updateGrayMode'; - -import { useAppStore } from '/@/store/modules/app'; -import { ProjectConfig } from '/#/config'; -import { changeTheme } from '/@/logics/theme'; -import { updateDarkTheme } from '/@/logics/theme/dark'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; +import { HandlerEnum } from "./enum"; +import { updateHeaderBgColor, updateSidebarBgColor } from "/@/logics/theme/updateBackground"; +import { updateColorWeak } from "/@/logics/theme/updateColorWeak"; +import { updateGrayMode } from "/@/logics/theme/updateGrayMode"; + +import { useAppStore } from "/@/store/modules/app"; +import { ProjectConfig } from "/#/config"; +import { changeTheme } from "/@/logics/theme"; +import { updateDarkTheme } from "/@/logics/theme/dark"; +import { useRootSetting } from "/@/hooks/setting/useRootSetting"; export function baseHandler(event: HandlerEnum, value: any) { const appStore = useAppStore(); diff --git a/src/layouts/default/setting/index.vue b/src/layouts/default/setting/index.vue index 9c5bb87..74affd5 100644 --- a/src/layouts/default/setting/index.vue +++ b/src/layouts/default/setting/index.vue @@ -5,14 +5,14 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import SettingDrawer from './SettingDrawer'; - import Icon from '/@/components/Icon'; + import { defineComponent } from "vue"; + import SettingDrawer from "./SettingDrawer"; + import Icon from "/@/components/Icon"; - import { useDrawer } from '/@/components/Drawer'; + import { useDrawer } from "/@/components/Drawer"; export default defineComponent({ - name: 'SettingButton', + name: "SettingButton", components: { SettingDrawer, Icon }, setup() { const [register, { openDrawer }] = useDrawer(); diff --git a/src/layouts/default/sider/DragBar.vue b/src/layouts/default/sider/DragBar.vue index 9bae60c..0db074d 100644 --- a/src/layouts/default/sider/DragBar.vue +++ b/src/layouts/default/sider/DragBar.vue @@ -2,20 +2,20 @@ <div :class="getClass" :style="getDragBarStyle"></div> </template> <script lang="ts"> - import { defineComponent, computed, unref } from 'vue'; + import { defineComponent, computed, unref } from "vue"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; export default defineComponent({ - name: 'DargBar', + name: "DargBar", props: { mobile: Boolean, }, setup(props) { const { getMiniWidthNumber, getCollapsed, getCanDrag } = useMenuSetting(); - const { prefixCls } = useDesign('darg-bar'); + const { prefixCls } = useDesign("darg-bar"); const getDragBarStyle = computed(() => { if (unref(getCollapsed)) { return { left: `${unref(getMiniWidthNumber)}px` }; @@ -41,7 +41,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-darg-bar'; + @prefix-cls: ~"@{namespace}-darg-bar"; .@{prefix-cls} { position: absolute; diff --git a/src/layouts/default/sider/LayoutSider.vue b/src/layouts/default/sider/LayoutSider.vue index 2144505..e43c5f8 100644 --- a/src/layouts/default/sider/LayoutSider.vue +++ b/src/layouts/default/sider/LayoutSider.vue @@ -26,22 +26,22 @@ </Sider> </template> <script lang="ts"> - import { computed, defineComponent, ref, unref, CSSProperties, h } from 'vue'; + import { computed, defineComponent, ref, unref, CSSProperties, h } from "vue"; - import { Layout } from 'ant-design-vue'; - import LayoutMenu from '../menu/index.vue'; - import LayoutTrigger from '/@/layouts/default/trigger/index.vue'; + import { Layout } from "ant-design-vue"; + import LayoutMenu from "../menu/index.vue"; + import LayoutTrigger from "/@/layouts/default/trigger/index.vue"; - import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; + import { MenuModeEnum, MenuSplitTyeEnum } from "/@/enums/menuEnum"; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useTrigger, useDragLine, useSiderEvent } from './useLayoutSider'; - import { useAppInject } from '/@/hooks/web/useAppInject'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useTrigger, useDragLine, useSiderEvent } from "./useLayoutSider"; + import { useAppInject } from "/@/hooks/web/useAppInject"; + import { useDesign } from "/@/hooks/web/useDesign"; - import DragBar from './DragBar.vue'; + import DragBar from "./DragBar.vue"; export default defineComponent({ - name: 'LayoutSideBar', + name: "LayoutSideBar", components: { Sider: Layout.Sider, LayoutMenu, DragBar, LayoutTrigger }, setup() { const dragBarRef = ref<ElRef>(null); @@ -59,7 +59,7 @@ toggleCollapsed, } = useMenuSetting(); - const { prefixCls } = useDesign('layout-sideBar'); + const { prefixCls } = useDesign("layout-sideBar"); const { getIsMobile } = useAppInject(); @@ -95,11 +95,11 @@ const width = `${unref(getRealWidth)}px`; return { width: width, - overflow: 'hidden', + overflow: "hidden", flex: `0 0 ${width}`, maxWidth: width, minWidth: width, - transition: 'all 0.2s', + transition: "all 0.2s", }; }); @@ -132,7 +132,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-sideBar'; + @prefix-cls: ~"@{namespace}-layout-sideBar"; .@{prefix-cls} { z-index: @layout-sider-fixed-z-index; diff --git a/src/layouts/default/sider/MixSider.vue b/src/layouts/default/sider/MixSider.vue index d212afe..e0d2c7f 100644 --- a/src/layouts/default/sider/MixSider.vue +++ b/src/layouts/default/sider/MixSider.vue @@ -78,29 +78,29 @@ </div> </template> <script lang="ts"> - import type { Menu } from '/@/router/types'; - import type { CSSProperties } from 'vue'; - import { computed, defineComponent, onMounted, ref, unref, watch } from 'vue'; - import type { RouteLocationNormalized } from 'vue-router'; - import { ScrollContainer } from '/@/components/Container'; - import { SimpleMenu, SimpleMenuTag } from '/@/components/SimpleMenu'; - import { Icon } from '/@/components/Icon'; - import { AppLogo } from '/@/components/Application'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { usePermissionStore } from '/@/store/modules/permission'; - import { useDragLine } from './useLayoutSider'; - import { useGlobSetting } from '/@/hooks/setting'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useGo } from '/@/hooks/web/usePage'; - import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum'; - import clickOutside from '/@/directives/clickOutside'; - import { getChildrenMenus, getCurrentParentPath, getShallowMenus } from '/@/router/menus'; - import { listenerRouteChange } from '/@/logics/mitt/routeChange'; - import LayoutTrigger from '../trigger/index.vue'; + import type { Menu } from "/@/router/types"; + import type { CSSProperties } from "vue"; + import { computed, defineComponent, onMounted, ref, unref, watch } from "vue"; + import type { RouteLocationNormalized } from "vue-router"; + import { ScrollContainer } from "/@/components/Container"; + import { SimpleMenu, SimpleMenuTag } from "/@/components/SimpleMenu"; + import { Icon } from "/@/components/Icon"; + import { AppLogo } from "/@/components/Application"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { usePermissionStore } from "/@/store/modules/permission"; + import { useDragLine } from "./useLayoutSider"; + import { useGlobSetting } from "/@/hooks/setting"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useGo } from "/@/hooks/web/usePage"; + import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from "/@/enums/appEnum"; + import clickOutside from "/@/directives/clickOutside"; + import { getChildrenMenus, getCurrentParentPath, getShallowMenus } from "/@/router/menus"; + import { listenerRouteChange } from "/@/logics/mitt/routeChange"; + import LayoutTrigger from "../trigger/index.vue"; export default defineComponent({ - name: 'LayoutMixSider', + name: "LayoutMixSider", components: { ScrollContainer, AppLogo, @@ -114,14 +114,14 @@ }, setup() { let menuModules = ref<Menu[]>([]); - const activePath = ref(''); + const activePath = ref(""); const childrenMenus = ref<Menu[]>([]); const openMenu = ref(false); const dragBarRef = ref<ElRef>(null); const sideRef = ref<ElRef>(null); const currentRoute = ref<Nullable<RouteLocationNormalized>>(null); - const { prefixCls } = useDesign('layout-mix-sider'); + const { prefixCls } = useDesign("layout-mix-sider"); const go = useGo(); const { t } = useI18n(); const { @@ -288,7 +288,7 @@ } function getItemEvents(item: Menu) { - if (unref(getMixSideTrigger) === 'hover') { + if (unref(getMixSideTrigger) === "hover") { return { onMouseenter: () => handleModuleClick(item.path, true), onClick: async () => { @@ -343,7 +343,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-mix-sider'; + @prefix-cls: ~"@{namespace}-layout-mix-sider"; @width: 80px; .@{prefix-cls} { position: fixed; @@ -476,7 +476,7 @@ width: 3px; height: 100%; background-color: @primary-color; - content: ''; + content: ""; } } } diff --git a/src/layouts/default/sider/index.vue b/src/layouts/default/sider/index.vue index d5357f4..a281220 100644 --- a/src/layouts/default/sider/index.vue +++ b/src/layouts/default/sider/index.vue @@ -14,20 +14,20 @@ <Sider v-else /> </template> <script lang="ts"> - import { defineComponent } from 'vue'; + import { defineComponent } from "vue"; - import Sider from './LayoutSider.vue'; - import MixSider from './MixSider.vue'; - import { Drawer } from 'ant-design-vue'; + import Sider from "./LayoutSider.vue"; + import MixSider from "./MixSider.vue"; + import { Drawer } from "ant-design-vue"; - import { useAppInject } from '/@/hooks/web/useAppInject'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useAppInject } from "/@/hooks/web/useAppInject"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; export default defineComponent({ - name: 'SiderWrapper', + name: "SiderWrapper", components: { Sider, Drawer, MixSider }, setup() { - const { prefixCls } = useDesign('layout-sider-wrapper'); + const { prefixCls } = useDesign("layout-sider-wrapper"); const { getIsMobile } = useAppInject(); const { setMenuSetting, getCollapsed, getMenuWidth, getIsMixSidebar } = useMenuSetting(); @@ -42,7 +42,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-layout-sider-wrapper'; + @prefix-cls: ~"@{namespace}-layout-sider-wrapper"; .@{prefix-cls} { .ant-drawer-body { diff --git a/src/layouts/default/sider/useLayoutSider.ts b/src/layouts/default/sider/useLayoutSider.ts index 292c146..aeedef7 100644 --- a/src/layouts/default/sider/useLayoutSider.ts +++ b/src/layouts/default/sider/useLayoutSider.ts @@ -1,11 +1,11 @@ -import type { Ref } from 'vue'; +import type { Ref } from "vue"; -import { computed, unref, onMounted, nextTick, ref } from 'vue'; +import { computed, unref, onMounted, nextTick, ref } from "vue"; -import { TriggerEnum } from '/@/enums/menuEnum'; +import { TriggerEnum } from "/@/enums/menuEnum"; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useDebounceFn } from '@vueuse/core'; +import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; +import { useDebounceFn } from "@vueuse/core"; /** * Handle related operations of menu events @@ -72,7 +72,7 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = fals function getEl(elRef: Ref<ElRef | ComponentRef>): any { const el = unref(elRef); if (!el) return null; - if (Reflect.has(el, '$el')) { + if (Reflect.has(el, "$el")) { return (unref(elRef) as ComponentRef)?.$el; } return unref(elRef); @@ -87,7 +87,7 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = fals iT < 0 && (iT = 0); iT > maxT && (iT = maxT); iT < minT && (iT = minT); - ele.style.left = wrap.style.width = iT + 'px'; + ele.style.left = wrap.style.width = iT + "px"; return false; }; } @@ -98,7 +98,7 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = fals document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; - wrap.style.transition = 'width 0.2s'; + wrap.style.transition = "width 0.2s"; const width = parseInt(wrap.style.width); if (!mix) { @@ -125,7 +125,7 @@ export function useDragLine(siderRef: Ref<any>, dragBarRef: Ref<any>, mix = fals if (!wrap) return; ele.onmousedown = (e: any) => { - wrap.style.transition = 'unset'; + wrap.style.transition = "unset"; const clientX = e?.clientX; ele.left = ele.offsetLeft; handleMouseMove(ele, wrap, clientX); diff --git a/src/layouts/default/tabs/components/FoldButton.vue b/src/layouts/default/tabs/components/FoldButton.vue index c8ea290..2ffdb54 100644 --- a/src/layouts/default/tabs/components/FoldButton.vue +++ b/src/layouts/default/tabs/components/FoldButton.vue @@ -4,26 +4,26 @@ </span> </template> <script lang="ts"> - import { defineComponent, unref, computed } from 'vue'; - import { Icon } from '/@/components/Icon'; + import { defineComponent, unref, computed } from "vue"; + import { Icon } from "/@/components/Icon"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { triggerWindowResize } from '/@/utils/event'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useHeaderSetting } from "/@/hooks/setting/useHeaderSetting"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { triggerWindowResize } from "/@/utils/event"; export default defineComponent({ - name: 'FoldButton', + name: "FoldButton", components: { Icon }, setup() { - const { prefixCls } = useDesign('multiple-tabs-content'); + const { prefixCls } = useDesign("multiple-tabs-content"); const { getShowMenu, setMenuSetting } = useMenuSetting(); const { getShowHeader, setHeaderSetting } = useHeaderSetting(); const getIsUnFold = computed(() => !unref(getShowMenu) && !unref(getShowHeader)); const getIcon = computed(() => - unref(getIsUnFold) ? 'codicon:screen-normal' : 'codicon:screen-full', + unref(getIsUnFold) ? "codicon:screen-normal" : "codicon:screen-full", ); function handleFold() { diff --git a/src/layouts/default/tabs/components/TabContent.vue b/src/layouts/default/tabs/components/TabContent.vue index 1023a23..dad7438 100644 --- a/src/layouts/default/tabs/components/TabContent.vue +++ b/src/layouts/default/tabs/components/TabContent.vue @@ -9,21 +9,21 @@ </Dropdown> </template> <script lang="ts"> - import type { PropType } from 'vue'; - import type { RouteLocationNormalized } from 'vue-router'; + import type { PropType } from "vue"; + import type { RouteLocationNormalized } from "vue-router"; - import { defineComponent, computed, unref } from 'vue'; - import { Dropdown } from '/@/components/Dropdown/index'; - import { Icon } from '/@/components/Icon'; + import { defineComponent, computed, unref } from "vue"; + import { Dropdown } from "/@/components/Dropdown/index"; + import { Icon } from "/@/components/Icon"; - import { TabContentProps } from '../types'; + import { TabContentProps } from "../types"; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useTabDropdown } from '../useTabDropdown'; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useTabDropdown } from "../useTabDropdown"; export default defineComponent({ - name: 'TabContent', + name: "TabContent", components: { Dropdown, Icon }, props: { tabItem: { @@ -33,7 +33,7 @@ isExtra: Boolean, }, setup(props) { - const { prefixCls } = useDesign('multiple-tabs-content'); + const { prefixCls } = useDesign("multiple-tabs-content"); const { t } = useI18n(); const getTitle = computed(() => { @@ -43,8 +43,8 @@ const getIsTabs = computed(() => !props.isExtra); - const getTrigger = computed((): ('contextmenu' | 'click' | 'hover')[] => - unref(getIsTabs) ? ['contextmenu'] : ['click'], + const getTrigger = computed((): ("contextmenu" | "click" | "hover")[] => + unref(getIsTabs) ? ["contextmenu"] : ["click"], ); const { getDropMenuList, handleMenuEvent, handleContextMenu } = useTabDropdown( diff --git a/src/layouts/default/tabs/components/TabRedo.vue b/src/layouts/default/tabs/components/TabRedo.vue index a6fa657..cb60a80 100644 --- a/src/layouts/default/tabs/components/TabRedo.vue +++ b/src/layouts/default/tabs/components/TabRedo.vue @@ -4,19 +4,19 @@ </span> </template> <script lang="ts"> - import { defineComponent, ref } from 'vue'; - import { RedoOutlined } from '@ant-design/icons-vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useTabs } from '/@/hooks/web/useTabs'; + import { defineComponent, ref } from "vue"; + import { RedoOutlined } from "@ant-design/icons-vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useTabs } from "/@/hooks/web/useTabs"; export default defineComponent({ - name: 'TabRedo', + name: "TabRedo", components: { RedoOutlined }, setup() { const loading = ref(false); - const { prefixCls } = useDesign('multiple-tabs-content'); + const { prefixCls } = useDesign("multiple-tabs-content"); const { refreshPage } = useTabs(); async function handleRedo() { diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue index ac59c81..eba5f6c 100644 --- a/src/layouts/default/tabs/index.vue +++ b/src/layouts/default/tabs/index.vue @@ -27,31 +27,31 @@ </div> </template> <script lang="ts"> - import type { RouteLocationNormalized, RouteMeta } from 'vue-router'; + import type { RouteLocationNormalized, RouteMeta } from "vue-router"; - import { defineComponent, computed, unref, ref } from 'vue'; + import { defineComponent, computed, unref, ref } from "vue"; - import { Tabs } from 'ant-design-vue'; - import TabContent from './components/TabContent.vue'; - import FoldButton from './components/FoldButton.vue'; - import TabRedo from './components/TabRedo.vue'; + import { Tabs } from "ant-design-vue"; + import TabContent from "./components/TabContent.vue"; + import FoldButton from "./components/FoldButton.vue"; + import TabRedo from "./components/TabRedo.vue"; - import { useGo } from '/@/hooks/web/usePage'; + import { useGo } from "/@/hooks/web/usePage"; - import { useMultipleTabStore } from '/@/store/modules/multipleTab'; - import { useUserStore } from '/@/store/modules/user'; + import { useMultipleTabStore } from "/@/store/modules/multipleTab"; + import { useUserStore } from "/@/store/modules/user"; - import { initAffixTabs, useTabsDrag } from './useMultipleTabs'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; + import { initAffixTabs, useTabsDrag } from "./useMultipleTabs"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useMultipleTabSetting } from "/@/hooks/setting/useMultipleTabSetting"; - import { REDIRECT_NAME } from '/@/router/constant'; - import { listenerRouteChange } from '/@/logics/mitt/routeChange'; + import { REDIRECT_NAME } from "/@/router/constant"; + import { listenerRouteChange } from "/@/logics/mitt/routeChange"; - import { useRouter } from 'vue-router'; + import { useRouter } from "vue-router"; export default defineComponent({ - name: 'MultipleTabs', + name: "MultipleTabs", components: { TabRedo, FoldButton, @@ -61,14 +61,14 @@ }, setup() { const affixTextList = initAffixTabs(); - const activeKeyRef = ref(''); + const activeKeyRef = ref(""); useTabsDrag(affixTextList); const tabStore = useMultipleTabStore(); const userStore = useUserStore(); const router = useRouter(); - const { prefixCls } = useDesign('multiple-tabs'); + const { prefixCls } = useDesign("multiple-tabs"); const go = useGo(); const { getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting(); @@ -142,5 +142,5 @@ }); </script> <style lang="less"> - @import './index.less'; + @import "./index.less"; </style> diff --git a/src/layouts/default/tabs/types.ts b/src/layouts/default/tabs/types.ts index 3a8cfd9..d22c047 100644 --- a/src/layouts/default/tabs/types.ts +++ b/src/layouts/default/tabs/types.ts @@ -1,5 +1,5 @@ -import type { DropMenu } from '/@/components/Dropdown/index'; -import type { RouteLocationNormalized } from 'vue-router'; +import type { DropMenu } from "/@/components/Dropdown/index"; +import type { RouteLocationNormalized } from "vue-router"; export enum TabContentEnum { TAB_TYPE, @@ -11,7 +11,7 @@ export type { DropMenu }; export interface TabContentProps { tabItem: RouteLocationNormalized; type?: TabContentEnum; - trigger?: ('click' | 'hover' | 'contextmenu')[]; + trigger?: ("click" | "hover" | "contextmenu")[]; } export enum MenuEventEnum { diff --git a/src/layouts/default/tabs/useMultipleTabs.ts b/src/layouts/default/tabs/useMultipleTabs.ts index 35b553b..77478a9 100644 --- a/src/layouts/default/tabs/useMultipleTabs.ts +++ b/src/layouts/default/tabs/useMultipleTabs.ts @@ -1,11 +1,11 @@ -import { toRaw, ref, nextTick } from 'vue'; -import type { RouteLocationNormalized } from 'vue-router'; -import { useDesign } from '/@/hooks/web/useDesign'; -import { useSortable } from '/@/hooks/web/useSortable'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { isNullAndUnDef } from '/@/utils/is'; -import projectSetting from '/@/settings/projectSetting'; -import { useRouter } from 'vue-router'; +import { toRaw, ref, nextTick } from "vue"; +import type { RouteLocationNormalized } from "vue-router"; +import { useDesign } from "/@/hooks/web/useDesign"; +import { useSortable } from "/@/hooks/web/useSortable"; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; +import { isNullAndUnDef } from "/@/utils/is"; +import projectSetting from "/@/settings/projectSetting"; +import { useRouter } from "vue-router"; export function initAffixTabs(): string[] { const affixList = ref<RouteLocationNormalized[]>([]); @@ -53,7 +53,7 @@ export function initAffixTabs(): string[] { export function useTabsDrag(affixTextList: string[]) { const tabStore = useMultipleTabStore(); const { multiTabsSetting } = projectSetting; - const { prefixCls } = useDesign('multiple-tabs'); + const { prefixCls } = useDesign("multiple-tabs"); nextTick(() => { if (!multiTabsSetting.canDrag) return; const el = document.querySelectorAll(`.${prefixCls} .ant-tabs-nav > div`)?.[0] as HTMLElement; diff --git a/src/layouts/default/tabs/useTabDropdown.ts b/src/layouts/default/tabs/useTabDropdown.ts index 016ce8c..0cd5ee2 100644 --- a/src/layouts/default/tabs/useTabDropdown.ts +++ b/src/layouts/default/tabs/useTabDropdown.ts @@ -1,13 +1,13 @@ -import type { TabContentProps } from './types'; -import type { DropMenu } from '/@/components/Dropdown'; -import type { ComputedRef } from 'vue'; +import type { TabContentProps } from "./types"; +import type { DropMenu } from "/@/components/Dropdown"; +import type { ComputedRef } from "vue"; -import { computed, unref, reactive } from 'vue'; -import { MenuEventEnum } from './types'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { RouteLocationNormalized, useRouter } from 'vue-router'; -import { useTabs } from '/@/hooks/web/useTabs'; -import { useI18n } from '/@/hooks/web/useI18n'; +import { computed, unref, reactive } from "vue"; +import { MenuEventEnum } from "./types"; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; +import { RouteLocationNormalized, useRouter } from "vue-router"; +import { useTabs } from "/@/hooks/web/useTabs"; +import { useI18n } from "/@/hooks/web/useI18n"; export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: ComputedRef<boolean>) { const state = reactive({ @@ -51,42 +51,42 @@ export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: Comp !isCurItem || (index === tabStore.getTabList.length - 1 && tabStore.getLastDragEndIndex >= 0); const dropMenuList: DropMenu[] = [ { - icon: 'ion:reload-sharp', + icon: "ion:reload-sharp", event: MenuEventEnum.REFRESH_PAGE, - text: t('layout.multipleTab.reload'), + text: t("layout.multipleTab.reload"), disabled: refreshDisabled, }, { - icon: 'clarity:close-line', + icon: "clarity:close-line", event: MenuEventEnum.CLOSE_CURRENT, - text: t('layout.multipleTab.close'), + text: t("layout.multipleTab.close"), disabled: !!meta?.affix || disabled, divider: true, }, { - icon: 'line-md:arrow-close-left', + icon: "line-md:arrow-close-left", event: MenuEventEnum.CLOSE_LEFT, - text: t('layout.multipleTab.closeLeft'), + text: t("layout.multipleTab.closeLeft"), disabled: closeLeftDisabled, divider: false, }, { - icon: 'line-md:arrow-close-right', + icon: "line-md:arrow-close-right", event: MenuEventEnum.CLOSE_RIGHT, - text: t('layout.multipleTab.closeRight'), + text: t("layout.multipleTab.closeRight"), disabled: closeRightDisabled, divider: true, }, { - icon: 'dashicons:align-center', + icon: "dashicons:align-center", event: MenuEventEnum.CLOSE_OTHER, - text: t('layout.multipleTab.closeOther'), + text: t("layout.multipleTab.closeOther"), disabled: disabled || !isCurItem, }, { - icon: 'clarity:minus-line', + icon: "clarity:minus-line", event: MenuEventEnum.CLOSE_ALL, - text: t('layout.multipleTab.closeAll'), + text: t("layout.multipleTab.closeAll"), disabled: disabled, }, ]; diff --git a/src/layouts/default/trigger/HeaderTrigger.vue b/src/layouts/default/trigger/HeaderTrigger.vue index d7dbb23..66efa1a 100644 --- a/src/layouts/default/trigger/HeaderTrigger.vue +++ b/src/layouts/default/trigger/HeaderTrigger.vue @@ -4,21 +4,21 @@ </span> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { propTypes } from '/@/utils/propTypes'; + import { defineComponent } from "vue"; + import { MenuUnfoldOutlined, MenuFoldOutlined } from "@ant-design/icons-vue"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { propTypes } from "/@/utils/propTypes"; export default defineComponent({ - name: 'HeaderTrigger', + name: "HeaderTrigger", components: { MenuUnfoldOutlined, MenuFoldOutlined }, props: { - theme: propTypes.oneOf(['light', 'dark']), + theme: propTypes.oneOf(["light", "dark"]), }, setup() { const { getCollapsed, toggleCollapsed } = useMenuSetting(); - const { prefixCls } = useDesign('layout-header-trigger'); + const { prefixCls } = useDesign("layout-header-trigger"); return { getCollapsed, toggleCollapsed, prefixCls }; }, }); diff --git a/src/layouts/default/trigger/SiderTrigger.vue b/src/layouts/default/trigger/SiderTrigger.vue index 0eb38b5..ea7f785 100644 --- a/src/layouts/default/trigger/SiderTrigger.vue +++ b/src/layouts/default/trigger/SiderTrigger.vue @@ -5,12 +5,12 @@ </div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { DoubleRightOutlined, DoubleLeftOutlined } from '@ant-design/icons-vue'; - import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; + import { defineComponent } from "vue"; + import { DoubleRightOutlined, DoubleLeftOutlined } from "@ant-design/icons-vue"; + import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; export default defineComponent({ - name: 'SiderTrigger', + name: "SiderTrigger", components: { DoubleRightOutlined, DoubleLeftOutlined }, setup() { const { getCollapsed, toggleCollapsed } = useMenuSetting(); diff --git a/src/layouts/default/trigger/index.vue b/src/layouts/default/trigger/index.vue index 61f43b3..07893d7 100644 --- a/src/layouts/default/trigger/index.vue +++ b/src/layouts/default/trigger/index.vue @@ -3,20 +3,20 @@ <HeaderTrigger v-else :theme="theme" /> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; - import { propTypes } from '/@/utils/propTypes'; - import HeaderTrigger from './HeaderTrigger.vue'; + import { defineComponent } from "vue"; + import { createAsyncComponent } from "/@/utils/factory/createAsyncComponent"; + import { propTypes } from "/@/utils/propTypes"; + import HeaderTrigger from "./HeaderTrigger.vue"; export default defineComponent({ - name: 'LayoutTrigger', + name: "LayoutTrigger", components: { - SiderTrigger: createAsyncComponent(() => import('./SiderTrigger.vue')), + SiderTrigger: createAsyncComponent(() => import("./SiderTrigger.vue")), HeaderTrigger: HeaderTrigger, }, props: { sider: propTypes.bool.def(true), - theme: propTypes.oneOf(['light', 'dark']), + theme: propTypes.oneOf(["light", "dark"]), }, }); </script> diff --git a/src/layouts/iframe/index.vue b/src/layouts/iframe/index.vue index d9ee7e5..a28dd15 100644 --- a/src/layouts/iframe/index.vue +++ b/src/layouts/iframe/index.vue @@ -10,13 +10,13 @@ </div> </template> <script lang="ts"> - import { defineComponent, unref, computed } from 'vue'; - import FramePage from '/@/views/sys/iframe/index.vue'; + import { defineComponent, unref, computed } from "vue"; + import FramePage from "/@/views/sys/iframe/index.vue"; - import { useFrameKeepAlive } from './useFrameKeepAlive'; + import { useFrameKeepAlive } from "./useFrameKeepAlive"; export default defineComponent({ - name: 'FrameLayout', + name: "FrameLayout", components: { FramePage }, setup() { const { getFramePages, hasRenderFrame, showIframe } = useFrameKeepAlive(); diff --git a/src/layouts/iframe/useFrameKeepAlive.ts b/src/layouts/iframe/useFrameKeepAlive.ts index e84c49f..3ec12a2 100644 --- a/src/layouts/iframe/useFrameKeepAlive.ts +++ b/src/layouts/iframe/useFrameKeepAlive.ts @@ -1,14 +1,14 @@ -import type { AppRouteRecordRaw } from '/@/router/types'; +import type { AppRouteRecordRaw } from "/@/router/types"; -import { computed, toRaw, unref } from 'vue'; +import { computed, toRaw, unref } from "vue"; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; -import { uniqBy } from 'lodash-es'; +import { uniqBy } from "lodash-es"; -import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; +import { useMultipleTabSetting } from "/@/hooks/setting/useMultipleTabSetting"; -import { useRouter } from 'vue-router'; +import { useRouter } from "vue-router"; export function useFrameKeepAlive() { const router = useRouter(); @@ -22,7 +22,7 @@ export function useFrameKeepAlive() { const getOpenTabList = computed((): string[] => { return tabStore.getTabList.reduce((prev: string[], next) => { - if (next.meta && Reflect.has(next.meta, 'frameSrc')) { + if (next.meta && Reflect.has(next.meta, "frameSrc")) { prev.push(next.name as string); } return prev; @@ -40,7 +40,7 @@ export function useFrameKeepAlive() { res.push(...getAllFramePages(children)); } } - res = uniqBy(res, 'name'); + res = uniqBy(res, "name"); return res; } diff --git a/src/layouts/page/index.vue b/src/layouts/page/index.vue index 72fe90f..2d76697 100644 --- a/src/layouts/page/index.vue +++ b/src/layouts/page/index.vue @@ -25,20 +25,20 @@ </template> <script lang="ts"> - import { computed, defineComponent, unref } from 'vue'; + import { computed, defineComponent, unref } from "vue"; - import FrameLayout from '/@/layouts/iframe/index.vue'; + import FrameLayout from "/@/layouts/iframe/index.vue"; - import { useRootSetting } from '/@/hooks/setting/useRootSetting'; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; - import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; - import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; - import { getTransitionName } from './transition'; + import { useTransitionSetting } from "/@/hooks/setting/useTransitionSetting"; + import { useMultipleTabSetting } from "/@/hooks/setting/useMultipleTabSetting"; + import { getTransitionName } from "./transition"; - import { useMultipleTabStore } from '/@/store/modules/multipleTab'; + import { useMultipleTabStore } from "/@/store/modules/multipleTab"; export default defineComponent({ - name: 'PageLayout', + name: "PageLayout", components: { FrameLayout }, setup() { const { getShowMultipleTab } = useMultipleTabSetting(); diff --git a/src/layouts/page/transition.ts b/src/layouts/page/transition.ts index 9e93009..c584211 100644 --- a/src/layouts/page/transition.ts +++ b/src/layouts/page/transition.ts @@ -1,5 +1,5 @@ -import type { FunctionalComponent } from 'vue'; -import type { RouteLocation } from 'vue-router'; +import type { FunctionalComponent } from "vue"; +import type { RouteLocation } from "vue-router"; export interface DefaultContext { Component: FunctionalComponent & { type: Recordable }; @@ -12,7 +12,7 @@ export function getTransitionName({ cacheTabs, enableTransition, def, -}: Pick<DefaultContext, 'route'> & { +}: Pick<DefaultContext, "route"> & { enableTransition: boolean; openCache: boolean; def: string; @@ -23,7 +23,7 @@ export function getTransitionName({ } const isInCache = cacheTabs.includes(route.name as string); - const transitionName = 'fade-slide'; + const transitionName = "fade-slide"; let name: string | undefined = transitionName; if (openCache) { diff --git a/src/locales/helper.ts b/src/locales/helper.ts index 4f78439..88e5e4a 100644 --- a/src/locales/helper.ts +++ b/src/locales/helper.ts @@ -1,28 +1,28 @@ -import type { LocaleType } from '/#/config'; +import type { LocaleType } from "/#/config"; -import { set } from 'lodash-es'; +import { set } from "lodash-es"; export const loadLocalePool: LocaleType[] = []; export function setHtmlPageLang(locale: LocaleType) { - document.querySelector('html')?.setAttribute('lang', locale); + document.querySelector("html")?.setAttribute("lang", locale); } export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) { cb(loadLocalePool); } -export function genMessage(langs: Record<string, Record<string, any>>, prefix = 'lang') { +export function genMessage(langs: Record<string, Record<string, any>>, prefix = "lang") { const obj: Recordable = {}; Object.keys(langs).forEach((key) => { const langFileModule = langs[key].default; - let fileName = key.replace(`./${prefix}/`, '').replace(/^\.\//, ''); - const lastIndex = fileName.lastIndexOf('.'); + let fileName = key.replace(`./${prefix}/`, "").replace(/^\.\//, ""); + const lastIndex = fileName.lastIndexOf("."); fileName = fileName.substring(0, lastIndex); - const keyList = fileName.split('/'); + const keyList = fileName.split("/"); const moduleName = keyList.shift(); - const objKey = keyList.join('.'); + const objKey = keyList.join("."); if (moduleName) { if (objKey) { diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts index 1afa87d..ecfcf65 100644 --- a/src/locales/lang/en.ts +++ b/src/locales/lang/en.ts @@ -1,13 +1,13 @@ -import { genMessage } from '../helper'; -import antdLocale from 'ant-design-vue/es/locale/en_US'; +import { genMessage } from "../helper"; +import antdLocale from "ant-design-vue/es/locale/en_US"; // import momentLocale from 'moment/dist/locale/en-us'; -const modules = import.meta.globEager('./en/**/*.ts'); +const modules = import.meta.globEager("./en/**/*.ts"); export default { message: { - ...genMessage(modules, 'en'), + ...genMessage(modules, "en"), antdLocale, }, momentLocale: null, - momentLocaleName: 'en', + momentLocaleName: "en", }; diff --git a/src/locales/lang/en/common.ts b/src/locales/lang/en/common.ts index f7cdce0..deb7959 100644 --- a/src/locales/lang/en/common.ts +++ b/src/locales/lang/en/common.ts @@ -1,20 +1,20 @@ export default { - okText: 'OK', - closeText: 'Close', - cancelText: 'Cancel', - loadingText: 'Loading...', - saveText: 'Save', - delText: 'Delete', - resetText: 'Reset', - searchText: 'Search', - queryText: 'Search', + okText: "OK", + closeText: "Close", + cancelText: "Cancel", + loadingText: "Loading...", + saveText: "Save", + delText: "Delete", + resetText: "Reset", + searchText: "Search", + queryText: "Search", - inputText: 'Please enter', - chooseText: 'Please choose', + inputText: "Please enter", + chooseText: "Please choose", - redo: 'Refresh', - back: 'Back', + redo: "Refresh", + back: "Back", - light: 'Light', - dark: 'Dark', + light: "Light", + dark: "Dark", }; diff --git a/src/locales/lang/en/component.ts b/src/locales/lang/en/component.ts index b93dbd5..1d35b1c 100644 --- a/src/locales/lang/en/component.ts +++ b/src/locales/lang/en/component.ts @@ -1,129 +1,129 @@ export default { app: { - searchNotData: 'No search results yet', - toSearch: 'to search', - toNavigate: 'to navigate', + searchNotData: "No search results yet", + toSearch: "to search", + toNavigate: "to navigate", }, countdown: { - normalText: 'Get SMS code', - sendText: 'Reacquire in {0}s', + normalText: "Get SMS code", + sendText: "Reacquire in {0}s", }, cropper: { - selectImage: 'Select Image', - uploadSuccess: 'Uploaded success!', - modalTitle: 'Avatar upload', - okText: 'Confirm and upload', - btn_reset: 'Reset', - btn_rotate_left: 'Counterclockwise rotation', - btn_rotate_right: 'Clockwise rotation', - btn_scale_x: 'Flip horizontal', - btn_scale_y: 'Flip vertical', - btn_zoom_in: 'Zoom in', - btn_zoom_out: 'Zoom out', - preview: 'Preivew', + selectImage: "Select Image", + uploadSuccess: "Uploaded success!", + modalTitle: "Avatar upload", + okText: "Confirm and upload", + btn_reset: "Reset", + btn_rotate_left: "Counterclockwise rotation", + btn_rotate_right: "Clockwise rotation", + btn_scale_x: "Flip horizontal", + btn_scale_y: "Flip vertical", + btn_zoom_in: "Zoom in", + btn_zoom_out: "Zoom out", + preview: "Preivew", }, drawer: { - loadingText: 'Loading...', - cancelText: 'Close', - okText: 'Confirm', + loadingText: "Loading...", + cancelText: "Close", + okText: "Confirm", }, excel: { - exportModalTitle: 'Export data', - fileType: 'File type', - fileName: 'File name', + exportModalTitle: "Export data", + fileType: "File type", + fileName: "File name", }, form: { - putAway: 'Put away', - unfold: 'Unfold', - maxTip: 'The number of characters should be less than {0}', - apiSelectNotFound: 'Wait for data loading to complete...', + putAway: "Put away", + unfold: "Unfold", + maxTip: "The number of characters should be less than {0}", + apiSelectNotFound: "Wait for data loading to complete...", }, icon: { - placeholder: 'Click the select icon', - search: 'Search icon', - copy: 'Copy icon successfully!', + placeholder: "Click the select icon", + search: "Search icon", + copy: "Copy icon successfully!", }, menu: { - search: 'Menu search', + search: "Menu search", }, modal: { - cancelText: 'Close', - okText: 'Confirm', - close: 'Close', - maximize: 'Maximize', - restore: 'Restore', + cancelText: "Close", + okText: "Confirm", + close: "Close", + maximize: "Maximize", + restore: "Restore", }, table: { - settingDens: 'Density', - settingDensDefault: 'Default', - settingDensMiddle: 'Middle', - settingDensSmall: 'Compact', - settingColumn: 'Column settings', - settingColumnShow: 'Column display', - settingIndexColumnShow: 'Index Column', - settingSelectColumnShow: 'Selection Column', - settingFixedLeft: 'Fixed Left', - settingFixedRight: 'Fixed Right', - settingFullScreen: 'Full Screen', - index: 'Index', - total: 'total of {total}', + settingDens: "Density", + settingDensDefault: "Default", + settingDensMiddle: "Middle", + settingDensSmall: "Compact", + settingColumn: "Column settings", + settingColumnShow: "Column display", + settingIndexColumnShow: "Index Column", + settingSelectColumnShow: "Selection Column", + settingFixedLeft: "Fixed Left", + settingFixedRight: "Fixed Right", + settingFullScreen: "Full Screen", + index: "Index", + total: "total of {total}", }, time: { - before: ' ago', - after: ' after', - just: 'just now', - seconds: ' seconds', - minutes: ' minutes', - hours: ' hours', - days: ' days', + before: " ago", + after: " after", + just: "just now", + seconds: " seconds", + minutes: " minutes", + hours: " hours", + days: " days", }, tree: { - selectAll: 'Select All', - unSelectAll: 'Cancel Select', - expandAll: 'Expand All', - unExpandAll: 'Collapse all', + selectAll: "Select All", + unSelectAll: "Cancel Select", + expandAll: "Expand All", + unExpandAll: "Collapse all", - checkStrictly: 'Hierarchical association', - checkUnStrictly: 'Hierarchical independence', + checkStrictly: "Hierarchical association", + checkUnStrictly: "Hierarchical independence", }, upload: { - save: 'Save', - upload: 'Upload', - imgUpload: 'ImageUpload', - uploaded: 'Uploaded', + save: "Save", + upload: "Upload", + imgUpload: "ImageUpload", + uploaded: "Uploaded", - operating: 'Operating', - del: 'Delete', - download: 'download', - saveWarn: 'Please wait for the file to upload and save!', - saveError: 'There is no file successfully uploaded and cannot be saved!', + operating: "Operating", + del: "Delete", + download: "download", + saveWarn: "Please wait for the file to upload and save!", + saveError: "There is no file successfully uploaded and cannot be saved!", - preview: 'Preview', - choose: 'Select the file', + preview: "Preview", + choose: "Select the file", - accept: 'Support {0} format', - acceptUpload: 'Only upload files in {0} format', - maxSize: 'A single file does not exceed {0}MB ', - maxSizeMultiple: 'Only upload files up to {0}MB!', - maxNumber: 'Only upload up to {0} files', + accept: "Support {0} format", + acceptUpload: "Only upload files in {0} format", + maxSize: "A single file does not exceed {0}MB ", + maxSizeMultiple: "Only upload files up to {0}MB!", + maxNumber: "Only upload up to {0} files", - legend: 'Legend', - fileName: 'File name', - fileSize: 'File size', - fileStatue: 'File status', + legend: "Legend", + fileName: "File name", + fileSize: "File size", + fileStatue: "File status", - startUpload: 'Start upload', - uploadSuccess: 'Upload successfully', - uploadError: 'Upload failed', - uploading: 'Uploading', - uploadWait: 'Please wait for the file upload to finish', - reUploadFailed: 'Re-upload failed files', + startUpload: "Start upload", + uploadSuccess: "Upload successfully", + uploadError: "Upload failed", + uploading: "Uploading", + uploadWait: "Please wait for the file upload to finish", + reUploadFailed: "Re-upload failed files", }, verify: { - error: 'verification failed!', - time: 'The verification is successful and it takes {time} seconds!', - redoTip: 'Click the picture to refresh', - dragText: 'Hold down the slider and drag', - successText: 'Verified', + error: "verification failed!", + time: "The verification is successful and it takes {time} seconds!", + redoTip: "Click the picture to refresh", + dragText: "Hold down the slider and drag", + successText: "Verified", }, }; diff --git a/src/locales/lang/en/layout.ts b/src/locales/lang/en/layout.ts index 5a9408a..02c2b4f 100644 --- a/src/locales/lang/en/layout.ts +++ b/src/locales/lang/en/layout.ts @@ -1,115 +1,115 @@ export default { - footer: { onlinePreview: 'Preview', onlineDocument: 'Document' }, + footer: { onlinePreview: "Preview", onlineDocument: "Document" }, header: { // user dropdown - dropdownItemDoc: 'Document', - dropdownItemLoginOut: 'Login Out', + dropdownItemDoc: "Document", + dropdownItemLoginOut: "Login Out", - tooltipErrorLog: 'Error log', - tooltipLock: 'Lock screen', - tooltipNotify: 'Notification', + tooltipErrorLog: "Error log", + tooltipLock: "Lock screen", + tooltipNotify: "Notification", - tooltipEntryFull: 'Full Screen', - tooltipExitFull: 'Exit Full Screen', + tooltipEntryFull: "Full Screen", + tooltipExitFull: "Exit Full Screen", // lock - lockScreenPassword: 'Lock screen password', - lockScreen: 'Lock screen', - lockScreenBtn: 'Locking', + lockScreenPassword: "Lock screen password", + lockScreen: "Lock screen", + lockScreenBtn: "Locking", - home: 'Home', + home: "Home", }, multipleTab: { - reload: 'Refresh current', - close: 'Close current', - closeLeft: 'Close Left', - closeRight: 'Close Right', - closeOther: 'Close Other', - closeAll: 'Close All', + reload: "Refresh current", + close: "Close current", + closeLeft: "Close Left", + closeRight: "Close Right", + closeOther: "Close Other", + closeAll: "Close All", }, setting: { // content mode - contentModeFull: 'Full', - contentModeFixed: 'Fixed width', + contentModeFull: "Full", + contentModeFixed: "Fixed width", // topMenu align - topMenuAlignLeft: 'Left', - topMenuAlignRight: 'Center', - topMenuAlignCenter: 'Right', + topMenuAlignLeft: "Left", + topMenuAlignRight: "Center", + topMenuAlignCenter: "Right", // menu trigger - menuTriggerNone: 'Not Show', - menuTriggerBottom: 'Bottom', - menuTriggerTop: 'Top', + menuTriggerNone: "Not Show", + menuTriggerBottom: "Bottom", + menuTriggerTop: "Top", // menu type - menuTypeSidebar: 'Left menu mode', - menuTypeMixSidebar: 'Left menu mixed mode', - menuTypeMix: 'Top Menu Mix mode', - menuTypeTopMenu: 'Top menu mode', + menuTypeSidebar: "Left menu mode", + menuTypeMixSidebar: "Left menu mixed mode", + menuTypeMix: "Top Menu Mix mode", + menuTypeTopMenu: "Top menu mode", - on: 'On', - off: 'Off', - minute: 'Minute', + on: "On", + off: "Off", + minute: "Minute", - operatingTitle: 'Successful!', + operatingTitle: "Successful!", operatingContent: - 'The copy is successful, please go to src/settings/projectSetting.ts to modify the configuration!', - resetSuccess: 'Successfully reset!', - - copyBtn: 'Copy', - clearBtn: 'Clear cache and to the login page', - - drawerTitle: 'Configuration', - - darkMode: 'Dark mode', - navMode: 'Navigation mode', - interfaceFunction: 'Interface function', - interfaceDisplay: 'Interface display', - animation: 'Animation', - splitMenu: 'Split menu', - closeMixSidebarOnChange: 'Switch page to close menu', - - sysTheme: 'System theme', - headerTheme: 'Header theme', - sidebarTheme: 'Menu theme', - - menuDrag: 'Drag Sidebar', - menuSearch: 'Menu search', - menuAccordion: 'Sidebar accordion', - menuCollapse: 'Collapse menu', - collapseMenuDisplayName: 'Collapse menu display name', - topMenuLayout: 'Top menu layout', - menuCollapseButton: 'Menu collapse button', - contentMode: 'Content area width', - expandedMenuWidth: 'Expanded menu width', - - breadcrumb: 'Breadcrumbs', - breadcrumbIcon: 'Breadcrumbs Icon', - tabs: 'Tabs', - tabDetail: 'Tab Detail', - tabsQuickBtn: 'Tabs quick button', - tabsRedoBtn: 'Tabs redo button', - tabsFoldBtn: 'Tabs flod button', - sidebar: 'Sidebar', - header: 'Header', - footer: 'Footer', - fullContent: 'Full content', - grayMode: 'Gray mode', - colorWeak: 'Color Weak Mode', - - progress: 'Progress', - switchLoading: 'Switch Loading', - switchAnimation: 'Switch animation', - animationType: 'Animation type', - - autoScreenLock: 'Auto screen lock', - notAutoScreenLock: 'Not auto lock', - - fixedHeader: 'Fixed header', - fixedSideBar: 'Fixed Sidebar', - - mixSidebarTrigger: 'Mixed menu Trigger', - triggerHover: 'Hover', - triggerClick: 'Click', - - mixSidebarFixed: 'Fixed expanded menu', + "The copy is successful, please go to src/settings/projectSetting.ts to modify the configuration!", + resetSuccess: "Successfully reset!", + + copyBtn: "Copy", + clearBtn: "Clear cache and to the login page", + + drawerTitle: "Configuration", + + darkMode: "Dark mode", + navMode: "Navigation mode", + interfaceFunction: "Interface function", + interfaceDisplay: "Interface display", + animation: "Animation", + splitMenu: "Split menu", + closeMixSidebarOnChange: "Switch page to close menu", + + sysTheme: "System theme", + headerTheme: "Header theme", + sidebarTheme: "Menu theme", + + menuDrag: "Drag Sidebar", + menuSearch: "Menu search", + menuAccordion: "Sidebar accordion", + menuCollapse: "Collapse menu", + collapseMenuDisplayName: "Collapse menu display name", + topMenuLayout: "Top menu layout", + menuCollapseButton: "Menu collapse button", + contentMode: "Content area width", + expandedMenuWidth: "Expanded menu width", + + breadcrumb: "Breadcrumbs", + breadcrumbIcon: "Breadcrumbs Icon", + tabs: "Tabs", + tabDetail: "Tab Detail", + tabsQuickBtn: "Tabs quick button", + tabsRedoBtn: "Tabs redo button", + tabsFoldBtn: "Tabs flod button", + sidebar: "Sidebar", + header: "Header", + footer: "Footer", + fullContent: "Full content", + grayMode: "Gray mode", + colorWeak: "Color Weak Mode", + + progress: "Progress", + switchLoading: "Switch Loading", + switchAnimation: "Switch animation", + animationType: "Animation type", + + autoScreenLock: "Auto screen lock", + notAutoScreenLock: "Not auto lock", + + fixedHeader: "Fixed header", + fixedSideBar: "Fixed Sidebar", + + mixSidebarTrigger: "Mixed menu Trigger", + triggerHover: "Hover", + triggerClick: "Click", + + mixSidebarFixed: "Fixed expanded menu", }, }; diff --git a/src/locales/lang/en/routes/basic.ts b/src/locales/lang/en/routes/basic.ts index b6faa00..48b1bb5 100644 --- a/src/locales/lang/en/routes/basic.ts +++ b/src/locales/lang/en/routes/basic.ts @@ -1,4 +1,4 @@ export default { - login: 'Login', - errorLogList: 'Error Log', + login: "Login", + errorLogList: "Error Log", }; diff --git a/src/locales/lang/en/routes/dashboard.ts b/src/locales/lang/en/routes/dashboard.ts index 6d047b5..23bc9c7 100644 --- a/src/locales/lang/en/routes/dashboard.ts +++ b/src/locales/lang/en/routes/dashboard.ts @@ -1,6 +1,6 @@ export default { - dashboard: 'Dashboard', - about: 'About', - workbench: 'Workbench', - analysis: 'Analysis', + dashboard: "Dashboard", + about: "About", + workbench: "Workbench", + analysis: "Analysis", }; diff --git a/src/locales/lang/en/routes/demo.ts b/src/locales/lang/en/routes/demo.ts index b299192..b3977da 100644 --- a/src/locales/lang/en/routes/demo.ts +++ b/src/locales/lang/en/routes/demo.ts @@ -1,199 +1,199 @@ export default { charts: { - baiduMap: 'Baidu map', - aMap: 'A map', - googleMap: 'Google map', - charts: 'Chart', - map: 'Map', - line: 'Line', - pie: 'Pie', + baiduMap: "Baidu map", + aMap: "A map", + googleMap: "Google map", + charts: "Chart", + map: "Map", + line: "Line", + pie: "Pie", }, comp: { - comp: 'Component', - basic: 'Basic', - transition: 'Animation', - countTo: 'Count To', + comp: "Component", + basic: "Basic", + transition: "Animation", + countTo: "Count To", - scroll: 'Scroll', - scrollBasic: 'Basic', - scrollAction: 'Scroll Function', - virtualScroll: 'Virtual Scroll', + scroll: "Scroll", + scrollBasic: "Basic", + scrollAction: "Scroll Function", + virtualScroll: "Virtual Scroll", - tree: 'Tree', + tree: "Tree", - treeBasic: 'Basic', - editTree: 'Searchable/toolbar', - actionTree: 'Function operation', + treeBasic: "Basic", + editTree: "Searchable/toolbar", + actionTree: "Function operation", - modal: 'Modal', - drawer: 'Drawer', - desc: 'Desc', + modal: "Modal", + drawer: "Drawer", + desc: "Desc", - lazy: 'Lazy', - lazyBasic: 'Basic', - lazyTransition: 'Animation', + lazy: "Lazy", + lazyBasic: "Basic", + lazyTransition: "Animation", - verify: 'Verify', - verifyDrag: 'Drag ', - verifyRotate: 'Picture Restore', + verify: "Verify", + verifyDrag: "Drag ", + verifyRotate: "Picture Restore", - qrcode: 'QR code', - strength: 'Password strength', - upload: 'Upload', + qrcode: "QR code", + strength: "Password strength", + upload: "Upload", - loading: 'Loading', + loading: "Loading", - time: 'Relative Time', - cropperImage: 'Cropper Image', - cardList: 'Card List', + time: "Relative Time", + cropperImage: "Cropper Image", + cardList: "Card List", }, editor: { - editor: 'Editor', - jsonEditor: 'Json editor', - markdown: 'Markdown editor', + editor: "Editor", + jsonEditor: "Json editor", + markdown: "Markdown editor", - tinymce: 'Rich text', - tinymceBasic: 'Basic', - tinymceForm: 'embedded form', + tinymce: "Rich text", + tinymceBasic: "Basic", + tinymceForm: "embedded form", }, excel: { - excel: 'Excel', - customExport: 'Select export format', - jsonExport: 'JSON data export', - arrayExport: 'Array data export', - importExcel: 'Import', + excel: "Excel", + customExport: "Select export format", + jsonExport: "JSON data export", + arrayExport: "Array data export", + importExcel: "Import", }, feat: { - feat: 'Page Function', - icon: 'Icon', - tabs: 'Tabs', - tabDetail: 'Tab Detail', - sessionTimeout: 'Session Timeout', - print: 'Print', - contextMenu: 'Context Menu', - download: 'Download', - clickOutSide: 'ClickOutSide', - imgPreview: 'Picture Preview', - copy: 'Clipboard', - msg: 'Message prompt', - watermark: 'Watermark', - ripple: 'Ripple', - fullScreen: 'Full Screen', - errorLog: 'Error Log', - tab: 'Tab with parameters', - tab1: 'Tab with parameter 1', - tab2: 'Tab with parameter 2', - menu: 'Menu with parameters', - menu1: 'Menu with parameters 1', - menu2: 'Menu with parameters 2', - - ws: 'Websocket test', - - breadcrumb: 'Breadcrumbs', - breadcrumbFlat: 'Flat Mode', - breadcrumbFlatDetail: 'Flat mode details', - - breadcrumbChildren: 'Level mode', - breadcrumbChildrenDetail: 'Level mode detail', + feat: "Page Function", + icon: "Icon", + tabs: "Tabs", + tabDetail: "Tab Detail", + sessionTimeout: "Session Timeout", + print: "Print", + contextMenu: "Context Menu", + download: "Download", + clickOutSide: "ClickOutSide", + imgPreview: "Picture Preview", + copy: "Clipboard", + msg: "Message prompt", + watermark: "Watermark", + ripple: "Ripple", + fullScreen: "Full Screen", + errorLog: "Error Log", + tab: "Tab with parameters", + tab1: "Tab with parameter 1", + tab2: "Tab with parameter 2", + menu: "Menu with parameters", + menu1: "Menu with parameters 1", + menu2: "Menu with parameters 2", + + ws: "Websocket test", + + breadcrumb: "Breadcrumbs", + breadcrumbFlat: "Flat Mode", + breadcrumbFlatDetail: "Flat mode details", + + breadcrumbChildren: "Level mode", + breadcrumbChildrenDetail: "Level mode detail", }, flow: { - name: 'Graphics editor', - flowChart: 'FlowChart', + name: "Graphics editor", + flowChart: "FlowChart", }, form: { - form: 'Form', - basic: 'Basic', - useForm: 'useForm', - refForm: 'RefForm', - advancedForm: 'Shrinkable', - ruleForm: 'Form validation', - dynamicForm: 'Dynamic', - customerForm: 'Custom', - appendForm: 'Append', + form: "Form", + basic: "Basic", + useForm: "useForm", + refForm: "RefForm", + advancedForm: "Shrinkable", + ruleForm: "Form validation", + dynamicForm: "Dynamic", + customerForm: "Custom", + appendForm: "Append", }, iframe: { - frame: 'External', - antv: 'antVue doc (embedded)', - doc: 'Project doc (embedded)', - docExternal: 'Project doc (external)', + frame: "External", + antv: "antVue doc (embedded)", + doc: "Project doc (embedded)", + docExternal: "Project doc (external)", }, - level: { level: 'MultiMenu' }, + level: { level: "MultiMenu" }, page: { - page: 'Page', - - form: 'Form', - formBasic: 'Basic Form', - formStep: 'Step Form', - formHigh: 'Advanced Form', - - desc: 'Details', - descBasic: 'Basic Details', - descHigh: 'Advanced Details', - - result: 'Result', - resultSuccess: 'Success', - resultFail: 'Failed', - - account: 'Personal', - accountCenter: 'Personal Center', - accountSetting: 'Personal Settings', - - exception: 'Exception', - netWorkError: 'Network Error', - notData: 'No data', - - list: 'List page', - listCard: 'Card list', - basic: 'Basic list', - listBasic: 'Basic list', - listSearch: 'Search list', + page: "Page", + + form: "Form", + formBasic: "Basic Form", + formStep: "Step Form", + formHigh: "Advanced Form", + + desc: "Details", + descBasic: "Basic Details", + descHigh: "Advanced Details", + + result: "Result", + resultSuccess: "Success", + resultFail: "Failed", + + account: "Personal", + accountCenter: "Personal Center", + accountSetting: "Personal Settings", + + exception: "Exception", + netWorkError: "Network Error", + notData: "No data", + + list: "List page", + listCard: "Card list", + basic: "Basic list", + listBasic: "Basic list", + listSearch: "Search list", }, permission: { - permission: 'Permission', + permission: "Permission", - front: 'front-end', - frontPage: 'Page', - frontBtn: 'Button', - frontTestA: 'Test page A', - frontTestB: 'Test page B', + front: "front-end", + frontPage: "Page", + frontBtn: "Button", + frontTestA: "Test page A", + frontTestB: "Test page B", - back: 'background', - backPage: 'Page', - backBtn: 'Button', + back: "background", + backPage: "Page", + backBtn: "Button", }, setup: { - page: 'Intro page', + page: "Intro page", }, system: { - moduleName: 'System management', + moduleName: "System management", - account: 'Account management', - account_detail: 'Account detail', - password: 'Change password', + account: "Account management", + account_detail: "Account detail", + password: "Change password", - dept: 'Department management', + dept: "Department management", - menu: 'Menu management', - role: 'Role management', + menu: "Menu management", + role: "Role management", }, table: { - table: 'Table', - - basic: 'Basic', - treeTable: 'Tree', - fetchTable: 'Remote loading', - fixedColumn: 'Fixed column', - customerCell: 'Custom column', - formTable: 'Open search', - useTable: 'UseTable', - refTable: 'RefTable', - multipleHeader: 'MultiLevel header', - mergeHeader: 'Merge cells', - expandTable: 'Expandable table', - fixedHeight: 'Fixed height', - footerTable: 'Footer', - editCellTable: 'Editable cell', - editRowTable: 'Editable row', - authColumn: 'Auth column', + table: "Table", + + basic: "Basic", + treeTable: "Tree", + fetchTable: "Remote loading", + fixedColumn: "Fixed column", + customerCell: "Custom column", + formTable: "Open search", + useTable: "UseTable", + refTable: "RefTable", + multipleHeader: "MultiLevel header", + mergeHeader: "Merge cells", + expandTable: "Expandable table", + fixedHeight: "Fixed height", + footerTable: "Footer", + editCellTable: "Editable cell", + editRowTable: "Editable row", + authColumn: "Auth column", }, }; diff --git a/src/locales/lang/en/sys.ts b/src/locales/lang/en/sys.ts index 3b29600..45c7e90 100644 --- a/src/locales/lang/en/sys.ts +++ b/src/locales/lang/en/sys.ts @@ -1,104 +1,104 @@ export default { api: { - operationFailed: 'Operation failed', - errorTip: 'Error Tip', - errorMessage: 'The operation failed, the system is abnormal!', - timeoutMessage: 'Login timed out, please log in again!', - apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!', - apiRequestFailed: 'The interface request failed, please try again later!', - networkException: 'network anomaly', + operationFailed: "Operation failed", + errorTip: "Error Tip", + errorMessage: "The operation failed, the system is abnormal!", + timeoutMessage: "Login timed out, please log in again!", + apiTimeoutMessage: "The interface request timed out, please refresh the page and try again!", + apiRequestFailed: "The interface request failed, please try again later!", + networkException: "network anomaly", networkExceptionMsg: - 'Please check if your network connection is normal! The network is abnormal', + "Please check if your network connection is normal! The network is abnormal", - errMsg401: 'The user does not have permission (token, user name, password error)!', - errMsg403: 'The user is authorized, but access is forbidden!', - errMsg404: 'Network request error, the resource was not found!', - errMsg405: 'Network request error, request method not allowed!', - errMsg408: 'Network request timed out!', - errMsg500: 'Server error, please contact the administrator!', - errMsg501: 'The network is not implemented!', - errMsg502: 'Network Error!', - errMsg503: 'The service is unavailable, the server is temporarily overloaded or maintained!', - errMsg504: 'Network timeout!', - errMsg505: 'The http version does not support the request!', + errMsg401: "The user does not have permission (token, user name, password error)!", + errMsg403: "The user is authorized, but access is forbidden!", + errMsg404: "Network request error, the resource was not found!", + errMsg405: "Network request error, request method not allowed!", + errMsg408: "Network request timed out!", + errMsg500: "Server error, please contact the administrator!", + errMsg501: "The network is not implemented!", + errMsg502: "Network Error!", + errMsg503: "The service is unavailable, the server is temporarily overloaded or maintained!", + errMsg504: "Network timeout!", + errMsg505: "The http version does not support the request!", }, app: { - logoutTip: 'Reminder', - logoutMessage: 'Confirm to exit the system?', - menuLoading: 'Menu loading...', + logoutTip: "Reminder", + logoutMessage: "Confirm to exit the system?", + menuLoading: "Menu loading...", }, errorLog: { - tableTitle: 'Error log list', - tableColumnType: 'Type', - tableColumnDate: 'Time', - tableColumnFile: 'File', - tableColumnMsg: 'Error message', - tableColumnStackMsg: 'Stack info', + tableTitle: "Error log list", + tableColumnType: "Type", + tableColumnDate: "Time", + tableColumnFile: "File", + tableColumnMsg: "Error message", + tableColumnStackMsg: "Stack info", - tableActionDesc: 'Details', + tableActionDesc: "Details", - modalTitle: 'Error details', + modalTitle: "Error details", - fireVueError: 'Fire vue error', - fireResourceError: 'Fire resource error', - fireAjaxError: 'Fire ajax error', + fireVueError: "Fire vue error", + fireResourceError: "Fire resource error", + fireAjaxError: "Fire ajax error", - enableMessage: 'Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.', + enableMessage: "Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.", }, exception: { - backLogin: 'Back Login', - backHome: 'Back Home', + backLogin: "Back Login", + backHome: "Back Home", subTitle403: "Sorry, you don't have access to this page.", - subTitle404: 'Sorry, the page you visited does not exist.', - subTitle500: 'Sorry, the server is reporting an error.', - noDataTitle: 'No data on the current page.', - networkErrorTitle: 'Network Error', + subTitle404: "Sorry, the page you visited does not exist.", + subTitle500: "Sorry, the server is reporting an error.", + noDataTitle: "No data on the current page.", + networkErrorTitle: "Network Error", networkErrorSubTitle: - 'Sorry,Your network connection has been disconnected, please check your network!', + "Sorry,Your network connection has been disconnected, please check your network!", }, lock: { - unlock: 'Click to unlock', - alert: 'Lock screen password error', - backToLogin: 'Back to login', - entry: 'Enter the system', - placeholder: 'Please enter the lock screen password or user password', + unlock: "Click to unlock", + alert: "Lock screen password error", + backToLogin: "Back to login", + entry: "Enter the system", + placeholder: "Please enter the lock screen password or user password", }, login: { - backSignIn: 'Back sign in', - mobileSignInFormTitle: 'Mobile sign in', - qrSignInFormTitle: 'Qr code sign in', - signInFormTitle: 'Sign in', - signUpFormTitle: 'Sign up', - forgetFormTitle: 'Reset password', + backSignIn: "Back sign in", + mobileSignInFormTitle: "Mobile sign in", + qrSignInFormTitle: "Qr code sign in", + signInFormTitle: "Sign in", + signUpFormTitle: "Sign up", + forgetFormTitle: "Reset password", - signInTitle: 'Backstage management system', - signInDesc: 'Enter your personal details and get started!', - policy: 'I agree to the xxx Privacy Policy', + signInTitle: "Backstage management system", + signInDesc: "Enter your personal details and get started!", + policy: "I agree to the xxx Privacy Policy", scanSign: `scanning the code to complete the login`, - loginButton: 'Sign in', - registerButton: 'Sign up', - rememberMe: 'Remember me', - forgetPassword: 'Forget Password?', - otherSignIn: 'Sign in with', + loginButton: "Sign in", + registerButton: "Sign up", + rememberMe: "Remember me", + forgetPassword: "Forget Password?", + otherSignIn: "Sign in with", // notify - loginSuccessTitle: 'Login successful', - loginSuccessDesc: 'Welcome back', + loginSuccessTitle: "Login successful", + loginSuccessDesc: "Welcome back", // placeholder - accountPlaceholder: 'Please input username', - passwordPlaceholder: 'Please input password', - smsPlaceholder: 'Please input sms code', - mobilePlaceholder: 'Please input mobile', - policyPlaceholder: 'Register after checking', - diffPwd: 'The two passwords are inconsistent', + accountPlaceholder: "Please input username", + passwordPlaceholder: "Please input password", + smsPlaceholder: "Please input sms code", + mobilePlaceholder: "Please input mobile", + policyPlaceholder: "Register after checking", + diffPwd: "The two passwords are inconsistent", - userName: 'Username', - password: 'Password', - confirmPassword: 'Confirm Password', - email: 'Email', - smsCode: 'SMS code', - mobile: 'Mobile', + userName: "Username", + password: "Password", + confirmPassword: "Confirm Password", + email: "Email", + smsCode: "SMS code", + mobile: "Mobile", }, }; diff --git a/src/locales/lang/zh-CN/common.ts b/src/locales/lang/zh-CN/common.ts index 478c625..978b2b3 100644 --- a/src/locales/lang/zh-CN/common.ts +++ b/src/locales/lang/zh-CN/common.ts @@ -1,20 +1,20 @@ export default { - okText: '确认', - closeText: '关闭', - cancelText: '取消', - loadingText: '加载中...', - saveText: '保存', - delText: '删除', - resetText: '重置', - searchText: '搜索', - queryText: '查询', + okText: "确认", + closeText: "关闭", + cancelText: "取消", + loadingText: "加载中...", + saveText: "保存", + delText: "删除", + resetText: "重置", + searchText: "搜索", + queryText: "查询", - inputText: '请输入', - chooseText: '请选择', + inputText: "请输入", + chooseText: "请选择", - redo: '刷新', - back: '返回', + redo: "刷新", + back: "返回", - light: '亮色主题', - dark: '黑暗主题', + light: "亮色主题", + dark: "黑暗主题", }; diff --git a/src/locales/lang/zh-CN/component.ts b/src/locales/lang/zh-CN/component.ts index d9b54eb..b5b53ce 100644 --- a/src/locales/lang/zh-CN/component.ts +++ b/src/locales/lang/zh-CN/component.ts @@ -1,134 +1,134 @@ export default { app: { - searchNotData: '暂无搜索结果', - toSearch: '确认', - toNavigate: '切换', + searchNotData: "暂无搜索结果", + toSearch: "确认", + toNavigate: "切换", }, countdown: { - normalText: '获取验证码', - sendText: '{0}秒后重新获取', + normalText: "获取验证码", + sendText: "{0}秒后重新获取", }, cropper: { - selectImage: '选择图片', - uploadSuccess: '上传成功', - modalTitle: '头像上传', - okText: '确认并上传', - btn_reset: '重置', - btn_rotate_left: '逆时针旋转', - btn_rotate_right: '顺时针旋转', - btn_scale_x: '水平翻转', - btn_scale_y: '垂直翻转', - btn_zoom_in: '放大', - btn_zoom_out: '缩小', - preview: '预览', + selectImage: "选择图片", + uploadSuccess: "上传成功", + modalTitle: "头像上传", + okText: "确认并上传", + btn_reset: "重置", + btn_rotate_left: "逆时针旋转", + btn_rotate_right: "顺时针旋转", + btn_scale_x: "水平翻转", + btn_scale_y: "垂直翻转", + btn_zoom_in: "放大", + btn_zoom_out: "缩小", + preview: "预览", }, drawer: { - loadingText: '加载中...', - cancelText: '关闭', - okText: '确认', + loadingText: "加载中...", + cancelText: "关闭", + okText: "确认", }, excel: { - exportModalTitle: '导出数据', - fileType: '文件类型', - fileName: '文件名', + exportModalTitle: "导出数据", + fileType: "文件类型", + fileName: "文件名", }, form: { - putAway: '收起', - unfold: '展开', + putAway: "收起", + unfold: "展开", - maxTip: '字符数应小于{0}位', + maxTip: "字符数应小于{0}位", - apiSelectNotFound: '请等待数据加载完成...', + apiSelectNotFound: "请等待数据加载完成...", }, icon: { - placeholder: '点击选择图标', - search: '搜索图标', - copy: '复制图标成功!', + placeholder: "点击选择图标", + search: "搜索图标", + copy: "复制图标成功!", }, menu: { - search: '菜单搜索', + search: "菜单搜索", }, modal: { - cancelText: '关闭', - okText: '确认', - close: '关闭', - maximize: '最大化', - restore: '还原', + cancelText: "关闭", + okText: "确认", + close: "关闭", + maximize: "最大化", + restore: "还原", }, table: { - settingDens: '密度', - settingDensDefault: '默认', - settingDensMiddle: '中等', - settingDensSmall: '紧凑', - settingColumn: '列设置', - settingColumnShow: '列展示', - settingIndexColumnShow: '序号列', - settingSelectColumnShow: '勾选列', - settingFixedLeft: '固定到左侧', - settingFixedRight: '固定到右侧', - settingFullScreen: '全屏', + settingDens: "密度", + settingDensDefault: "默认", + settingDensMiddle: "中等", + settingDensSmall: "紧凑", + settingColumn: "列设置", + settingColumnShow: "列展示", + settingIndexColumnShow: "序号列", + settingSelectColumnShow: "勾选列", + settingFixedLeft: "固定到左侧", + settingFixedRight: "固定到右侧", + settingFullScreen: "全屏", - index: '序号', + index: "序号", - total: '共 {total} 条数据', + total: "共 {total} 条数据", }, time: { - before: '前', - after: '后', - just: '刚刚', - seconds: '秒', - minutes: '分钟', - hours: '小时', - days: '天', + before: "前", + after: "后", + just: "刚刚", + seconds: "秒", + minutes: "分钟", + hours: "小时", + days: "天", }, tree: { - selectAll: '选择全部', - unSelectAll: '取消选择', - expandAll: '展开全部', - unExpandAll: '折叠全部', - checkStrictly: '层级关联', - checkUnStrictly: '层级独立', + selectAll: "选择全部", + unSelectAll: "取消选择", + expandAll: "展开全部", + unExpandAll: "折叠全部", + checkStrictly: "层级关联", + checkUnStrictly: "层级独立", }, upload: { - save: '保存', - upload: '上传', - imgUpload: '图片上传', - uploaded: '已上传', + save: "保存", + upload: "上传", + imgUpload: "图片上传", + uploaded: "已上传", - operating: '操作', - del: '删除', - download: '下载', - saveWarn: '请等待文件上传后,保存!', - saveError: '没有上传成功的文件,无法保存!', + operating: "操作", + del: "删除", + download: "下载", + saveWarn: "请等待文件上传后,保存!", + saveError: "没有上传成功的文件,无法保存!", - preview: '预览', - choose: '选择文件', + preview: "预览", + choose: "选择文件", - accept: '支持{0}格式', - acceptUpload: '只能上传{0}格式文件', - maxSize: '单个文件不超过{0}MB', - maxSizeMultiple: '只能上传不超过{0}MB的文件!', - maxNumber: '最多只能上传{0}个文件', + accept: "支持{0}格式", + acceptUpload: "只能上传{0}格式文件", + maxSize: "单个文件不超过{0}MB", + maxSizeMultiple: "只能上传不超过{0}MB的文件!", + maxNumber: "最多只能上传{0}个文件", - legend: '略缩图', - fileName: '文件名', - fileSize: '文件大小', - fileStatue: '状态', + legend: "略缩图", + fileName: "文件名", + fileSize: "文件大小", + fileStatue: "状态", - startUpload: '开始上传', - uploadSuccess: '上传成功', - uploadError: '上传失败', - uploading: '上传中', - uploadWait: '请等待文件上传结束后操作', - reUploadFailed: '重新上传失败文件', + startUpload: "开始上传", + uploadSuccess: "上传成功", + uploadError: "上传失败", + uploading: "上传中", + uploadWait: "请等待文件上传结束后操作", + reUploadFailed: "重新上传失败文件", }, verify: { - error: '验证失败!', - time: '验证校验成功,耗时{time}秒!', + error: "验证失败!", + time: "验证校验成功,耗时{time}秒!", - redoTip: '点击图片可刷新', + redoTip: "点击图片可刷新", - dragText: '请按住滑块拖动', - successText: '验证通过', + dragText: "请按住滑块拖动", + successText: "验证通过", }, }; diff --git a/src/locales/lang/zh-CN/layout.ts b/src/locales/lang/zh-CN/layout.ts index ed1f853..c4c6ece 100644 --- a/src/locales/lang/zh-CN/layout.ts +++ b/src/locales/lang/zh-CN/layout.ts @@ -1,115 +1,115 @@ export default { - footer: { onlinePreview: '在线预览', onlineDocument: '在线文档' }, + footer: { onlinePreview: "在线预览", onlineDocument: "在线文档" }, header: { // user dropdown - dropdownItemDoc: '文档', - dropdownItemLoginOut: '退出系统', + dropdownItemDoc: "文档", + dropdownItemLoginOut: "退出系统", // tooltip - tooltipErrorLog: '错误日志', - tooltipLock: '锁定屏幕', - tooltipNotify: '消息通知', + tooltipErrorLog: "错误日志", + tooltipLock: "锁定屏幕", + tooltipNotify: "消息通知", - tooltipEntryFull: '全屏', - tooltipExitFull: '退出全屏', + tooltipEntryFull: "全屏", + tooltipExitFull: "退出全屏", // lock - lockScreenPassword: '锁屏密码', - lockScreen: '锁定屏幕', - lockScreenBtn: '锁定', + lockScreenPassword: "锁屏密码", + lockScreen: "锁定屏幕", + lockScreenBtn: "锁定", - home: '首页', + home: "首页", }, multipleTab: { - reload: '重新加载', - close: '关闭标签页', - closeLeft: '关闭左侧标签页', - closeRight: '关闭右侧标签页', - closeOther: '关闭其它标签页', - closeAll: '关闭全部标签页', + reload: "重新加载", + close: "关闭标签页", + closeLeft: "关闭左侧标签页", + closeRight: "关闭右侧标签页", + closeOther: "关闭其它标签页", + closeAll: "关闭全部标签页", }, setting: { // content mode - contentModeFull: '流式', - contentModeFixed: '定宽', + contentModeFull: "流式", + contentModeFixed: "定宽", // topMenu align - topMenuAlignLeft: '居左', - topMenuAlignRight: '居中', - topMenuAlignCenter: '居右', + topMenuAlignLeft: "居左", + topMenuAlignRight: "居中", + topMenuAlignCenter: "居右", // menu trigger - menuTriggerNone: '不显示', - menuTriggerBottom: '底部', - menuTriggerTop: '顶部', + menuTriggerNone: "不显示", + menuTriggerBottom: "底部", + menuTriggerTop: "顶部", // menu type - menuTypeSidebar: '左侧菜单模式', - menuTypeMixSidebar: '左侧菜单混合模式', - menuTypeMix: '顶部菜单混合模式', - menuTypeTopMenu: '顶部菜单模式', - - on: '开', - off: '关', - minute: '分钟', - - operatingTitle: '操作成功', - operatingContent: '复制成功,请到 src/settings/projectSetting.ts 中修改配置!', - resetSuccess: '重置成功!', - - copyBtn: '拷贝', - clearBtn: '清空缓存并返回登录页', - - drawerTitle: '项目配置', - - darkMode: '主题', - navMode: '导航栏模式', - interfaceFunction: '界面功能', - interfaceDisplay: '界面显示', - animation: '动画', - splitMenu: '分割菜单', - closeMixSidebarOnChange: '切换页面关闭菜单', - - sysTheme: '系统主题', - headerTheme: '顶栏主题', - sidebarTheme: '菜单主题', - - menuDrag: '侧边菜单拖拽', - menuSearch: '菜单搜索', - menuAccordion: '侧边菜单手风琴模式', - menuCollapse: '折叠菜单', - collapseMenuDisplayName: '折叠菜单显示名称', - topMenuLayout: '顶部菜单布局', - menuCollapseButton: '菜单折叠按钮', - contentMode: '内容区域宽度', - expandedMenuWidth: '菜单展开宽度', - - breadcrumb: '面包屑', - breadcrumbIcon: '面包屑图标', - tabs: '标签页', - tabDetail: '标签详情页', - tabsQuickBtn: '标签页快捷按钮', - tabsRedoBtn: '标签页刷新按钮', - tabsFoldBtn: '标签页折叠按钮', - sidebar: '左侧菜单', - header: '顶栏', - footer: '页脚', - fullContent: '全屏内容', - grayMode: '灰色模式', - colorWeak: '色弱模式', - - progress: '顶部进度条', - switchLoading: '切换loading', - switchAnimation: '切换动画', - animationType: '动画类型', - - autoScreenLock: '自动锁屏', - notAutoScreenLock: '不自动锁屏', - - fixedHeader: '固定header', - fixedSideBar: '固定Sidebar', - - mixSidebarTrigger: '混合菜单触发方式', - triggerHover: '悬停', - triggerClick: '点击', - - mixSidebarFixed: '固定展开菜单', + menuTypeSidebar: "左侧菜单模式", + menuTypeMixSidebar: "左侧菜单混合模式", + menuTypeMix: "顶部菜单混合模式", + menuTypeTopMenu: "顶部菜单模式", + + on: "开", + off: "关", + minute: "分钟", + + operatingTitle: "操作成功", + operatingContent: "复制成功,请到 src/settings/projectSetting.ts 中修改配置!", + resetSuccess: "重置成功!", + + copyBtn: "拷贝", + clearBtn: "清空缓存并返回登录页", + + drawerTitle: "项目配置", + + darkMode: "主题", + navMode: "导航栏模式", + interfaceFunction: "界面功能", + interfaceDisplay: "界面显示", + animation: "动画", + splitMenu: "分割菜单", + closeMixSidebarOnChange: "切换页面关闭菜单", + + sysTheme: "系统主题", + headerTheme: "顶栏主题", + sidebarTheme: "菜单主题", + + menuDrag: "侧边菜单拖拽", + menuSearch: "菜单搜索", + menuAccordion: "侧边菜单手风琴模式", + menuCollapse: "折叠菜单", + collapseMenuDisplayName: "折叠菜单显示名称", + topMenuLayout: "顶部菜单布局", + menuCollapseButton: "菜单折叠按钮", + contentMode: "内容区域宽度", + expandedMenuWidth: "菜单展开宽度", + + breadcrumb: "面包屑", + breadcrumbIcon: "面包屑图标", + tabs: "标签页", + tabDetail: "标签详情页", + tabsQuickBtn: "标签页快捷按钮", + tabsRedoBtn: "标签页刷新按钮", + tabsFoldBtn: "标签页折叠按钮", + sidebar: "左侧菜单", + header: "顶栏", + footer: "页脚", + fullContent: "全屏内容", + grayMode: "灰色模式", + colorWeak: "色弱模式", + + progress: "顶部进度条", + switchLoading: "切换loading", + switchAnimation: "切换动画", + animationType: "动画类型", + + autoScreenLock: "自动锁屏", + notAutoScreenLock: "不自动锁屏", + + fixedHeader: "固定header", + fixedSideBar: "固定Sidebar", + + mixSidebarTrigger: "混合菜单触发方式", + triggerHover: "悬停", + triggerClick: "点击", + + mixSidebarFixed: "固定展开菜单", }, }; diff --git a/src/locales/lang/zh-CN/routes/basic.ts b/src/locales/lang/zh-CN/routes/basic.ts index 3d03e8e..e92d1af 100644 --- a/src/locales/lang/zh-CN/routes/basic.ts +++ b/src/locales/lang/zh-CN/routes/basic.ts @@ -1,4 +1,4 @@ export default { - login: '登录', - errorLogList: '错误日志列表', + login: "登录", + errorLogList: "错误日志列表", }; diff --git a/src/locales/lang/zh-CN/routes/dashboard.ts b/src/locales/lang/zh-CN/routes/dashboard.ts index 04b1b19..aa52d22 100644 --- a/src/locales/lang/zh-CN/routes/dashboard.ts +++ b/src/locales/lang/zh-CN/routes/dashboard.ts @@ -1,6 +1,6 @@ export default { - dashboard: 'Dashboard', - about: '关于', - workbench: '工作台', - analysis: '分析页', + dashboard: "Dashboard", + about: "关于", + workbench: "工作台", + analysis: "分析页", }; diff --git a/src/locales/lang/zh-CN/routes/demo.ts b/src/locales/lang/zh-CN/routes/demo.ts index 0c07976..05bc90c 100644 --- a/src/locales/lang/zh-CN/routes/demo.ts +++ b/src/locales/lang/zh-CN/routes/demo.ts @@ -1,190 +1,190 @@ export default { charts: { - baiduMap: '百度地图', - aMap: '高德地图', - googleMap: '谷歌地图', - charts: '图表', - map: '地图', - line: '折线图', - pie: '饼图', + baiduMap: "百度地图", + aMap: "高德地图", + googleMap: "谷歌地图", + charts: "图表", + map: "地图", + line: "折线图", + pie: "饼图", }, comp: { - comp: '组件', - basic: '基础组件', - transition: '动画组件', - countTo: '数字动画', - - scroll: '滚动组件', - scrollBasic: '基础滚动', - scrollAction: '滚动函数', - virtualScroll: '虚拟滚动', - - tree: 'Tree', - treeBasic: '基础树', - editTree: '可搜索/工具栏', - actionTree: '函数操作示例', - - modal: '弹窗扩展', - drawer: '抽屉扩展', - desc: '详情组件', - - lazy: '懒加载组件', - lazyBasic: '基础示例', - lazyTransition: '动画效果', - - verify: '验证组件', - verifyDrag: '拖拽校验', - verifyRotate: '图片还原', - - qrcode: '二维码组件', - strength: '密码强度组件', - upload: '上传组件', - - loading: 'Loading', - - time: '相对时间', - cropperImage: '图片裁剪', - cardList: '卡片列表', + comp: "组件", + basic: "基础组件", + transition: "动画组件", + countTo: "数字动画", + + scroll: "滚动组件", + scrollBasic: "基础滚动", + scrollAction: "滚动函数", + virtualScroll: "虚拟滚动", + + tree: "Tree", + treeBasic: "基础树", + editTree: "可搜索/工具栏", + actionTree: "函数操作示例", + + modal: "弹窗扩展", + drawer: "抽屉扩展", + desc: "详情组件", + + lazy: "懒加载组件", + lazyBasic: "基础示例", + lazyTransition: "动画效果", + + verify: "验证组件", + verifyDrag: "拖拽校验", + verifyRotate: "图片还原", + + qrcode: "二维码组件", + strength: "密码强度组件", + upload: "上传组件", + + loading: "Loading", + + time: "相对时间", + cropperImage: "图片裁剪", + cardList: "卡片列表", }, editor: { - editor: '编辑器', - jsonEditor: 'Json编辑器', - markdown: 'markdown编辑器', + editor: "编辑器", + jsonEditor: "Json编辑器", + markdown: "markdown编辑器", - tinymce: '富文本', - tinymceBasic: '基础使用', - tinymceForm: '嵌入form', + tinymce: "富文本", + tinymceBasic: "基础使用", + tinymceForm: "嵌入form", }, excel: { - excel: 'Excel', - customExport: '选择导出格式', - jsonExport: 'JSON数据导出', - arrayExport: 'Array数据导出', - importExcel: '导入', + excel: "Excel", + customExport: "选择导出格式", + jsonExport: "JSON数据导出", + arrayExport: "Array数据导出", + importExcel: "导入", }, feat: { - feat: '功能', - icon: '图标', - sessionTimeout: '登录过期', - tabs: '标签页操作', - tabDetail: '标签详情页', - print: '打印', - contextMenu: '右键菜单', - download: '文件下载', - clickOutSide: 'ClickOutSide组件', - imgPreview: '图片预览', - copy: '剪切板', - msg: '消息提示', - watermark: '水印', - ripple: '水波纹', - fullScreen: '全屏', - errorLog: '错误日志', - tab: 'Tab带参', - tab1: 'Tab带参1', - tab2: 'Tab带参2', - menu: 'Menu带参', - menu1: 'Menu带参1', - menu2: 'Menu带参2', - ws: 'websocket测试', - breadcrumb: '面包屑导航', - breadcrumbFlat: '平级模式', - breadcrumbFlatDetail: '平级详情', - breadcrumbChildren: '层级模式', - breadcrumbChildrenDetail: '层级详情', + feat: "功能", + icon: "图标", + sessionTimeout: "登录过期", + tabs: "标签页操作", + tabDetail: "标签详情页", + print: "打印", + contextMenu: "右键菜单", + download: "文件下载", + clickOutSide: "ClickOutSide组件", + imgPreview: "图片预览", + copy: "剪切板", + msg: "消息提示", + watermark: "水印", + ripple: "水波纹", + fullScreen: "全屏", + errorLog: "错误日志", + tab: "Tab带参", + tab1: "Tab带参1", + tab2: "Tab带参2", + menu: "Menu带参", + menu1: "Menu带参1", + menu2: "Menu带参2", + ws: "websocket测试", + breadcrumb: "面包屑导航", + breadcrumbFlat: "平级模式", + breadcrumbFlatDetail: "平级详情", + breadcrumbChildren: "层级模式", + breadcrumbChildrenDetail: "层级详情", }, flow: { - name: '图形编辑器', - flowChart: '流程图', + name: "图形编辑器", + flowChart: "流程图", }, form: { - form: 'Form', - basic: '基础表单', - useForm: 'useForm', - refForm: 'RefForm', - advancedForm: '可收缩表单', - ruleForm: '表单验证', - dynamicForm: '动态表单', - customerForm: '自定义组件', - appendForm: '表单增删示例', + form: "Form", + basic: "基础表单", + useForm: "useForm", + refForm: "RefForm", + advancedForm: "可收缩表单", + ruleForm: "表单验证", + dynamicForm: "动态表单", + customerForm: "自定义组件", + appendForm: "表单增删示例", }, iframe: { - frame: '外部页面', - antv: 'antVue文档(内嵌)', - doc: '项目文档(内嵌)', - docExternal: '项目文档(外链)', + frame: "外部页面", + antv: "antVue文档(内嵌)", + doc: "项目文档(内嵌)", + docExternal: "项目文档(外链)", }, - level: { level: '多级菜单' }, + level: { level: "多级菜单" }, page: { - page: '页面', + page: "页面", - form: '表单页', - formBasic: '基础表单', - formStep: '分步表单', - formHigh: '高级表单', + form: "表单页", + formBasic: "基础表单", + formStep: "分步表单", + formHigh: "高级表单", - desc: '详情页', - descBasic: '基础详情页', - descHigh: '高级详情页', + desc: "详情页", + descBasic: "基础详情页", + descHigh: "高级详情页", - result: '结果页', - resultSuccess: '成功页', - resultFail: '失败页', + result: "结果页", + resultSuccess: "成功页", + resultFail: "失败页", - account: '个人页', - accountCenter: '个人中心', - accountSetting: '个人设置', + account: "个人页", + accountCenter: "个人中心", + accountSetting: "个人设置", - exception: '异常页', - netWorkError: '网络错误', - notData: '无数据', + exception: "异常页", + netWorkError: "网络错误", + notData: "无数据", - list: '列表页', - listCard: '卡片列表', - listBasic: '标准列表', - listSearch: '搜索列表', + list: "列表页", + listCard: "卡片列表", + listBasic: "标准列表", + listSearch: "搜索列表", }, permission: { - permission: '权限管理', + permission: "权限管理", - front: '基于前端权限', - frontPage: '页面权限', - frontBtn: '按钮权限', - frontTestA: '权限测试页A', - frontTestB: '权限测试页B', + front: "基于前端权限", + frontPage: "页面权限", + frontBtn: "按钮权限", + frontTestA: "权限测试页A", + frontTestB: "权限测试页B", - back: '基于后台权限', - backPage: '页面权限', - backBtn: '按钮权限', + back: "基于后台权限", + backPage: "页面权限", + backBtn: "按钮权限", }, setup: { - page: '引导页', + page: "引导页", }, system: { - moduleName: '系统管理', - account: '账号管理', - account_detail: '账号详情', - password: '修改密码', - dept: '部门管理', - menu: '菜单管理', - role: '角色管理', + moduleName: "系统管理", + account: "账号管理", + account_detail: "账号详情", + password: "修改密码", + dept: "部门管理", + menu: "菜单管理", + role: "角色管理", }, table: { - table: 'Table', - basic: '基础表格', - treeTable: '树形表格', - fetchTable: '远程加载示例', - fixedColumn: '固定列', - customerCell: '自定义列', - formTable: '开启搜索区域', - useTable: 'UseTable', - refTable: 'RefTable', - multipleHeader: '多级表头', - mergeHeader: '合并单元格', - expandTable: '可展开表格', - fixedHeight: '定高/头部自定义', - footerTable: '表尾行合计', - editCellTable: '可编辑单元格', - editRowTable: '可编辑行', - authColumn: '权限列', + table: "Table", + basic: "基础表格", + treeTable: "树形表格", + fetchTable: "远程加载示例", + fixedColumn: "固定列", + customerCell: "自定义列", + formTable: "开启搜索区域", + useTable: "UseTable", + refTable: "RefTable", + multipleHeader: "多级表头", + mergeHeader: "合并单元格", + expandTable: "可展开表格", + fixedHeight: "定高/头部自定义", + footerTable: "表尾行合计", + editCellTable: "可编辑单元格", + editRowTable: "可编辑行", + authColumn: "权限列", }, }; diff --git a/src/locales/lang/zh-CN/routes/practice.ts b/src/locales/lang/zh-CN/routes/practice.ts new file mode 100644 index 0000000..fec22e1 --- /dev/null +++ b/src/locales/lang/zh-CN/routes/practice.ts @@ -0,0 +1,4 @@ +export default { + about: "实习", + record: "实习记录", +}; diff --git a/src/locales/lang/zh-CN/sys.ts b/src/locales/lang/zh-CN/sys.ts index 8dad1cf..1090ed7 100644 --- a/src/locales/lang/zh-CN/sys.ts +++ b/src/locales/lang/zh-CN/sys.ts @@ -1,98 +1,98 @@ export default { api: { - operationFailed: '操作失败', - errorTip: '错误提示', - errorMessage: '操作失败,系统异常!', - timeoutMessage: '登录超时,请重新登录!', - apiTimeoutMessage: '接口请求超时,请刷新页面重试!', - apiRequestFailed: '请求出错,请稍候重试', - networkException: '网络异常', - networkExceptionMsg: '网络异常,请检查您的网络连接是否正常!', + operationFailed: "操作失败", + errorTip: "错误提示", + errorMessage: "操作失败,系统异常!", + timeoutMessage: "登录超时,请重新登录!", + apiTimeoutMessage: "接口请求超时,请刷新页面重试!", + apiRequestFailed: "请求出错,请稍候重试", + networkException: "网络异常", + networkExceptionMsg: "网络异常,请检查您的网络连接是否正常!", - errMsg401: '用户没有权限(令牌、用户名、密码错误)!', - errMsg403: '用户得到授权,但是访问是被禁止的。!', - errMsg404: '网络请求错误,未找到该资源!', - errMsg405: '网络请求错误,请求方法未允许!', - errMsg408: '网络请求超时!', - errMsg500: '服务器错误,请联系管理员!', - errMsg501: '网络未实现!', - errMsg502: '网络错误!', - errMsg503: '服务不可用,服务器暂时过载或维护!', - errMsg504: '网络超时!', - errMsg505: 'http版本不支持该请求!', + errMsg401: "用户没有权限(令牌、用户名、密码错误)!", + errMsg403: "用户得到授权,但是访问是被禁止的。!", + errMsg404: "网络请求错误,未找到该资源!", + errMsg405: "网络请求错误,请求方法未允许!", + errMsg408: "网络请求超时!", + errMsg500: "服务器错误,请联系管理员!", + errMsg501: "网络未实现!", + errMsg502: "网络错误!", + errMsg503: "服务不可用,服务器暂时过载或维护!", + errMsg504: "网络超时!", + errMsg505: "http版本不支持该请求!", }, - app: { logoutTip: '温馨提醒', logoutMessage: '是否确认退出系统?', menuLoading: '菜单加载中...' }, + app: { logoutTip: "温馨提醒", logoutMessage: "是否确认退出系统?", menuLoading: "菜单加载中..." }, errorLog: { - tableTitle: '错误日志列表', - tableColumnType: '类型', - tableColumnDate: '时间', - tableColumnFile: '文件', - tableColumnMsg: '错误信息', - tableColumnStackMsg: 'stack信息', + tableTitle: "错误日志列表", + tableColumnType: "类型", + tableColumnDate: "时间", + tableColumnFile: "文件", + tableColumnMsg: "错误信息", + tableColumnStackMsg: "stack信息", - tableActionDesc: '详情', + tableActionDesc: "详情", - modalTitle: '错误详情', + modalTitle: "错误详情", - fireVueError: '点击触发vue错误', - fireResourceError: '点击触发资源加载错误', - fireAjaxError: '点击触发ajax错误', + fireVueError: "点击触发vue错误", + fireResourceError: "点击触发资源加载错误", + fireAjaxError: "点击触发ajax错误", - enableMessage: '只在`/src/settings/projectSetting.ts` 内的useErrorHandle=true时生效.', + enableMessage: "只在`/src/settings/projectSetting.ts` 内的useErrorHandle=true时生效.", }, exception: { - backLogin: '返回登录', - backHome: '返回首页', - subTitle403: '抱歉,您无权访问此页面。', - subTitle404: '抱歉,您访问的页面不存在。', - subTitle500: '抱歉,服务器报告错误。', - noDataTitle: '当前页无数据', - networkErrorTitle: '网络错误', - networkErrorSubTitle: '抱歉,您的网络连接已断开,请检查您的网络!', + backLogin: "返回登录", + backHome: "返回首页", + subTitle403: "抱歉,您无权访问此页面。", + subTitle404: "抱歉,您访问的页面不存在。", + subTitle500: "抱歉,服务器报告错误。", + noDataTitle: "当前页无数据", + networkErrorTitle: "网络错误", + networkErrorSubTitle: "抱歉,您的网络连接已断开,请检查您的网络!", }, lock: { - unlock: '点击解锁', - alert: '锁屏密码错误', - backToLogin: '返回登录', - entry: '进入系统', - placeholder: '请输入锁屏密码或者用户密码', + unlock: "点击解锁", + alert: "锁屏密码错误", + backToLogin: "返回登录", + entry: "进入系统", + placeholder: "请输入锁屏密码或者用户密码", }, login: { - backSignIn: '返回', - signInFormTitle: '登录', - mobileSignInFormTitle: '手机登录', - qrSignInFormTitle: '二维码登录', - signUpFormTitle: '注册', - forgetFormTitle: '重置密码', + backSignIn: "返回", + signInFormTitle: "登录", + mobileSignInFormTitle: "手机登录", + qrSignInFormTitle: "二维码登录", + signUpFormTitle: "注册", + forgetFormTitle: "重置密码", - signInTitle: '开箱即用的中后台管理系统', - signInDesc: '输入您的个人详细信息开始使用!', - policy: '我同意xxx隐私政策', + signInTitle: "开箱即用的中后台管理系统", + signInDesc: "输入您的个人详细信息开始使用!", + policy: "我同意xxx隐私政策", scanSign: `扫码后点击"确认",即可完成登录`, - loginButton: '登录', - registerButton: '注册', - rememberMe: '记住我', - forgetPassword: '忘记密码?', - otherSignIn: '其他登录方式', + loginButton: "登录", + registerButton: "注册", + rememberMe: "记住我", + forgetPassword: "忘记密码?", + otherSignIn: "其他登录方式", // notify - loginSuccessTitle: '登录成功', - loginSuccessDesc: '欢迎回来', + loginSuccessTitle: "登录成功", + loginSuccessDesc: "欢迎回来", // placeholder - accountPlaceholder: '请输入账号', - passwordPlaceholder: '请输入密码', - smsPlaceholder: '请输入验证码', - mobilePlaceholder: '请输入手机号码', - policyPlaceholder: '勾选后才能注册', - diffPwd: '两次输入密码不一致', + accountPlaceholder: "请输入账号", + passwordPlaceholder: "请输入密码", + smsPlaceholder: "请输入验证码", + mobilePlaceholder: "请输入手机号码", + policyPlaceholder: "勾选后才能注册", + diffPwd: "两次输入密码不一致", - userName: '账号', - password: '密码', - confirmPassword: '确认密码', - email: '邮箱', - smsCode: '短信验证码', - mobile: '手机号码', + userName: "账号", + password: "密码", + confirmPassword: "确认密码", + email: "邮箱", + smsCode: "短信验证码", + mobile: "手机号码", }, }; diff --git a/src/locales/lang/zh_CN.ts b/src/locales/lang/zh_CN.ts index 1cb1565..daa9b25 100644 --- a/src/locales/lang/zh_CN.ts +++ b/src/locales/lang/zh_CN.ts @@ -1,13 +1,13 @@ -import { genMessage } from '../helper'; -import antdLocale from 'ant-design-vue/es/locale/zh_CN'; -import momentLocale from 'moment/dist/locale/zh-cn'; +import { genMessage } from "../helper"; +import antdLocale from "ant-design-vue/es/locale/zh_CN"; +import momentLocale from "moment/dist/locale/zh-cn"; -const modules = import.meta.globEager('./zh-CN/**/*.ts'); +const modules = import.meta.globEager("./zh-CN/**/*.ts"); export default { message: { - ...genMessage(modules, 'zh-CN'), + ...genMessage(modules, "zh-CN"), antdLocale, }, momentLocale, - momentLocaleName: 'zh-cn', + momentLocaleName: "zh-cn", }; diff --git a/src/locales/setupI18n.ts b/src/locales/setupI18n.ts index 405fb0c..e776fe8 100644 --- a/src/locales/setupI18n.ts +++ b/src/locales/setupI18n.ts @@ -1,10 +1,10 @@ -import type { App } from 'vue'; -import type { I18n, I18nOptions } from 'vue-i18n'; +import type { App } from "vue"; +import type { I18n, I18nOptions } from "vue-i18n"; -import { createI18n } from 'vue-i18n'; -import { setHtmlPageLang, setLoadLocalePool } from './helper'; -import { localeSetting } from '/@/settings/localeSetting'; -import { useLocaleStoreWithOut } from '/@/store/modules/locale'; +import { createI18n } from "vue-i18n"; +import { setHtmlPageLang, setLoadLocalePool } from "./helper"; +import { localeSetting } from "/@/settings/localeSetting"; +import { useLocaleStoreWithOut } from "/@/store/modules/locale"; const { fallback, availableLocales } = localeSetting; diff --git a/src/locales/useLocale.ts b/src/locales/useLocale.ts index 19fff07..71e6b0c 100644 --- a/src/locales/useLocale.ts +++ b/src/locales/useLocale.ts @@ -1,14 +1,14 @@ /** * Multi-language related operations */ -import type { LocaleType } from '/#/config'; +import type { LocaleType } from "/#/config"; -import moment from 'moment'; +import moment from "moment"; -import { i18n } from './setupI18n'; -import { useLocaleStoreWithOut } from '/@/store/modules/locale'; -import { unref, computed } from 'vue'; -import { loadLocalePool, setHtmlPageLang } from './helper'; +import { i18n } from "./setupI18n"; +import { useLocaleStoreWithOut } from "/@/store/modules/locale"; +import { unref, computed } from "vue"; +import { loadLocalePool, setHtmlPageLang } from "./helper"; interface LangModule { message: Recordable; @@ -19,7 +19,7 @@ interface LangModule { function setI18nLanguage(locale: LocaleType) { const localeStore = useLocaleStoreWithOut(); - if (i18n.mode === 'legacy') { + if (i18n.mode === "legacy") { i18n.global.locale = locale; } else { (i18n.global.locale as any).value = locale; diff --git a/src/logics/error-handle/index.ts b/src/logics/error-handle/index.ts index e04c009..7df7723 100644 --- a/src/logics/error-handle/index.ts +++ b/src/logics/error-handle/index.ts @@ -2,13 +2,13 @@ * Used to configure the global error handling function, which can monitor vue errors, script errors, static resource errors and Promise errors */ -import type { ErrorLogInfo } from '/#/store'; +import type { ErrorLogInfo } from "/#/store"; -import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; +import { useErrorLogStoreWithOut } from "/@/store/modules/errorLog"; -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; -import { App } from 'vue'; -import projectSetting from '/@/settings/projectSetting'; +import { ErrorTypeEnum } from "/@/enums/exceptionEnum"; +import { App } from "vue"; +import projectSetting from "/@/settings/projectSetting"; /** * Handling error stack information @@ -16,19 +16,19 @@ import projectSetting from '/@/settings/projectSetting'; */ function processStackMsg(error: Error) { if (!error.stack) { - return ''; + return ""; } let stack = error.stack - .replace(/\n/gi, '') // Remove line breaks to save the size of the transmitted content - .replace(/\bat\b/gi, '@') // At in chrome, @ in ff - .split('@') // Split information with @ + .replace(/\n/gi, "") // Remove line breaks to save the size of the transmitted content + .replace(/\bat\b/gi, "@") // At in chrome, @ in ff + .split("@") // Split information with @ .slice(0, 9) // The maximum stack length (Error.stackTraceLimit = 10), so only take the first 10 - .map((v) => v.replace(/^\s*|\s*$/g, '')) // Remove extra spaces - .join('~') // Manually add separators for later display - .replace(/\?[^:]+/gi, ''); // Remove redundant parameters of js file links (?x=1 and the like) + .map((v) => v.replace(/^\s*|\s*$/g, "")) // Remove extra spaces + .join("~") // Manually add separators for later display + .replace(/\?[^:]+/gi, ""); // Remove redundant parameters of js file links (?x=1 and the like) const msg = error.toString(); if (stack.indexOf(msg) < 0) { - stack = msg + '@' + stack; + stack = msg + "@" + stack; } return stack; } @@ -40,16 +40,16 @@ function processStackMsg(error: Error) { function formatComponentName(vm: any) { if (vm.$root === vm) { return { - name: 'root', - path: 'root', + name: "root", + path: "root", }; } const options = vm.$options as any; if (!options) { return { - name: 'anonymous', - path: 'anonymous', + name: "anonymous", + path: "anonymous", }; } const name = options.name || options._componentTag; @@ -87,7 +87,7 @@ export function scriptErrorHandler( colno?: number, error?: Error, ) { - if (event === 'Script error.' && !source) { + if (event === "Script error." && !source) { return false; } const errorInfo: Partial<ErrorLogInfo> = {}; @@ -96,17 +96,17 @@ export function scriptErrorHandler( if (error?.stack) { errorInfo.stack = error.stack; } else { - errorInfo.stack = ''; + errorInfo.stack = ""; } - const name = source ? source.substr(source.lastIndexOf('/') + 1) : 'script'; + const name = source ? source.substr(source.lastIndexOf("/") + 1) : "script"; const errorLogStore = useErrorLogStoreWithOut(); errorLogStore.addErrorLogInfo({ type: ErrorTypeEnum.SCRIPT, name: name, file: source as string, - detail: 'lineno' + lineno, + detail: "lineno" + lineno, url: window.location.href, - ...(errorInfo as Pick<ErrorLogInfo, 'message' | 'stack'>), + ...(errorInfo as Pick<ErrorLogInfo, "message" | "stack">), }); return true; } @@ -116,16 +116,16 @@ export function scriptErrorHandler( */ function registerPromiseErrorHandler() { window.addEventListener( - 'unhandledrejection', + "unhandledrejection", function (event) { const errorLogStore = useErrorLogStoreWithOut(); errorLogStore.addErrorLogInfo({ type: ErrorTypeEnum.PROMISE, - name: 'Promise Error!', - file: 'none', - detail: 'promise error!', + name: "Promise Error!", + file: "none", + detail: "promise error!", url: window.location.href, - stack: 'promise error!', + stack: "promise error!", message: event.reason, }); }, @@ -139,13 +139,13 @@ function registerPromiseErrorHandler() { function registerResourceErrorHandler() { // Monitoring resource loading error(img,script,css,and jsonp) window.addEventListener( - 'error', + "error", function (e: Event) { const target = e.target ? e.target : (e.srcElement as any); const errorLogStore = useErrorLogStoreWithOut(); errorLogStore.addErrorLogInfo({ type: ErrorTypeEnum.RESOURCE, - name: 'Resource Error!', + name: "Resource Error!", file: (e.target || ({} as any)).currentSrc, detail: JSON.stringify({ tagName: target.localName, @@ -153,8 +153,8 @@ function registerResourceErrorHandler() { type: e.type, }), url: window.location.href, - stack: 'resource is not found', - message: (e.target || ({} as any)).localName + ' is load error', + stack: "resource is not found", + message: (e.target || ({} as any)).localName + " is load error", }); }, true, diff --git a/src/logics/initAppConfig.ts b/src/logics/initAppConfig.ts index a186450..4c5d675 100644 --- a/src/logics/initAppConfig.ts +++ b/src/logics/initAppConfig.ts @@ -1,26 +1,26 @@ /** * Application configuration */ -import type { ProjectConfig } from '/#/config'; +import type { ProjectConfig } from "/#/config"; -import { PROJ_CFG_KEY } from '/@/enums/cacheEnum'; -import projectSetting from '/@/settings/projectSetting'; +import { PROJ_CFG_KEY } from "/@/enums/cacheEnum"; +import projectSetting from "/@/settings/projectSetting"; -import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground'; -import { updateColorWeak } from '/@/logics/theme/updateColorWeak'; -import { updateGrayMode } from '/@/logics/theme/updateGrayMode'; -import { updateDarkTheme } from '/@/logics/theme/dark'; -import { changeTheme } from '/@/logics/theme'; +import { updateHeaderBgColor, updateSidebarBgColor } from "/@/logics/theme/updateBackground"; +import { updateColorWeak } from "/@/logics/theme/updateColorWeak"; +import { updateGrayMode } from "/@/logics/theme/updateGrayMode"; +import { updateDarkTheme } from "/@/logics/theme/dark"; +import { changeTheme } from "/@/logics/theme"; -import { useAppStore } from '/@/store/modules/app'; -import { useLocaleStore } from '/@/store/modules/locale'; +import { useAppStore } from "/@/store/modules/app"; +import { useLocaleStore } from "/@/store/modules/locale"; -import { getCommonStoragePrefix, getStorageShortName } from '/@/utils/env'; +import { getCommonStoragePrefix, getStorageShortName } from "/@/utils/env"; -import { primaryColor } from '../../build/config/themeConfig'; -import { Persistent } from '/@/utils/cache/persistent'; -import { deepMerge } from '/@/utils'; -import { ThemeEnum } from '/@/enums/appEnum'; +import { primaryColor } from "../../build/config/themeConfig"; +import { Persistent } from "/@/utils/cache/persistent"; +import { deepMerge } from "/@/utils"; +import { ThemeEnum } from "/@/enums/appEnum"; // Initial project configuration export function initAppConfigStore() { diff --git a/src/logics/mitt/routeChange.ts b/src/logics/mitt/routeChange.ts index 864828e..91a18f1 100644 --- a/src/logics/mitt/routeChange.ts +++ b/src/logics/mitt/routeChange.ts @@ -2,9 +2,9 @@ * Used to monitor routing changes to change the status of menus and tabs. There is no need to monitor the route, because the route status change is affected by the page rendering time, which will be slow */ -import mitt from '/@/utils/mitt'; -import type { RouteLocationNormalized } from 'vue-router'; -import { getRawRoute } from '/@/utils'; +import mitt from "/@/utils/mitt"; +import type { RouteLocationNormalized } from "vue-router"; +import { getRawRoute } from "/@/utils"; const emitter = mitt(); diff --git a/src/logics/theme/dark.ts b/src/logics/theme/dark.ts index 7069826..9aaf684 100644 --- a/src/logics/theme/dark.ts +++ b/src/logics/theme/dark.ts @@ -1,24 +1,24 @@ -import { darkCssIsReady, loadDarkThemeCss } from 'vite-plugin-theme/es/client'; -import { addClass, hasClass, removeClass } from '/@/utils/domUtils'; +import { darkCssIsReady, loadDarkThemeCss } from "vite-plugin-theme/es/client"; +import { addClass, hasClass, removeClass } from "/@/utils/domUtils"; -export async function updateDarkTheme(mode: string | null = 'light') { - const htmlRoot = document.getElementById('htmlRoot'); +export async function updateDarkTheme(mode: string | null = "light") { + const htmlRoot = document.getElementById("htmlRoot"); if (!htmlRoot) { return; } - const hasDarkClass = hasClass(htmlRoot, 'dark'); - if (mode === 'dark') { + const hasDarkClass = hasClass(htmlRoot, "dark"); + if (mode === "dark") { if (import.meta.env.PROD && !darkCssIsReady) { await loadDarkThemeCss(); } - htmlRoot.setAttribute('data-theme', 'dark'); + htmlRoot.setAttribute("data-theme", "dark"); if (!hasDarkClass) { - addClass(htmlRoot, 'dark'); + addClass(htmlRoot, "dark"); } } else { - htmlRoot.setAttribute('data-theme', 'light'); + htmlRoot.setAttribute("data-theme", "light"); if (hasDarkClass) { - removeClass(htmlRoot, 'dark'); + removeClass(htmlRoot, "dark"); } } } diff --git a/src/logics/theme/index.ts b/src/logics/theme/index.ts index 5635a60..fe39c98 100644 --- a/src/logics/theme/index.ts +++ b/src/logics/theme/index.ts @@ -1,7 +1,7 @@ -import { getThemeColors, generateColors } from '../../../build/config/themeConfig'; +import { getThemeColors, generateColors } from "../../../build/config/themeConfig"; -import { replaceStyleVariables } from 'vite-plugin-theme/es/client'; -import { mixLighten, mixDarken, tinycolor } from 'vite-plugin-theme/es/colorUtils'; +import { replaceStyleVariables } from "vite-plugin-theme/es/client"; +import { mixLighten, mixDarken, tinycolor } from "vite-plugin-theme/es/colorUtils"; export async function changeTheme(color: string) { const colors = generateColors({ diff --git a/src/logics/theme/updateBackground.ts b/src/logics/theme/updateBackground.ts index 3f15c90..918c052 100644 --- a/src/logics/theme/updateBackground.ts +++ b/src/logics/theme/updateBackground.ts @@ -1,15 +1,15 @@ -import { colorIsDark, lighten, darken } from '/@/utils/color'; -import { useAppStore } from '/@/store/modules/app'; -import { ThemeEnum } from '/@/enums/appEnum'; -import { setCssVar } from './util'; +import { colorIsDark, lighten, darken } from "/@/utils/color"; +import { useAppStore } from "/@/store/modules/app"; +import { ThemeEnum } from "/@/enums/appEnum"; +import { setCssVar } from "./util"; -const HEADER_BG_COLOR_VAR = '--header-bg-color'; -const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color'; -const HEADER_MENU_ACTIVE_BG_COLOR_VAR = '--header-active-menu-bg-color'; +const HEADER_BG_COLOR_VAR = "--header-bg-color"; +const HEADER_BG_HOVER_COLOR_VAR = "--header-bg-hover-color"; +const HEADER_MENU_ACTIVE_BG_COLOR_VAR = "--header-active-menu-bg-color"; -const SIDER_DARK_BG_COLOR = '--sider-dark-bg-color'; -const SIDER_DARK_DARKEN_BG_COLOR = '--sider-dark-darken-bg-color'; -const SIDER_LIGHTEN_BG_COLOR = '--sider-dark-lighten-bg-color'; +const SIDER_DARK_BG_COLOR = "--sider-dark-bg-color"; +const SIDER_DARK_DARKEN_BG_COLOR = "--sider-dark-darken-bg-color"; +const SIDER_LIGHTEN_BG_COLOR = "--sider-dark-lighten-bg-color"; /** * Change the background color of the top header @@ -20,7 +20,7 @@ export function updateHeaderBgColor(color?: string) { const darkMode = appStore.getDarkMode === ThemeEnum.DARK; if (!color) { if (darkMode) { - color = '#151515'; + color = "#151515"; } else { color = appStore.getHeaderSetting.bgColor; } @@ -54,7 +54,7 @@ export function updateSidebarBgColor(color?: string) { const darkMode = appStore.getDarkMode === ThemeEnum.DARK; if (!color) { if (darkMode) { - color = '#212121'; + color = "#212121"; } else { color = appStore.getMenuSetting.bgColor; } @@ -65,7 +65,7 @@ export function updateSidebarBgColor(color?: string) { // only #ffffff is light // Only when the background color is #fff, the theme of the menu will be changed to light - const isLight = ['#fff', '#ffffff'].includes(color!.toLowerCase()); + const isLight = ["#fff", "#ffffff"].includes(color!.toLowerCase()); appStore.setProjectConfig({ menuSetting: { diff --git a/src/logics/theme/updateColorWeak.ts b/src/logics/theme/updateColorWeak.ts index 8a0e64a..0322c5a 100644 --- a/src/logics/theme/updateColorWeak.ts +++ b/src/logics/theme/updateColorWeak.ts @@ -1,9 +1,9 @@ -import { toggleClass } from './util'; +import { toggleClass } from "./util"; /** * Change the status of the project's color weakness mode * @param colorWeak */ export function updateColorWeak(colorWeak: boolean) { - toggleClass(colorWeak, 'color-weak', document.documentElement); + toggleClass(colorWeak, "color-weak", document.documentElement); } diff --git a/src/logics/theme/updateGrayMode.ts b/src/logics/theme/updateGrayMode.ts index 0fd16fe..7926f9c 100644 --- a/src/logics/theme/updateGrayMode.ts +++ b/src/logics/theme/updateGrayMode.ts @@ -1,9 +1,9 @@ -import { toggleClass } from './util'; +import { toggleClass } from "./util"; /** * Change project gray mode status * @param gray */ export function updateGrayMode(gray: boolean) { - toggleClass(gray, 'gray-mode', document.documentElement); + toggleClass(gray, "gray-mode", document.documentElement); } diff --git a/src/logics/theme/util.ts b/src/logics/theme/util.ts index 30aef37..6a0cb52 100644 --- a/src/logics/theme/util.ts +++ b/src/logics/theme/util.ts @@ -2,7 +2,7 @@ const docEle = document.documentElement; export function toggleClass(flag: boolean, clsName: string, target?: HTMLElement) { const targetEl = target || document.body; let { className } = targetEl; - className = className.replace(clsName, ''); + className = className.replace(clsName, ""); targetEl.className = flag ? `${className} ${clsName} ` : className; } diff --git a/src/main.ts b/src/main.ts index d24c80a..cec3454 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,25 +1,25 @@ -import '/@/design/index.less'; -import 'virtual:windi-base.css'; -import 'virtual:windi-components.css'; -import 'virtual:windi-utilities.css'; +import "/@/design/index.less"; +import "virtual:windi-base.css"; +import "virtual:windi-components.css"; +import "virtual:windi-utilities.css"; // Register icon sprite -import 'virtual:svg-icons-register'; -import App from './App.vue'; -import { createApp } from 'vue'; -import { initAppConfigStore } from '/@/logics/initAppConfig'; -import { setupErrorHandle } from '/@/logics/error-handle'; -import { router, setupRouter } from '/@/router'; -import { setupRouterGuard } from '/@/router/guard'; -import { setupStore } from '/@/store'; -import { setupGlobDirectives } from '/@/directives'; -import { setupI18n } from '/@/locales/setupI18n'; -import { registerGlobComp } from '/@/components/registerGlobComp'; +import "virtual:svg-icons-register"; +import App from "./App.vue"; +import { createApp } from "vue"; +import { initAppConfigStore } from "/@/logics/initAppConfig"; +import { setupErrorHandle } from "/@/logics/error-handle"; +import { router, setupRouter } from "/@/router"; +import { setupRouterGuard } from "/@/router/guard"; +import { setupStore } from "/@/store"; +import { setupGlobDirectives } from "/@/directives"; +import { setupI18n } from "/@/locales/setupI18n"; +import { registerGlobComp } from "/@/components/registerGlobComp"; // Importing on demand in local development will increase the number of browser requests by around 20%. // This may slow down the browser refresh speed. // Therefore, only enable on-demand importing in production environments . if (import.meta.env.DEV) { - import('ant-design-vue/dist/antd.less'); + import("ant-design-vue/dist/antd.less"); } async function bootstrap() { @@ -53,7 +53,7 @@ async function bootstrap() { // https://next.router.vuejs.org/api/#isready // await router.isReady(); - app.mount('#app'); + app.mount("#app"); } bootstrap(); diff --git a/src/router/constant.ts b/src/router/constant.ts index d39a67e..b17445a 100644 --- a/src/router/constant.ts +++ b/src/router/constant.ts @@ -1,15 +1,15 @@ -export const REDIRECT_NAME = 'Redirect'; +export const REDIRECT_NAME = "Redirect"; -export const PARENT_LAYOUT_NAME = 'ParentLayout'; +export const PARENT_LAYOUT_NAME = "ParentLayout"; -export const PAGE_NOT_FOUND_NAME = 'PageNotFound'; +export const PAGE_NOT_FOUND_NAME = "PageNotFound"; -export const EXCEPTION_COMPONENT = () => import('/@/views/sys/exception/Exception.vue'); +export const EXCEPTION_COMPONENT = () => import("/@/views/sys/exception/Exception.vue"); /** * @description: default layout */ -export const LAYOUT = () => import('/@/layouts/default/index.vue'); +export const LAYOUT = () => import("/@/layouts/default/index.vue"); /** * @description: parent-layout diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts index c567749..640a379 100644 --- a/src/router/guard/index.ts +++ b/src/router/guard/index.ts @@ -1,17 +1,17 @@ -import type { Router, RouteLocationNormalized } from 'vue-router'; -import { useAppStoreWithOut } from '/@/store/modules/app'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; -import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'; -import { Modal, notification } from 'ant-design-vue'; -import { warn } from '/@/utils/log'; -import { unref } from 'vue'; -import { setRouteChange } from '/@/logics/mitt/routeChange'; -import { createPermissionGuard } from './permissionGuard'; -import { createStateGuard } from './stateGuard'; -import nProgress from 'nprogress'; -import projectSetting from '/@/settings/projectSetting'; -import { createParamMenuGuard } from './paramMenuGuard'; +import type { Router, RouteLocationNormalized } from "vue-router"; +import { useAppStoreWithOut } from "/@/store/modules/app"; +import { useUserStoreWithOut } from "/@/store/modules/user"; +import { useTransitionSetting } from "/@/hooks/setting/useTransitionSetting"; +import { AxiosCanceler } from "/@/utils/http/axios/axiosCancel"; +import { Modal, notification } from "ant-design-vue"; +import { warn } from "/@/utils/log"; +import { unref } from "vue"; +import { setRouteChange } from "/@/logics/mitt/routeChange"; +import { createPermissionGuard } from "./permissionGuard"; +import { createStateGuard } from "./stateGuard"; +import nProgress from "nprogress"; +import projectSetting from "/@/settings/projectSetting"; +import { createParamMenuGuard } from "./paramMenuGuard"; // Don't change the order of creation export function setupRouterGuard(router: Router) { @@ -124,7 +124,7 @@ export function createMessageGuard(router: Router) { notification.destroy(); } } catch (error) { - warn('message guard error:' + error); + warn("message guard error:" + error); } return true; }); diff --git a/src/router/guard/paramMenuGuard.ts b/src/router/guard/paramMenuGuard.ts index 1c75157..04edc4b 100644 --- a/src/router/guard/paramMenuGuard.ts +++ b/src/router/guard/paramMenuGuard.ts @@ -1,10 +1,10 @@ -import type { Router } from 'vue-router'; -import { configureDynamicParamsMenu } from '../helper/menuHelper'; -import { Menu } from '../types'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { useAppStoreWithOut } from '/@/store/modules/app'; +import type { Router } from "vue-router"; +import { configureDynamicParamsMenu } from "../helper/menuHelper"; +import { Menu } from "../types"; +import { PermissionModeEnum } from "/@/enums/appEnum"; +import { useAppStoreWithOut } from "/@/store/modules/app"; -import { usePermissionStoreWithOut } from '/@/store/modules/permission'; +import { usePermissionStoreWithOut } from "/@/store/modules/permission"; export function createParamMenuGuard(router: Router) { const permissionStore = usePermissionStoreWithOut(); diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index 4d39414..185ac8f 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -1,13 +1,13 @@ -import type { Router, RouteRecordRaw } from 'vue-router'; +import type { Router, RouteRecordRaw } from "vue-router"; -import { usePermissionStoreWithOut } from '/@/store/modules/permission'; +import { usePermissionStoreWithOut } from "/@/store/modules/permission"; -import { PageEnum } from '/@/enums/pageEnum'; -import { useUserStoreWithOut } from '/@/store/modules/user'; +import { PageEnum } from "/@/enums/pageEnum"; +import { useUserStoreWithOut } from "/@/store/modules/user"; -import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; +import { PAGE_NOT_FOUND_ROUTE } from "/@/router/routes/basic"; -import { RootRoute } from '/@/router/routes'; +import { RootRoute } from "/@/router/routes"; const LOGIN_PATH = PageEnum.BASE_LOGIN; @@ -38,7 +38,7 @@ export function createPermissionGuard(router: Router) { try { await userStore.afterLoginAction(); if (!isSessionTimeout) { - next((to.query?.redirect as string) || '/'); + next((to.query?.redirect as string) || "/"); return; } } catch {} diff --git a/src/router/guard/stateGuard.ts b/src/router/guard/stateGuard.ts index c34513c..bd31661 100644 --- a/src/router/guard/stateGuard.ts +++ b/src/router/guard/stateGuard.ts @@ -1,10 +1,10 @@ -import type { Router } from 'vue-router'; -import { useAppStore } from '/@/store/modules/app'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { useUserStore } from '/@/store/modules/user'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { PageEnum } from '/@/enums/pageEnum'; -import { removeTabChangeListener } from '/@/logics/mitt/routeChange'; +import type { Router } from "vue-router"; +import { useAppStore } from "/@/store/modules/app"; +import { useMultipleTabStore } from "/@/store/modules/multipleTab"; +import { useUserStore } from "/@/store/modules/user"; +import { usePermissionStore } from "/@/store/modules/permission"; +import { PageEnum } from "/@/enums/pageEnum"; +import { removeTabChangeListener } from "/@/logics/mitt/routeChange"; export function createStateGuard(router: Router) { router.afterEach((to) => { diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts index a130712..78cf7c9 100644 --- a/src/router/helper/menuHelper.ts +++ b/src/router/helper/menuHelper.ts @@ -1,23 +1,23 @@ -import { AppRouteModule } from '/@/router/types'; -import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types'; -import { findPath, treeMap } from '/@/utils/helper/treeHelper'; -import { cloneDeep } from 'lodash-es'; -import { isUrl } from '/@/utils/is'; -import { RouteParams } from 'vue-router'; -import { toRaw } from 'vue'; +import { AppRouteModule } from "/@/router/types"; +import type { MenuModule, Menu, AppRouteRecordRaw } from "/@/router/types"; +import { findPath, treeMap } from "/@/utils/helper/treeHelper"; +import { cloneDeep } from "lodash-es"; +import { isUrl } from "/@/utils/is"; +import { RouteParams } from "vue-router"; +import { toRaw } from "vue"; export function getAllParentPath<T = Recordable>(treeData: T[], path: string) { const menuList = findPath(treeData, (n) => n.path === path) as Menu[]; return (menuList || []).map((item) => item.path); } -function joinParentPath(menus: Menu[], parentPath = '') { +function joinParentPath(menus: Menu[], parentPath = "") { for (let index = 0; index < menus.length; index++) { const menu = menus[index]; // https://next.router.vuejs.org/guide/essentials/nested-routes.html // Note that nested paths that start with / will be treated as a root path. // This allows you to leverage the component nesting without having to use a nested URL. - if (!(menu.path.startsWith('/') || isUrl(menu.path))) { + if (!(menu.path.startsWith("/") || isUrl(menu.path))) { // path doesn't start with /, nor is it a url, join parent path menu.path = `${parentPath}/${menu.path}`; } @@ -42,7 +42,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi const routeList: AppRouteRecordRaw[] = []; cloneRouteModList.forEach((item) => { - if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === 'string') { + if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === "string") { item.path = item.redirect; } if (item.meta?.single) { diff --git a/src/router/helper/routeHelper.ts b/src/router/helper/routeHelper.ts index d1ff3bb..9d892eb 100644 --- a/src/router/helper/routeHelper.ts +++ b/src/router/helper/routeHelper.ts @@ -1,28 +1,28 @@ -import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types'; -import type { Router, RouteRecordNormalized } from 'vue-router'; +import type { AppRouteModule, AppRouteRecordRaw } from "/@/router/types"; +import type { Router, RouteRecordNormalized } from "vue-router"; -import { getParentLayout, LAYOUT, EXCEPTION_COMPONENT } from '/@/router/constant'; -import { cloneDeep, omit } from 'lodash-es'; -import { warn } from '/@/utils/log'; -import { createRouter, createWebHashHistory } from 'vue-router'; +import { getParentLayout, LAYOUT, EXCEPTION_COMPONENT } from "/@/router/constant"; +import { cloneDeep, omit } from "lodash-es"; +import { warn } from "/@/utils/log"; +import { createRouter, createWebHashHistory } from "vue-router"; -export type LayoutMapKey = 'LAYOUT'; -const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue'); +export type LayoutMapKey = "LAYOUT"; +const IFRAME = () => import("/@/views/sys/iframe/FrameBlank.vue"); -const LayoutMap = new Map<string, () => Promise<typeof import('*.vue')>>(); +const LayoutMap = new Map<string, () => Promise<typeof import("*.vue")>>(); -LayoutMap.set('LAYOUT', LAYOUT); -LayoutMap.set('IFRAME', IFRAME); +LayoutMap.set("LAYOUT", LAYOUT); +LayoutMap.set("IFRAME", IFRAME); let dynamicViewsModules: Record<string, () => Promise<Recordable>>; // Dynamic introduction function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) { - dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}'); + dynamicViewsModules = dynamicViewsModules || import.meta.glob("../../views/**/*.{vue,tsx}"); if (!routes) return; routes.forEach((item) => { if (!item.component && item.meta?.frameSrc) { - item.component = 'IFRAME'; + item.component = "IFRAME"; } const { component, name } = item; const { children } = item; @@ -46,11 +46,11 @@ function dynamicImport( ) { const keys = Object.keys(dynamicViewsModules); const matchKeys = keys.filter((key) => { - const k = key.replace('../../views', ''); - const startFlag = component.startsWith('/'); - const endFlag = component.endsWith('.vue') || component.endsWith('.tsx'); + const k = key.replace("../../views", ""); + const startFlag = component.startsWith("/"); + const endFlag = component.endsWith(".vue") || component.endsWith(".tsx"); const startIndex = startFlag ? 0 : 1; - const lastIndex = endFlag ? k.length : k.lastIndexOf('.'); + const lastIndex = endFlag ? k.length : k.lastIndexOf("."); return k.substring(startIndex, lastIndex) === component; }); if (matchKeys?.length === 1) { @@ -58,11 +58,11 @@ function dynamicImport( return dynamicViewsModules[matchKey]; } else if (matchKeys?.length > 1) { warn( - 'Please do not create `.vue` and `.TSX` files with the same file name in the same hierarchical directory under the views folder. This will cause dynamic introduction failure', + "Please do not create `.vue` and `.TSX` files with the same file name in the same hierarchical directory under the views folder. This will cause dynamic introduction failure", ); return; } else { - warn('在src/views/下找不到`' + component + '.vue` 或 `' + component + '.tsx`, 请自行创建!'); + warn("在src/views/下找不到`" + component + ".vue` 或 `" + component + ".tsx`, 请自行创建!"); return EXCEPTION_COMPONENT; } } @@ -72,20 +72,20 @@ export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModul routeList.forEach((route) => { const component = route.component as string; if (component) { - if (component.toUpperCase() === 'LAYOUT') { + if (component.toUpperCase() === "LAYOUT") { route.component = LayoutMap.get(component.toUpperCase()); } else { route.children = [cloneDeep(route)]; route.component = LAYOUT; route.name = `${route.name}Parent`; - route.path = ''; + route.path = ""; const meta = route.meta || {}; meta.single = true; meta.affix = false; route.meta = meta; } } else { - warn('请正确配置路由:' + route?.name + '的component属性'); + warn("请正确配置路由:" + route?.name + "的component属性"); } route.children && asyncImportRoute(route.children); }); @@ -119,7 +119,7 @@ function promoteRouteLevel(routeModule: AppRouteModule) { addToChildren(routes, routeModule.children || [], routeModule); router = null; - routeModule.children = routeModule.children?.map((item) => omit(item, 'children')); + routeModule.children = routeModule.children?.map((item) => omit(item, "children")); } // Add all sub-routes to the secondary route @@ -146,7 +146,7 @@ function addToChildren( // Determine whether the level exceeds 2 levels function isMultipleRoute(routeModule: AppRouteModule) { - if (!routeModule || !Reflect.has(routeModule, 'children') || !routeModule.children?.length) { + if (!routeModule || !Reflect.has(routeModule, "children") || !routeModule.children?.length) { return false; } diff --git a/src/router/index.ts b/src/router/index.ts index c349151..c3dbd70 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,8 +1,8 @@ -import type { RouteRecordRaw } from 'vue-router'; -import type { App } from 'vue'; +import type { RouteRecordRaw } from "vue-router"; +import type { App } from "vue"; -import { createRouter, createWebHashHistory } from 'vue-router'; -import { basicRoutes } from './routes'; +import { createRouter, createWebHashHistory } from "vue-router"; +import { basicRoutes } from "./routes"; // 白名单应该包含基本静态路由 const WHITE_NAME_LIST: string[] = []; diff --git a/src/router/menus/index.ts b/src/router/menus/index.ts index bf67721..4df7b8a 100644 --- a/src/router/menus/index.ts +++ b/src/router/menus/index.ts @@ -1,16 +1,16 @@ -import type { Menu, MenuModule } from '/@/router/types'; -import type { RouteRecordNormalized } from 'vue-router'; - -import { useAppStoreWithOut } from '/@/store/modules/app'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { transformMenuModule, getAllParentPath } from '/@/router/helper/menuHelper'; -import { filter } from '/@/utils/helper/treeHelper'; -import { isUrl } from '/@/utils/is'; -import { router } from '/@/router'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { pathToRegexp } from 'path-to-regexp'; - -const modules = import.meta.globEager('./modules/**/*.ts'); +import type { Menu, MenuModule } from "/@/router/types"; +import type { RouteRecordNormalized } from "vue-router"; + +import { useAppStoreWithOut } from "/@/store/modules/app"; +import { usePermissionStore } from "/@/store/modules/permission"; +import { transformMenuModule, getAllParentPath } from "/@/router/helper/menuHelper"; +import { filter } from "/@/utils/helper/treeHelper"; +import { isUrl } from "/@/utils/is"; +import { router } from "/@/router"; +import { PermissionModeEnum } from "/@/enums/appEnum"; +import { pathToRegexp } from "path-to-regexp"; + +const modules = import.meta.globEager("./modules/**/*.ts"); const menuModules: MenuModule[] = []; diff --git a/src/router/routes/basic.ts b/src/router/routes/basic.ts index 58db494..a370740 100644 --- a/src/router/routes/basic.ts +++ b/src/router/routes/basic.ts @@ -1,29 +1,29 @@ -import type { AppRouteRecordRaw } from '/@/router/types'; -import { t } from '/@/hooks/web/useI18n'; +import type { AppRouteRecordRaw } from "/@/router/types"; +import { t } from "/@/hooks/web/useI18n"; import { REDIRECT_NAME, LAYOUT, EXCEPTION_COMPONENT, PAGE_NOT_FOUND_NAME, -} from '/@/router/constant'; +} from "/@/router/constant"; // 404 on a page export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = { - path: '/:path(.*)*', + path: "/:path(.*)*", name: PAGE_NOT_FOUND_NAME, component: LAYOUT, meta: { - title: 'ErrorPage', + title: "ErrorPage", hideBreadcrumb: true, hideMenu: true, }, children: [ { - path: '/:path(.*)*', + path: "/:path(.*)*", name: PAGE_NOT_FOUND_NAME, component: EXCEPTION_COMPONENT, meta: { - title: 'ErrorPage', + title: "ErrorPage", hideBreadcrumb: true, hideMenu: true, }, @@ -32,9 +32,9 @@ export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = { }; export const REDIRECT_ROUTE: AppRouteRecordRaw = { - path: '/redirect', + path: "/redirect", component: LAYOUT, - name: 'RedirectTo', + name: "RedirectTo", meta: { title: REDIRECT_NAME, hideBreadcrumb: true, @@ -42,9 +42,9 @@ export const REDIRECT_ROUTE: AppRouteRecordRaw = { }, children: [ { - path: '/redirect/:path(.*)', + path: "/redirect/:path(.*)", name: REDIRECT_NAME, - component: () => import('/@/views/sys/redirect/index.vue'), + component: () => import("/@/views/sys/redirect/index.vue"), meta: { title: REDIRECT_NAME, hideBreadcrumb: true, @@ -54,24 +54,24 @@ export const REDIRECT_ROUTE: AppRouteRecordRaw = { }; export const ERROR_LOG_ROUTE: AppRouteRecordRaw = { - path: '/error-log', - name: 'ErrorLog', + path: "/error-log", + name: "ErrorLog", component: LAYOUT, - redirect: '/error-log/list', + redirect: "/error-log/list", meta: { - title: 'ErrorLog', + title: "ErrorLog", hideBreadcrumb: true, hideChildrenInMenu: true, }, children: [ { - path: 'list', - name: 'ErrorLogList', - component: () => import('/@/views/sys/error-log/index.vue'), + path: "list", + name: "ErrorLogList", + component: () => import("/@/views/sys/error-log/index.vue"), meta: { - title: t('routes.basic.errorLogList'), + title: t("routes.basic.errorLogList"), hideBreadcrumb: true, - currentActiveMenu: '/error-log', + currentActiveMenu: "/error-log", }, }, ], diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 149ec42..460485c 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -1,12 +1,12 @@ -import type { AppRouteRecordRaw, AppRouteModule } from '/@/router/types'; +import type { AppRouteRecordRaw, AppRouteModule } from "/@/router/types"; -import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic'; +import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from "/@/router/routes/basic"; -import { mainOutRoutes } from './mainOut'; -import { PageEnum } from '/@/enums/pageEnum'; -import { t } from '/@/hooks/web/useI18n'; +import { mainOutRoutes } from "./mainOut"; +import { PageEnum } from "/@/enums/pageEnum"; +import { t } from "/@/hooks/web/useI18n"; -const modules = import.meta.globEager('./modules/**/*.ts'); +const modules = import.meta.globEager("./modules/**/*.ts"); const routeModuleList: AppRouteModule[] = []; @@ -19,20 +19,20 @@ Object.keys(modules).forEach((key) => { export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]; export const RootRoute: AppRouteRecordRaw = { - path: '/', - name: 'Root', + path: "/", + name: "Root", redirect: PageEnum.BASE_HOME, meta: { - title: 'Root', + title: "Root", }, }; export const LoginRoute: AppRouteRecordRaw = { - path: '/login', - name: 'Login', - component: () => import('/@/views/sys/login/Login.vue'), + path: "/login", + name: "Login", + component: () => import("/@/views/sys/login/Login.vue"), meta: { - title: t('routes.basic.login'), + title: t("routes.basic.login"), }, }; diff --git a/src/router/routes/mainOut.ts b/src/router/routes/mainOut.ts index b079829..a9fd70e 100644 --- a/src/router/routes/mainOut.ts +++ b/src/router/routes/mainOut.ts @@ -3,7 +3,7 @@ The routing of this file will not show the layout. It is an independent new page. the contents of the file still need to log in to access */ -import type { AppRouteModule } from '/@/router/types'; +import type { AppRouteModule } from "/@/router/types"; // test // http:ip:port/main-out diff --git a/src/router/routes/modules/about.ts b/src/router/routes/modules/about.ts index d32c4f5..c3b162f 100644 --- a/src/router/routes/modules/about.ts +++ b/src/router/routes/modules/about.ts @@ -1,27 +1,27 @@ -import type { AppRouteModule } from '/@/router/types'; +import type { AppRouteModule } from "/@/router/types"; -import { LAYOUT } from '/@/router/constant'; -import { t } from '/@/hooks/web/useI18n'; +import { LAYOUT } from "/@/router/constant"; +import { t } from "/@/hooks/web/useI18n"; const dashboard: AppRouteModule = { - path: '/about', - name: 'About', + path: "/about", + name: "About", component: LAYOUT, - redirect: '/about/index', + redirect: "/about/index", meta: { hideChildrenInMenu: true, - icon: 'simple-icons:about-dot-me', - title: t('routes.dashboard.about'), + icon: "simple-icons:about-dot-me", + title: t("routes.dashboard.about"), orderNo: 100000, }, children: [ { - path: 'index', - name: 'AboutPage', - component: () => import('/@/views/sys/about/index.vue'), + path: "index", + name: "AboutPage", + component: () => import("/@/views/sys/about/index.vue"), meta: { - title: t('routes.dashboard.about'), - icon: 'simple-icons:about-dot-me', + title: t("routes.dashboard.about"), + icon: "simple-icons:about-dot-me", hideMenu: true, }, }, diff --git a/src/router/routes/modules/dashboard.ts b/src/router/routes/modules/dashboard.ts index f532ec7..bab6880 100644 --- a/src/router/routes/modules/dashboard.ts +++ b/src/router/routes/modules/dashboard.ts @@ -1,34 +1,34 @@ -import type { AppRouteModule } from '/@/router/types'; +import type { AppRouteModule } from "/@/router/types"; -import { LAYOUT } from '/@/router/constant'; -import { t } from '/@/hooks/web/useI18n'; +import { LAYOUT } from "/@/router/constant"; +import { t } from "/@/hooks/web/useI18n"; const dashboard: AppRouteModule = { - path: '/dashboard', - name: 'Dashboard', + path: "/dashboard", + name: "Dashboard", component: LAYOUT, - redirect: '/dashboard/analysis', + redirect: "/dashboard/analysis", meta: { orderNo: 10, - icon: 'ion:grid-outline', - title: t('routes.dashboard.dashboard'), + icon: "ion:grid-outline", + title: t("routes.dashboard.dashboard"), }, children: [ { - path: 'analysis', - name: 'Analysis', - component: () => import('/@/views/dashboard/analysis/index.vue'), + path: "analysis", + name: "Analysis", + component: () => import("/@/views/dashboard/analysis/index.vue"), meta: { // affix: true, - title: t('routes.dashboard.analysis'), + title: t("routes.dashboard.analysis"), }, }, { - path: 'workbench', - name: 'Workbench', - component: () => import('/@/views/dashboard/workbench/index.vue'), + path: "workbench", + name: "Workbench", + component: () => import("/@/views/dashboard/workbench/index.vue"), meta: { - title: t('routes.dashboard.workbench'), + title: t("routes.dashboard.workbench"), }, }, ], diff --git a/src/router/routes/modules/practice.ts b/src/router/routes/modules/practice.ts new file mode 100644 index 0000000..cb00b1e --- /dev/null +++ b/src/router/routes/modules/practice.ts @@ -0,0 +1,27 @@ +import type { AppRouteModule } from "/@/router/types"; + +import { LAYOUT } from "/@/router/constant"; +import { t } from "/@/hooks/web/useI18n"; + +const dashboard: AppRouteModule = { + path: "/practice", + name: "practice", + component: LAYOUT, + meta: { + icon: "simple-icons:about-dot-me", + title: t("routes.practice.about"), + }, + children: [ + { + path: "record", + name: "practiceRecord", + component: () => import("/@/views/student/practice/practice-record/index.vue"), + meta: { + title: t("routes.practice.record"), + icon: "simple-icons:about-dot-me", + }, + }, + ], +}; + +export default dashboard; diff --git a/src/router/types.ts b/src/router/types.ts index 082d208..e397725 100644 --- a/src/router/types.ts +++ b/src/router/types.ts @@ -1,14 +1,14 @@ -import type { RouteRecordRaw, RouteMeta } from 'vue-router'; -import { RoleEnum } from '/@/enums/roleEnum'; -import { defineComponent } from 'vue'; +import type { RouteRecordRaw, RouteMeta } from "vue-router"; +import { RoleEnum } from "/@/enums/roleEnum"; +import { defineComponent } from "vue"; export type Component<T = any> = | ReturnType<typeof defineComponent> - | (() => Promise<typeof import('*.vue')>) + | (() => Promise<typeof import("*.vue")>) | (() => Promise<T>); // @ts-ignore -export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> { +export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, "meta"> { name: string; meta: RouteMeta; component?: Component | string; @@ -19,7 +19,7 @@ export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> { } export interface MenuTag { - type?: 'primary' | 'error' | 'warn' | 'success'; + type?: "primary" | "error" | "warn" | "success"; content?: string; dot?: boolean; } diff --git a/src/settings/componentSetting.ts b/src/settings/componentSetting.ts index b2479b7..2c4de90 100644 --- a/src/settings/componentSetting.ts +++ b/src/settings/componentSetting.ts @@ -1,6 +1,6 @@ // Used to configure the general configuration of some components without modifying the components -import type { SorterResult } from '../components/Table'; +import type { SorterResult } from "../components/Table"; export default { // basic-table setting @@ -9,20 +9,20 @@ export default { // support xxx.xxx.xxx fetchSetting: { // The field name of the current page passed to the background - pageField: 'page', + pageField: "page", // The number field name of each page displayed in the background - sizeField: 'pageSize', + sizeField: "pageSize", // Field name of the form data returned by the interface - listField: 'items', + listField: "items", // Total number of tables returned by the interface field name - totalField: 'total', + totalField: "total", }, // Number of pages that can be selected - pageSizeOptions: ['10', '50', '80', '100'], + pageSizeOptions: ["10", "50", "80", "100"], // Default display quantity on one page defaultPageSize: 10, // Default Size - defaultSize: 'middle', + defaultSize: "middle", // Custom general sort function defaultSortFn: (sortInfo: SorterResult) => { const { field, order } = sortInfo; diff --git a/src/settings/designSetting.ts b/src/settings/designSetting.ts index a81b576..32c4372 100644 --- a/src/settings/designSetting.ts +++ b/src/settings/designSetting.ts @@ -1,48 +1,48 @@ -import { ThemeEnum } from '../enums/appEnum'; +import { ThemeEnum } from "../enums/appEnum"; -export const prefixCls = 'vben'; +export const prefixCls = "vben"; export const darkMode = ThemeEnum.LIGHT; // app theme preset color export const APP_PRESET_COLOR_LIST: string[] = [ - '#0960bd', - '#0084f4', - '#009688', - '#536dfe', - '#ff5c93', - '#ee4f12', - '#0096c7', - '#9c27b0', - '#ff9800', + "#0960bd", + "#0084f4", + "#009688", + "#536dfe", + "#ff5c93", + "#ee4f12", + "#0096c7", + "#9c27b0", + "#ff9800", ]; // header preset color export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ - '#ffffff', - '#151515', - '#009688', - '#5172DC', - '#018ffb', - '#409eff', - '#e74c3c', - '#24292e', - '#394664', - '#001529', - '#383f45', + "#ffffff", + "#151515", + "#009688", + "#5172DC", + "#018ffb", + "#409eff", + "#e74c3c", + "#24292e", + "#394664", + "#001529", + "#383f45", ]; // sider preset color export const SIDE_BAR_BG_COLOR_LIST: string[] = [ - '#001529', - '#212121', - '#273352', - '#ffffff', - '#191b24', - '#191a23', - '#304156', - '#001628', - '#28333E', - '#344058', - '#383f45', + "#001529", + "#212121", + "#273352", + "#ffffff", + "#191b24", + "#191a23", + "#304156", + "#001628", + "#28333E", + "#344058", + "#383f45", ]; diff --git a/src/settings/encryptionSetting.ts b/src/settings/encryptionSetting.ts index 3d61776..42c9eed 100644 --- a/src/settings/encryptionSetting.ts +++ b/src/settings/encryptionSetting.ts @@ -1,12 +1,12 @@ -import { isDevMode } from '/@/utils/env'; +import { isDevMode } from "/@/utils/env"; // System default cache time, in seconds export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7; // aes encryption key export const cacheCipher = { - key: '_11111000001111@', - iv: '@11111000001111_', + key: "_11111000001111@", + iv: "@11111000001111_", }; // Whether the system cache is encrypted using aes diff --git a/src/settings/localeSetting.ts b/src/settings/localeSetting.ts index 5452568..20bdf40 100644 --- a/src/settings/localeSetting.ts +++ b/src/settings/localeSetting.ts @@ -1,9 +1,9 @@ -import type { DropMenu } from '../components/Dropdown'; -import type { LocaleSetting, LocaleType } from '/#/config'; +import type { DropMenu } from "../components/Dropdown"; +import type { LocaleSetting, LocaleType } from "/#/config"; export const LOCALE: { [key: string]: LocaleType } = { - ZH_CN: 'zh_CN', - EN_US: 'en', + ZH_CN: "zh_CN", + EN_US: "en", }; export const localeSetting: LocaleSetting = { @@ -19,11 +19,11 @@ export const localeSetting: LocaleSetting = { // locale list export const localeList: DropMenu[] = [ { - text: '简体中文', + text: "简体中文", event: LOCALE.ZH_CN, }, { - text: 'English', + text: "English", event: LOCALE.EN_US, }, ]; diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index 0d4415b..b5ad1a1 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -1,6 +1,6 @@ -import type { ProjectConfig } from '/#/config'; -import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum'; -import { CacheTypeEnum } from '/@/enums/cacheEnum'; +import type { ProjectConfig } from "/#/config"; +import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from "/@/enums/menuEnum"; +import { CacheTypeEnum } from "/@/enums/cacheEnum"; import { ContentEnum, PermissionModeEnum, @@ -8,9 +8,9 @@ import { RouterTransitionEnum, SettingButtonPositionEnum, SessionTimeoutProcessingEnum, -} from '/@/enums/appEnum'; -import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting'; -import { primaryColor } from '../../build/config/themeConfig'; +} from "/@/enums/appEnum"; +import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from "./designSetting"; +import { primaryColor } from "../../build/config/themeConfig"; // ! You need to clear the browser cache after the change const setting: ProjectConfig = { @@ -103,7 +103,7 @@ const setting: ProjectConfig = { // Split menu split: false, // Top menu layout - topMenuAlign: 'center', + topMenuAlign: "center", // Fold trigger position trigger: TriggerEnum.HEADER, // Turn on accordion mode, only show a menu diff --git a/src/settings/siteSetting.ts b/src/settings/siteSetting.ts index b6ed211..33e9b4a 100644 --- a/src/settings/siteSetting.ts +++ b/src/settings/siteSetting.ts @@ -1,8 +1,8 @@ // github repo url -export const GITHUB_URL = 'https://github.com/anncwb/vue-vben-admin'; +export const GITHUB_URL = "https://github.com/anncwb/vue-vben-admin"; // vue-vben-admin-next-doc -export const DOC_URL = 'https://vvbin.cn/doc-next/'; +export const DOC_URL = "https://vvbin.cn/doc-next/"; // site url -export const SITE_URL = 'https://vvbin.cn/next/'; +export const SITE_URL = "https://vvbin.cn/next/"; diff --git a/src/store/index.ts b/src/store/index.ts index efaf6c9..96a63ba 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,5 +1,5 @@ -import type { App } from 'vue'; -import { createPinia } from 'pinia'; +import type { App } from "vue"; +import { createPinia } from "pinia"; const store = createPinia(); diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts index 72f9bf6..0c9ba03 100644 --- a/src/store/modules/app.ts +++ b/src/store/modules/app.ts @@ -4,18 +4,18 @@ import type { MenuSetting, TransitionSetting, MultiTabsSetting, -} from '/#/config'; -import type { BeforeMiniState } from '/#/store'; +} from "/#/config"; +import type { BeforeMiniState } from "/#/store"; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; +import { defineStore } from "pinia"; +import { store } from "/@/store"; -import { ThemeEnum } from '/@/enums/appEnum'; -import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY } from '/@/enums/cacheEnum'; -import { Persistent } from '/@/utils/cache/persistent'; -import { darkMode } from '/@/settings/designSetting'; -import { resetRouter } from '/@/router'; -import { deepMerge } from '/@/utils'; +import { ThemeEnum } from "/@/enums/appEnum"; +import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY } from "/@/enums/cacheEnum"; +import { Persistent } from "/@/utils/cache/persistent"; +import { darkMode } from "/@/settings/designSetting"; +import { resetRouter } from "/@/router"; +import { deepMerge } from "/@/utils"; interface AppState { darkMode?: ThemeEnum; @@ -28,7 +28,7 @@ interface AppState { } let timeId: TimeoutHandle; export const useAppStore = defineStore({ - id: 'app', + id: "app", state: (): AppState => ({ darkMode: undefined, pageLoading: false, @@ -39,7 +39,7 @@ export const useAppStore = defineStore({ getPageLoading(): boolean { return this.pageLoading; }, - getDarkMode(): 'light' | 'dark' | string { + getDarkMode(): "light" | "dark" | string { return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || darkMode; }, diff --git a/src/store/modules/errorLog.ts b/src/store/modules/errorLog.ts index a4b0b8c..32317e0 100644 --- a/src/store/modules/errorLog.ts +++ b/src/store/modules/errorLog.ts @@ -1,12 +1,12 @@ -import type { ErrorLogInfo } from '/#/store'; +import type { ErrorLogInfo } from "/#/store"; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; +import { defineStore } from "pinia"; +import { store } from "/@/store"; -import { formatToDateTime } from '/@/utils/dateUtil'; -import projectSetting from '/@/settings/projectSetting'; +import { formatToDateTime } from "/@/utils/dateUtil"; +import projectSetting from "/@/settings/projectSetting"; -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; +import { ErrorTypeEnum } from "/@/enums/exceptionEnum"; export interface ErrorLogState { errorLogInfoList: Nullable<ErrorLogInfo[]>; @@ -14,7 +14,7 @@ export interface ErrorLogState { } export const useErrorLogStore = defineStore({ - id: 'app-error-log', + id: "app-error-log", state: (): ErrorLogState => ({ errorLogInfoList: null, errorLogListCount: 0, @@ -57,12 +57,12 @@ export const useErrorLogStore = defineStore({ }; if (error.response) { const { - config: { url = '', data: params = '', method = 'get', headers = {} } = {}, + config: { url = "", data: params = "", method = "get", headers = {} } = {}, data = {}, } = error.response; errInfo.url = url; - errInfo.name = 'Ajax Error!'; - errInfo.file = '-'; + errInfo.name = "Ajax Error!"; + errInfo.file = "-"; errInfo.stack = JSON.stringify(data); errInfo.detail = JSON.stringify({ params, method, headers }); } diff --git a/src/store/modules/locale.ts b/src/store/modules/locale.ts index 8d72ffc..d27f4e0 100644 --- a/src/store/modules/locale.ts +++ b/src/store/modules/locale.ts @@ -1,11 +1,11 @@ -import type { LocaleSetting, LocaleType } from '/#/config'; +import type { LocaleSetting, LocaleType } from "/#/config"; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; +import { defineStore } from "pinia"; +import { store } from "/@/store"; -import { LOCALE_KEY } from '/@/enums/cacheEnum'; -import { createLocalStorage } from '/@/utils/cache'; -import { localeSetting } from '/@/settings/localeSetting'; +import { LOCALE_KEY } from "/@/enums/cacheEnum"; +import { createLocalStorage } from "/@/utils/cache"; +import { localeSetting } from "/@/settings/localeSetting"; const ls = createLocalStorage(); @@ -16,7 +16,7 @@ interface LocaleState { } export const useLocaleStore = defineStore({ - id: 'app-locale', + id: "app-locale", state: (): LocaleState => ({ localInfo: lsLocaleSetting, }), @@ -25,7 +25,7 @@ export const useLocaleStore = defineStore({ return !!this.localInfo?.showPicker; }, getLocale(): LocaleType { - return this.localInfo?.locale ?? 'zh_CN'; + return this.localInfo?.locale ?? "zh_CN"; }, }, actions: { diff --git a/src/store/modules/lock.ts b/src/store/modules/lock.ts index 6c22dbd..05d7e96 100644 --- a/src/store/modules/lock.ts +++ b/src/store/modules/lock.ts @@ -1,17 +1,17 @@ -import type { LockInfo } from '/#/store'; +import type { LockInfo } from "/#/store"; -import { defineStore } from 'pinia'; +import { defineStore } from "pinia"; -import { LOCK_INFO_KEY } from '/@/enums/cacheEnum'; -import { Persistent } from '/@/utils/cache/persistent'; -import { useUserStore } from './user'; +import { LOCK_INFO_KEY } from "/@/enums/cacheEnum"; +import { Persistent } from "/@/utils/cache/persistent"; +import { useUserStore } from "./user"; interface LockState { lockInfo: Nullable<LockInfo>; } export const useLockStore = defineStore({ - id: 'app-lock', + id: "app-lock", state: (): LockState => ({ lockInfo: Persistent.getLocal(LOCK_INFO_KEY), }), @@ -43,7 +43,7 @@ export const useLockStore = defineStore({ username, password: password!, goHome: false, - mode: 'none', + mode: "none", }); if (res) { this.resetLockInfo(); diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts index 023e876..afcc41b 100644 --- a/src/store/modules/multipleTab.ts +++ b/src/store/modules/multipleTab.ts @@ -1,19 +1,19 @@ -import type { RouteLocationNormalized, RouteLocationRaw, Router } from 'vue-router'; +import type { RouteLocationNormalized, RouteLocationRaw, Router } from "vue-router"; -import { toRaw, unref } from 'vue'; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; +import { toRaw, unref } from "vue"; +import { defineStore } from "pinia"; +import { store } from "/@/store"; -import { useGo, useRedo } from '/@/hooks/web/usePage'; -import { Persistent } from '/@/utils/cache/persistent'; +import { useGo, useRedo } from "/@/hooks/web/usePage"; +import { Persistent } from "/@/utils/cache/persistent"; -import { PageEnum } from '/@/enums/pageEnum'; -import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic'; -import { getRawRoute } from '/@/utils'; -import { MULTIPLE_TABS_KEY } from '/@/enums/cacheEnum'; +import { PageEnum } from "/@/enums/pageEnum"; +import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from "/@/router/routes/basic"; +import { getRawRoute } from "/@/utils"; +import { MULTIPLE_TABS_KEY } from "/@/enums/cacheEnum"; -import projectSetting from '/@/settings/projectSetting'; -import { useUserStore } from '/@/store/modules/user'; +import projectSetting from "/@/settings/projectSetting"; +import { useUserStore } from "/@/store/modules/user"; export interface MultipleTabState { cacheTabList: Set<string>; @@ -38,7 +38,7 @@ const getToTarget = (tabItem: RouteLocationNormalized) => { const cacheTab = projectSetting.multiTabsSetting.cache; export const useMultipleTabStore = defineStore({ - id: 'app-multiple-tab', + id: "app-multiple-tab", state: (): MultipleTabState => ({ // Tabs that need to be cached cacheTabList: new Set(), @@ -155,10 +155,10 @@ export const useMultipleTabStore = defineStore({ // 如果动态路由层级大于 0 了,那么就要限制该路由的打开数限制了 // 首先获取到真实的路由,使用配置方式减少计算开销. // const realName: string = path.match(/(\S*)\//)![1]; - const realPath = meta?.realPath ?? ''; + const realPath = meta?.realPath ?? ""; // 获取到已经打开的动态路由数, 判断是否大于某一个值 if ( - this.tabList.filter((e) => e.meta?.realPath ?? '' === realPath).length >= dynamicLevel + this.tabList.filter((e) => e.meta?.realPath ?? "" === realPath).length >= dynamicLevel ) { // 关闭第一个 const index = this.tabList.findIndex((item) => item.meta.realPath === realPath); diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index aa9d0f4..61d11f9 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -1,28 +1,28 @@ -import type { AppRouteRecordRaw, Menu } from '/@/router/types'; +import type { AppRouteRecordRaw, Menu } from "/@/router/types"; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useUserStore } from './user'; -import { useAppStoreWithOut } from './app'; -import { toRaw } from 'vue'; -import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper'; -import { transformRouteToMenu } from '/@/router/helper/menuHelper'; +import { defineStore } from "pinia"; +import { store } from "/@/store"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { useUserStore } from "./user"; +import { useAppStoreWithOut } from "./app"; +import { toRaw } from "vue"; +import { transformObjToRoute, flatMultiLevelRoutes } from "/@/router/helper/routeHelper"; +import { transformRouteToMenu } from "/@/router/helper/menuHelper"; -import projectSetting from '/@/settings/projectSetting'; +import projectSetting from "/@/settings/projectSetting"; -import { PermissionModeEnum } from '/@/enums/appEnum'; +import { PermissionModeEnum } from "/@/enums/appEnum"; -import { asyncRoutes } from '/@/router/routes'; -import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; +import { asyncRoutes } from "/@/router/routes"; +import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from "/@/router/routes/basic"; -import { filter } from '/@/utils/helper/treeHelper'; +import { filter } from "/@/utils/helper/treeHelper"; -import { getMenuList } from '/@/api/sys/menu'; -import { getPermCode } from '/@/api/sys/user'; +import { getMenuList } from "/@/api/sys/menu"; +import { getPermCode } from "/@/api/sys/user"; -import { useMessage } from '/@/hooks/web/useMessage'; -import { PageEnum } from '/@/enums/pageEnum'; +import { useMessage } from "/@/hooks/web/useMessage"; +import { PageEnum } from "/@/enums/pageEnum"; interface PermissionState { // Permission code list @@ -36,7 +36,7 @@ interface PermissionState { frontMenuList: Menu[]; } export const usePermissionStore = defineStore({ - id: 'app-permission', + id: "app-permission", state: (): PermissionState => ({ permCodeList: [], // Whether the route has been dynamically added @@ -124,17 +124,17 @@ export const usePermissionStore = defineStore({ const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { if (!routes || routes.length === 0) return; let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; - function patcher(routes: AppRouteRecordRaw[], parentPath = '') { - if (parentPath) parentPath = parentPath + '/'; + function patcher(routes: AppRouteRecordRaw[], parentPath = "") { + if (parentPath) parentPath = parentPath + "/"; routes.forEach((route: AppRouteRecordRaw) => { const { path, children, redirect } = route; - const currentPath = path.startsWith('/') ? path : parentPath + path; + const currentPath = path.startsWith("/") ? path : parentPath + path; if (currentPath === homePath) { if (redirect) { homePath = route.redirect! as string; } else { route.meta = Object.assign({}, route.meta, { affix: true }); - throw new Error('end'); + throw new Error("end"); } } children && children.length > 0 && patcher(children, currentPath); @@ -176,7 +176,7 @@ export const usePermissionStore = defineStore({ const { createMessage } = useMessage(); createMessage.loading({ - content: t('sys.app.menuLoading'), + content: t("sys.app.menuLoading"), duration: 1, }); diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 8461efd..6f16208 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -1,21 +1,21 @@ -import type { UserInfo } from '/#/store'; -import type { ErrorMessageMode } from '/#/axios'; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; -import { RoleEnum } from '/@/enums/roleEnum'; -import { PageEnum } from '/@/enums/pageEnum'; -import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum'; -import { getAuthCache, setAuthCache } from '/@/utils/auth'; -import { GetUserInfoModel, LoginParams } from '/@/api/sys/model/userModel'; -import { doLogout, getUserInfo, loginApi } from '/@/api/sys/user'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { router } from '/@/router'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { RouteRecordRaw } from 'vue-router'; -import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; -import { isArray } from '/@/utils/is'; -import { h } from 'vue'; +import type { UserInfo } from "/#/store"; +import type { ErrorMessageMode } from "/#/axios"; +import { defineStore } from "pinia"; +import { store } from "/@/store"; +import { RoleEnum } from "/@/enums/roleEnum"; +import { PageEnum } from "/@/enums/pageEnum"; +import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from "/@/enums/cacheEnum"; +import { getAuthCache, setAuthCache } from "/@/utils/auth"; +import { GetUserInfoModel, LoginParams } from "/@/api/sys/model/userModel"; +import { doLogout, getUserInfo, loginApi } from "/@/api/sys/user"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { useMessage } from "/@/hooks/web/useMessage"; +import { router } from "/@/router"; +import { usePermissionStore } from "/@/store/modules/permission"; +import { RouteRecordRaw } from "vue-router"; +import { PAGE_NOT_FOUND_ROUTE } from "/@/router/routes/basic"; +import { isArray } from "/@/utils/is"; +import { h } from "vue"; interface UserState { userInfo: Nullable<UserInfo>; @@ -26,7 +26,7 @@ interface UserState { } export const useUserStore = defineStore({ - id: 'app-user', + id: "app-user", state: (): UserState => ({ // user info userInfo: null, @@ -58,7 +58,7 @@ export const useUserStore = defineStore({ }, actions: { setToken(info: string | undefined) { - this.token = info ? info : ''; // for null or undefined value + this.token = info ? info : ""; // for null or undefined value setAuthCache(TOKEN_KEY, info); }, setRoleList(roleList: RoleEnum[]) { @@ -75,7 +75,7 @@ export const useUserStore = defineStore({ }, resetState() { this.userInfo = null; - this.token = ''; + this.token = ""; this.roleList = []; this.sessionTimeout = false; }, @@ -144,7 +144,7 @@ export const useUserStore = defineStore({ try { await doLogout(); } catch { - console.log('注销Token失败'); + console.log("注销Token失败"); } } this.setToken(undefined); @@ -160,9 +160,9 @@ export const useUserStore = defineStore({ const { createConfirm } = useMessage(); const { t } = useI18n(); createConfirm({ - iconType: 'warning', - title: () => h('span', t('sys.app.logoutTip')), - content: () => h('span', t('sys.app.logoutMessage')), + iconType: "warning", + title: () => h("span", t("sys.app.logoutTip")), + content: () => h("span", t("sys.app.logoutMessage")), onOk: async () => { await this.logout(true); }, diff --git a/src/utils/auth/index.ts b/src/utils/auth/index.ts index fdec836..15c2c23 100644 --- a/src/utils/auth/index.ts +++ b/src/utils/auth/index.ts @@ -1,7 +1,7 @@ -import { Persistent, BasicKeys } from '/@/utils/cache/persistent'; -import { CacheTypeEnum } from '/@/enums/cacheEnum'; -import projectSetting from '/@/settings/projectSetting'; -import { TOKEN_KEY } from '/@/enums/cacheEnum'; +import { Persistent, BasicKeys } from "/@/utils/cache/persistent"; +import { CacheTypeEnum } from "/@/enums/cacheEnum"; +import projectSetting from "/@/settings/projectSetting"; +import { TOKEN_KEY } from "/@/enums/cacheEnum"; const { permissionCacheType } = projectSetting; const isLocal = permissionCacheType === CacheTypeEnum.LOCAL; diff --git a/src/utils/cache/index.ts b/src/utils/cache/index.ts index 2004c66..ef1cad4 100644 --- a/src/utils/cache/index.ts +++ b/src/utils/cache/index.ts @@ -1,7 +1,7 @@ -import { getStorageShortName } from '/@/utils/env'; -import { createStorage as create, CreateStorageParams } from './storageCache'; -import { enableStorageEncryption } from '/@/settings/encryptionSetting'; -import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting'; +import { getStorageShortName } from "/@/utils/env"; +import { createStorage as create, CreateStorageParams } from "./storageCache"; +import { enableStorageEncryption } from "/@/settings/encryptionSetting"; +import { DEFAULT_CACHE_TIME } from "/@/settings/encryptionSetting"; export type Options = Partial<CreateStorageParams>; diff --git a/src/utils/cache/persistent.ts b/src/utils/cache/persistent.ts index cd68a36..ac001c2 100644 --- a/src/utils/cache/persistent.ts +++ b/src/utils/cache/persistent.ts @@ -1,9 +1,9 @@ -import type { LockInfo, UserInfo } from '/#/store'; -import type { ProjectConfig } from '/#/config'; -import type { RouteLocationNormalized } from 'vue-router'; +import type { LockInfo, UserInfo } from "/#/store"; +import type { ProjectConfig } from "/#/config"; +import type { RouteLocationNormalized } from "vue-router"; -import { createLocalStorage, createSessionStorage } from '/@/utils/cache'; -import { Memory } from './memory'; +import { createLocalStorage, createSessionStorage } from "/@/utils/cache"; +import { Memory } from "./memory"; import { TOKEN_KEY, USER_INFO_KEY, @@ -13,10 +13,10 @@ import { APP_LOCAL_CACHE_KEY, APP_SESSION_CACHE_KEY, MULTIPLE_TABS_KEY, -} from '/@/enums/cacheEnum'; -import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting'; -import { toRaw } from 'vue'; -import { pick, omit } from 'lodash-es'; +} from "/@/enums/cacheEnum"; +import { DEFAULT_CACHE_TIME } from "/@/settings/encryptionSetting"; +import { toRaw } from "vue"; +import { pick, omit } from "lodash-es"; interface BasicStore { [TOKEN_KEY]: string | number | null | undefined; @@ -96,7 +96,7 @@ export class Persistent { } } -window.addEventListener('beforeunload', function () { +window.addEventListener("beforeunload", function () { // TOKEN_KEY 在登录或注销时已经写入到storage了,此处为了解决同时打开多个窗口时token不同步的问题 // LOCK_INFO_KEY 在锁屏和解锁时写入,此处也不应修改 ls.set(APP_LOCAL_CACHE_KEY, { @@ -127,6 +127,6 @@ function storageChange(e: any) { } } -window.addEventListener('storage', storageChange); +window.addEventListener("storage", storageChange); initPersistentMemory(); diff --git a/src/utils/cache/storageCache.ts b/src/utils/cache/storageCache.ts index 8562665..b15a379 100644 --- a/src/utils/cache/storageCache.ts +++ b/src/utils/cache/storageCache.ts @@ -1,10 +1,10 @@ -import { cacheCipher } from '/@/settings/encryptionSetting'; +import { cacheCipher } from "/@/settings/encryptionSetting"; -import type { EncryptionParams } from '/@/utils/cipher'; +import type { EncryptionParams } from "/@/utils/cipher"; -import { AesEncryption } from '/@/utils/cipher'; +import { AesEncryption } from "/@/utils/cipher"; -import { isNullOrUnDef } from '/@/utils/is'; +import { isNullOrUnDef } from "/@/utils/is"; export interface CreateStorageParams extends EncryptionParams { prefixKey: string; @@ -13,7 +13,7 @@ export interface CreateStorageParams extends EncryptionParams { timeout?: Nullable<number>; } export const createStorage = ({ - prefixKey = '', + prefixKey = "", storage = sessionStorage, key = cacheCipher.key, iv = cacheCipher.iv, @@ -21,7 +21,7 @@ export const createStorage = ({ hasEncrypt = true, }: Partial<CreateStorageParams> = {}) => { if (hasEncrypt && [key.length, iv.length].some((item) => item !== 16)) { - throw new Error('When hasEncrypt is true, the key or iv must be 16 bits!'); + throw new Error("When hasEncrypt is true, the key or iv must be 16 bits!"); } const encryption = new AesEncryption({ key, iv }); diff --git a/src/utils/cipher.ts b/src/utils/cipher.ts index 9a8a89a..7e28ede 100644 --- a/src/utils/cipher.ts +++ b/src/utils/cipher.ts @@ -1,10 +1,10 @@ -import { encrypt, decrypt } from 'crypto-js/aes'; -import { parse } from 'crypto-js/enc-utf8'; -import pkcs7 from 'crypto-js/pad-pkcs7'; -import ECB from 'crypto-js/mode-ecb'; -import md5 from 'crypto-js/md5'; -import UTF8 from 'crypto-js/enc-utf8'; -import Base64 from 'crypto-js/enc-base64'; +import { encrypt, decrypt } from "crypto-js/aes"; +import { parse } from "crypto-js/enc-utf8"; +import pkcs7 from "crypto-js/pad-pkcs7"; +import ECB from "crypto-js/mode-ecb"; +import md5 from "crypto-js/md5"; +import UTF8 from "crypto-js/enc-utf8"; +import Base64 from "crypto-js/enc-base64"; export interface EncryptionParams { key: string; diff --git a/src/utils/color.ts b/src/utils/color.ts index 67a6b56..5d1a59e 100644 --- a/src/utils/color.ts +++ b/src/utils/color.ts @@ -22,7 +22,7 @@ export function isHexColor(color: string) { export function rgbToHex(r: number, g: number, b: number) { // tslint:disable-next-line:no-bitwise const hex = ((r << 16) | (g << 8) | b).toString(16); - return '#' + new Array(Math.abs(hex.length - 7)).join('0') + hex; + return "#" + new Array(Math.abs(hex.length - 7)).join("0") + hex; } /** @@ -34,7 +34,7 @@ export function hexToRGB(hex: string) { let sHex = hex.toLowerCase(); if (isHexColor(hex)) { if (sHex.length === 4) { - let sColorNew = '#'; + let sColorNew = "#"; for (let i = 1; i < 4; i += 1) { sColorNew += sHex.slice(i, i + 1).concat(sHex.slice(i, i + 1)); } @@ -42,9 +42,9 @@ export function hexToRGB(hex: string) { } const sColorChange: number[] = []; for (let i = 1; i < 7; i += 2) { - sColorChange.push(parseInt('0x' + sHex.slice(i, i + 2))); + sColorChange.push(parseInt("0x" + sHex.slice(i, i + 2))); } - return 'RGB(' + sColorChange.join(',') + ')'; + return "RGB(" + sColorChange.join(",") + ")"; } return sHex; } @@ -52,8 +52,8 @@ export function hexToRGB(hex: string) { export function colorIsDark(color: string) { if (!isHexColor(color)) return; const [r, g, b] = hexToRGB(color) - .replace(/(?:\(|\)|rgb|RGB)*/g, '') - .split(',') + .replace(/(?:\(|\)|rgb|RGB)*/g, "") + .split(",") .map((item) => Number(item)); return r * 0.299 + g * 0.578 + b * 0.114 < 192; } @@ -65,7 +65,7 @@ export function colorIsDark(color: string) { * @returns {string} The HEX representation of the processed color */ export function darken(color: string, amount: number) { - color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color; + color = color.indexOf("#") >= 0 ? color.substring(1, color.length) : color; amount = Math.trunc((255 * amount) / 100); return `#${subtractLight(color.substring(0, 2), amount)}${subtractLight( color.substring(2, 4), @@ -80,7 +80,7 @@ export function darken(color: string, amount: number) { * @returns {string} The processed color represented as HEX */ export function lighten(color: string, amount: number) { - color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color; + color = color.indexOf("#") >= 0 ? color.substring(1, color.length) : color; amount = Math.trunc((255 * amount) / 100); return `#${addLight(color.substring(0, 2), amount)}${addLight( color.substring(2, 4), @@ -133,9 +133,9 @@ function contrast(rgb1: string[], rgb2: number[]) { */ export function calculateBestTextColor(hexColor: string) { const rgbColor = hexToRGB(hexColor.substring(1)); - const contrastWithBlack = contrast(rgbColor.split(','), [0, 0, 0]); + const contrastWithBlack = contrast(rgbColor.split(","), [0, 0, 0]); - return contrastWithBlack >= 12 ? '#000000' : '#FFFFFF'; + return contrastWithBlack >= 12 ? "#000000" : "#FFFFFF"; } /** diff --git a/src/utils/dateUtil.ts b/src/utils/dateUtil.ts index 1ea9724..cce7810 100644 --- a/src/utils/dateUtil.ts +++ b/src/utils/dateUtil.ts @@ -1,10 +1,10 @@ /** * Independent time operation tool to facilitate subsequent switch to dayjs */ -import moment from 'moment'; +import moment from "moment"; -const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; -const DATE_FORMAT = 'YYYY-MM-DD '; +const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; +const DATE_FORMAT = "YYYY-MM-DD "; export function formatToDateTime( date: moment.MomentInput = undefined, diff --git a/src/utils/domUtils.ts b/src/utils/domUtils.ts index 7efe9cb..15a069f 100644 --- a/src/utils/domUtils.ts +++ b/src/utils/domUtils.ts @@ -1,5 +1,5 @@ -import type { FunctionArgs } from '@vueuse/core'; -import { upperFirst } from 'lodash-es'; +import type { FunctionArgs } from "@vueuse/core"; +import { upperFirst } from "lodash-es"; export interface ViewportOffsetResult { left: number; @@ -18,17 +18,17 @@ export function getBoundingClientRect(element: Element): DOMRect | number { } function trim(string: string) { - return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); + return (string || "").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ""); } /* istanbul ignore next */ export function hasClass(el: Element, cls: string) { if (!el || !cls) return false; - if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.'); + if (cls.indexOf(" ") !== -1) throw new Error("className should not contain space."); if (el.classList) { return el.classList.contains(cls); } else { - return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; + return (" " + el.className + " ").indexOf(" " + cls + " ") > -1; } } @@ -36,7 +36,7 @@ export function hasClass(el: Element, cls: string) { export function addClass(el: Element, cls: string) { if (!el) return; let curClass = el.className; - const classes = (cls || '').split(' '); + const classes = (cls || "").split(" "); for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; @@ -45,7 +45,7 @@ export function addClass(el: Element, cls: string) { if (el.classList) { el.classList.add(clsName); } else if (!hasClass(el, clsName)) { - curClass += ' ' + clsName; + curClass += " " + clsName; } } if (!el.classList) { @@ -56,8 +56,8 @@ export function addClass(el: Element, cls: string) { /* istanbul ignore next */ export function removeClass(el: Element, cls: string) { if (!el || !cls) return; - const classes = cls.split(' '); - let curClass = ' ' + el.className + ' '; + const classes = cls.split(" "); + let curClass = " " + el.className + " "; for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; @@ -66,7 +66,7 @@ export function removeClass(el: Element, cls: string) { if (el.classList) { el.classList.remove(clsName); } else if (hasClass(el, clsName)) { - curClass = curClass.replace(' ' + clsName + ' ', ' '); + curClass = curClass.replace(" " + clsName + " ", " "); } } if (!el.classList) { @@ -120,7 +120,7 @@ export function getViewportOffset(element: Element): ViewportOffsetResult { } export function hackCss(attr: string, value: string) { - const prefix: string[] = ['webkit', 'Moz', 'ms', 'OT']; + const prefix: string[] = ["webkit", "Moz", "ms", "OT"]; const styleObj: any = {}; prefix.forEach((item) => { diff --git a/src/utils/env.ts b/src/utils/env.ts index 408398a..29ebeaf 100644 --- a/src/utils/env.ts +++ b/src/utils/env.ts @@ -1,8 +1,8 @@ -import type { GlobEnvConfig } from '/#/config'; +import type { GlobEnvConfig } from "/#/config"; -import { warn } from '/@/utils/log'; -import pkg from '../../package.json'; -import { getConfigFileName } from '../../build/getConfigFileName'; +import { warn } from "/@/utils/log"; +import pkg from "../../package.json"; +import { getConfigFileName } from "../../build/getConfigFileName"; export function getCommonStoragePrefix() { const { VITE_GLOB_APP_SHORT_NAME } = getAppEnvConfig(); @@ -48,12 +48,12 @@ export function getAppEnvConfig() { /** * @description: Development mode */ -export const devMode = 'development'; +export const devMode = "development"; /** * @description: Production mode */ -export const prodMode = 'production'; +export const prodMode = "production"; /** * @description: Get environment variables diff --git a/src/utils/event/index.ts b/src/utils/event/index.ts index 3a60d7c..9234c0f 100644 --- a/src/utils/event/index.ts +++ b/src/utils/event/index.ts @@ -1,6 +1,6 @@ -import ResizeObserver from 'resize-observer-polyfill'; +import ResizeObserver from "resize-observer-polyfill"; -const isServer = typeof window === 'undefined'; +const isServer = typeof window === "undefined"; /* istanbul ignore next */ function resizeHandler(entries: any[]) { @@ -35,8 +35,8 @@ export function removeResizeListener(element: any, fn: () => any) { } export function triggerWindowResize() { - const event = document.createEvent('HTMLEvents'); - event.initEvent('resize', true, true); - (event as any).eventType = 'message'; + const event = document.createEvent("HTMLEvents"); + event.initEvent("resize", true, true); + (event as any).eventType = "message"; window.dispatchEvent(event); } diff --git a/src/utils/factory/createAsyncComponent.tsx b/src/utils/factory/createAsyncComponent.tsx index 4f668ad..88d0fce 100644 --- a/src/utils/factory/createAsyncComponent.tsx +++ b/src/utils/factory/createAsyncComponent.tsx @@ -1,9 +1,9 @@ import { defineAsyncComponent, // FunctionalComponent, CSSProperties -} from 'vue'; -import { Spin } from 'ant-design-vue'; -import { noop } from '/@/utils/index'; +} from "vue"; +import { Spin } from "ant-design-vue"; +import { noop } from "/@/utils/index"; // const Loading: FunctionalComponent<{ size: 'small' | 'default' | 'large' }> = (props) => { // const style: CSSProperties = { @@ -20,7 +20,7 @@ import { noop } from '/@/utils/index'; // }; interface Options { - size?: 'default' | 'small' | 'large'; + size?: "default" | "small" | "large"; delay?: number; timeout?: number; loading?: boolean; @@ -28,7 +28,7 @@ interface Options { } export function createAsyncComponent(loader: Fn, options: Options = {}) { - const { size = 'small', delay = 100, timeout = 30000, loading = false, retry = true } = options; + const { size = "small", delay = 100, timeout = 30000, loading = false, retry = true } = options; return defineAsyncComponent({ loader, loadingComponent: loading ? <Spin spinning={true} size={size} /> : undefined, diff --git a/src/utils/file/base64Conver.ts b/src/utils/file/base64Conver.ts index d77618a..ab6d0a4 100644 --- a/src/utils/file/base64Conver.ts +++ b/src/utils/file/base64Conver.ts @@ -2,7 +2,7 @@ * @description: base64 to blob */ export function dataURLtoBlob(base64Buf: string): Blob { - const arr = base64Buf.split(','); + const arr = base64Buf.split(","); const typeItem = arr[0]; const mime = typeItem.match(/:(.*?);/)![1]; const bstr = atob(arr[1]); @@ -20,11 +20,11 @@ export function dataURLtoBlob(base64Buf: string): Blob { */ export function urlToBase64(url: string, mineType?: string): Promise<string> { return new Promise((resolve, reject) => { - let canvas = document.createElement('CANVAS') as Nullable<HTMLCanvasElement>; - const ctx = canvas!.getContext('2d'); + let canvas = document.createElement("CANVAS") as Nullable<HTMLCanvasElement>; + const ctx = canvas!.getContext("2d"); const img = new Image(); - img.crossOrigin = ''; + img.crossOrigin = ""; img.onload = function () { if (!canvas || !ctx) { return reject(); @@ -32,7 +32,7 @@ export function urlToBase64(url: string, mineType?: string): Promise<string> { canvas.height = img.height; canvas.width = img.width; ctx.drawImage(img, 0, 0); - const dataURL = canvas.toDataURL(mineType || 'image/png'); + const dataURL = canvas.toDataURL(mineType || "image/png"); canvas = null; resolve(dataURL); }; diff --git a/src/utils/file/download.ts b/src/utils/file/download.ts index 6af9ab4..0f4f8fa 100644 --- a/src/utils/file/download.ts +++ b/src/utils/file/download.ts @@ -1,5 +1,5 @@ -import { openWindow } from '..'; -import { dataURLtoBlob, urlToBase64 } from './base64Conver'; +import { openWindow } from ".."; +import { dataURLtoBlob, urlToBase64 } from "./base64Conver"; /** * Download online pictures @@ -34,16 +34,16 @@ export function downloadByBase64(buf: string, filename: string, mime?: string, b * @param {*} bom */ export function downloadByData(data: BlobPart, filename: string, mime?: string, bom?: BlobPart) { - const blobData = typeof bom !== 'undefined' ? [bom, data] : [data]; - const blob = new Blob(blobData, { type: mime || 'application/octet-stream' }); + const blobData = typeof bom !== "undefined" ? [bom, data] : [data]; + const blob = new Blob(blobData, { type: mime || "application/octet-stream" }); const blobURL = window.URL.createObjectURL(blob); - const tempLink = document.createElement('a'); - tempLink.style.display = 'none'; + const tempLink = document.createElement("a"); + tempLink.style.display = "none"; tempLink.href = blobURL; - tempLink.setAttribute('download', filename); - if (typeof tempLink.download === 'undefined') { - tempLink.setAttribute('target', '_blank'); + tempLink.setAttribute("download", filename); + if (typeof tempLink.download === "undefined") { + tempLink.setAttribute("target", "_blank"); } document.body.appendChild(tempLink); tempLink.click(); @@ -57,38 +57,38 @@ export function downloadByData(data: BlobPart, filename: string, mime?: string, */ export function downloadByUrl({ url, - target = '_blank', + target = "_blank", fileName, }: { url: string; target?: TargetContext; fileName?: string; }): boolean { - const isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1; - const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1; + const isChrome = window.navigator.userAgent.toLowerCase().indexOf("chrome") > -1; + const isSafari = window.navigator.userAgent.toLowerCase().indexOf("safari") > -1; if (/(iP)/g.test(window.navigator.userAgent)) { - console.error('Your browser does not support download!'); + console.error("Your browser does not support download!"); return false; } if (isChrome || isSafari) { - const link = document.createElement('a'); + const link = document.createElement("a"); link.href = url; link.target = target; if (link.download !== undefined) { - link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length); + link.download = fileName || url.substring(url.lastIndexOf("/") + 1, url.length); } if (document.createEvent) { - const e = document.createEvent('MouseEvents'); - e.initEvent('click', true, true); + const e = document.createEvent("MouseEvents"); + e.initEvent("click", true, true); link.dispatchEvent(e); return true; } } - if (url.indexOf('?') === -1) { - url += '?download'; + if (url.indexOf("?") === -1) { + url += "?download"; } openWindow(url, { target }); diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts index 0535af7..ee2cda7 100644 --- a/src/utils/helper/treeHelper.ts +++ b/src/utils/helper/treeHelper.ts @@ -4,9 +4,9 @@ interface TreeHelperConfig { pid: string; } const DEFAULT_CONFIG: TreeHelperConfig = { - id: 'id', - children: 'children', - pid: 'pid', + id: "id", + children: "children", + pid: "pid", }; const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config); @@ -167,7 +167,7 @@ export function treeMap<T = any>(treeData: T[], opt: { children?: string; conver */ export function treeMapEach( data: any, - { children = 'children', conversion }: { children?: string; conversion: Fn }, + { children = "children", conversion }: { children?: string; conversion: Fn }, ) { const haveChildren = Array.isArray(data[children]) && data[children].length > 0; const conversionData = conversion(data) || {}; diff --git a/src/utils/helper/tsxHelper.tsx b/src/utils/helper/tsxHelper.tsx index 46e0001..f2b43b4 100644 --- a/src/utils/helper/tsxHelper.tsx +++ b/src/utils/helper/tsxHelper.tsx @@ -1,10 +1,10 @@ -import { Slots } from 'vue'; -import { isFunction } from '/@/utils/is'; +import { Slots } from "vue"; +import { isFunction } from "/@/utils/is"; /** * @description: Get slot to prevent empty error */ -export function getSlot(slots: Slots, slot = 'default', data?: any) { +export function getSlot(slots: Slots, slot = "default", data?: any) { if (!slots || !Reflect.has(slots, slot)) { return null; } diff --git a/src/utils/http/axios/Axios.ts b/src/utils/http/axios/Axios.ts index 0f71956..c7a9f90 100644 --- a/src/utils/http/axios/Axios.ts +++ b/src/utils/http/axios/Axios.ts @@ -1,15 +1,15 @@ -import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError } from 'axios'; -import type { RequestOptions, Result, UploadFileParams } from '/#/axios'; -import type { CreateAxiosOptions } from './axiosTransform'; -import axios from 'axios'; -import qs from 'qs'; -import { AxiosCanceler } from './axiosCancel'; -import { isFunction } from '/@/utils/is'; -import { cloneDeep } from 'lodash-es'; -import { ContentTypeEnum } from '/@/enums/httpEnum'; -import { RequestEnum } from '/@/enums/httpEnum'; - -export * from './axiosTransform'; +import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError } from "axios"; +import type { RequestOptions, Result, UploadFileParams } from "/#/axios"; +import type { CreateAxiosOptions } from "./axiosTransform"; +import axios from "axios"; +import qs from "qs"; +import { AxiosCanceler } from "./axiosCancel"; +import { isFunction } from "/@/utils/is"; +import { cloneDeep } from "lodash-es"; +import { ContentTypeEnum } from "/@/enums/httpEnum"; +import { RequestEnum } from "/@/enums/httpEnum"; + +export * from "./axiosTransform"; /** * @description: axios module @@ -122,7 +122,7 @@ export class VAxios { */ uploadFile<T = any>(config: AxiosRequestConfig, params: UploadFileParams) { const formData = new window.FormData(); - const customFilename = params.name || 'file'; + const customFilename = params.name || "file"; if (params.filename) { formData.append(customFilename, params.file, params.filename); @@ -146,10 +146,10 @@ export class VAxios { return this.axiosInstance.request<T>({ ...config, - method: 'POST', + method: "POST", data: formData, headers: { - 'Content-type': ContentTypeEnum.FORM_DATA, + "Content-type": ContentTypeEnum.FORM_DATA, // @ts-ignore ignoreCancelToken: true, }, @@ -159,11 +159,11 @@ export class VAxios { // support form-data supportFormData(config: AxiosRequestConfig) { const headers = config.headers || this.options.headers; - const contentType = headers?.['Content-Type'] || headers?.['content-type']; + const contentType = headers?.["Content-Type"] || headers?.["content-type"]; if ( contentType !== ContentTypeEnum.FORM_URLENCODED || - !Reflect.has(config, 'data') || + !Reflect.has(config, "data") || config.method?.toUpperCase() === RequestEnum.GET ) { return config; @@ -171,24 +171,24 @@ export class VAxios { return { ...config, - data: qs.stringify(config.data, { arrayFormat: 'brackets' }), + data: qs.stringify(config.data, { arrayFormat: "brackets" }), }; } get<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { - return this.request({ ...config, method: 'GET' }, options); + return this.request({ ...config, method: "GET" }, options); } post<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { - return this.request({ ...config, method: 'POST' }, options); + return this.request({ ...config, method: "POST" }, options); } put<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { - return this.request({ ...config, method: 'PUT' }, options); + return this.request({ ...config, method: "PUT" }, options); } delete<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { - return this.request({ ...config, method: 'DELETE' }, options); + return this.request({ ...config, method: "DELETE" }, options); } request<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { @@ -216,7 +216,7 @@ export class VAxios { const ret = transformRequestHook(res, opt); resolve(ret); } catch (err) { - reject(err || new Error('request error!')); + reject(err || new Error("request error!")); } return; } diff --git a/src/utils/http/axios/axiosCancel.ts b/src/utils/http/axios/axiosCancel.ts index 081233e..29e3ac7 100644 --- a/src/utils/http/axios/axiosCancel.ts +++ b/src/utils/http/axios/axiosCancel.ts @@ -1,11 +1,11 @@ -import type { AxiosRequestConfig, Canceler } from 'axios'; -import axios from 'axios'; -import { isFunction } from '/@/utils/is'; +import type { AxiosRequestConfig, Canceler } from "axios"; +import axios from "axios"; +import { isFunction } from "/@/utils/is"; // Used to store the identification and cancellation function of each request let pendingMap = new Map<string, Canceler>(); -export const getPendingUrl = (config: AxiosRequestConfig) => [config.method, config.url].join('&'); +export const getPendingUrl = (config: AxiosRequestConfig) => [config.method, config.url].join("&"); export class AxiosCanceler { /** diff --git a/src/utils/http/axios/axiosTransform.ts b/src/utils/http/axios/axiosTransform.ts index f6cbc80..c756ffd 100644 --- a/src/utils/http/axios/axiosTransform.ts +++ b/src/utils/http/axios/axiosTransform.ts @@ -1,8 +1,8 @@ /** * Data processing class, can be configured according to the project */ -import type { AxiosRequestConfig, AxiosResponse } from 'axios'; -import type { RequestOptions, Result } from '/#/axios'; +import type { AxiosRequestConfig, AxiosResponse } from "axios"; +import type { RequestOptions, Result } from "/#/axios"; export interface CreateAxiosOptions extends AxiosRequestConfig { authenticationScheme?: string; diff --git a/src/utils/http/axios/checkStatus.ts b/src/utils/http/axios/checkStatus.ts index acadffa..9e6a115 100644 --- a/src/utils/http/axios/checkStatus.ts +++ b/src/utils/http/axios/checkStatus.ts @@ -1,11 +1,11 @@ -import type { ErrorMessageMode } from '/#/axios'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { ErrorMessageMode } from "/#/axios"; +import { useMessage } from "/@/hooks/web/useMessage"; +import { useI18n } from "/@/hooks/web/useI18n"; // import router from '/@/router'; // import { PageEnum } from '/@/enums/pageEnum'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import projectSetting from '/@/settings/projectSetting'; -import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum'; +import { useUserStoreWithOut } from "/@/store/modules/user"; +import projectSetting from "/@/settings/projectSetting"; +import { SessionTimeoutProcessingEnum } from "/@/enums/appEnum"; const { createMessage, createErrorModal } = useMessage(); const error = createMessage.error!; @@ -14,11 +14,11 @@ const stp = projectSetting.sessionTimeoutProcessing; export function checkStatus( status: number, msg: string, - errorMessageMode: ErrorMessageMode = 'message', + errorMessageMode: ErrorMessageMode = "message", ): void { const { t } = useI18n(); const userStore = useUserStoreWithOut(); - let errMessage = ''; + let errMessage = ""; switch (status) { case 400: @@ -29,7 +29,7 @@ export function checkStatus( // Return to the current page after successful login. This step needs to be operated on the login page. case 401: userStore.setToken(undefined); - errMessage = msg || t('sys.api.errMsg401'); + errMessage = msg || t("sys.api.errMsg401"); if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) { userStore.setSessionTimeout(true); } else { @@ -37,43 +37,43 @@ export function checkStatus( } break; case 403: - errMessage = t('sys.api.errMsg403'); + errMessage = t("sys.api.errMsg403"); break; // 404请求不存在 case 404: - errMessage = t('sys.api.errMsg404'); + errMessage = t("sys.api.errMsg404"); break; case 405: - errMessage = t('sys.api.errMsg405'); + errMessage = t("sys.api.errMsg405"); break; case 408: - errMessage = t('sys.api.errMsg408'); + errMessage = t("sys.api.errMsg408"); break; case 500: - errMessage = t('sys.api.errMsg500'); + errMessage = t("sys.api.errMsg500"); break; case 501: - errMessage = t('sys.api.errMsg501'); + errMessage = t("sys.api.errMsg501"); break; case 502: - errMessage = t('sys.api.errMsg502'); + errMessage = t("sys.api.errMsg502"); break; case 503: - errMessage = t('sys.api.errMsg503'); + errMessage = t("sys.api.errMsg503"); break; case 504: - errMessage = t('sys.api.errMsg504'); + errMessage = t("sys.api.errMsg504"); break; case 505: - errMessage = t('sys.api.errMsg505'); + errMessage = t("sys.api.errMsg505"); break; default: } if (errMessage) { - if (errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: errMessage }); - } else if (errorMessageMode === 'message') { + if (errorMessageMode === "modal") { + createErrorModal({ title: t("sys.api.errorTip"), content: errMessage }); + } else if (errorMessageMode === "message") { error({ content: errMessage, key: `global_error_message_status_${status}` }); } } diff --git a/src/utils/http/axios/helper.ts b/src/utils/http/axios/helper.ts index ffbe08b..3157556 100644 --- a/src/utils/http/axios/helper.ts +++ b/src/utils/http/axios/helper.ts @@ -1,6 +1,6 @@ -import { isObject, isString } from '/@/utils/is'; +import { isObject, isString } from "/@/utils/is"; -const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; +const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; export function joinTimestamp<T extends boolean>( join: boolean, @@ -9,7 +9,7 @@ export function joinTimestamp<T extends boolean>( export function joinTimestamp(join: boolean, restful = false): string | object { if (!join) { - return restful ? '' : {}; + return restful ? "" : {}; } const now = new Date().getTime(); if (restful) { @@ -22,7 +22,7 @@ export function joinTimestamp(join: boolean, restful = false): string | object { * @description: Format request parameter time */ export function formatRequestDate(params: Recordable) { - if (Object.prototype.toString.call(params) !== '[object Object]') { + if (Object.prototype.toString.call(params) !== "[object Object]") { return; } diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index c73af07..4987b32 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -1,21 +1,21 @@ // axios配置 可自行根据项目进行更改,只需更改该文件即可,其他文件可以不动 // The axios configuration can be changed according to the project, just change the file, other files can be left unchanged -import type { AxiosResponse } from 'axios'; -import type { RequestOptions, Result } from '/#/axios'; -import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform'; -import { VAxios } from './Axios'; -import { checkStatus } from './checkStatus'; -import { useGlobSetting } from '/@/hooks/setting'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { RequestEnum, ResultEnum, ContentTypeEnum } from '/@/enums/httpEnum'; -import { isString } from '/@/utils/is'; -import { getToken } from '/@/utils/auth'; -import { setObjToUrlParams, deepMerge } from '/@/utils'; -import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { joinTimestamp, formatRequestDate } from './helper'; -import { useUserStoreWithOut } from '/@/store/modules/user'; +import type { AxiosResponse } from "axios"; +import type { RequestOptions, Result } from "/#/axios"; +import type { AxiosTransform, CreateAxiosOptions } from "./axiosTransform"; +import { VAxios } from "./Axios"; +import { checkStatus } from "./checkStatus"; +import { useGlobSetting } from "/@/hooks/setting"; +import { useMessage } from "/@/hooks/web/useMessage"; +import { RequestEnum, ResultEnum, ContentTypeEnum } from "/@/enums/httpEnum"; +import { isString } from "/@/utils/is"; +import { getToken } from "/@/utils/auth"; +import { setObjToUrlParams, deepMerge } from "/@/utils"; +import { useErrorLogStoreWithOut } from "/@/store/modules/errorLog"; +import { useI18n } from "/@/hooks/web/useI18n"; +import { joinTimestamp, formatRequestDate } from "./helper"; +import { useUserStoreWithOut } from "/@/store/modules/user"; const globSetting = useGlobSetting(); const urlPrefix = globSetting.urlPrefix; @@ -45,23 +45,23 @@ const transform: AxiosTransform = { const { data } = res; if (!data) { // return '[HTTP] Request has no return value'; - throw new Error(t('sys.api.apiRequestFailed')); + throw new Error(t("sys.api.apiRequestFailed")); } // 这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式 const { code, result, message } = data; // 这里逻辑可以根据项目进行修改 - const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESS; + const hasSuccess = data && Reflect.has(data, "code") && code === ResultEnum.SUCCESS; if (hasSuccess) { return result; } // 在此处根据自己项目的实际情况对不同的code执行不同的操作 // 如果不希望中断当前请求,请return数据,否则直接抛出异常即可 - let timeoutMsg = ''; + let timeoutMsg = ""; switch (code) { case ResultEnum.TIMEOUT: - timeoutMsg = t('sys.api.timeoutMessage'); + timeoutMsg = t("sys.api.timeoutMessage"); const userStore = useUserStoreWithOut(); userStore.setToken(undefined); userStore.logout(true); @@ -74,13 +74,13 @@ const transform: AxiosTransform = { // errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误 // errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示 - if (options.errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg }); - } else if (options.errorMessageMode === 'message') { + if (options.errorMessageMode === "modal") { + createErrorModal({ title: t("sys.api.errorTip"), content: timeoutMsg }); + } else if (options.errorMessageMode === "message") { createMessage.error(timeoutMsg); } - throw new Error(timeoutMsg || t('sys.api.apiRequestFailed')); + throw new Error(timeoutMsg || t("sys.api.apiRequestFailed")); }, // 请求之前处理config @@ -109,7 +109,7 @@ const transform: AxiosTransform = { } else { if (!isString(params)) { formatDate && formatRequestDate(params); - if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) { + if (Reflect.has(config, "data") && config.data && Object.keys(config.data).length > 0) { config.data = data; config.params = params; } else { @@ -162,23 +162,23 @@ const transform: AxiosTransform = { const errorLogStore = useErrorLogStoreWithOut(); errorLogStore.addAjaxErrorInfo(error); const { response, code, message, config } = error || {}; - const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none'; - const msg: string = response?.data?.error?.message ?? ''; - const err: string = error?.toString?.() ?? ''; - let errMessage = ''; + const errorMessageMode = config?.requestOptions?.errorMessageMode || "none"; + const msg: string = response?.data?.error?.message ?? ""; + const err: string = error?.toString?.() ?? ""; + let errMessage = ""; try { - if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) { - errMessage = t('sys.api.apiTimeoutMessage'); + if (code === "ECONNABORTED" && message.indexOf("timeout") !== -1) { + errMessage = t("sys.api.apiTimeoutMessage"); } - if (err?.includes('Network Error')) { - errMessage = t('sys.api.networkExceptionMsg'); + if (err?.includes("Network Error")) { + errMessage = t("sys.api.networkExceptionMsg"); } if (errMessage) { - if (errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: errMessage }); - } else if (errorMessageMode === 'message') { + if (errorMessageMode === "modal") { + createErrorModal({ title: t("sys.api.errorTip"), content: errMessage }); + } else if (errorMessageMode === "message") { createMessage.error(errMessage); } return Promise.reject(error); @@ -199,12 +199,12 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) { // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes // authentication schemes,e.g: Bearer // authenticationScheme: 'Bearer', - authenticationScheme: '', + authenticationScheme: "", timeout: 10 * 1000, // 基础接口地址 // baseURL: globSetting.apiUrl, - headers: { 'Content-Type': ContentTypeEnum.JSON }, + headers: { "Content-Type": ContentTypeEnum.JSON }, // 如果是form-data格式 // headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }, // 数据处理方式 @@ -222,7 +222,7 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) { // 格式化提交参数时间 formatDate: true, // 消息提示类型 - errorMessageMode: 'message', + errorMessageMode: "message", // 接口地址 apiUrl: globSetting.apiUrl, // 接口拼接地址 diff --git a/src/utils/index.ts b/src/utils/index.ts index 112c3af..6d1f431 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,8 +1,8 @@ -import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router'; -import type { App, Plugin } from 'vue'; +import type { RouteLocationNormalized, RouteRecordNormalized } from "vue-router"; +import type { App, Plugin } from "vue"; -import { unref } from 'vue'; -import { isObject } from '/@/utils/is'; +import { unref } from "vue"; +import { isObject } from "/@/utils/is"; export const noop = () => {}; @@ -24,12 +24,12 @@ export function getPopupContainer(node?: HTMLElement): HTMLElement { * ==>www.baidu.com?a=3&b=4 */ export function setObjToUrlParams(baseUrl: string, obj: any): string { - let parameters = ''; + let parameters = ""; for (const key in obj) { - parameters += key + '=' + encodeURIComponent(obj[key]) + '&'; + parameters += key + "=" + encodeURIComponent(obj[key]) + "&"; } - parameters = parameters.replace(/&$/, ''); - return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters; + parameters = parameters.replace(/&$/, ""); + return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, "?") + parameters; } export function deepMerge<T = any>(src: any = {}, target: any = {}): T { @@ -44,13 +44,13 @@ export function openWindow( url: string, opt?: { target?: TargetContext | string; noopener?: boolean; noreferrer?: boolean }, ) { - const { target = '__blank', noopener = true, noreferrer = true } = opt || {}; + const { target = "__blank", noopener = true, noreferrer = true } = opt || {}; const feature: string[] = []; - noopener && feature.push('noopener=yes'); - noreferrer && feature.push('noreferrer=yes'); + noopener && feature.push("noopener=yes"); + noreferrer && feature.push("noreferrer=yes"); - window.open(url, target, feature.join(',')); + window.open(url, target, feature.join(",")); } // dynamic use hook props diff --git a/src/utils/is.ts b/src/utils/is.ts index d71fd9b..d703d54 100644 --- a/src/utils/is.ts +++ b/src/utils/is.ts @@ -5,7 +5,7 @@ export function is(val: unknown, type: string) { } export function isDef<T = unknown>(val?: T): val is T { - return typeof val !== 'undefined'; + return typeof val !== "undefined"; } export function isUnDef<T = unknown>(val?: T): val is T { @@ -13,7 +13,7 @@ export function isUnDef<T = unknown>(val?: T): val is T { } export function isObject(val: any): val is Record<any, any> { - return val !== null && is(val, 'Object'); + return val !== null && is(val, "Object"); } export function isEmpty<T = unknown>(val: T): val is T { @@ -33,7 +33,7 @@ export function isEmpty<T = unknown>(val: T): val is T { } export function isDate(val: unknown): val is Date { - return is(val, 'Date'); + return is(val, "Date"); } export function isNull(val: unknown): val is null { @@ -49,27 +49,27 @@ export function isNullOrUnDef(val: unknown): val is null | undefined { } export function isNumber(val: unknown): val is number { - return is(val, 'Number'); + return is(val, "Number"); } export function isPromise<T = any>(val: unknown): val is Promise<T> { - return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch); + return is(val, "Promise") && isObject(val) && isFunction(val.then) && isFunction(val.catch); } export function isString(val: unknown): val is string { - return is(val, 'String'); + return is(val, "String"); } export function isFunction(val: unknown): val is Function { - return typeof val === 'function'; + return typeof val === "function"; } export function isBoolean(val: unknown): val is boolean { - return is(val, 'Boolean'); + return is(val, "Boolean"); } export function isRegExp(val: unknown): val is RegExp { - return is(val, 'RegExp'); + return is(val, "RegExp"); } export function isArray(val: any): val is Array<any> { @@ -77,7 +77,7 @@ export function isArray(val: any): val is Array<any> { } export function isWindow(val: any): val is Window { - return typeof window !== 'undefined' && is(val, 'Window'); + return typeof window !== "undefined" && is(val, "Window"); } export function isElement(val: unknown): val is Element { @@ -85,10 +85,10 @@ export function isElement(val: unknown): val is Element { } export function isMap(val: unknown): val is Map<any, any> { - return is(val, 'Map'); + return is(val, "Map"); } -export const isServer = typeof window === 'undefined'; +export const isServer = typeof window === "undefined"; export const isClient = !isServer; diff --git a/src/utils/lib/echarts.ts b/src/utils/lib/echarts.ts index 1b9f273..00eeb73 100644 --- a/src/utils/lib/echarts.ts +++ b/src/utils/lib/echarts.ts @@ -1,4 +1,4 @@ -import * as echarts from 'echarts/core'; +import * as echarts from "echarts/core"; import { BarChart, @@ -7,7 +7,7 @@ import { MapChart, PictorialBarChart, RadarChart, -} from 'echarts/charts'; +} from "echarts/charts"; import { TitleComponent, @@ -24,9 +24,9 @@ import { TimelineComponent, CalendarComponent, GraphicComponent, -} from 'echarts/components'; +} from "echarts/components"; -import { SVGRenderer } from 'echarts/renderers'; +import { SVGRenderer } from "echarts/renderers"; echarts.use([ LegendComponent, diff --git a/src/utils/mitt.ts b/src/utils/mitt.ts index 4b15bba..67b3b26 100644 --- a/src/utils/mitt.ts +++ b/src/utils/mitt.ts @@ -21,13 +21,13 @@ export interface Emitter { all: EventHandlerMap; on<T = any>(type: EventType, handler: Handler<T>): void; - on(type: '*', handler: WildcardHandler): void; + on(type: "*", handler: WildcardHandler): void; off<T = any>(type: EventType, handler: Handler<T>): void; - off(type: '*', handler: WildcardHandler): void; + off(type: "*", handler: WildcardHandler): void; emit<T = any>(type: EventType, event?: T): void; - emit(type: '*', event?: any): void; + emit(type: "*", event?: any): void; clear(): void; } @@ -86,7 +86,7 @@ export default function mitt(all?: EventHandlerMap): Emitter { ((all?.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); }); - ((all?.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { + ((all?.get("*") || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); }); }, diff --git a/src/utils/propTypes.ts b/src/utils/propTypes.ts index a5b0a47..aca724e 100644 --- a/src/utils/propTypes.ts +++ b/src/utils/propTypes.ts @@ -1,5 +1,5 @@ -import { CSSProperties, VNodeChild } from 'vue'; -import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types'; +import { CSSProperties, VNodeChild } from "vue"; +import { createTypes, VueTypeValidableDef, VueTypesInterface } from "vue-types"; export type VueNode = VNodeChild | JSX.Element; @@ -20,13 +20,13 @@ const propTypes = createTypes({ propTypes.extend([ { - name: 'style', + name: "style", getter: true, type: [String, Object], default: undefined, }, { - name: 'VNodeChild', + name: "VNodeChild", getter: true, type: undefined, }, diff --git a/src/utils/uuid.ts b/src/utils/uuid.ts index 548bcf3..2e49b3f 100644 --- a/src/utils/uuid.ts +++ b/src/utils/uuid.ts @@ -4,10 +4,10 @@ for (let i = 0; i <= 15; i++) { } export function buildUUID(): string { - let uuid = ''; + let uuid = ""; for (let i = 1; i <= 36; i++) { if (i === 9 || i === 14 || i === 19 || i === 24) { - uuid += '-'; + uuid += "-"; } else if (i === 15) { uuid += 4; } else if (i === 20) { @@ -16,13 +16,13 @@ export function buildUUID(): string { uuid += hexList[(Math.random() * 16) | 0]; } } - return uuid.replace(/-/g, ''); + return uuid.replace(/-/g, ""); } let unique = 0; -export function buildShortUUID(prefix = ''): string { +export function buildShortUUID(prefix = ""): string { const time = Date.now(); const random = Math.floor(Math.random() * 1000000000); unique++; - return prefix + '_' + random + unique + String(time); + return prefix + "_" + random + unique + String(time); } diff --git a/src/views/dashboard/analysis/components/GrowCard.vue b/src/views/dashboard/analysis/components/GrowCard.vue index af3eb60..0fc3899 100644 --- a/src/views/dashboard/analysis/components/GrowCard.vue +++ b/src/views/dashboard/analysis/components/GrowCard.vue @@ -27,10 +27,10 @@ </div> </template> <script lang="ts" setup> - import { CountTo } from '/@/components/CountTo/index'; - import { Icon } from '/@/components/Icon'; - import { Tag, Card } from 'ant-design-vue'; - import { growCardList } from '../data'; + import { CountTo } from "/@/components/CountTo/index"; + import { Icon } from "/@/components/Icon"; + import { Tag, Card } from "ant-design-vue"; + import { growCardList } from "../data"; defineProps({ loading: { diff --git a/src/views/dashboard/analysis/components/SalesProductPie.vue b/src/views/dashboard/analysis/components/SalesProductPie.vue index 7142526..c9d4641 100644 --- a/src/views/dashboard/analysis/components/SalesProductPie.vue +++ b/src/views/dashboard/analysis/components/SalesProductPie.vue @@ -4,19 +4,19 @@ </Card> </template> <script lang="ts" setup> - import { Ref, ref, watch } from 'vue'; - import { Card } from 'ant-design-vue'; - import { useECharts } from '/@/hooks/web/useECharts'; + import { Ref, ref, watch } from "vue"; + import { Card } from "ant-design-vue"; + import { useECharts } from "/@/hooks/web/useECharts"; const props = defineProps({ loading: Boolean, width: { type: String as PropType<string>, - default: '100%', + default: "100%", }, height: { type: String as PropType<string>, - default: '300px', + default: "300px", }, }); @@ -30,27 +30,27 @@ } setOptions({ tooltip: { - trigger: 'item', + trigger: "item", }, series: [ { - name: '访问来源', - type: 'pie', - radius: '80%', - center: ['50%', '50%'], - color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'], + name: "访问来源", + type: "pie", + radius: "80%", + center: ["50%", "50%"], + color: ["#5ab1ef", "#b6a2de", "#67e0e3", "#2ec7c9"], data: [ - { value: 500, name: '电子产品' }, - { value: 310, name: '服装' }, - { value: 274, name: '化妆品' }, - { value: 400, name: '家居' }, + { value: 500, name: "电子产品" }, + { value: 310, name: "服装" }, + { value: 274, name: "化妆品" }, + { value: 400, name: "家居" }, ].sort(function (a, b) { return a.value - b.value; }), - roseType: 'radius', - animationType: 'scale', - animationEasing: 'exponentialInOut', + roseType: "radius", + animationType: "scale", + animationEasing: "exponentialInOut", animationDelay: function () { return Math.random() * 400; }, diff --git a/src/views/dashboard/analysis/components/SiteAnalysis.vue b/src/views/dashboard/analysis/components/SiteAnalysis.vue index de0ebcf..ab0ef74 100644 --- a/src/views/dashboard/analysis/components/SiteAnalysis.vue +++ b/src/views/dashboard/analysis/components/SiteAnalysis.vue @@ -14,21 +14,21 @@ </Card> </template> <script lang="ts" setup> - import { ref } from 'vue'; - import { Card } from 'ant-design-vue'; - import VisitAnalysis from './VisitAnalysis.vue'; - import VisitAnalysisBar from './VisitAnalysisBar.vue'; + import { ref } from "vue"; + import { Card } from "ant-design-vue"; + import VisitAnalysis from "./VisitAnalysis.vue"; + import VisitAnalysisBar from "./VisitAnalysisBar.vue"; - const activeKey = ref('tab1'); + const activeKey = ref("tab1"); const tabListTitle = [ { - key: 'tab1', - tab: '流量趋势', + key: "tab1", + tab: "流量趋势", }, { - key: 'tab2', - tab: '访问量', + key: "tab2", + tab: "访问量", }, ]; diff --git a/src/views/dashboard/analysis/components/VisitAnalysis.vue b/src/views/dashboard/analysis/components/VisitAnalysis.vue index 1429166..ce21cab 100644 --- a/src/views/dashboard/analysis/components/VisitAnalysis.vue +++ b/src/views/dashboard/analysis/components/VisitAnalysis.vue @@ -2,9 +2,9 @@ <div ref="chartRef" :style="{ height, width }"></div> </template> <script lang="ts" setup> - import { onMounted, ref, Ref } from 'vue'; - import { useECharts } from '/@/hooks/web/useECharts'; - import { basicProps } from './props'; + import { onMounted, ref, Ref } from "vue"; + import { useECharts } from "/@/hooks/web/useECharts"; + import { basicProps } from "./props"; defineProps({ ...basicProps, @@ -15,43 +15,43 @@ onMounted(() => { setOptions({ tooltip: { - trigger: 'axis', + trigger: "axis", axisPointer: { lineStyle: { width: 1, - color: '#019680', + color: "#019680", }, }, }, xAxis: { - type: 'category', + type: "category", boundaryGap: false, data: [ - '6:00', - '7:00', - '8:00', - '9:00', - '10:00', - '11:00', - '12:00', - '13:00', - '14:00', - '15:00', - '16:00', - '17:00', - '18:00', - '19:00', - '20:00', - '21:00', - '22:00', - '23:00', + "6:00", + "7:00", + "8:00", + "9:00", + "10:00", + "11:00", + "12:00", + "13:00", + "14:00", + "15:00", + "16:00", + "17:00", + "18:00", + "19:00", + "20:00", + "21:00", + "22:00", + "23:00", ], splitLine: { show: true, lineStyle: { width: 1, - type: 'solid', - color: 'rgba(226,226,226,0.5)', + type: "solid", + color: "rgba(226,226,226,0.5)", }, }, axisTick: { @@ -60,7 +60,7 @@ }, yAxis: [ { - type: 'value', + type: "value", max: 80000, splitNumber: 4, axisTick: { @@ -69,12 +69,12 @@ splitArea: { show: true, areaStyle: { - color: ['rgba(255,255,255,0.2)', 'rgba(226,226,226,0.2)'], + color: ["rgba(255,255,255,0.2)", "rgba(226,226,226,0.2)"], }, }, }, ], - grid: { left: '1%', right: '1%', top: '2 %', bottom: 0, containLabel: true }, + grid: { left: "1%", right: "1%", top: "2 %", bottom: 0, containLabel: true }, series: [ { smooth: true, @@ -82,10 +82,10 @@ 111, 222, 4000, 18000, 33333, 55555, 66666, 33333, 14000, 36000, 66666, 44444, 22222, 11111, 4000, 2000, 500, 333, 222, 111, ], - type: 'line', + type: "line", areaStyle: {}, itemStyle: { - color: '#5ab1ef', + color: "#5ab1ef", }, }, { @@ -94,10 +94,10 @@ 33, 66, 88, 333, 3333, 5000, 18000, 3000, 1200, 13000, 22000, 11000, 2221, 1201, 390, 198, 60, 30, 22, 11, ], - type: 'line', + type: "line", areaStyle: {}, itemStyle: { - color: '#019680', + color: "#019680", }, }, ], diff --git a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue index 4883d87..400cca9 100644 --- a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue +++ b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue @@ -2,9 +2,9 @@ <div ref="chartRef" :style="{ height, width }"></div> </template> <script lang="ts" setup> - import { onMounted, ref, Ref } from 'vue'; - import { useECharts } from '/@/hooks/web/useECharts'; - import { basicProps } from './props'; + import { onMounted, ref, Ref } from "vue"; + import { useECharts } from "/@/hooks/web/useECharts"; + import { basicProps } from "./props"; defineProps({ ...basicProps, @@ -15,41 +15,41 @@ onMounted(() => { setOptions({ tooltip: { - trigger: 'axis', + trigger: "axis", axisPointer: { lineStyle: { width: 1, - color: '#019680', + color: "#019680", }, }, }, - grid: { left: '1%', right: '1%', top: '2 %', bottom: 0, containLabel: true }, + grid: { left: "1%", right: "1%", top: "2 %", bottom: 0, containLabel: true }, xAxis: { - type: 'category', + type: "category", data: [ - '1月', - '2月', - '3月', - '4月', - '5月', - '6月', - '7月', - '8月', - '9月', - '10月', - '11月', - '12月', + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月", ], }, yAxis: { - type: 'value', + type: "value", max: 8000, splitNumber: 4, }, series: [ { data: [3000, 2000, 3333, 5000, 3200, 4200, 3200, 2100, 3000, 5100, 6000, 3200, 4800], - type: 'bar', + type: "bar", barMaxWidth: 80, }, ], diff --git a/src/views/dashboard/analysis/components/VisitRadar.vue b/src/views/dashboard/analysis/components/VisitRadar.vue index 8f7ed03..9d25fd4 100644 --- a/src/views/dashboard/analysis/components/VisitRadar.vue +++ b/src/views/dashboard/analysis/components/VisitRadar.vue @@ -4,19 +4,19 @@ </Card> </template> <script lang="ts" setup> - import { Ref, ref, watch } from 'vue'; - import { Card } from 'ant-design-vue'; - import { useECharts } from '/@/hooks/web/useECharts'; + import { Ref, ref, watch } from "vue"; + import { Card } from "ant-design-vue"; + import { useECharts } from "/@/hooks/web/useECharts"; const props = defineProps({ loading: Boolean, width: { type: String as PropType<string>, - default: '100%', + default: "100%", }, height: { type: String as PropType<string>, - default: '300px', + default: "300px", }, }); @@ -31,46 +31,46 @@ setOptions({ legend: { bottom: 0, - data: ['访问', '购买'], + data: ["访问", "购买"], }, tooltip: {}, radar: { - radius: '60%', + radius: "60%", splitNumber: 8, indicator: [ { - text: '电脑', + text: "电脑", max: 100, }, { - text: '充电器', + text: "充电器", max: 100, }, { - text: '耳机', + text: "耳机", max: 100, }, { - text: '手机', + text: "手机", max: 100, }, { - text: 'Ipad', + text: "Ipad", max: 100, }, { - text: '耳机', + text: "耳机", max: 100, }, ], }, series: [ { - type: 'radar', + type: "radar", symbolSize: 0, areaStyle: { shadowBlur: 0, - shadowColor: 'rgba(0,0,0,.2)', + shadowColor: "rgba(0,0,0,.2)", shadowOffsetX: 0, shadowOffsetY: 10, opacity: 1, @@ -78,16 +78,16 @@ data: [ { value: [90, 50, 86, 40, 50, 20], - name: '访问', + name: "访问", itemStyle: { - color: '#b6a2de', + color: "#b6a2de", }, }, { value: [70, 75, 70, 76, 20, 85], - name: '购买', + name: "购买", itemStyle: { - color: '#5ab1ef', + color: "#5ab1ef", }, }, ], diff --git a/src/views/dashboard/analysis/components/VisitSource.vue b/src/views/dashboard/analysis/components/VisitSource.vue index 411ba0d..db9e094 100644 --- a/src/views/dashboard/analysis/components/VisitSource.vue +++ b/src/views/dashboard/analysis/components/VisitSource.vue @@ -4,18 +4,18 @@ </Card> </template> <script lang="ts" setup> - import { Ref, ref, watch } from 'vue'; - import { Card } from 'ant-design-vue'; - import { useECharts } from '/@/hooks/web/useECharts'; + import { Ref, ref, watch } from "vue"; + import { Card } from "ant-design-vue"; + import { useECharts } from "/@/hooks/web/useECharts"; const props = defineProps({ loading: Boolean, width: { type: String as PropType<string>, - default: '100%', + default: "100%", }, height: { type: String as PropType<string>, - default: '300px', + default: "300px", }, }); const chartRef = ref<HTMLDivElement | null>(null); @@ -28,46 +28,46 @@ } setOptions({ tooltip: { - trigger: 'item', + trigger: "item", }, legend: { - bottom: '1%', - left: 'center', + bottom: "1%", + left: "center", }, series: [ { - color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'], - name: '访问来源', - type: 'pie', - radius: ['40%', '70%'], + color: ["#5ab1ef", "#b6a2de", "#67e0e3", "#2ec7c9"], + name: "访问来源", + type: "pie", + radius: ["40%", "70%"], avoidLabelOverlap: false, itemStyle: { borderRadius: 10, - borderColor: '#fff', + borderColor: "#fff", borderWidth: 2, }, label: { show: false, - position: 'center', + position: "center", }, emphasis: { label: { show: true, - fontSize: '12', - fontWeight: 'bold', + fontSize: "12", + fontWeight: "bold", }, }, labelLine: { show: false, }, data: [ - { value: 1048, name: '搜索引擎' }, - { value: 735, name: '直接访问' }, - { value: 580, name: '邮件营销' }, - { value: 484, name: '联盟广告' }, + { value: 1048, name: "搜索引擎" }, + { value: 735, name: "直接访问" }, + { value: 580, name: "邮件营销" }, + { value: 484, name: "联盟广告" }, ], - animationType: 'scale', - animationEasing: 'exponentialInOut', + animationType: "scale", + animationEasing: "exponentialInOut", animationDelay: function () { return Math.random() * 100; }, diff --git a/src/views/dashboard/analysis/components/props.ts b/src/views/dashboard/analysis/components/props.ts index 8643650..daeb7de 100644 --- a/src/views/dashboard/analysis/components/props.ts +++ b/src/views/dashboard/analysis/components/props.ts @@ -1,4 +1,4 @@ -import { PropType } from 'vue'; +import { PropType } from "vue"; export interface BasicProps { width: string; @@ -7,10 +7,10 @@ export interface BasicProps { export const basicProps = { width: { type: String as PropType<string>, - default: '100%', + default: "100%", }, height: { type: String as PropType<string>, - default: '280px', + default: "280px", }, }; diff --git a/src/views/dashboard/analysis/data.ts b/src/views/dashboard/analysis/data.ts index c5c28dd..061c846 100644 --- a/src/views/dashboard/analysis/data.ts +++ b/src/views/dashboard/analysis/data.ts @@ -9,35 +9,35 @@ export interface GrowCardItem { export const growCardList: GrowCardItem[] = [ { - title: '访问数', - icon: 'visit-count|svg', + title: "访问数", + icon: "visit-count|svg", value: 2000, total: 120000, - color: 'green', - action: '月', + color: "green", + action: "月", }, { - title: '成交额', - icon: 'total-sales|svg', + title: "成交额", + icon: "total-sales|svg", value: 20000, total: 500000, - color: 'blue', - action: '月', + color: "blue", + action: "月", }, { - title: '下载数', - icon: 'download-count|svg', + title: "下载数", + icon: "download-count|svg", value: 8000, total: 120000, - color: 'orange', - action: '周', + color: "orange", + action: "周", }, { - title: '成交数', - icon: 'transaction|svg', + title: "成交数", + icon: "transaction|svg", value: 5000, total: 50000, - color: 'purple', - action: '年', + color: "purple", + action: "年", }, ]; diff --git a/src/views/dashboard/analysis/index.vue b/src/views/dashboard/analysis/index.vue index c35fa69..6ed14b8 100644 --- a/src/views/dashboard/analysis/index.vue +++ b/src/views/dashboard/analysis/index.vue @@ -10,12 +10,12 @@ </div> </template> <script lang="ts" setup> - import { ref } from 'vue'; - import GrowCard from './components/GrowCard.vue'; - import SiteAnalysis from './components/SiteAnalysis.vue'; - import VisitSource from './components/VisitSource.vue'; - import VisitRadar from './components/VisitRadar.vue'; - import SalesProductPie from './components/SalesProductPie.vue'; + import { ref } from "vue"; + import GrowCard from "./components/GrowCard.vue"; + import SiteAnalysis from "./components/SiteAnalysis.vue"; + import VisitSource from "./components/VisitSource.vue"; + import VisitRadar from "./components/VisitRadar.vue"; + import SalesProductPie from "./components/SalesProductPie.vue"; const loading = ref(true); diff --git a/src/views/dashboard/workbench/components/DynamicInfo.vue b/src/views/dashboard/workbench/components/DynamicInfo.vue index 4be8f1f..49f811c 100644 --- a/src/views/dashboard/workbench/components/DynamicInfo.vue +++ b/src/views/dashboard/workbench/components/DynamicInfo.vue @@ -22,9 +22,9 @@ </Card> </template> <script lang="ts" setup> - import { Card, List } from 'ant-design-vue'; - import { dynamicInfoItems } from './data'; - import { Icon } from '/@/components/Icon'; + import { Card, List } from "ant-design-vue"; + import { dynamicInfoItems } from "./data"; + import { Icon } from "/@/components/Icon"; const ListItem = List.Item; const ListItemMeta = List.Item.Meta; diff --git a/src/views/dashboard/workbench/components/ProjectCard.vue b/src/views/dashboard/workbench/components/ProjectCard.vue index 9fa4ac6..e97fa6c 100644 --- a/src/views/dashboard/workbench/components/ProjectCard.vue +++ b/src/views/dashboard/workbench/components/ProjectCard.vue @@ -20,10 +20,10 @@ </Card> </template> <script lang="ts"> - import { defineComponent } from 'vue'; - import { Card } from 'ant-design-vue'; - import { Icon } from '/@/components/Icon'; - import { groupItems } from './data'; + import { defineComponent } from "vue"; + import { Card } from "ant-design-vue"; + import { Icon } from "/@/components/Icon"; + import { groupItems } from "./data"; export default defineComponent({ components: { Card, CardGrid: Card.Grid, Icon }, diff --git a/src/views/dashboard/workbench/components/QuickNav.vue b/src/views/dashboard/workbench/components/QuickNav.vue index 4e004d1..3ee18d8 100644 --- a/src/views/dashboard/workbench/components/QuickNav.vue +++ b/src/views/dashboard/workbench/components/QuickNav.vue @@ -11,9 +11,9 @@ </Card> </template> <script lang="ts" setup> - import { Card } from 'ant-design-vue'; - import { navItems } from './data'; - import { Icon } from '/@/components/Icon'; + import { Card } from "ant-design-vue"; + import { navItems } from "./data"; + import { Icon } from "/@/components/Icon"; const CardGrid = Card.Grid; </script> diff --git a/src/views/dashboard/workbench/components/SaleRadar.vue b/src/views/dashboard/workbench/components/SaleRadar.vue index 38fdd37..f3f8f8e 100644 --- a/src/views/dashboard/workbench/components/SaleRadar.vue +++ b/src/views/dashboard/workbench/components/SaleRadar.vue @@ -4,19 +4,19 @@ </Card> </template> <script lang="ts" setup> - import { Ref, ref, watch } from 'vue'; - import { Card } from 'ant-design-vue'; - import { useECharts } from '/@/hooks/web/useECharts'; + import { Ref, ref, watch } from "vue"; + import { Card } from "ant-design-vue"; + import { useECharts } from "/@/hooks/web/useECharts"; const props = defineProps({ loading: Boolean, width: { type: String as PropType<string>, - default: '100%', + default: "100%", }, height: { type: String as PropType<string>, - default: '400px', + default: "400px", }, }); @@ -31,46 +31,46 @@ setOptions({ legend: { bottom: 0, - data: ['Visits', 'Sales'], + data: ["Visits", "Sales"], }, tooltip: {}, radar: { - radius: '60%', + radius: "60%", splitNumber: 8, indicator: [ { - text: '2017', + text: "2017", max: 100, }, { - text: '2017', + text: "2017", max: 100, }, { - text: '2018', + text: "2018", max: 100, }, { - text: '2019', + text: "2019", max: 100, }, { - text: '2020', + text: "2020", max: 100, }, { - text: '2021', + text: "2021", max: 100, }, ], }, series: [ { - type: 'radar', + type: "radar", symbolSize: 0, areaStyle: { shadowBlur: 0, - shadowColor: 'rgba(0,0,0,.2)', + shadowColor: "rgba(0,0,0,.2)", shadowOffsetX: 0, shadowOffsetY: 10, opacity: 1, @@ -78,16 +78,16 @@ data: [ { value: [90, 50, 86, 40, 50, 20], - name: 'Visits', + name: "Visits", itemStyle: { - color: '#b6a2de', + color: "#b6a2de", }, }, { value: [70, 75, 70, 76, 20, 85], - name: 'Sales', + name: "Sales", itemStyle: { - color: '#67e0e3', + color: "#67e0e3", }, }, ], diff --git a/src/views/dashboard/workbench/components/WorkbenchHeader.vue b/src/views/dashboard/workbench/components/WorkbenchHeader.vue index ef4d90d..f1ef0e2 100644 --- a/src/views/dashboard/workbench/components/WorkbenchHeader.vue +++ b/src/views/dashboard/workbench/components/WorkbenchHeader.vue @@ -23,10 +23,10 @@ </div> </template> <script lang="ts" setup> - import { computed } from 'vue'; - import { Avatar } from 'ant-design-vue'; - import { useUserStore } from '/@/store/modules/user'; - import headerImg from '/@/assets/images/header.jpg'; + import { computed } from "vue"; + import { Avatar } from "ant-design-vue"; + import { useUserStore } from "/@/store/modules/user"; + import headerImg from "/@/assets/images/header.jpg"; const userStore = useUserStore(); const userinfo = computed(() => userStore.getUserInfo); diff --git a/src/views/dashboard/workbench/components/data.ts b/src/views/dashboard/workbench/components/data.ts index c7172c3..6072b50 100644 --- a/src/views/dashboard/workbench/components/data.ts +++ b/src/views/dashboard/workbench/components/data.ts @@ -22,135 +22,135 @@ interface DynamicInfoItem { export const navItems: NavItem[] = [ { - title: '首页', - icon: 'ion:home-outline', - color: '#1fdaca', + title: "首页", + icon: "ion:home-outline", + color: "#1fdaca", }, { - title: '仪表盘', - icon: 'ion:grid-outline', - color: '#bf0c2c', + title: "仪表盘", + icon: "ion:grid-outline", + color: "#bf0c2c", }, { - title: '组件', - icon: 'ion:layers-outline', - color: '#e18525', + title: "组件", + icon: "ion:layers-outline", + color: "#e18525", }, { - title: '系统管理', - icon: 'ion:settings-outline', - color: '#3fb27f', + title: "系统管理", + icon: "ion:settings-outline", + color: "#3fb27f", }, { - title: '权限管理', - icon: 'ion:key-outline', - color: '#4daf1bc9', + title: "权限管理", + icon: "ion:key-outline", + color: "#4daf1bc9", }, { - title: '图表', - icon: 'ion:bar-chart-outline', - color: '#00d8ff', + title: "图表", + icon: "ion:bar-chart-outline", + color: "#00d8ff", }, ]; export const dynamicInfoItems: DynamicInfoItem[] = [ { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '刚刚', + avatar: "dynamic-avatar-1|svg", + name: "威廉", + date: "刚刚", desc: `在 <a>开源组</a> 创建了项目 <a>Vue</a>`, }, { - avatar: 'dynamic-avatar-2|svg', - name: '艾文', - date: '1个小时前', + avatar: "dynamic-avatar-2|svg", + name: "艾文", + date: "1个小时前", desc: `关注了 <a>威廉</a> `, }, { - avatar: 'dynamic-avatar-3|svg', - name: '克里斯', - date: '1天前', + avatar: "dynamic-avatar-3|svg", + name: "克里斯", + date: "1天前", desc: `发布了 <a>个人动态</a> `, }, { - avatar: 'dynamic-avatar-4|svg', - name: 'Vben', - date: '2天前', + avatar: "dynamic-avatar-4|svg", + name: "Vben", + date: "2天前", desc: `发表文章 <a>如何编写一个Vite插件</a> `, }, { - avatar: 'dynamic-avatar-5|svg', - name: '皮特', - date: '3天前', + avatar: "dynamic-avatar-5|svg", + name: "皮特", + date: "3天前", desc: `回复了 <a>杰克</a> 的问题 <a>如何进行项目优化?</a>`, }, { - avatar: 'dynamic-avatar-6|svg', - name: '杰克', - date: '1周前', + avatar: "dynamic-avatar-6|svg", + name: "杰克", + date: "1周前", desc: `关闭了问题 <a>如何运行项目</a> `, }, { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '1周前', + avatar: "dynamic-avatar-1|svg", + name: "威廉", + date: "1周前", desc: `发布了 <a>个人动态</a> `, }, { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '2021-04-01 20:00', + avatar: "dynamic-avatar-1|svg", + name: "威廉", + date: "2021-04-01 20:00", desc: `推送了代码到 <a>Github</a>`, }, ]; export const groupItems: GroupItem[] = [ { - title: 'Github', - icon: 'carbon:logo-github', - color: '', - desc: '不要等待机会,而要创造机会。', - group: '开源组', - date: '2021-04-01', + title: "Github", + icon: "carbon:logo-github", + color: "", + desc: "不要等待机会,而要创造机会。", + group: "开源组", + date: "2021-04-01", }, { - title: 'Vue', - icon: 'ion:logo-vue', - color: '#3fb27f', - desc: '现在的你决定将来的你。', - group: '算法组', - date: '2021-04-01', + title: "Vue", + icon: "ion:logo-vue", + color: "#3fb27f", + desc: "现在的你决定将来的你。", + group: "算法组", + date: "2021-04-01", }, { - title: 'Html5', - icon: 'ion:logo-html5', - color: '#e18525', - desc: '没有什么才能比努力更重要。', - group: '上班摸鱼', - date: '2021-04-01', + title: "Html5", + icon: "ion:logo-html5", + color: "#e18525", + desc: "没有什么才能比努力更重要。", + group: "上班摸鱼", + date: "2021-04-01", }, { - title: 'Angular', - icon: 'ion:logo-angular', - color: '#bf0c2c', - desc: '热情和欲望可以突破一切难关。', - group: 'UI', - date: '2021-04-01', + title: "Angular", + icon: "ion:logo-angular", + color: "#bf0c2c", + desc: "热情和欲望可以突破一切难关。", + group: "UI", + date: "2021-04-01", }, { - title: 'React', - icon: 'bx:bxl-react', - color: '#00d8ff', - desc: '健康的身体是实目标的基石。', - group: '技术牛', - date: '2021-04-01', + title: "React", + icon: "bx:bxl-react", + color: "#00d8ff", + desc: "健康的身体是实目标的基石。", + group: "技术牛", + date: "2021-04-01", }, { - title: 'Js', - icon: 'ion:logo-javascript', - color: '#4daf1bc9', - desc: '路是走出来的,而不是空想出来的。', - group: '架构组', - date: '2021-04-01', + title: "Js", + icon: "ion:logo-javascript", + color: "#4daf1bc9", + desc: "路是走出来的,而不是空想出来的。", + group: "架构组", + date: "2021-04-01", }, ]; diff --git a/src/views/dashboard/workbench/index.vue b/src/views/dashboard/workbench/index.vue index 5ee292e..fcaca02 100644 --- a/src/views/dashboard/workbench/index.vue +++ b/src/views/dashboard/workbench/index.vue @@ -19,14 +19,14 @@ </PageWrapper> </template> <script lang="ts" setup> - import { ref } from 'vue'; - import { Card } from 'ant-design-vue'; - import { PageWrapper } from '/@/components/Page'; - import WorkbenchHeader from './components/WorkbenchHeader.vue'; - import ProjectCard from './components/ProjectCard.vue'; - import QuickNav from './components/QuickNav.vue'; - import DynamicInfo from './components/DynamicInfo.vue'; - import SaleRadar from './components/SaleRadar.vue'; + import { ref } from "vue"; + import { Card } from "ant-design-vue"; + import { PageWrapper } from "/@/components/Page"; + import WorkbenchHeader from "./components/WorkbenchHeader.vue"; + import ProjectCard from "./components/ProjectCard.vue"; + import QuickNav from "./components/QuickNav.vue"; + import DynamicInfo from "./components/DynamicInfo.vue"; + import SaleRadar from "./components/SaleRadar.vue"; const loading = ref(true); diff --git a/src/views/student/practice/practice-record/index.vue b/src/views/student/practice/practice-record/index.vue new file mode 100644 index 0000000..30744d9 --- /dev/null +++ b/src/views/student/practice/practice-record/index.vue @@ -0,0 +1,30 @@ +<template> + <Tabs type="card" :centered="true"> + <TabPane key="1" tab="实习听课记录"> + <PracticeLectureRecord /> + </TabPane> + <TabPane key="2" tab="教育实习教案" force-render> + <PracticeLessonPlan /> + </TabPane> + <TabPane key="3" tab="教研活动心得"> + <TeachingResearchSummary /> + </TabPane> + </Tabs> +</template> +<script lang="ts"> + import { Tabs, TabPane } from "ant-design-vue"; + import { defineComponent } from "vue"; + import PracticeLectureRecord from "/@/views/student/practice/practice-record/practice-lecture-record/index.vue"; + import PracticeLessonPlan from "/@/views/student/practice/practice-record/practice-lesson-plan/index.vue"; + import TeachingResearchSummary from "/@/views/student/practice/practice-record/teaching-research-summary/index.vue"; + export default defineComponent({ + name: "PracticeRecord", + components: { + Tabs, + TabPane, + PracticeLectureRecord, + PracticeLessonPlan, + TeachingResearchSummary, + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lecture-record/index.vue b/src/views/student/practice/practice-record/practice-lecture-record/index.vue new file mode 100644 index 0000000..d7036d3 --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lecture-record/index.vue @@ -0,0 +1,82 @@ +<template> + <BasicTable @register="registerTable"> + <template #toolbar> + <a-button type="primary" @click="handleReloadCurrent"> 刷新</a-button> + </template> + <template #bodyCell="{ column, record }"> + <template v-if="column.key === 'action'"> + <TableAction + stopButtonPropagation + :actions="[ + { + label: '详情', + icon: 'ic:outline-delete-outline', + onClick: handleMoreInfo.bind(null, record), + }, + ]" + /> + </template> + </template> + </BasicTable> +</template> +<script lang="ts"> + import { defineComponent } from "vue"; + import { getLectureRecordPageById } from "/@/api/student/practice"; + import { BasicColumn, TableAction, useTable } from "/@/components/Table"; + import { BasicTable } from "/@/components/Table"; + + export default defineComponent({ + name: "PracticeLectureRecord", + components: { BasicTable, TableAction }, + setup() { + const columns: BasicColumn[] = [ + { + title: "Id", + dataIndex: "recordId", + defaultHidden: true, + }, + { + title: "听课时间", + dataIndex: "date", + width: 150, + sorter: true, + }, + { + title: "听课内容", + dataIndex: "lectureContent", + width: 150, + }, + { + title: "任课教师", + dataIndex: "teacherName", + width: 150, + }, + ]; + const [registerTable, { reload }] = useTable({ + title: "实习听课记录", + api: getLectureRecordPageById, + columns, + rowKey: "recordId", + pagination: { pageSize: 10 }, + actionColumn: { + title: "Action", + dataIndex: "action", + }, + }); + + function handleReloadCurrent() { + reload(); + } + + function handleMoreInfo(record: Recordable) { + console.log(record); + } + + return { + registerTable, + handleReloadCurrent, + handleMoreInfo, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lesson-plan/index.vue b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue new file mode 100644 index 0000000..e60767d --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue @@ -0,0 +1,11 @@ +<template> + <h1>教案信息</h1> +</template> +<script lang="ts"> + import { defineComponent } from "vue"; + + export default defineComponent({ + name: "PracticeLessonPlan", + setup() {}, + }); +</script> diff --git a/src/views/student/practice/practice-record/teaching-research-summary/index.vue b/src/views/student/practice/practice-record/teaching-research-summary/index.vue new file mode 100644 index 0000000..b765772 --- /dev/null +++ b/src/views/student/practice/practice-record/teaching-research-summary/index.vue @@ -0,0 +1,11 @@ +<template> + <h1>教研活动心得</h1> +</template> +<script lang="ts"> + import { defineComponent } from "vue"; + + export default defineComponent({ + name: "TeachingResearchSummary", + setup() {}, + }); +</script> diff --git a/src/views/sys/about/index.vue b/src/views/sys/about/index.vue index 1b2cf37..efce394 100644 --- a/src/views/sys/about/index.vue +++ b/src/views/sys/about/index.vue @@ -15,11 +15,11 @@ </PageWrapper> </template> <script lang="ts" setup> - import { h } from 'vue'; - import { Tag } from 'ant-design-vue'; - import { PageWrapper } from '/@/components/Page'; - import { Description, DescItem, useDescription } from '/@/components/Description/index'; - import { GITHUB_URL, SITE_URL, DOC_URL } from '/@/settings/siteSetting'; + import { h } from "vue"; + import { Tag } from "ant-design-vue"; + import { PageWrapper } from "/@/components/Page"; + import { Description, DescItem, useDescription } from "/@/components/Description/index"; + import { GITHUB_URL, SITE_URL, DOC_URL } from "/@/settings/siteSetting"; const { pkg, lastBuildTime } = __APP_INFO__; @@ -29,33 +29,33 @@ const devSchema: DescItem[] = []; const commonTagRender = (color: string) => (curVal) => h(Tag, { color }, () => curVal); - const commonLinkRender = (text: string) => (href) => h('a', { href, target: '_blank' }, text); + const commonLinkRender = (text: string) => (href) => h("a", { href, target: "_blank" }, text); const infoSchema: DescItem[] = [ { - label: '版本', - field: 'version', - render: commonTagRender('blue'), + label: "版本", + field: "version", + render: commonTagRender("blue"), }, { - label: '最后编译时间', - field: 'lastBuildTime', - render: commonTagRender('blue'), + label: "最后编译时间", + field: "lastBuildTime", + render: commonTagRender("blue"), }, { - label: '文档地址', - field: 'doc', - render: commonLinkRender('文档地址'), + label: "文档地址", + field: "doc", + render: commonLinkRender("文档地址"), }, { - label: '预览地址', - field: 'preview', - render: commonLinkRender('预览地址'), + label: "预览地址", + field: "preview", + render: commonLinkRender("预览地址"), }, { - label: 'Github', - field: 'github', - render: commonLinkRender('Github'), + label: "Github", + field: "github", + render: commonLinkRender("Github"), }, ]; @@ -76,21 +76,21 @@ }); const [register] = useDescription({ - title: '生产环境依赖', + title: "生产环境依赖", data: dependencies, schema: schema, column: 3, }); const [registerDev] = useDescription({ - title: '开发环境依赖', + title: "开发环境依赖", data: devDependencies, schema: devSchema, column: 3, }); const [infoRegister] = useDescription({ - title: '项目信息', + title: "项目信息", data: infoData, schema: infoSchema, column: 2, diff --git a/src/views/sys/error-log/DetailModal.vue b/src/views/sys/error-log/DetailModal.vue index 2047707..d153f8b 100644 --- a/src/views/sys/error-log/DetailModal.vue +++ b/src/views/sys/error-log/DetailModal.vue @@ -4,12 +4,12 @@ </BasicModal> </template> <script lang="ts" setup> - import type { PropType } from 'vue'; - import type { ErrorLogInfo } from '/#/store'; - import { BasicModal } from '/@/components/Modal/index'; - import { Description, useDescription } from '/@/components/Description/index'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { getDescSchema } from './data'; + import type { PropType } from "vue"; + import type { ErrorLogInfo } from "/#/store"; + import { BasicModal } from "/@/components/Modal/index"; + import { Description, useDescription } from "/@/components/Description/index"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { getDescSchema } from "./data"; defineProps({ info: { diff --git a/src/views/sys/error-log/data.tsx b/src/views/sys/error-log/data.tsx index 3ffc2f4..e8b628f 100644 --- a/src/views/sys/error-log/data.tsx +++ b/src/views/sys/error-log/data.tsx @@ -1,58 +1,58 @@ -import { Tag } from 'ant-design-vue'; -import { BasicColumn } from '/@/components/Table/index'; -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; -import { useI18n } from '/@/hooks/web/useI18n'; +import { Tag } from "ant-design-vue"; +import { BasicColumn } from "/@/components/Table/index"; +import { ErrorTypeEnum } from "/@/enums/exceptionEnum"; +import { useI18n } from "/@/hooks/web/useI18n"; const { t } = useI18n(); export function getColumns(): BasicColumn[] { return [ { - dataIndex: 'type', - title: t('sys.errorLog.tableColumnType'), + dataIndex: "type", + title: t("sys.errorLog.tableColumnType"), width: 80, customRender: ({ text }) => { const color = text === ErrorTypeEnum.VUE - ? 'green' + ? "green" : text === ErrorTypeEnum.RESOURCE - ? 'cyan' + ? "cyan" : text === ErrorTypeEnum.PROMISE - ? 'blue' + ? "blue" : ErrorTypeEnum.AJAX - ? 'red' - : 'purple'; + ? "red" + : "purple"; return <Tag color={color}>{() => text}</Tag>; }, }, { - dataIndex: 'url', - title: 'URL', + dataIndex: "url", + title: "URL", width: 200, }, { - dataIndex: 'time', - title: t('sys.errorLog.tableColumnDate'), + dataIndex: "time", + title: t("sys.errorLog.tableColumnDate"), width: 160, }, { - dataIndex: 'file', - title: t('sys.errorLog.tableColumnFile'), + dataIndex: "file", + title: t("sys.errorLog.tableColumnFile"), width: 200, }, { - dataIndex: 'name', - title: 'Name', + dataIndex: "name", + title: "Name", width: 200, }, { - dataIndex: 'message', - title: t('sys.errorLog.tableColumnMsg'), + dataIndex: "message", + title: t("sys.errorLog.tableColumnMsg"), width: 300, }, { - dataIndex: 'stack', - title: t('sys.errorLog.tableColumnStackMsg'), + dataIndex: "stack", + title: t("sys.errorLog.tableColumnStackMsg"), }, ]; } diff --git a/src/views/sys/error-log/index.vue b/src/views/sys/error-log/index.vue index 69b77db..e078813 100644 --- a/src/views/sys/error-log/index.vue +++ b/src/views/sys/error-log/index.vue @@ -7,13 +7,13 @@ <BasicTable @register="register" class="error-handle-table"> <template #toolbar> <a-button @click="fireVueError" type="primary"> - {{ t('sys.errorLog.fireVueError') }} + {{ t("sys.errorLog.fireVueError") }} </a-button> <a-button @click="fireResourceError" type="primary"> - {{ t('sys.errorLog.fireResourceError') }} + {{ t("sys.errorLog.fireResourceError") }} </a-button> <a-button @click="fireAjaxError" type="primary"> - {{ t('sys.errorLog.fireAjaxError') }} + {{ t("sys.errorLog.fireAjaxError") }} </a-button> </template> <template #action="{ record }"> @@ -28,17 +28,17 @@ </template> <script lang="ts" setup> - import type { ErrorLogInfo } from '/#/store'; - import { watch, ref, nextTick } from 'vue'; - import DetailModal from './DetailModal.vue'; - import { BasicTable, useTable, TableAction } from '/@/components/Table/index'; - import { useModal } from '/@/components/Modal'; - import { useMessage } from '/@/hooks/web/useMessage'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useErrorLogStore } from '/@/store/modules/errorLog'; - import { fireErrorApi } from '/@/api/demo/error'; - import { getColumns } from './data'; - import { cloneDeep } from 'lodash-es'; + import type { ErrorLogInfo } from "/#/store"; + import { watch, ref, nextTick } from "vue"; + import DetailModal from "./DetailModal.vue"; + import { BasicTable, useTable, TableAction } from "/@/components/Table/index"; + import { useModal } from "/@/components/Modal"; + import { useMessage } from "/@/hooks/web/useMessage"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useErrorLogStore } from "/@/store/modules/errorLog"; + import { fireErrorApi } from "/@/api/demo/error"; + import { getColumns } from "./data"; + import { cloneDeep } from "lodash-es"; const rowInfo = ref<ErrorLogInfo>(); const imgList = ref<string[]>([]); @@ -46,13 +46,13 @@ const { t } = useI18n(); const errorLogStore = useErrorLogStore(); const [register, { setTableData }] = useTable({ - title: t('sys.errorLog.tableTitle'), + title: t("sys.errorLog.tableTitle"), columns: getColumns(), actionColumn: { width: 80, - title: 'Action', - dataIndex: 'action', - slots: { customRender: 'action' }, + title: "Action", + dataIndex: "action", + slots: { customRender: "action" }, }, }); const [registerModal, { openModal }] = useModal(); @@ -70,7 +70,7 @@ ); const { createMessage } = useMessage(); if (import.meta.env.DEV) { - createMessage.info(t('sys.errorLog.enableMessage')); + createMessage.info(t("sys.errorLog.enableMessage")); } // 查看详情 function handleDetail(row: ErrorLogInfo) { @@ -79,7 +79,7 @@ } function fireVueError() { - throw new Error('fire vue error!'); + throw new Error("fire vue error!"); } function fireResourceError() { diff --git a/src/views/sys/exception/Exception.vue b/src/views/sys/exception/Exception.vue index 6e56f08..0060ea4 100644 --- a/src/views/sys/exception/Exception.vue +++ b/src/views/sys/exception/Exception.vue @@ -1,15 +1,15 @@ <script lang="tsx"> - import type { PropType } from 'vue'; - import { Result, Button } from 'ant-design-vue'; - import { defineComponent, ref, computed, unref } from 'vue'; - import { ExceptionEnum } from '/@/enums/exceptionEnum'; - import notDataSvg from '/@/assets/svg/no-data.svg'; - import netWorkSvg from '/@/assets/svg/net-error.svg'; - import { useRoute } from 'vue-router'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useGo, useRedo } from '/@/hooks/web/usePage'; - import { PageEnum } from '/@/enums/pageEnum'; + import type { PropType } from "vue"; + import { Result, Button } from "ant-design-vue"; + import { defineComponent, ref, computed, unref } from "vue"; + import { ExceptionEnum } from "/@/enums/exceptionEnum"; + import notDataSvg from "/@/assets/svg/no-data.svg"; + import netWorkSvg from "/@/assets/svg/net-error.svg"; + import { useRoute } from "vue-router"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useGo, useRedo } from "/@/hooks/web/usePage"; + import { PageEnum } from "/@/enums/pageEnum"; interface MapValue { title: string; @@ -21,7 +21,7 @@ } export default defineComponent({ - name: 'ErrorPage', + name: "ErrorPage", props: { // 状态码 status: { @@ -31,12 +31,12 @@ title: { type: String as PropType<string>, - default: '', + default: "", }, subTitle: { type: String as PropType<string>, - default: '', + default: "", }, full: { @@ -51,7 +51,7 @@ const go = useGo(); const redo = useRedo(); const { t } = useI18n(); - const { prefixCls } = useDesign('app-exception-page'); + const { prefixCls } = useDesign("app-exception-page"); const getStatus = computed(() => { const { status: routeStatus } = query; @@ -63,45 +63,45 @@ return unref(statusMapRef).get(unref(getStatus)) as MapValue; }); - const backLoginI18n = t('sys.exception.backLogin'); - const backHomeI18n = t('sys.exception.backHome'); + const backLoginI18n = t("sys.exception.backLogin"); + const backHomeI18n = t("sys.exception.backHome"); unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_ACCESS, { - title: '403', + title: "403", status: `${ExceptionEnum.PAGE_NOT_ACCESS}`, - subTitle: t('sys.exception.subTitle403'), + subTitle: t("sys.exception.subTitle403"), btnText: props.full ? backLoginI18n : backHomeI18n, handler: () => (props.full ? go(PageEnum.BASE_LOGIN) : go()), }); unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_FOUND, { - title: '404', + title: "404", status: `${ExceptionEnum.PAGE_NOT_FOUND}`, - subTitle: t('sys.exception.subTitle404'), + subTitle: t("sys.exception.subTitle404"), btnText: props.full ? backLoginI18n : backHomeI18n, handler: () => (props.full ? go(PageEnum.BASE_LOGIN) : go()), }); unref(statusMapRef).set(ExceptionEnum.ERROR, { - title: '500', + title: "500", status: `${ExceptionEnum.ERROR}`, - subTitle: t('sys.exception.subTitle500'), + subTitle: t("sys.exception.subTitle500"), btnText: backHomeI18n, handler: () => go(), }); unref(statusMapRef).set(ExceptionEnum.PAGE_NOT_DATA, { - title: t('sys.exception.noDataTitle'), - subTitle: '', - btnText: t('common.redo'), + title: t("sys.exception.noDataTitle"), + subTitle: "", + btnText: t("common.redo"), handler: () => redo(), icon: notDataSvg, }); unref(statusMapRef).set(ExceptionEnum.NET_WORK_ERROR, { - title: t('sys.exception.networkErrorTitle'), - subTitle: t('sys.exception.networkErrorSubTitle'), - btnText: t('common.redo'), + title: t("sys.exception.networkErrorTitle"), + subTitle: t("sys.exception.networkErrorSubTitle"), + btnText: t("common.redo"), handler: () => redo(), icon: netWorkSvg, }); @@ -131,7 +131,7 @@ }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-app-exception-page'; + @prefix-cls: ~"@{namespace}-app-exception-page"; .@{prefix-cls} { display: flex; diff --git a/src/views/sys/exception/index.ts b/src/views/sys/exception/index.ts index 5002c4a..3b7ce59 100644 --- a/src/views/sys/exception/index.ts +++ b/src/views/sys/exception/index.ts @@ -1 +1 @@ -export { default as Exception } from './Exception.vue'; +export { default as Exception } from "./Exception.vue"; diff --git a/src/views/sys/iframe/FrameBlank.vue b/src/views/sys/iframe/FrameBlank.vue index a8a61f5..a1d4110 100644 --- a/src/views/sys/iframe/FrameBlank.vue +++ b/src/views/sys/iframe/FrameBlank.vue @@ -2,8 +2,8 @@ <div></div> </template> <script lang="ts"> - import { defineComponent } from 'vue'; + import { defineComponent } from "vue"; export default defineComponent({ - name: 'FrameBlank', + name: "FrameBlank", }); </script> diff --git a/src/views/sys/iframe/index.vue b/src/views/sys/iframe/index.vue index fea0e7e..139ab1c 100644 --- a/src/views/sys/iframe/index.vue +++ b/src/views/sys/iframe/index.vue @@ -11,16 +11,16 @@ </div> </template> <script lang="ts" setup> - import type { CSSProperties } from 'vue'; - import { ref, unref, computed } from 'vue'; - import { Spin } from 'ant-design-vue'; - import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; - import { propTypes } from '/@/utils/propTypes'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight'; + import type { CSSProperties } from "vue"; + import { ref, unref, computed } from "vue"; + import { Spin } from "ant-design-vue"; + import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; + import { propTypes } from "/@/utils/propTypes"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useLayoutHeight } from "/@/layouts/default/content/useContentViewHeight"; defineProps({ - frameSrc: propTypes.string.def(''), + frameSrc: propTypes.string.def(""), }); const loading = ref(true); @@ -29,7 +29,7 @@ const frameRef = ref<HTMLFrameElement>(); const { headerHeightRef } = useLayoutHeight(); - const { prefixCls } = useDesign('iframe-page'); + const { prefixCls } = useDesign("iframe-page"); useWindowSizeFn(calcHeight, 150, { immediate: true }); const getWrapStyle = computed((): CSSProperties => { @@ -56,7 +56,7 @@ } </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-iframe-page'; + @prefix-cls: ~"@{namespace}-iframe-page"; .@{prefix-cls} { .ant-spin-nested-loading { diff --git a/src/views/sys/lock/LockPage.vue b/src/views/sys/lock/LockPage.vue index 11037f9..fe2a45e 100644 --- a/src/views/sys/lock/LockPage.vue +++ b/src/views/sys/lock/LockPage.vue @@ -5,28 +5,12 @@ > <div :class="`${prefixCls}__unlock`" - class=" - absolute - top-0 - left-1/2 - flex - pt-5 - h-16 - items-center - justify-center - sm:text-md - xl:text-xl - text-white - flex-col - cursor-pointer - transform - translate-x-1/2 - " + class="absolute top-0 left-1/2 flex pt-5 h-16 items-center justify-center sm:text-md xl:text-xl text-white flex-col cursor-pointer transform translate-x-1/2" @click="handleShowForm(false)" v-show="showDate" > <LockOutlined /> - <span>{{ t('sys.lock.unlock') }}</span> + <span>{{ t("sys.lock.unlock") }}</span> </div> <div class="flex w-screen h-screen justify-center items-center"> @@ -55,7 +39,7 @@ v-model:value="password" /> <span :class="`${prefixCls}-entry__err-msg enter-x`" v-if="errMsg"> - {{ t('sys.lock.alert') }} + {{ t("sys.lock.alert") }} </span> <div :class="`${prefixCls}-entry__footer enter-x`"> <a-button @@ -65,7 +49,7 @@ :disabled="loading" @click="handleShowForm(true)" > - {{ t('common.back') }} + {{ t("common.back") }} </a-button> <a-button type="link" @@ -74,10 +58,10 @@ :disabled="loading" @click="goLogin" > - {{ t('sys.lock.backToLogin') }} + {{ t("sys.lock.backToLogin") }} </a-button> <a-button class="mt-2" type="link" size="small" @click="unLock()" :loading="loading"> - {{ t('sys.lock.entry') }} + {{ t("sys.lock.entry") }} </a-button> </div> </div> @@ -93,24 +77,24 @@ </div> </template> <script lang="ts" setup> - import { ref, computed } from 'vue'; - import { Input } from 'ant-design-vue'; - import { useUserStore } from '/@/store/modules/user'; - import { useLockStore } from '/@/store/modules/lock'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useNow } from './useNow'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { LockOutlined } from '@ant-design/icons-vue'; - import headerImg from '/@/assets/images/header.jpg'; + import { ref, computed } from "vue"; + import { Input } from "ant-design-vue"; + import { useUserStore } from "/@/store/modules/user"; + import { useLockStore } from "/@/store/modules/lock"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useNow } from "./useNow"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { LockOutlined } from "@ant-design/icons-vue"; + import headerImg from "/@/assets/images/header.jpg"; const InputPassword = Input.Password; - const password = ref(''); + const password = ref(""); const loading = ref(false); const errMsg = ref(false); const showDate = ref(true); - const { prefixCls } = useDesign('lock-page'); + const { prefixCls } = useDesign("lock-page"); const lockStore = useLockStore(); const userStore = useUserStore(); @@ -149,7 +133,7 @@ } </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-lock-page'; + @prefix-cls: ~"@{namespace}-lock-page"; .@{prefix-cls} { z-index: @lock-page-z-index; diff --git a/src/views/sys/lock/index.vue b/src/views/sys/lock/index.vue index e8c4d55..7bb86d4 100644 --- a/src/views/sys/lock/index.vue +++ b/src/views/sys/lock/index.vue @@ -4,9 +4,9 @@ </transition> </template> <script lang="ts" setup> - import { computed } from 'vue'; - import LockPage from './LockPage.vue'; - import { useLockStore } from '/@/store/modules/lock'; + import { computed } from "vue"; + import LockPage from "./LockPage.vue"; + import { useLockStore } from "/@/store/modules/lock"; const lockStore = useLockStore(); const getIsLock = computed(() => lockStore?.getLockInfo?.isLock ?? false); diff --git a/src/views/sys/lock/useNow.ts b/src/views/sys/lock/useNow.ts index 2fac748..6c102d3 100644 --- a/src/views/sys/lock/useNow.ts +++ b/src/views/sys/lock/useNow.ts @@ -1,7 +1,7 @@ -import { dateUtil } from '/@/utils/dateUtil'; -import { reactive, toRefs } from 'vue'; -import { useLocaleStore } from '/@/store/modules/locale'; -import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'; +import { dateUtil } from "/@/utils/dateUtil"; +import { reactive, toRefs } from "vue"; +import { useLocaleStore } from "/@/store/modules/locale"; +import { tryOnMounted, tryOnUnmounted } from "@vueuse/core"; export function useNow(immediate = true) { const localeStore = useLocaleStore(); @@ -11,25 +11,25 @@ export function useNow(immediate = true) { const state = reactive({ year: 0, month: 0, - week: '', + week: "", day: 0, - hour: '', - minute: '', + hour: "", + minute: "", second: 0, - meridiem: '', + meridiem: "", }); const update = () => { const now = dateUtil(); - const h = now.format('HH'); - const m = now.format('mm'); - const s = now.get('s'); + const h = now.format("HH"); + const m = now.format("mm"); + const s = now.get("s"); - state.year = now.get('y'); - state.month = now.get('M') + 1; + state.year = now.get("y"); + state.month = now.get("M") + 1; state.week = localData.weekdays()[now.day()]; - state.day = now.get('D'); + state.day = now.get("D"); state.hour = h; state.minute = m; state.second = s; diff --git a/src/views/sys/login/ForgetPasswordForm.vue b/src/views/sys/login/ForgetPasswordForm.vue index aca24aa..d8b92d6 100644 --- a/src/views/sys/login/ForgetPasswordForm.vue +++ b/src/views/sys/login/ForgetPasswordForm.vue @@ -23,22 +23,22 @@ <FormItem class="enter-x"> <Button type="primary" size="large" block @click="handleReset" :loading="loading"> - {{ t('common.resetText') }} + {{ t("common.resetText") }} </Button> <Button size="large" block class="mt-4" @click="handleBackLogin"> - {{ t('sys.login.backSignIn') }} + {{ t("sys.login.backSignIn") }} </Button> </FormItem> </Form> </template> </template> <script lang="ts" setup> - import { reactive, ref, computed, unref } from 'vue'; - import LoginFormTitle from './LoginFormTitle.vue'; - import { Form, Input, Button } from 'ant-design-vue'; - import { CountdownInput } from '/@/components/CountDown'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useLoginState, useFormRules, LoginStateEnum } from './useLogin'; + import { reactive, ref, computed, unref } from "vue"; + import LoginFormTitle from "./LoginFormTitle.vue"; + import { Form, Input, Button } from "ant-design-vue"; + import { CountdownInput } from "/@/components/CountDown"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useLoginState, useFormRules, LoginStateEnum } from "./useLogin"; const FormItem = Form.Item; const { t } = useI18n(); @@ -49,9 +49,9 @@ const loading = ref(false); const formData = reactive({ - account: '', - mobile: '', - sms: '', + account: "", + mobile: "", + sms: "", }); const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD); diff --git a/src/views/sys/login/Login.vue b/src/views/sys/login/Login.vue index 8c3bd4b..e11a128 100644 --- a/src/views/sys/login/Login.vue +++ b/src/views/sys/login/Login.vue @@ -22,33 +22,17 @@ class="w-1/2 -mt-16 -enter-x" /> <div class="mt-10 font-medium text-white -enter-x"> - <span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInTitle') }}</span> + <span class="inline-block mt-4 text-3xl"> {{ t("sys.login.signInTitle") }}</span> </div> <div class="mt-5 font-normal text-white text-md dark:text-gray-500 -enter-x"> - {{ t('sys.login.signInDesc') }} + {{ t("sys.login.signInDesc") }} </div> </div> </div> <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12"> <div :class="`${prefixCls}-form`" - class=" - relative - w-full - px-5 - py-8 - mx-auto - my-auto - rounded-md - shadow-md - xl:ml-16 xl:bg-transparent - sm:px-8 - xl:p-4 xl:shadow-none - sm:w-3/4 - lg:w-2/4 - xl:w-auto - enter-x - " + class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x" > <LoginForm /> <ForgetPasswordForm /> @@ -62,18 +46,18 @@ </div> </template> <script lang="ts" setup> - import { computed } from 'vue'; - import { AppLogo } from '/@/components/Application'; - import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'; - import LoginForm from './LoginForm.vue'; - import ForgetPasswordForm from './ForgetPasswordForm.vue'; - import RegisterForm from './RegisterForm.vue'; - import MobileForm from './MobileForm.vue'; - import QrCodeForm from './QrCodeForm.vue'; - import { useGlobSetting } from '/@/hooks/setting'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLocaleStore } from '/@/store/modules/locale'; + import { computed } from "vue"; + import { AppLogo } from "/@/components/Application"; + import { AppLocalePicker, AppDarkModeToggle } from "/@/components/Application"; + import LoginForm from "./LoginForm.vue"; + import ForgetPasswordForm from "./ForgetPasswordForm.vue"; + import RegisterForm from "./RegisterForm.vue"; + import MobileForm from "./MobileForm.vue"; + import QrCodeForm from "./QrCodeForm.vue"; + import { useGlobSetting } from "/@/hooks/setting"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useLocaleStore } from "/@/store/modules/locale"; defineProps({ sessionTimeout: { @@ -82,19 +66,19 @@ }); const globSetting = useGlobSetting(); - const { prefixCls } = useDesign('login'); + const { prefixCls } = useDesign("login"); const { t } = useI18n(); const localeStore = useLocaleStore(); const showLocale = localeStore.getShowPicker; - const title = computed(() => globSetting?.title ?? ''); + const title = computed(() => globSetting?.title ?? ""); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-login'; - @logo-prefix-cls: ~'@{namespace}-app-logo'; - @countdown-prefix-cls: ~'@{namespace}-countdown-input'; + @prefix-cls: ~"@{namespace}-login"; + @logo-prefix-cls: ~"@{namespace}-app-logo"; + @countdown-prefix-cls: ~"@{namespace}-countdown-input"; @dark-bg: #293146; - html[data-theme='dark'] { + html[data-theme="dark"] { .@{prefix-cls} { background-color: @dark-bg; @@ -149,7 +133,7 @@ background-position: 100%; background-repeat: no-repeat; background-size: auto 100%; - content: ''; + content: ""; @media (max-width: @screen-xl) { display: none; } @@ -199,7 +183,7 @@ } } - input:not([type='checkbox']) { + input:not([type="checkbox"]) { min-width: 360px; @media (max-width: @screen-xl) { diff --git a/src/views/sys/login/LoginForm.vue b/src/views/sys/login/LoginForm.vue index edc2173..6ba6f54 100644 --- a/src/views/sys/login/LoginForm.vue +++ b/src/views/sys/login/LoginForm.vue @@ -30,7 +30,7 @@ <FormItem> <!-- No logic, you need to deal with it yourself --> <Checkbox v-model:checked="rememberMe" size="small"> - {{ t('sys.login.rememberMe') }} + {{ t("sys.login.rememberMe") }} </Checkbox> </FormItem> </ACol> @@ -38,7 +38,7 @@ <FormItem :style="{ 'text-align': 'right' }"> <!-- No logic, you need to deal with it yourself --> <Button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)"> - {{ t('sys.login.forgetPassword') }} + {{ t("sys.login.forgetPassword") }} </Button> </FormItem> </ACol> @@ -46,7 +46,7 @@ <FormItem class="enter-x"> <Button type="primary" size="large" block @click="handleLogin" :loading="loading"> - {{ t('sys.login.loginButton') }} + {{ t("sys.login.loginButton") }} </Button> <!-- <Button size="large" class="mt-4 enter-x" block @click="handleRegister"> {{ t('sys.login.registerButton') }} @@ -55,22 +55,22 @@ <ARow class="enter-x"> <ACol :md="8" :xs="24"> <Button block @click="setLoginState(LoginStateEnum.MOBILE)"> - {{ t('sys.login.mobileSignInFormTitle') }} + {{ t("sys.login.mobileSignInFormTitle") }} </Button> </ACol> <ACol :md="8" :xs="24" class="!my-2 !md:my-0 xs:mx-0 md:mx-2"> <Button block @click="setLoginState(LoginStateEnum.QR_CODE)"> - {{ t('sys.login.qrSignInFormTitle') }} + {{ t("sys.login.qrSignInFormTitle") }} </Button> </ACol> <ACol :md="7" :xs="24"> <Button block @click="setLoginState(LoginStateEnum.REGISTER)"> - {{ t('sys.login.registerButton') }} + {{ t("sys.login.registerButton") }} </Button> </ACol> </ARow> - <Divider class="enter-x">{{ t('sys.login.otherSignIn') }}</Divider> + <Divider class="enter-x">{{ t("sys.login.otherSignIn") }}</Divider> <div class="flex justify-evenly enter-x" :class="`${prefixCls}-sign-in-way`"> <GithubFilled /> @@ -82,24 +82,24 @@ </Form> </template> <script lang="ts" setup> - import { reactive, ref, unref, computed } from 'vue'; + import { reactive, ref, unref, computed } from "vue"; - import { Checkbox, Form, Input, Row, Col, Button, Divider } from 'ant-design-vue'; + import { Checkbox, Form, Input, Row, Col, Button, Divider } from "ant-design-vue"; import { GithubFilled, WechatFilled, AlipayCircleFilled, GoogleCircleFilled, TwitterCircleFilled, - } from '@ant-design/icons-vue'; - import LoginFormTitle from './LoginFormTitle.vue'; + } from "@ant-design/icons-vue"; + import LoginFormTitle from "./LoginFormTitle.vue"; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useMessage } from '/@/hooks/web/useMessage'; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useMessage } from "/@/hooks/web/useMessage"; - import { useUserStore } from '/@/store/modules/user'; - import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin'; - import { useDesign } from '/@/hooks/web/useDesign'; + import { useUserStore } from "/@/store/modules/user"; + import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from "./useLogin"; + import { useDesign } from "/@/hooks/web/useDesign"; //import { onKeyStroke } from '@vueuse/core'; const ACol = Col; @@ -108,7 +108,7 @@ const InputPassword = Input.Password; const { t } = useI18n(); const { notification, createErrorModal } = useMessage(); - const { prefixCls } = useDesign('login'); + const { prefixCls } = useDesign("login"); const userStore = useUserStore(); const { setLoginState, getLoginState } = useLoginState(); @@ -119,8 +119,8 @@ const rememberMe = ref(false); const formData = reactive({ - account: 'vben', - password: '123456', + account: "vben", + password: "123456", }); const { validForm } = useFormValid(formRef); @@ -137,19 +137,19 @@ const userInfo = await userStore.login({ password: data.password, username: data.account, - mode: 'none', //不要默认的错误提示 + mode: "none", //不要默认的错误提示 }); if (userInfo) { notification.success({ - message: t('sys.login.loginSuccessTitle'), - description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realName}`, + message: t("sys.login.loginSuccessTitle"), + description: `${t("sys.login.loginSuccessDesc")}: ${userInfo.realName}`, duration: 3, }); } } catch (error) { createErrorModal({ - title: t('sys.api.errorTip'), - content: (error as unknown as Error).message || t('sys.api.networkExceptionMsg'), + title: t("sys.api.errorTip"), + content: (error as unknown as Error).message || t("sys.api.networkExceptionMsg"), getContainer: () => document.body.querySelector(`.${prefixCls}`) || document.body, }); } finally { diff --git a/src/views/sys/login/LoginFormTitle.vue b/src/views/sys/login/LoginFormTitle.vue index a673636..e5ca008 100644 --- a/src/views/sys/login/LoginFormTitle.vue +++ b/src/views/sys/login/LoginFormTitle.vue @@ -4,9 +4,9 @@ </h2> </template> <script lang="ts" setup> - import { computed, unref } from 'vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { LoginStateEnum, useLoginState } from './useLogin'; + import { computed, unref } from "vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { LoginStateEnum, useLoginState } from "./useLogin"; const { t } = useI18n(); @@ -14,11 +14,11 @@ const getFormTitle = computed(() => { const titleObj = { - [LoginStateEnum.RESET_PASSWORD]: t('sys.login.forgetFormTitle'), - [LoginStateEnum.LOGIN]: t('sys.login.signInFormTitle'), - [LoginStateEnum.REGISTER]: t('sys.login.signUpFormTitle'), - [LoginStateEnum.MOBILE]: t('sys.login.mobileSignInFormTitle'), - [LoginStateEnum.QR_CODE]: t('sys.login.qrSignInFormTitle'), + [LoginStateEnum.RESET_PASSWORD]: t("sys.login.forgetFormTitle"), + [LoginStateEnum.LOGIN]: t("sys.login.signInFormTitle"), + [LoginStateEnum.REGISTER]: t("sys.login.signUpFormTitle"), + [LoginStateEnum.MOBILE]: t("sys.login.mobileSignInFormTitle"), + [LoginStateEnum.QR_CODE]: t("sys.login.qrSignInFormTitle"), }; return titleObj[unref(getLoginState)]; }); diff --git a/src/views/sys/login/MobileForm.vue b/src/views/sys/login/MobileForm.vue index 88b9f82..8f3bbdb 100644 --- a/src/views/sys/login/MobileForm.vue +++ b/src/views/sys/login/MobileForm.vue @@ -21,22 +21,22 @@ <FormItem class="enter-x"> <Button type="primary" size="large" block @click="handleLogin" :loading="loading"> - {{ t('sys.login.loginButton') }} + {{ t("sys.login.loginButton") }} </Button> <Button size="large" block class="mt-4" @click="handleBackLogin"> - {{ t('sys.login.backSignIn') }} + {{ t("sys.login.backSignIn") }} </Button> </FormItem> </Form> </template> </template> <script lang="ts" setup> - import { reactive, ref, computed, unref } from 'vue'; - import { Form, Input, Button } from 'ant-design-vue'; - import { CountdownInput } from '/@/components/CountDown'; - import LoginFormTitle from './LoginFormTitle.vue'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from './useLogin'; + import { reactive, ref, computed, unref } from "vue"; + import { Form, Input, Button } from "ant-design-vue"; + import { CountdownInput } from "/@/components/CountDown"; + import LoginFormTitle from "./LoginFormTitle.vue"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from "./useLogin"; const FormItem = Form.Item; const { t } = useI18n(); @@ -47,8 +47,8 @@ const loading = ref(false); const formData = reactive({ - mobile: '', - sms: '', + mobile: "", + sms: "", }); const { validForm } = useFormValid(formRef); diff --git a/src/views/sys/login/QrCodeForm.vue b/src/views/sys/login/QrCodeForm.vue index 680c07c..c329745 100644 --- a/src/views/sys/login/QrCodeForm.vue +++ b/src/views/sys/login/QrCodeForm.vue @@ -7,22 +7,22 @@ class="enter-x flex justify-center xl:justify-start" :width="280" /> - <Divider class="enter-x">{{ t('sys.login.scanSign') }}</Divider> + <Divider class="enter-x">{{ t("sys.login.scanSign") }}</Divider> <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin"> - {{ t('sys.login.backSignIn') }} + {{ t("sys.login.backSignIn") }} </Button> </div> </template> </template> <script lang="ts" setup> - import { computed, unref } from 'vue'; - import LoginFormTitle from './LoginFormTitle.vue'; - import { Button, Divider } from 'ant-design-vue'; - import { QrCode } from '/@/components/Qrcode/index'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useLoginState, LoginStateEnum } from './useLogin'; + import { computed, unref } from "vue"; + import LoginFormTitle from "./LoginFormTitle.vue"; + import { Button, Divider } from "ant-design-vue"; + import { QrCode } from "/@/components/Qrcode/index"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useLoginState, LoginStateEnum } from "./useLogin"; - const qrCodeUrl = 'https://vvbin.cn/next/login'; + const qrCodeUrl = "https://vvbin.cn/next/login"; const { t } = useI18n(); const { handleBackLogin, getLoginState } = useLoginState(); diff --git a/src/views/sys/login/RegisterForm.vue b/src/views/sys/login/RegisterForm.vue index e70917e..37084c5 100644 --- a/src/views/sys/login/RegisterForm.vue +++ b/src/views/sys/login/RegisterForm.vue @@ -45,7 +45,7 @@ <FormItem class="enter-x" name="policy"> <!-- No logic, you need to deal with it yourself --> <Checkbox v-model:checked="formData.policy" size="small"> - {{ t('sys.login.policy') }} + {{ t("sys.login.policy") }} </Checkbox> </FormItem> @@ -57,22 +57,22 @@ @click="handleRegister" :loading="loading" > - {{ t('sys.login.registerButton') }} + {{ t("sys.login.registerButton") }} </Button> <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin"> - {{ t('sys.login.backSignIn') }} + {{ t("sys.login.backSignIn") }} </Button> </Form> </template> </template> <script lang="ts" setup> - import { reactive, ref, unref, computed } from 'vue'; - import LoginFormTitle from './LoginFormTitle.vue'; - import { Form, Input, Button, Checkbox } from 'ant-design-vue'; - import { StrengthMeter } from '/@/components/StrengthMeter'; - import { CountdownInput } from '/@/components/CountDown'; - import { useI18n } from '/@/hooks/web/useI18n'; - import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from './useLogin'; + import { reactive, ref, unref, computed } from "vue"; + import LoginFormTitle from "./LoginFormTitle.vue"; + import { Form, Input, Button, Checkbox } from "ant-design-vue"; + import { StrengthMeter } from "/@/components/StrengthMeter"; + import { CountdownInput } from "/@/components/CountDown"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from "./useLogin"; const FormItem = Form.Item; const InputPassword = Input.Password; @@ -83,11 +83,11 @@ const loading = ref(false); const formData = reactive({ - account: '', - password: '', - confirmPassword: '', - mobile: '', - sms: '', + account: "", + password: "", + confirmPassword: "", + mobile: "", + sms: "", policy: false, }); diff --git a/src/views/sys/login/SessionTimeoutLogin.vue b/src/views/sys/login/SessionTimeoutLogin.vue index d1a2f34..401b48b 100644 --- a/src/views/sys/login/SessionTimeoutLogin.vue +++ b/src/views/sys/login/SessionTimeoutLogin.vue @@ -6,15 +6,15 @@ </transition> </template> <script lang="ts" setup> - import { onBeforeUnmount, onMounted, ref } from 'vue'; - import Login from './Login.vue'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useUserStore } from '/@/store/modules/user'; - import { usePermissionStore } from '/@/store/modules/permission'; - import { useAppStore } from '/@/store/modules/app'; - import { PermissionModeEnum } from '/@/enums/appEnum'; + import { onBeforeUnmount, onMounted, ref } from "vue"; + import Login from "./Login.vue"; + import { useDesign } from "/@/hooks/web/useDesign"; + import { useUserStore } from "/@/store/modules/user"; + import { usePermissionStore } from "/@/store/modules/permission"; + import { useAppStore } from "/@/store/modules/app"; + import { PermissionModeEnum } from "/@/enums/appEnum"; - const { prefixCls } = useDesign('st-login'); + const { prefixCls } = useDesign("st-login"); const userStore = useUserStore(); const permissionStore = usePermissionStore(); const appStore = useAppStore(); @@ -27,7 +27,7 @@ onMounted(() => { // 记录当前的UserId userId.value = userStore.getUserInfo?.userId; - console.log('Mounted', userStore.getUserInfo); + console.log("Mounted", userStore.getUserInfo); }); onBeforeUnmount(() => { @@ -41,7 +41,7 @@ }); </script> <style lang="less" scoped> - @prefix-cls: ~'@{namespace}-st-login'; + @prefix-cls: ~"@{namespace}-st-login"; .@{prefix-cls} { position: fixed; diff --git a/src/views/sys/login/useLogin.ts b/src/views/sys/login/useLogin.ts index 78b73fc..7c4a82b 100644 --- a/src/views/sys/login/useLogin.ts +++ b/src/views/sys/login/useLogin.ts @@ -1,7 +1,7 @@ -import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; -import type { RuleObject } from 'ant-design-vue/lib/form/interface'; -import { ref, computed, unref, Ref } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; +import type { ValidationRule } from "ant-design-vue/lib/form/Form"; +import type { RuleObject } from "ant-design-vue/lib/form/interface"; +import { ref, computed, unref, Ref } from "vue"; +import { useI18n } from "/@/hooks/web/useI18n"; export enum LoginStateEnum { LOGIN, @@ -41,22 +41,22 @@ export function useFormValid<T extends Object = any>(formRef: Ref<any>) { export function useFormRules(formData?: Recordable) { const { t } = useI18n(); - const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder'))); - const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder'))); - const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder'))); - const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder'))); + const getAccountFormRule = computed(() => createRule(t("sys.login.accountPlaceholder"))); + const getPasswordFormRule = computed(() => createRule(t("sys.login.passwordPlaceholder"))); + const getSmsFormRule = computed(() => createRule(t("sys.login.smsPlaceholder"))); + const getMobileFormRule = computed(() => createRule(t("sys.login.mobilePlaceholder"))); const validatePolicy = async (_: RuleObject, value: boolean) => { - return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve(); + return !value ? Promise.reject(t("sys.login.policyPlaceholder")) : Promise.resolve(); }; const validateConfirmPassword = (password: string) => { return async (_: RuleObject, value: string) => { if (!value) { - return Promise.reject(t('sys.login.passwordPlaceholder')); + return Promise.reject(t("sys.login.passwordPlaceholder")); } if (value !== password) { - return Promise.reject(t('sys.login.diffPwd')); + return Promise.reject(t("sys.login.diffPwd")); } return Promise.resolve(); }; @@ -79,9 +79,9 @@ export function useFormRules(formData?: Recordable) { account: accountFormRule, password: passwordFormRule, confirmPassword: [ - { validator: validateConfirmPassword(formData?.password), trigger: 'change' }, + { validator: validateConfirmPassword(formData?.password), trigger: "change" }, ], - policy: [{ validator: validatePolicy, trigger: 'change' }], + policy: [{ validator: validatePolicy, trigger: "change" }], ...mobileRule, }; @@ -112,7 +112,7 @@ function createRule(message: string) { { required: true, message, - trigger: 'change', + trigger: "change", }, ]; } diff --git a/src/views/sys/redirect/index.vue b/src/views/sys/redirect/index.vue index 7aa5463..9673bf6 100644 --- a/src/views/sys/redirect/index.vue +++ b/src/views/sys/redirect/index.vue @@ -2,20 +2,20 @@ <div></div> </template> <script lang="ts" setup> - import { unref } from 'vue'; - import { useRouter } from 'vue-router'; + import { unref } from "vue"; + import { useRouter } from "vue-router"; const { currentRoute, replace } = useRouter(); const { params, query } = unref(currentRoute); - const { path, _redirect_type = 'path' } = params; + const { path, _redirect_type = "path" } = params; - Reflect.deleteProperty(params, '_redirect_type'); - Reflect.deleteProperty(params, 'path'); + Reflect.deleteProperty(params, "_redirect_type"); + Reflect.deleteProperty(params, "path"); - const _path = Array.isArray(path) ? path.join('/') : path; + const _path = Array.isArray(path) ? path.join("/") : path; - if (_redirect_type === 'name') { + if (_redirect_type === "name") { replace({ name: _path, query, @@ -23,7 +23,7 @@ }); } else { replace({ - path: _path.startsWith('/') ? _path : '/' + _path, + path: _path.startsWith("/") ? _path : "/" + _path, query, }); } diff --git a/stylelint.config.js b/stylelint.config.js new file mode 100644 index 0000000..26bc40c --- /dev/null +++ b/stylelint.config.js @@ -0,0 +1,92 @@ +module.exports = { + root: true, + plugins: ['stylelint-order'], + customSyntax: 'postcss-less', + extends: ['stylelint-config-standard', 'stylelint-config-prettier'], + rules: { + 'selector-class-pattern': null, + 'selector-pseudo-class-no-unknown': [ + true, + { + ignorePseudoClasses: ['global'], + }, + ], + 'selector-pseudo-element-no-unknown': [ + true, + { + ignorePseudoElements: ['v-deep'], + }, + ], + 'at-rule-no-unknown': [ + true, + { + ignoreAtRules: [ + 'tailwind', + 'apply', + 'variants', + 'responsive', + 'screen', + 'function', + 'if', + 'each', + 'include', + 'mixin', + ], + }, + ], + 'no-empty-source': null, + 'named-grid-areas-no-invalid': null, + 'unicode-bom': 'never', + 'no-descending-specificity': null, + 'font-family-no-missing-generic-family-keyword': null, + 'declaration-colon-space-after': 'always-single-line', + 'declaration-colon-space-before': 'never', + // 'declaration-block-trailing-semicolon': 'always', + 'rule-empty-line-before': [ + 'always', + { + ignore: ['after-comment', 'first-nested'], + }, + ], + 'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }], + 'order/order': [ + [ + 'dollar-variables', + 'custom-properties', + 'at-rules', + 'declarations', + { + type: 'at-rule', + name: 'supports', + }, + { + type: 'at-rule', + name: 'media', + }, + 'rules', + ], + { severity: 'warning' }, + ], + }, + ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts'], + overrides: [ + { + files: ['*.vue', '**/*.vue'], + extends: ['stylelint-config-recommended', 'stylelint-config-html'], + rules: { + 'selector-pseudo-class-no-unknown': [ + true, + { + ignorePseudoClasses: ['deep', 'global'], + }, + ], + 'selector-pseudo-element-no-unknown': [ + true, + { + ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'], + }, + ], + }, + }, + ], +}; diff --git a/tests/__mocks__/fileMock.ts b/tests/__mocks__/fileMock.ts new file mode 100644 index 0000000..08d725c --- /dev/null +++ b/tests/__mocks__/fileMock.ts @@ -0,0 +1 @@ +export default ''; diff --git a/tests/__mocks__/styleMock.ts b/tests/__mocks__/styleMock.ts new file mode 100644 index 0000000..ff8b4c5 --- /dev/null +++ b/tests/__mocks__/styleMock.ts @@ -0,0 +1 @@ +export default {}; diff --git a/tests/__mocks__/workerMock.ts b/tests/__mocks__/workerMock.ts new file mode 100644 index 0000000..0b8b671 --- /dev/null +++ b/tests/__mocks__/workerMock.ts @@ -0,0 +1,5 @@ +export default jest.fn().mockImplementation(() => ({ + postMessage: jest.fn(), + onmessage: jest.fn(), + onerror: jest.fn(), +})); diff --git a/tests/server/README.md b/tests/server/README.md new file mode 100644 index 0000000..33db6bf --- /dev/null +++ b/tests/server/README.md @@ -0,0 +1,15 @@ +# Test Server + +It is used to start the test interface service, which can test the upload, websocket, login and other interfaces. + +## Usage + +```bash + +cd ./test/server + +yarn + +yarn start + +``` diff --git a/tests/server/controller/FileController.ts b/tests/server/controller/FileController.ts new file mode 100644 index 0000000..cf6d90d --- /dev/null +++ b/tests/server/controller/FileController.ts @@ -0,0 +1,18 @@ +import FileService from '../service/FileService'; + +class FileController { + private service: FileService = new FileService(); + + upload = async (ctx) => { + const files = ctx.request.files.file; + console.log(files); + + if (files.length === undefined) { + this.service.upload(ctx, files, false); + } else { + this.service.upload(ctx, files, true); + } + }; +} + +export default new FileController(); diff --git a/tests/server/controller/UserController.ts b/tests/server/controller/UserController.ts new file mode 100644 index 0000000..db815c2 --- /dev/null +++ b/tests/server/controller/UserController.ts @@ -0,0 +1,15 @@ +import UserService from '../service/UserService'; + +class UserController { + private service: UserService = new UserService(); + + login = async (ctx) => { + ctx.body = await this.service.login(); + }; + + getUserInfoById = async (ctx) => { + ctx.body = await this.service.getUserInfoById(); + }; +} + +export default new UserController(); diff --git a/tests/server/ecosystem.config.js b/tests/server/ecosystem.config.js new file mode 100644 index 0000000..a31e457 --- /dev/null +++ b/tests/server/ecosystem.config.js @@ -0,0 +1,18 @@ +const { name } = require('./package.json'); +const path = require('path'); + +module.exports = { + apps: [ + { + name, + script: path.resolve(__dirname, './dist/index.js'), + instances: require('os').cpus().length, + autorestart: true, + watch: true, + env_production: { + NODE_ENV: 'production', + PORT: 8080, + }, + }, + ], +}; diff --git a/tests/server/index.ts b/tests/server/index.ts new file mode 100644 index 0000000..6c92d76 --- /dev/null +++ b/tests/server/index.ts @@ -0,0 +1,63 @@ +import Koa from 'koa'; +import path from 'path'; +import Router from 'koa-router'; +import body from 'koa-body'; +import cors from 'koa2-cors'; +import koaStatic from 'koa-static'; +import websockify from 'koa-websocket'; +import route from 'koa-route'; + +import AppRoutes from './routes'; + +const PORT = 3300; + +const app = websockify(new Koa()); + +app.ws.use(function (ctx, next) { + ctx.websocket.send('connection succeeded!'); + return next(ctx); +}); + +app.ws.use( + route.all('/test', function (ctx) { + // ctx.websocket.send('Hello World'); + ctx.websocket.on('message', function (message) { + // do something with the message from client + + if (message !== 'ping') { + const data = JSON.stringify({ + id: Math.ceil(Math.random() * 1000), + time: new Date().getTime(), + res: `${message}`, + }); + ctx.websocket.send(data); + } + console.log(message); + }); + }), +); + +const router = new Router(); + +// router +AppRoutes.forEach((route) => router[route.method](route.path, route.action)); + +app.use(cors()); +app.use( + body({ + encoding: 'gzip', + multipart: true, + formidable: { + // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录 + keepExtensions: true, + maxFieldsSize: 20 * 1024 * 1024, + }, + }), +); +app.use(router.routes()); +app.use(router.allowedMethods()); +app.use(koaStatic(path.join(__dirname))); + +app.listen(PORT, () => { + console.log(`Application started successfully: http://localhost:${PORT}`); +}); diff --git a/tests/server/nodemon.json b/tests/server/nodemon.json new file mode 100644 index 0000000..59fa5af --- /dev/null +++ b/tests/server/nodemon.json @@ -0,0 +1,8 @@ +{ + "watch": ["src"], + "ext": "ts", + "exec": "ts-node -r tsconfig-paths/register index.ts", + "events": { + "restart": "clear" + } +} diff --git a/tests/server/package.json b/tests/server/package.json new file mode 100644 index 0000000..7a26349 --- /dev/null +++ b/tests/server/package.json @@ -0,0 +1,36 @@ +{ + "name": "server", + "version": "1.0.0", + "license": "MIT", + "scripts": { + "start": "nodemon", + "build": "rimraf ./dist && tsup ./index.ts --dts --format cjs,esm ", + "prod": "npx pm2 start ecosystem.config.js --env production", + "restart": "pm2 restart ecosystem.config.js --env production", + "stop": "npx pm2 stop ecosystem.config.js" + }, + "dependencies": { + "fs-extra": "^10.0.0", + "koa": "^2.13.4", + "koa-body": "^4.2.0", + "koa-bodyparser": "^4.3.0", + "koa-route": "^3.2.0", + "koa-router": "^10.1.1", + "koa-static": "^5.0.0", + "koa-websocket": "^6.0.0", + "koa2-cors": "^2.0.6" + }, + "devDependencies": { + "@types/koa": "^2.13.4", + "@types/koa-bodyparser": "^5.0.2", + "@types/koa-router": "^7.4.4", + "@types/node": "^16.11.6", + "nodemon": "^2.0.14", + "pm2": "^5.1.2", + "rimraf": "^3.0.2", + "ts-node": "^10.4.0", + "tsconfig-paths": "^3.11.0", + "tsup": "^5.5.0", + "typescript": "^4.4.4" + } +} diff --git a/tests/server/routes.ts b/tests/server/routes.ts new file mode 100644 index 0000000..7fe6475 --- /dev/null +++ b/tests/server/routes.ts @@ -0,0 +1,23 @@ +import UserController from './controller/UserController'; +import FileController from './controller/FileController'; + +export default [ + // user + { + path: '/login', + method: 'post', + action: UserController.login, + }, + { + path: '/getUserInfoById', + method: 'get', + action: UserController.getUserInfoById, + }, + + // file + { + path: '/upload', + method: 'post', + action: FileController.upload, + }, +]; diff --git a/tests/server/service/FileService.ts b/tests/server/service/FileService.ts new file mode 100644 index 0000000..dfd378f --- /dev/null +++ b/tests/server/service/FileService.ts @@ -0,0 +1,54 @@ +import path from 'path'; +import fs from 'fs-extra'; + +const uploadUrl = 'http://localhost:3300/static/upload'; +const filePath = path.join(__dirname, '../static/upload/'); + +fs.ensureDir(filePath); +export default class UserService { + async upload(ctx, files, isMultiple) { + let fileReader, fileResource, writeStream; + + const fileFunc = function (file) { + fileReader = fs.createReadStream(file.path); + fileResource = filePath + `/${file.name}`; + console.log(fileResource); + + writeStream = fs.createWriteStream(fileResource); + fileReader.pipe(writeStream); + }; + + const returnFunc = function (flag) { + if (flag) { + let url = ''; + for (let i = 0; i < files.length; i++) { + url += uploadUrl + `/${files[i].name},`; + } + url = url.replace(/,$/gi, ''); + ctx.body = { + url: url, + code: 0, + message: 'upload Success!', + }; + } else { + ctx.body = { + url: uploadUrl + `/${files.name}`, + code: 0, + message: 'upload Success!', + }; + } + }; + console.log(isMultiple, files.length); + + if (isMultiple) { + for (let i = 0; i < files.length; i++) { + const f1 = files[i]; + fileFunc(f1); + } + } else { + fileFunc(files); + } + fs.ensureDir(filePath); + returnFunc(isMultiple); + } +} diff --git a/tests/server/service/UserService.ts b/tests/server/service/UserService.ts new file mode 100644 index 0000000..0c395e5 --- /dev/null +++ b/tests/server/service/UserService.ts @@ -0,0 +1,25 @@ +import { Result } from '../utils'; + +const fakeUserInfo = { + userId: '1', + username: 'vben', + realName: 'Vben Admin', + desc: 'manager', + password: '123456', + token: 'fakeToken1', + roles: [ + { + roleName: 'Super Admin', + value: 'super', + }, + ], +}; +export default class UserService { + async login() { + return Result.success(fakeUserInfo); + } + + async getUserInfoById() { + return Result.success(fakeUserInfo); + } +} diff --git a/tests/server/tsconfig.json b/tests/server/tsconfig.json new file mode 100644 index 0000000..76203ed --- /dev/null +++ b/tests/server/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": false, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es6", + "sourceMap": false, + "esModuleInterop": true, + "outDir": "./dist", + "baseUrl": "./" + }, + "exclude": ["node_modules"] +} diff --git a/tests/server/utils.ts b/tests/server/utils.ts new file mode 100644 index 0000000..7fd0b3f --- /dev/null +++ b/tests/server/utils.ts @@ -0,0 +1,9 @@ +export class Result { + static success(data: any) { + return { + code: 0, + success: true, + result: data, + }; + } +} diff --git a/tests/server/yarn.lock b/tests/server/yarn.lock new file mode 100644 index 0000000..9c6df7f --- /dev/null +++ b/tests/server/yarn.lock @@ -0,0 +1,2955 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + +"@babel/highlight@^7.12.13": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.7" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" + integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@opencensus/core@0.0.9": + version "0.0.9" + resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.9.tgz#b16f775435ee309433e4126af194d37313fc93b3" + integrity sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q== + dependencies: + continuation-local-storage "^3.2.1" + log-driver "^1.2.7" + semver "^5.5.0" + shimmer "^1.2.0" + uuid "^3.2.1" + +"@opencensus/core@^0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.8.tgz#df01f200c2d2fbfe14dae129a1a86fb87286db92" + integrity sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ== + dependencies: + continuation-local-storage "^3.2.1" + log-driver "^1.2.7" + semver "^5.5.0" + shimmer "^1.2.0" + uuid "^3.2.1" + +"@opencensus/propagation-b3@0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz#0751e6fd75f09400d9d3c419001e9e15a0df68e9" + integrity sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A== + dependencies: + "@opencensus/core" "^0.0.8" + uuid "^3.2.1" + +"@pm2/agent@~1.0.8": + version "1.0.8" + resolved "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.8.tgz#cd15d84dbfc95427e6fccce72bc165b79f1d8579" + integrity sha512-r8mud8BhBz+a2yjlgtk+PBXUR5EQ9UKSJCs232OxfCmuBr1MZw0Mo+Kfog6WJ8OmVk99r1so9yTUK4IyrgGcMQ== + dependencies: + async "~3.2.0" + chalk "~3.0.0" + dayjs "~1.8.24" + debug "~4.3.1" + eventemitter2 "~5.0.1" + fclone "~1.0.11" + nssocket "0.6.0" + pm2-axon "~4.0.1" + pm2-axon-rpc "~0.7.0" + proxy-agent "~4.0.1" + semver "~7.2.0" + ws "~7.2.0" + +"@pm2/io@~5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz#623cbcaf6fe39375f20ac2e75497477a1b1ec5c5" + integrity sha512-3rToDVJaRoob5Lq8+7Q2TZFruoEkdORxwzFpZaqF4bmH6Bkd7kAbdPrI/z8X6k1Meq5rTtScM7MmDgppH6aLlw== + dependencies: + "@opencensus/core" "0.0.9" + "@opencensus/propagation-b3" "0.0.8" + async "~2.6.1" + debug "~4.3.1" + eventemitter2 "^6.3.1" + require-in-the-middle "^5.0.0" + semver "6.3.0" + shimmer "^1.2.0" + signal-exit "^3.0.3" + tslib "1.9.3" + +"@pm2/js-api@~0.6.7": + version "0.6.7" + resolved "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.7.tgz#ed28c3b7b6d26f03f826318754fdc5468afa589f" + integrity sha512-jiJUhbdsK+5C4zhPZNnyA3wRI01dEc6a2GhcQ9qI38DyIk+S+C8iC3fGjcjUbt/viLYKPjlAaE+hcT2/JMQPXw== + dependencies: + async "^2.6.3" + axios "^0.21.0" + debug "~4.3.1" + eventemitter2 "^6.3.1" + ws "^7.0.0" + +"@pm2/pm2-version-check@latest": + version "1.0.4" + resolved "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz#cf97fbb14b0eca95430ca05eedccbd2683806e43" + integrity sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA== + dependencies: + debug "^4.3.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606" + integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ== + +"@tsconfig/node12@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b" + integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A== + +"@tsconfig/node14@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e" + integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ== + +"@tsconfig/node16@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" + integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== + +"@types/accepts@*": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + +"@types/content-disposition@*": + version "0.5.3" + resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" + integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== + +"@types/cookies@*": + version "0.7.6" + resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504" + integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.21" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42" + integrity sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.12" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350" + integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/formidable@^1.0.31": + version "1.2.2" + resolved "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.2.tgz#e690d60732ee9d3f0a441bc572c17409785b283c" + integrity sha512-8RDAMnMHOh7QrY1xuQ7s6/Xre9pMvJ2zT2VgATiz5cIE71Q/6N3+P8sr3z/dNWNmvX5/aX9x8uJlG0MZiMZXoA== + dependencies: + "@types/node" "*" + +"@types/http-assert@*": + version "1.5.1" + resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" + integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== + +"@types/http-errors@*": + version "1.8.0" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" + integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/keygrip@*": + version "1.0.2" + resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" + integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== + +"@types/koa-bodyparser@^4.2.2": + version "4.3.1" + resolved "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.1.tgz#ec2e06f6f50cfddba035d33a3cfe75a8f0cd7fa4" + integrity sha512-N1cw6UpYYW01rGanfC0guqkyqKKavXygGBeSgsJOe7EkkSlRH7BNRjzyqv1TzJ3Au69aNeagpzzqAzTo6I08ow== + dependencies: + "@types/koa" "*" + +"@types/koa-compose@*": + version "3.2.5" + resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" + integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== + dependencies: + "@types/koa" "*" + +"@types/koa-router@^7.0.40": + version "7.4.2" + resolved "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.2.tgz#b12d7095e844f4d0081b32742691a4d2e5a8046a" + integrity sha512-A9fTLdSHeLQpmtAPUKvvmG+xHHH5Yclqhlmz1bd5BTfdvNo37H8hzNaNpO2mgUri8Wk8fRH9NLpFRHW0wqraAw== + dependencies: + "@types/koa" "*" + +"@types/koa@*", "@types/koa@^2.0.48": + version "2.13.3" + resolved "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz#5b44c0956d7f7bf41f74ccfb530fec60fbed45ca" + integrity sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/node@*", "@types/node@^15.12.1": + version "15.12.1" + resolved "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" + integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/qs@*": + version "6.9.6" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" + integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/serve-static@*": + version "1.13.9" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" + integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@^1.3.5: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +agent-base@6, agent-base@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +amp-message@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" + integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU= + dependencies: + amp "0.3.1" + +amp@0.3.1, amp@~0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" + integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + +async@^2.6.3, async@~2.6.1: + version "2.6.3" + resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +axios@^0.21.0: + version "0.21.1" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blessed@0.1.81: + version "0.1.81" + resolved "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" + integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= + +bodec@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc" + integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw= + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cac@^6.7.2: + version "6.7.3" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768" + integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg== + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +charm@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" + integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= + +chokidar@^3.2.2, chokidar@^3.5.1: + version "3.5.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-tableau@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz#baa78d83e08a2d7ab79b7dad9406f0254977053f" + integrity sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ== + dependencies: + chalk "3.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +co-body@^5.1.1: + version "5.2.0" + resolved "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz#5a0a658c46029131e0e3a306f67647302f71c124" + integrity sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ== + dependencies: + inflation "^2.0.0" + qs "^6.4.0" + raw-body "^2.2.0" + type-is "^1.6.14" + +co-body@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547" + integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ== + dependencies: + inflation "^2.0.0" + qs "^6.5.2" + raw-body "^2.3.3" + type-is "^1.6.16" + +co@^4.4.0, co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@2.15.1: + version "2.15.1" + resolved "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +content-disposition@~0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + +cookies@~0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" + integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== + dependencies: + depd "~2.0.0" + keygrip "~1.1.0" + +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cron@1.8.2: + version "1.8.2" + resolved "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" + integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== + dependencies: + moment-timezone "^0.5.x" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +culvert@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f" + integrity sha1-lQL18BVKLVoioCPnn3HMk2+m728= + +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + +dayjs@~1.8.24, dayjs@~1.8.25: + version "1.8.36" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50" + integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw== + +debug@*, debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +degenerator@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" + integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== + dependencies: + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@^2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +esbuild@^0.11.12: + version "0.11.23" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" + integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter2@5.0.1, eventemitter2@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" + integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= + +eventemitter2@^6.3.1: + version "6.4.4" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" + integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== + +eventemitter2@~0.4.14: + version "0.4.14" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + +fclone@1.0.11, fclone@~1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" + integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= + +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.10.0: + version "1.14.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +formidable@^1.1.1: + version "1.2.2" + resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +ftp@^0.3.10: + version "0.3.10" + resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-uri@3: + version "3.0.2" + resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== + dependencies: + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" + +git-node-fs@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f" + integrity sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8= + +git-sha1@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745" + integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U= + +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5, glob@^7.1.3: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + +globby@^11.0.3: + version "11.0.3" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-assert@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" + integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw== + dependencies: + deep-equal "~1.0.1" + http-errors "~1.7.2" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.3, http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@^1.6.3, http-errors@^1.7.3: + version "1.8.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== + dependencies: + import-from "^3.0.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== + dependencies: + resolve-from "^5.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflation@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" + integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@~2.0.1: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.9" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" + integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +joycon@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf" + integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA== + +js-git@^0.7.8: + version "0.7.8" + resolved "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444" + integrity sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ= + dependencies: + bodec "^0.1.0" + culvert "^0.1.2" + git-sha1 "^0.1.2" + pako "^0.2.5" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keygrip@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" + integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== + dependencies: + tsscmp "1.0.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +koa-body@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/koa-body/-/koa-body-4.2.0.tgz#37229208b820761aca5822d14c5fc55cee31b26f" + integrity sha512-wdGu7b9amk4Fnk/ytH8GuWwfs4fsB5iNkY8kZPpgQVb04QZSv85T0M8reb+cJmvLE8cjPYvBzRikD3s6qz8OoA== + dependencies: + "@types/formidable" "^1.0.31" + co-body "^5.1.1" + formidable "^1.1.1" + +koa-bodyparser@^4.2.1: + version "4.3.0" + resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" + integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== + dependencies: + co-body "^6.0.0" + copy-to "^2.0.1" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-route@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz#76298b99a6bcfa9e38cab6fe5c79a8733e758bce" + integrity sha1-dimLmaa8+p44yrb+XHmocz51i84= + dependencies: + debug "*" + methods "~1.1.0" + path-to-regexp "^1.2.0" + +koa-router@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/koa-router/-/koa-router-10.0.0.tgz#7bc76a031085731e61fc92c1683687b2f44de6a4" + integrity sha512-gAE5J1gBQTvfR8rMMtMUkE26+1MbO3DGpGmvfmM2pR9Z7w2VIb2Ecqeal98yVO7+4ltffby7gWOzpCmdNOQe0w== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + koa-compose "^4.1.0" + methods "^1.1.2" + path-to-regexp "^6.1.0" + +koa-send@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" + integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + resolve-path "^1.4.0" + +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" + integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== + dependencies: + debug "^3.1.0" + koa-send "^5.0.0" + +koa-websocket@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/koa-websocket/-/koa-websocket-6.0.0.tgz#7fb7698a7004c07aac663b15e84bf4bc99901352" + integrity sha512-pGTaB+aXILD/q+bQNh+Ejrg8zSxf6QRpiUQoh2TFQSmUZo2hrt6KGk4qlyxfHxFH40bVtyKeo4x1u0kKgJDOWA== + dependencies: + co "^4.4.0" + debug "^4.0.1" + koa-compose "^4.1.0" + ws "^7.0.1" + +koa2-cors@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/koa2-cors/-/koa2-cors-2.0.6.tgz#9ad23df3a0b9bb84530b46f5944f3fb576086554" + integrity sha512-JRCcSM4lamM+8kvKGDKlesYk2ASrmSTczDtGUnIadqMgnHU4Ct5Gw7Bxt3w3m6d6dy3WN0PU4oMP43HbddDEWg== + +koa@^2.7.0: + version "2.13.1" + resolved "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" + integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.8.0" + debug "~3.1.0" + delegates "^1.0.0" + depd "^2.0.0" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^1.2.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +lazy@~1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" + integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +lodash@^4.17.14: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.2, methods@~1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + +mime-types@^2.1.18, mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= + +moment-timezone@^0.5.x: + version "0.5.33" + resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" + integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0": + version "2.29.1" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +needle@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +netmask@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nssocket@0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" + integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo= + dependencies: + eventemitter2 "~0.4.14" + lazy "~1.0.11" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.9.0: + version "1.10.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + +on-finished@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +pac-proxy-agent@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" + integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^4.1.0" + raw-body "^2.2.0" + socks-proxy-agent "5" + +pac-resolver@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" + integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== + dependencies: + degenerator "^2.2.0" + ip "^1.1.5" + netmask "^2.0.1" + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parseurl@^1.3.2: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@^1.2.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-to-regexp@^6.1.0: + version "6.2.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" + integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pidusage@2.0.21: + version "2.0.21" + resolved "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" + integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA== + dependencies: + safe-buffer "^5.2.1" + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pm2-axon-rpc@~0.7.0: + version "0.7.1" + resolved "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a" + integrity sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw== + dependencies: + debug "^4.3.1" + +pm2-axon@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz#a7b4bb586e9aeb35b1042b488cde15b60cabafd2" + integrity sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg== + dependencies: + amp "~0.3.1" + amp-message "~0.1.1" + debug "^4.3.1" + escape-string-regexp "^4.0.0" + +pm2-deploy@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz#98d8385553a3a4dca11c7b3116deb519bc5961a7" + integrity sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg== + dependencies: + run-series "^1.1.8" + tv4 "^1.3.0" + +pm2-multimeter@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" + integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4= + dependencies: + charm "~0.1.1" + +pm2@^4.5.6: + version "4.5.6" + resolved "https://registry.npmjs.org/pm2/-/pm2-4.5.6.tgz#2f477a158957860e440f1e71e88dc82627fcff99" + integrity sha512-4J5q704Xl6VmpmQhXFGMJL4kXyyQw3AZM1FE9vRxhS3LiDI/+WVBtOM6pqJ4g/RKW+AUjEkc23i/DCC4BVenDA== + dependencies: + "@pm2/agent" "~1.0.8" + "@pm2/io" "~5.0.0" + "@pm2/js-api" "~0.6.7" + "@pm2/pm2-version-check" latest + async "~3.2.0" + blessed "0.1.81" + chalk "3.0.0" + chokidar "^3.5.1" + cli-tableau "^2.0.0" + commander "2.15.1" + cron "1.8.2" + dayjs "~1.8.25" + debug "^4.3.1" + enquirer "2.3.6" + eventemitter2 "5.0.1" + fclone "1.0.11" + mkdirp "1.0.4" + needle "2.4.0" + pidusage "2.0.21" + pm2-axon "~4.0.1" + pm2-axon-rpc "~0.7.0" + pm2-deploy "~1.0.2" + pm2-multimeter "^0.1.2" + promptly "^2" + ps-list "6.3.0" + semver "^7.2" + source-map-support "0.5.19" + sprintf-js "1.1.2" + vizion "2.2.1" + yamljs "0.3.0" + +postcss-load-config@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz#d214bf9cfec1608ffaf0f4161b3ba20664ab64b9" + integrity sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ== + dependencies: + cosmiconfig "^7.0.0" + import-cwd "^3.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +promptly@^2: + version "2.2.0" + resolved "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" + integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ= + dependencies: + read "^1.0.4" + +proxy-agent@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" + integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== + dependencies: + agent-base "^6.0.0" + debug "4" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^4.1.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^5.0.0" + +proxy-from-env@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +ps-list@6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" + integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== + +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +qs@^6.4.0, qs@^6.5.2: + version "6.10.1" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +raw-body@^2.2.0, raw-body@^2.3.3: + version "2.4.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +require-in-the-middle@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz#b768f800377b47526d026bbf5a7f727f16eb412f" + integrity sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ== + dependencies: + debug "^4.1.1" + module-details-from-path "^1.0.3" + resolve "^1.12.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve@^1.12.0: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^2.45.2: + version "2.50.6" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2" + integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg== + optionalDependencies: + fsevents "~2.3.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-series@^1.1.8: + version "1.1.9" + resolved "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a" + integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g== + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^7.2: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@~7.2.0: + version "7.2.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" + integrity sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + +socks@^2.3.3: + version "2.6.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" + integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + +source-map-support@0.5.19, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0: + version "4.2.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +sucrase@^3.18.1: + version "3.18.1" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.18.1.tgz#7c699d5148734b1105542ca4ea2aa69bcab7f728" + integrity sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA== + dependencies: + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +ts-node@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" + integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== + dependencies: + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig-paths@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@1.9.3: + version "1.9.3" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tslib@^2.0.1: + version "2.2.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + +tsscmp@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" + integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== + +tsup@^4.11.2: + version "4.11.2" + resolved "https://registry.npmjs.org/tsup/-/tsup-4.11.2.tgz#135c69ff1b0ef9357d5e0076d1d6c29118904b43" + integrity sha512-cp+gy0TGzFm/3PkPNeiZ2Fvi4MKI8jj6Xq6gVpSQ+Og+6GPqfws2K4zYo11OJoccuk2LnlJIJt8xwnoYCVGpSA== + dependencies: + cac "^6.7.2" + chalk "^4.1.0" + chokidar "^3.5.1" + debug "^4.3.1" + esbuild "^0.11.12" + execa "^5.0.0" + globby "^11.0.3" + joycon "^3.0.1" + postcss-load-config "^3.0.1" + resolve-from "^5.0.0" + rollup "^2.45.2" + sucrase "^3.18.1" + tree-kill "^1.2.2" + +tv4@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" + integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@^1.6.14, type-is@^1.6.16: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.2.5: + version "4.3.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" + integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== + +undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +uuid@^3.2.1: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +vary@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vizion@2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2" + integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww== + dependencies: + async "^2.6.3" + git-node-fs "^1.0.0" + ini "^1.3.5" + js-git "^0.7.8" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.0.0, ws@^7.0.1: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@~7.2.0: + version "7.2.5" + resolved "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" + integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yamljs@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + +ylru@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" + integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/tests/test.spec.ts b/tests/test.spec.ts new file mode 100644 index 0000000..a8b4454 --- /dev/null +++ b/tests/test.spec.ts @@ -0,0 +1,16 @@ +// import { mount } from '@vue/test-utils'; +// import { Button } from '/@/components/Button'; + +test('if jest is normal.', async () => { + expect('jest').toEqual('jest'); +}); + +// TODO Vue component testing is not supported temporarily +// test('is a Vue instance.', async () => { +// const wrapper = mount(Button, { +// slots: { +// default: 'Button text', +// }, +// }); +// expect(wrapper.html()).toContain('Button text'); +// }); diff --git a/tsconfig.json b/tsconfig.json index 2b90973..1fd7e3e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,7 @@ "noUnusedParameters": true, "experimentalDecorators": true, "lib": ["dom", "esnext"], + "types": ["vite/client", "jest"], "typeRoots": ["./node_modules/@types/", "./types"], "noImplicitAny": false, "skipLibCheck": true, @@ -26,6 +27,7 @@ } }, "include": [ + "tests/**/*.ts", "src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", @@ -37,5 +39,5 @@ "mock/**/*.ts", "vite.config.ts" ], - "exclude": ["node_modules", "dist", "**/*.js"] + "exclude": ["node_modules", "tests/server/**/*.ts", "dist", "**/*.js"] } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..adee45f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11448 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@ant-design/colors@^6.0.0": + version "6.0.0" + resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" + integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/icons-svg@^4.2.1": + version "4.2.1" + resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" + integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== + +"@ant-design/icons-vue@^6.0.0", "@ant-design/icons-vue@^6.0.1": + version "6.1.0" + resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074" + integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-svg" "^4.2.1" + +"@antfu/utils@^0.5.2": + version "0.5.2" + resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b" + integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA== + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.17.9", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.18.11" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.16.8": + version "7.18.12" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz#712e9a71b9e00fde9f8c0238e0cceee86ab2f8fd" + integrity sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.11.0": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/standalone@^7.17.11": + version "7.18.12" + resolved "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.18.12.tgz#4c0abdf1b5213394e73a0ba5500dcc287194a20d" + integrity sha512-wDh3K5IUJiSMAY0MLYBFoCaj2RCZwvDz5BHn2uHat9KOsGWEVDFgFQFIOO+81Js2phFKNppLC45iOCsZVfJniw== + +"@babel/template@^7.0.0", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.18.10" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@commitlint/cli@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/cli/-/cli-14.1.0.tgz#7b657a955ed22f3df348ba9afa6ce5a5121ff7eb" + integrity sha512-Orq62jkl9qAGvjFqhehtAqjGY/duJ8hIRPPIHmGR2jIB96D4VTmazS3ZvqJz2Q9kKr61mLAk/171zm0FVzQCYA== + dependencies: + "@commitlint/format" "^14.1.0" + "@commitlint/lint" "^14.1.0" + "@commitlint/load" "^14.1.0" + "@commitlint/read" "^14.0.0" + "@commitlint/types" "^14.0.0" + lodash "^4.17.19" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^17.0.0" + +"@commitlint/config-conventional@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-14.1.0.tgz#29e386ef200fa72d43418153ab1c490c89024dee" + integrity sha512-JuhCqkEv8jyqmd54EpXPsQFpYc/8k7sfP1UziRdEvZSJUCLxz+8Pk4cNS0oF1BtjaWO7ITgXPlIZg47PyApGmg== + dependencies: + conventional-changelog-conventionalcommits "^4.3.1" + +"@commitlint/config-validator@^17.0.3": + version "17.0.3" + resolved "https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-17.0.3.tgz#5d1ec17eece1f85a0d06c05d168a039b313eb5d7" + integrity sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ== + dependencies: + "@commitlint/types" "^17.0.0" + ajv "^8.11.0" + +"@commitlint/ensure@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/ensure/-/ensure-14.1.0.tgz#b58b2ffe2bc95be143ed8f188721b97df1043ba5" + integrity sha512-xrYvFdqVepT3XA1BmSh88eKbvYKtLuQu98QLfgxVmwS99Kj3yW0sT3D7jGvNsynbIx2dhbXofDyubf/DKkpFrQ== + dependencies: + "@commitlint/types" "^14.0.0" + lodash "^4.17.19" + +"@commitlint/execute-rule@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-14.0.0.tgz#3ba45fc255286e3180f89ed4e9ac1ef237160734" + integrity sha512-Hh/HLpCBDlrD3Rx2x2pDBx6CU+OtVqGXh7mbFpNihAVx6B0zyZqm/vv0cdwdhfGW5OEn1BhCqHf1ZOvL/DwdWA== + +"@commitlint/execute-rule@^17.0.0": + version "17.0.0" + resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz#186e9261fd36733922ae617497888c4bdb6e5c92" + integrity sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ== + +"@commitlint/format@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/format/-/format-14.1.0.tgz#09b4081bdcb02163496bfcece98f9d4606238bc5" + integrity sha512-sF6engqqHjvxGctWRKjFs/HQeNowlpbVmmoP481b2UMQnVQnjjfXJvQsoLpaqFUvgc2sHM4L85F8BmAw+iHG1w== + dependencies: + "@commitlint/types" "^14.0.0" + chalk "^4.0.0" + +"@commitlint/is-ignored@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-14.0.0.tgz#8c88e05211519bc187558aad07eee02581292ec4" + integrity sha512-nJltYjXTa+mk+6SPe35nOZCCvt3Gh5mbDz008KQ4OPcn1GX1NG+pEgz1Kx3agDp/pc+JGnsrr5GV00gygIoloA== + dependencies: + "@commitlint/types" "^14.0.0" + semver "7.3.5" + +"@commitlint/lint@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/lint/-/lint-14.1.0.tgz#1673b216803d65cc4bbe631f656125be54fd2f69" + integrity sha512-CApGJEOtWU/CcuPD8HkOR1jdUYpjKutGPaeby9nSFzJhwl/UQOjxc4Nd+2g2ygsMi5l3N4j2sWQYEgccpFC3lA== + dependencies: + "@commitlint/is-ignored" "^14.0.0" + "@commitlint/parse" "^14.0.0" + "@commitlint/rules" "^14.1.0" + "@commitlint/types" "^14.0.0" + +"@commitlint/load@>6.1.1": + version "17.0.3" + resolved "https://registry.npmmirror.com/@commitlint/load/-/load-17.0.3.tgz#683aa484a5515714512e442f2f4b11f75e66097a" + integrity sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw== + dependencies: + "@commitlint/config-validator" "^17.0.3" + "@commitlint/execute-rule" "^17.0.0" + "@commitlint/resolve-extends" "^17.0.3" + "@commitlint/types" "^17.0.0" + "@types/node" ">=12" + chalk "^4.1.0" + cosmiconfig "^7.0.0" + cosmiconfig-typescript-loader "^2.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + typescript "^4.6.4" + +"@commitlint/load@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/load/-/load-14.1.0.tgz#911e8625cfa1a80df2914b835834c6068fdfdab4" + integrity sha512-p+HbgjhkqLsnxyjOUdEYHztHCp8n2oLVUJTmRPuP5FXLNevh6Gwmxf+NYC2J0sgD084aV2CFi3qu1W4yHWIknA== + dependencies: + "@commitlint/execute-rule" "^14.0.0" + "@commitlint/resolve-extends" "^14.1.0" + "@commitlint/types" "^14.0.0" + "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" + chalk "^4.0.0" + cosmiconfig "^7.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + typescript "^4.4.3" + +"@commitlint/message@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/message/-/message-14.0.0.tgz#4db852fcd76352be547811d57709667588a39ba9" + integrity sha512-316Pum+bwDcZamOQw0DXSY17Dq9EjvL1zKdYIZqneu4lnXN6uFfi53Y/sP5crW6zlLdnuTHe1MnuewXPLHfH1Q== + +"@commitlint/parse@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/parse/-/parse-14.0.0.tgz#cb6f66323a27617744f9b479cf09941ff9c3f93d" + integrity sha512-49qkk0TcwdxJPZUX8MElEzMlRFIL/cg64P4pk8HotFEm2HYdbxxZp6v3cbVw5WOsnRA0frrs+NNoOcIT83ccMQ== + dependencies: + "@commitlint/types" "^14.0.0" + conventional-changelog-angular "^5.0.11" + conventional-commits-parser "^3.2.2" + +"@commitlint/read@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/read/-/read-14.0.0.tgz#f871600ce815b541c7f1a4fdabe2c66d8840c2ab" + integrity sha512-WXXcSLBqwXTqnEmB0lbU2TrayDJ2G3qI/lxy1ianVmpQol8p9BjodAA6bYxtYYHdQFVXUrIsclzFP/naWG+hlQ== + dependencies: + "@commitlint/top-level" "^14.0.0" + "@commitlint/types" "^14.0.0" + fs-extra "^10.0.0" + git-raw-commits "^2.0.0" + +"@commitlint/resolve-extends@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-14.1.0.tgz#f23b40d95c95901fcb7b53edebc8fe86f54fe99d" + integrity sha512-ko80k6QB6E6/OvGNWy4u7gzzWyluDT3VDNL2kfZaDywsnrYntUKyT4Do97gQ7orttITzj2GRtk3KWClVz4rUUQ== + dependencies: + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/resolve-extends@^17.0.3": + version "17.0.3" + resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-17.0.3.tgz#43b237899e2abd59d16af091521b888c8a071412" + integrity sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA== + dependencies: + "@commitlint/config-validator" "^17.0.3" + "@commitlint/types" "^17.0.0" + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^14.1.0": + version "14.1.0" + resolved "https://registry.npmmirror.com/@commitlint/rules/-/rules-14.1.0.tgz#caec339b05c45e7536cac5d9f1db11fcc9e3dfcd" + integrity sha512-6jmv414/1JzGzDI/DS+snAMhcL6roQKPdg0WB3kWTWN52EvWXBFm0HIMGt2H/FlRKxozwVXlQN60/1fNIl98xA== + dependencies: + "@commitlint/ensure" "^14.1.0" + "@commitlint/message" "^14.0.0" + "@commitlint/to-lines" "^14.0.0" + "@commitlint/types" "^14.0.0" + execa "^5.0.0" + +"@commitlint/to-lines@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-14.0.0.tgz#d90c7453bc678e7e2d8a4cae125783b1d4df7aa4" + integrity sha512-uIXk54oJDuYyLpI208s3+cGmJ323yvSJ9LB7yUDMWUeJi2LgRxE2EBZL995kLQdnoAsBBXcLq+VDyppg5bV/cg== + +"@commitlint/top-level@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/top-level/-/top-level-14.0.0.tgz#5fed6ac7ae2f5cff02ea1f41bddbfa24487ef3c8" + integrity sha512-MZDKZfWfl9g4KozgWBGTCrI2cXkMHnBFlhwvEfrAu5G8wd5aL1f2uWEUMnBMjUikmhVj99i1pzge4XFWHQ29wQ== + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^14.0.0": + version "14.0.0" + resolved "https://registry.npmmirror.com/@commitlint/types/-/types-14.0.0.tgz#17bf4d1ab1178c67990ce01b36017d6e6792b751" + integrity sha512-sIls1nP2uSbGL466edYlh8mn7O/WP4i3bcvP+2DMhkscRCSgaPhNRWDilhYVsHt2Vu1HTQ27uT0Bj5/Lt2+EcQ== + dependencies: + chalk "^4.0.0" + +"@commitlint/types@^17.0.0": + version "17.0.0" + resolved "https://registry.npmmirror.com/@commitlint/types/-/types-17.0.0.tgz#3b4604c1a0f06c340ce976e6c6903d4f56e3e690" + integrity sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ== + dependencies: + chalk "^4.1.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@csstools/selector-specificity@^2.0.2": + version "2.0.2" + resolved "https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" + integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== + +"@ctrl/tinycolor@^3.4.0": + version "3.4.1" + resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" + integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== + +"@emmetio/abbreviation@^2.2.3": + version "2.2.3" + resolved "https://registry.npmmirror.com/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz#2b3c0383c1a4652f677d5b56fb3f1616fe16ef10" + integrity sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA== + dependencies: + "@emmetio/scanner" "^1.0.0" + +"@emmetio/css-abbreviation@^2.1.4": + version "2.1.4" + resolved "https://registry.npmmirror.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54" + integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw== + dependencies: + "@emmetio/scanner" "^1.0.0" + +"@emmetio/scanner@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f" + integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA== + +"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2": + version "3.0.2" + resolved "https://registry.npmmirror.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" + integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA== + dependencies: + lodash.get "^4" + make-error "^1" + ts-node "^9" + tslib "^2" + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@iconify/iconify@2.0.0-rc.6": + version "2.0.0-rc.6" + resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.0.0-rc.6.tgz#e3f5376b63b441dcb3696317784b98e2e678cf46" + integrity sha512-pXvLXqLPQsjpDY4qbbyh5cPEtakTfWfQCAo6SdYNhYQzat+/0fbeEhScryqaketNAG0bT4/+deKezkJZTvbuSg== + dependencies: + cross-fetch "^3.0.6" + +"@iconify/iconify@>=2.0.0-rc.6", "@iconify/iconify@^2.0.4": + version "2.2.1" + resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.2.1.tgz#03ad4d8554c6f2d7741d3b9440115efa0c707b37" + integrity sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ== + +"@iconify/json@^1.1.422": + version "1.1.461" + resolved "https://registry.npmmirror.com/@iconify/json/-/json-1.1.461.tgz#9e76f2339292e1a89855f93e497439afeb642f11" + integrity sha512-9Y41Tk9s3LDt4WI20XySNhNX6qTJ/WOBeE3O2iyoV9LJ6gFEDjp0uTPzfRU9NUx7D6VkvQ/htJEuRe9LmyMqUA== + +"@intlify/core-base@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939" + integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA== + dependencies: + "@intlify/devtools-if" "9.2.2" + "@intlify/message-compiler" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + +"@intlify/devtools-if@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39" + integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg== + dependencies: + "@intlify/shared" "9.2.2" + +"@intlify/message-compiler@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c" + integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA== + dependencies: + "@intlify/shared" "9.2.2" + source-map "0.6.1" + +"@intlify/shared@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5" + integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== + +"@intlify/vue-devtools@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317" + integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg== + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@purge-icons/core@^0.7.0": + version "0.7.0" + resolved "https://registry.npmmirror.com/@purge-icons/core/-/core-0.7.0.tgz#097ba8d4d8b7e8d662df687bd2391eb8b83caba0" + integrity sha512-PaCeTFjkQUX+MzBsNg3L8x5aCZqXwaUSNw1FY3Jn7wlLqNqxRNoShw5P//a1DQAy7hLlUHvEL6IGeDoN/xf98A== + dependencies: + "@iconify/iconify" "2.0.0-rc.6" + axios "^0.21.1" + debug "^4.3.2" + fast-glob "^3.2.5" + fs-extra "^9.1.0" + +"@purge-icons/generated@^0.7.0": + version "0.7.0" + resolved "https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.7.0.tgz#d87dbb3145e8b9a64e2e12ff660aa3cb13cbeb56" + integrity sha512-4SHVpZnKaW5ekRTjhPY9b1pALVlF0pDuGIDRAlxAm0V+gQVOL0+Ghav6U9XqXFj2kiG1+eQ8swpvB+kd0a+tqg== + dependencies: + "@iconify/iconify" ">=2.0.0-rc.6" + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-node-resolve@^13.0.4": + version "13.3.0" + resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + deepmerge "^4.2.2" + is-builtin-module "^3.1.0" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.2", "@rollup/pluginutils@^4.2.0": + version "4.2.1" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@simonwep/pickr@~1.8.0": + version "1.8.2" + resolved "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb" + integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA== + dependencies: + core-js "^3.15.1" + nanopop "^2.1.0" + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.18.0" + resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" + integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/codemirror@^5.60.5": + version "5.60.5" + resolved "https://registry.npmmirror.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7" + integrity sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg== + dependencies: + "@types/tern" "*" + +"@types/crypto-js@^4.0.2": + version "4.1.1" + resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d" + integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA== + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/fs-extra@^9.0.13": + version "9.0.13" + resolved "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/imagemin-gifsicle@^7.0.1": + version "7.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz#0844a96a338438bb98f77b298acf217260d0d409" + integrity sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA== + dependencies: + "@types/imagemin" "*" + +"@types/imagemin-jpegtran@^5.0.1": + version "5.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin-jpegtran/-/imagemin-jpegtran-5.0.1.tgz#798b2a66cd49b7ec6550fb733c05a5b8755f211f" + integrity sha512-Ps8kbm+DUFte/Eln/tUdEvpMWHKFCsQKlV8n+RN50zqWqL/7QhfLxR0ymitP9wa90P6+rkbJlintBNPkVR+B/Q== + dependencies: + "@types/imagemin" "*" + +"@types/imagemin-mozjpeg@^8.0.1": + version "8.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz#eaf2f07aea3a317a1710ef2c763ec53f3bcfcdc5" + integrity sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw== + dependencies: + "@types/imagemin" "*" + +"@types/imagemin-optipng@^5.2.1": + version "5.2.1" + resolved "https://registry.npmmirror.com/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz#6ef033f3b15d281009de4e0bd2cadf6cbd2e741a" + integrity sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g== + dependencies: + "@types/imagemin" "*" + +"@types/imagemin-svgo@^9.0.1": + version "9.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin-svgo/-/imagemin-svgo-9.0.1.tgz#629ebc8d01802405a9f07667e73e73943ba28ff7" + integrity sha512-DMMunSfN9EOYOh5hfvtY1N5ydVDoMnqN+1bvoL4OIspUJIOiN9hadrdeXTd51oI2tpQXM3Htadrb6QSg0VnYbQ== + dependencies: + "@types/imagemin" "*" + "@types/svgo" "^1" + +"@types/imagemin-webp@^5.1.2": + version "5.1.2" + resolved "https://registry.npmmirror.com/@types/imagemin-webp/-/imagemin-webp-5.1.2.tgz#b426f93c7019f3799578c88e28ce6949d95b1690" + integrity sha512-elm1oHtWvpu56ucCgnlcP4uiaH9tO8icfF+Vqma4VzuS2b1dgchSRccf7iI1eDxWatvmRt91jHwP0MDwsHhnuA== + dependencies: + "@types/imagemin" "*" + +"@types/imagemin@*": + version "8.0.0" + resolved "https://registry.npmmirror.com/@types/imagemin/-/imagemin-8.0.0.tgz#bf5bbe1feff3b112c7e0de06d024712ad261e033" + integrity sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A== + dependencies: + "@types/node" "*" + +"@types/imagemin@^7.0.1": + version "7.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin/-/imagemin-7.0.1.tgz#11ca1e65ccb3871a8469d9b23033b95d3838eda0" + integrity sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw== + dependencies: + "@types/node" "*" + +"@types/inquirer@^8.1.3": + version "8.2.3" + resolved "https://registry.npmmirror.com/@types/inquirer/-/inquirer-8.2.3.tgz#985515d04879a0d0c1f5f49ec375767410ba9dab" + integrity sha512-ZlBqD+8WIVNy3KIVkl+Qne6bGLW2erwN0GJXY9Ri/9EMbyupee3xw3H0Mmv5kJoLyNpfd/oHlwKxO0DUDH7yWA== + dependencies: + "@types/through" "*" + +"@types/intro.js@^3.0.2": + version "3.0.2" + resolved "https://registry.npmmirror.com/@types/intro.js/-/intro.js-3.0.2.tgz#cbf9b69f055b77582cc2cebe236e9a405b30efbd" + integrity sha512-kow8REgIIG42atN9vAaIdpEqVzj6WzV9m0PII8oce+an4Lc3eyfQF32/FbabbGmfWuF7TceTdd+gh74kOrXkPw== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^27.0.2": + version "27.5.2" + resolved "https://registry.npmmirror.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" + integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/lodash-es@^4.17.5": + version "4.17.6" + resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.184" + resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.184.tgz#23f96cd2a21a28e106dc24d825d4aa966de7a9fe" + integrity sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/mockjs@^1.0.4": + version "1.0.6" + resolved "https://registry.npmmirror.com/@types/mockjs/-/mockjs-1.0.6.tgz#dafdd5de65156f7aa63eab4e29fa3d532cd95609" + integrity sha512-Yu5YlqbYZyqsd6LjO4e8ONJDN9pTSnciHDcRP4teNOh/au2b8helFhgRx+3w8xsTFEnwr9jtfTVJbAx+eYmlHA== + +"@types/node@*", "@types/node@>=12": + version "18.7.8" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.7.8.tgz#6bbf2be6fbf9c187a5040d4277d24a06a18957a1" + integrity sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag== + +"@types/node@^14.17.1": + version "14.18.24" + resolved "https://registry.npmmirror.com/@types/node/-/node-14.18.24.tgz#406b220dc748947e1959d8a38a75979e87166704" + integrity sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w== + +"@types/node@^16.11.6": + version "16.11.51" + resolved "https://registry.npmmirror.com/@types/node/-/node-16.11.51.tgz#bb2114485e6fc1460f630702fb992007d120e928" + integrity sha512-h6p1A77pHBDdOcI9y6Wfh9iRGa8lMUZMk2ebHJTNTtRwgbQzgemZow6PW7+Xs7Z0r0IQFY1+iRlcNAkRrf53nA== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/nprogress@^0.2.0": + version "0.2.0" + resolved "https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.0.tgz#86c593682d4199212a0509cc3c4d562bbbd6e45f" + integrity sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.1.5": + version "2.7.0" + resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== + +"@types/qrcode@^1.4.1": + version "1.5.0" + resolved "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz#6a98fe9a9a7b2a9a3167b6dde17eff999eabe40b" + integrity sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA== + dependencies: + "@types/node" "*" + +"@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/showdown@^1.9.4": + version "1.9.4" + resolved "https://registry.npmmirror.com/@types/showdown/-/showdown-1.9.4.tgz#5385adf34143abad9309561661fa6c781d2ab962" + integrity sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w== + +"@types/sortablejs@^1.10.7": + version "1.13.0" + resolved "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.13.0.tgz#870223438f8f2cd81157b128a4c0261adbcaa946" + integrity sha512-C3064MH72iEfeGCYEGCt7FCxXoAXaMPG0QPnstcxvPmbl54erpISu06d++FY37Smja64iWy5L8wOyHHBghWbJQ== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/svgo@^1": + version "1.3.6" + resolved "https://registry.npmmirror.com/@types/svgo/-/svgo-1.3.6.tgz#9db00a7ddf9b26ad2feb6b834bef1818677845e1" + integrity sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug== + +"@types/svgo@^2.4.2", "@types/svgo@^2.6.0": + version "2.6.4" + resolved "https://registry.npmmirror.com/@types/svgo/-/svgo-2.6.4.tgz#b7298fc1dd687539fd63fc818b00146d96e68836" + integrity sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng== + dependencies: + "@types/node" "*" + +"@types/tern@*": + version "0.23.4" + resolved "https://registry.npmmirror.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== + dependencies: + "@types/estree" "*" + +"@types/through@*": + version "0.0.30" + resolved "https://registry.npmmirror.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== + dependencies: + "@types/node" "*" + +"@types/tinycolor2@^1.4.2": + version "1.4.3" + resolved "https://registry.npmmirror.com/@types/tinycolor2/-/tinycolor2-1.4.3.tgz#ed4a0901f954b126e6a914b4839c77462d56e706" + integrity sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ== + +"@types/trusted-types@^2.0.2": + version "2.0.2" + resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" + integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.3.0": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" + integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== + dependencies: + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/type-utils" "5.33.1" + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.33.1.tgz#5fa908addffb82ea8fb0e62cb47c387de1bff536" + integrity sha512-wk2o+4wojvKz/x3UCbsgjgXl0lyLPYQsfKP0MdRzj4jtsQr4bVtgWUWck6+N3GzThUTbUFyyKLduWPwePhh0xQ== + dependencies: + "@typescript-eslint/utils" "5.33.1" + +"@typescript-eslint/parser@^5.3.0": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.33.1.tgz#e4b253105b4d2a4362cfaa4e184e2d226c440ff3" + integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== + dependencies: + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" + integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + +"@typescript-eslint/type-utils@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz#1a14e94650a0ae39f6e3b77478baff002cec4367" + integrity sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g== + dependencies: + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" + integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== + +"@typescript-eslint/typescript-estree@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" + integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" + integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.33.1": + version "5.33.1" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" + integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== + dependencies: + "@typescript-eslint/types" "5.33.1" + eslint-visitor-keys "^3.3.0" + +"@vitejs/plugin-legacy@^1.6.2": + version "1.8.2" + resolved "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-1.8.2.tgz#2f315bcb6685b12719813fb9412851445cca636f" + integrity sha512-NCOKU+pU+cxLMR9P9RTolEuOK+h+zYBXlknj+zGcKSj/NXBZYgA1GAH1FnO4zijoWRiTaiOm2ha9LQrELE7XHg== + dependencies: + "@babel/standalone" "^7.17.11" + core-js "^3.22.3" + magic-string "^0.26.1" + regenerator-runtime "^0.13.9" + systemjs "^6.12.1" + +"@vitejs/plugin-vue-jsx@^1.2.0": + version "1.3.10" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz#5b61294ed4334fbc5f5679243fd3ccc448b26044" + integrity sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw== + dependencies: + "@babel/core" "^7.17.9" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.16.8" + "@rollup/pluginutils" "^4.2.0" + "@vue/babel-plugin-jsx" "^1.1.1" + hash-sum "^2.0.0" + +"@vitejs/plugin-vue@^1.9.4": + version "1.10.2" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a" + integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw== + +"@volar/code-gen@0.28.10": + version "0.28.10" + resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.28.10.tgz#3e8612d117ecb271968b3f38bb1add92c7c1631c" + integrity sha512-MybgBubg1im4MiFoiTUMmxKTC+KZJQfIO5g/TVnysEsCr4ssG0lG1rF3Gg3lbQKefdMiqsH5FNuMyqLC/bsWQg== + dependencies: + "@volar/shared" "0.28.10" + "@volar/source-map" "0.28.10" + +"@volar/html2pug@0.28.10": + version "0.28.10" + resolved "https://registry.npmmirror.com/@volar/html2pug/-/html2pug-0.28.10.tgz#73bd86f758d57bb1a2a4aec4b3bd05e91533aa28" + integrity sha512-orcNnKyUPZZVb7pRvRHU7R8gk4abKZQELT0zXt2T7EbC5B8usmWNav6Sis9kVzV5Etj5h/IYutv7Df7PiKwLOQ== + dependencies: + domelementtype "^2.2.0" + domhandler "^4.2.2" + htmlparser2 "^7.1.2" + pug "^3.0.2" + +"@volar/shared@0.28.10": + version "0.28.10" + resolved "https://registry.npmmirror.com/@volar/shared/-/shared-0.28.10.tgz#4ab2224127c3f170aabdaf527b220d9c9bd5887a" + integrity sha512-MzBEfBM5E5q4EfOd8Gkqmo+XTfbXiuT8IEWtfmpS8ax3GVeofkeAgzK/TadkatW/Nb2cKOaCYkmILpFKvDnDRQ== + dependencies: + upath "^2.0.1" + vscode-jsonrpc "^8.0.0-next.2" + vscode-uri "^3.0.2" + +"@volar/source-map@0.28.10": + version "0.28.10" + resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.28.10.tgz#acbee951042f4ee8ac5a3362a597480d07b9ebba" + integrity sha512-hQ2gclwP7yvZIdaVEC1LixViDPIO6JGkCBxAS8Erg9p2d0ruTyzazfd0NLaLuHLoMnxExILYNK2W05yQmIpRIA== + dependencies: + "@volar/shared" "0.28.10" + +"@volar/transforms@0.28.10": + version "0.28.10" + resolved "https://registry.npmmirror.com/@volar/transforms/-/transforms-0.28.10.tgz#7be740c04981905f2fa2a87fdddfd4b2436d1421" + integrity sha512-GOQN3amI733oFweKKjuBBOEOMwy0e/aEAnnJNavrrHa7LY6Ke/JfNsoWhi9Pb2FAPYd+WyruDDFX8yKHjQE1xw== + dependencies: + "@volar/shared" "0.28.10" + vscode-languageserver "^8.0.0-next.2" + +"@vscode/emmet-helper@^2.8.0": + version "2.8.4" + resolved "https://registry.npmmirror.com/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz#ab937e3ce79b0873c604d1ad50a9eeb7abae2937" + integrity sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg== + dependencies: + emmet "^2.3.0" + jsonc-parser "^2.3.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-languageserver-types "^3.15.1" + vscode-nls "^5.0.0" + vscode-uri "^2.1.2" + +"@vue/babel-helper-vue-transform-on@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc" + integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA== + +"@vue/babel-plugin-jsx@^1.1.1": + version "1.1.1" + resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz#0c5bac27880d23f89894cd036a37b55ef61ddfc1" + integrity sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + "@vue/babel-helper-vue-transform-on" "^1.0.2" + camelcase "^6.0.0" + html-tags "^3.1.0" + svg-tags "^1.0.0" + +"@vue/compiler-core@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.21.tgz#26566c32b2ad838199d471ef5df620a83846f24e" + integrity sha512-NhhiQZNG71KNq1h5pMW/fAXdTF7lJRaSI7LDm2edhHXVz1ROMICo8SreUmQnSf4Fet0UPBVqJ988eF4+936iDQ== + dependencies: + "@babel/parser" "^7.15.0" + "@vue/shared" "3.2.21" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-core@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" + integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.21.tgz#d6f6c85364ef8888f9c4e9122bfba11e78fb398c" + integrity sha512-gsJD3DpYZSYquiA7UIPsMDSlAooYWDvHPq9VRsqzJEk2PZtFvLvHPb4aaMD8Ufd62xzYn32cnnkzsEOJhyGilA== + dependencies: + "@vue/compiler-core" "3.2.21" + "@vue/shared" "3.2.21" + +"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.20": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5" + integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ== + dependencies: + "@vue/compiler-core" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/compiler-sfc@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.21.tgz#42639ee49e725afb7d8f1d1940e75dc17a56002c" + integrity sha512-+yDlUSebKpz/ovxM2vLRRx7w/gVfY767pOfYTgbIhAs+ogvIV2BsIt4fpxlThnlCNChJ+yE0ERUNoROv2kEGEQ== + dependencies: + "@babel/parser" "^7.15.0" + "@vue/compiler-core" "3.2.21" + "@vue/compiler-dom" "3.2.21" + "@vue/compiler-ssr" "3.2.21" + "@vue/ref-transform" "3.2.21" + "@vue/shared" "3.2.21" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.6": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4" + integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.37" + "@vue/compiler-dom" "3.2.37" + "@vue/compiler-ssr" "3.2.37" + "@vue/reactivity-transform" "3.2.37" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.21.tgz#37d124f89e8adef9fd56b85775de4b5310a0436e" + integrity sha512-eU+A0iWYy+1zAo2CRIJ0zSVlv1iuGAIbNRCnllSJ31pV1lX3jypJYzGbJlSRAbB7VP6E+tYveVT1Oq8JKewa3g== + dependencies: + "@vue/compiler-dom" "3.2.21" + "@vue/shared" "3.2.21" + +"@vue/compiler-ssr@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff" + integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw== + dependencies: + "@vue/compiler-dom" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/devtools-api@^6.0.0-beta.19", "@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1": + version "6.2.1" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" + integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== + +"@vue/reactivity-transform@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca" + integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.37" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.20": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848" + integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== + dependencies: + "@vue/shared" "3.2.37" + +"@vue/ref-transform@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/ref-transform/-/ref-transform-3.2.21.tgz#b0c554c9f640c3f005f77e676066aa0faba90984" + integrity sha512-uiEWWBsrGeun9O7dQExYWzXO3rHm/YdtFNXDVqCSoPypzOVxWxdiL+8hHeWzxMB58fVuV2sT80aUtIVyaBVZgQ== + dependencies: + "@babel/parser" "^7.15.0" + "@vue/compiler-core" "3.2.21" + "@vue/shared" "3.2.21" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/runtime-core@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3" + integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== + dependencies: + "@vue/reactivity" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/runtime-dom@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd" + integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw== + dependencies: + "@vue/runtime-core" "3.2.37" + "@vue/shared" "3.2.37" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc" + integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA== + dependencies: + "@vue/compiler-ssr" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/shared@3.2.21": + version "3.2.21" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.21.tgz#4cd80c0e62cf65a7adab2449e86b6f0cb33a130b" + integrity sha512-5EQmIPK6gw4UVYUbM959B0uPsJ58+xoMESCZs3N89XyvJ9e+fX4pqEPrOGV8OroIk3SbEvJcC+eYc8BH9JQrHA== + +"@vue/shared@3.2.37", "@vue/shared@^3.2.20": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702" + integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== + +"@vue/test-utils@^2.0.0-rc.16": + version "2.0.2" + resolved "https://registry.npmmirror.com/@vue/test-utils/-/test-utils-2.0.2.tgz#0b5edd683366153d5bc5a91edc62f292118710eb" + integrity sha512-E2P4oXSaWDqTZNbmKZFVLrNN/siVN78YkEqs7pHryWerrlZR9bBFLWdJwRoguX45Ru6HxIflzKl4vQvwRMwm5g== + +"@vueuse/core@^6.7.4": + version "6.9.2" + resolved "https://registry.npmmirror.com/@vueuse/core/-/core-6.9.2.tgz#76b16d01f33cf367dd1a2d7f2e31d106443ceb8a" + integrity sha512-FRwl4ccSFuHZBHLGgS9TMv/+Dd6XFaL4o9nph2qtgQIV+z29RBFokw08XjHfykiENRzB01MjYHJ7iRUnsIFQXg== + dependencies: + "@vueuse/shared" "6.9.2" + vue-demi "*" + +"@vueuse/shared@6.9.2", "@vueuse/shared@^6.7.4": + version "6.9.2" + resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-6.9.2.tgz#97e4369fa7262ebc96fe1d6e210268f30b037005" + integrity sha512-lAiMh6XROs0kSKVd0Yb/6GKoQMxC1fYrFDi6opvQWISPtcqRNluRrQxLUZ3WTI78ovtoKRLktjhkFAtydcfFDg== + dependencies: + vue-demi "*" + +"@windicss/config@1.8.7": + version "1.8.7" + resolved "https://registry.npmmirror.com/@windicss/config/-/config-1.8.7.tgz#650bec3c6e3293306e4fe0c478253bd0085884aa" + integrity sha512-8n+/Y36j5L3rw2tgMdLjeGRuNV7VYfKoHoraLK6Bk9OJ1MTPd5vv7pekof/uOPWVV7WWjVeZ6CTO8SDbDDW3iw== + dependencies: + debug "^4.3.4" + jiti "^1.14.0" + windicss "^3.5.6" + +"@windicss/plugin-utils@1.8.7": + version "1.8.7" + resolved "https://registry.npmmirror.com/@windicss/plugin-utils/-/plugin-utils-1.8.7.tgz#0e3ad889974276fc00029e1a2d911bca16792a33" + integrity sha512-dfj95olNZyGFDPFMBvE5oq8hA5f0ooUJZjVdWlthS4ek4W1/xNOHDxB6ygWR8LE9zCOXZykApjt1LOhy9Ky2QA== + dependencies: + "@antfu/utils" "^0.5.2" + "@windicss/config" "1.8.7" + debug "^4.3.4" + fast-glob "^3.2.11" + magic-string "^0.26.2" + micromatch "^4.0.5" + windicss "^3.5.6" + +"@zxcvbn-ts/core@^1.0.0-beta.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@zxcvbn-ts/core/-/core-1.2.0.tgz#92a9d3fdd3e0c467715ecfea3cab778a0df699b5" + integrity sha512-zaGUGolat04MB1ImVMbP8o7uDytKRLahZO6VSWeW6tK+tko6vHMl/eNsdKWSSWG7OR45BeUy7nBvFg79HYSdGA== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1, ajv@^8.11.0, ajv@^8.6.0: + version "8.11.0" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ant-design-vue@2.2.8: + version "2.2.8" + resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-2.2.8.tgz#fa87cf6842d8ee9a0d8af393ff4099ecc4072f2b" + integrity sha512-3graq9/gCfJQs6hznrHV6sa9oDmk/D1H3Oo0vLdVpPS/I61fZPk8NEyNKCHpNA6fT2cx6xx9U3QS63uuyikg/Q== + dependencies: + "@ant-design/icons-vue" "^6.0.0" + "@babel/runtime" "^7.10.5" + "@simonwep/pickr" "~1.8.0" + array-tree-filter "^2.1.0" + async-validator "^3.3.0" + dom-align "^1.12.1" + dom-scroll-into-view "^2.0.0" + lodash "^4.17.21" + lodash-es "^4.17.15" + moment "^2.27.0" + omit.js "^2.0.0" + resize-observer-polyfill "^1.5.1" + scroll-into-view-if-needed "^2.2.25" + shallow-equal "^1.0.0" + vue-types "^3.0.0" + warning "^4.0.0" + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arch@^2.1.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== + dependencies: + file-type "^4.2.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assert-never@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" + integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-validator@^3.3.0: + version "3.5.2" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" + integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.npmmirror.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^10.4.0: + version "10.4.8" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" + integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== + dependencies: + browserslist "^4.21.3" + caniuse-lite "^1.0.30001373" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + resolved "https://registry.npmmirror.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" + integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmmirror.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bin-build@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861" + integrity sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA== + dependencies: + decompress "^4.0.0" + download "^6.2.2" + execa "^0.7.0" + p-map-series "^1.0.0" + tempfile "^2.0.0" + +bin-check@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49" + integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== + dependencies: + execa "^0.7.0" + executable "^4.1.0" + +bin-version-check@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/bin-version-check/-/bin-version-check-4.0.0.tgz#7d819c62496991f80d893e6e02a3032361608f71" + integrity sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ== + dependencies: + bin-version "^3.0.0" + semver "^5.6.0" + semver-truncate "^1.1.2" + +bin-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/bin-version/-/bin-version-3.1.0.tgz#5b09eb280752b1bd28f0c9db3f96f2f43b6c0839" + integrity sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ== + dependencies: + execa "^1.0.0" + find-versions "^3.0.0" + +bin-wrapper@^4.0.0, bin-wrapper@^4.0.1, "bin-wrapper@npm:bin-wrapper-china": + version "0.1.0" + resolved "https://registry.npmmirror.com/bin-wrapper-china/-/bin-wrapper-china-0.1.0.tgz#c2ec95b4d0eaef6ed5ad10954f9227d8e5ef3725" + integrity sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg== + dependencies: + bin-check "^4.1.0" + bin-version-check "^4.0.0" + binary-mirror-config "^1" + download "^7.1.0" + import-lazy "^4.0.0" + os-filter-obj "^2.0.0" + pify "^4.0.1" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +binary-mirror-config@^1: + version "1.41.0" + resolved "https://registry.npmmirror.com/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz#b68032588392bee9262971f977922d075513964b" + integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w== + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.2.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.20.2, browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npmmirror.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.2.1, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.1.0, builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001370: + version "1.0.30001378" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" + integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== + +caniuse-lite@^1.0.30001373: + version "1.0.30001380" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz#6f2427ad8ebee1b400a38ca3560515756ba352bb" + integrity sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg== + +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +caw@^2.0.0, caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^5.1.2, clean-css@^5.2.2: + version "5.3.1" + resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" + integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.2: + version "2.9.3" + resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.16: + version "2.0.19" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@*: + version "9.4.0" + resolved "https://registry.npmmirror.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== + +commander@^2.20.0, commander@^2.8.1: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.2.0, commander@^8.3.0: + version "8.3.0" + resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commitizen@^4.0.3, commitizen@^4.2.4: + version "4.2.5" + resolved "https://registry.npmmirror.com/commitizen/-/commitizen-4.2.5.tgz#48e5a5c28334c6e8ed845cc24fc9f072efd3961e" + integrity sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ== + dependencies: + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.4" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.6" + strip-bom "4.0.0" + strip-json-comments "3.1.1" + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compute-scroll-into-view@^1.0.17: + version "1.0.17" + resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" + integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-stream@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" + integrity sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ== + +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + +constantinople@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" + integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +content-disposition@^0.5.2: + version "0.5.4" + resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-atom@^2.0.8: + version "2.0.8" + resolved "https://registry.npmmirror.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" + integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== + dependencies: + q "^1.5.1" + +conventional-changelog-cli@^2.1.1: + version "2.2.2" + resolved "https://registry.npmmirror.com/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz#9a7746cede92c6a8f27dc46692efaadfbed60daa" + integrity sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA== + dependencies: + add-stream "^1.0.0" + conventional-changelog "^3.1.24" + lodash "^4.17.15" + meow "^8.0.0" + tempfile "^3.0.0" + +conventional-changelog-codemirror@^2.0.8: + version "2.0.8" + resolved "https://registry.npmmirror.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" + integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== + dependencies: + q "^1.5.1" + +conventional-changelog-conventionalcommits@^4.3.1, conventional-changelog-conventionalcommits@^4.5.0: + version "4.6.3" + resolved "https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" + integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-changelog-core@^4.2.1: + version "4.2.4" + resolved "https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-ember@^2.0.9: + version "2.0.9" + resolved "https://registry.npmmirror.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" + integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.9: + version "3.0.9" + resolved "https://registry.npmmirror.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" + integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" + integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^3.0.11: + version "3.0.11" + resolved "https://registry.npmmirror.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" + integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== + dependencies: + q "^1.5.1" + +conventional-changelog-jshint@^2.0.9: + version "2.0.9" + resolved "https://registry.npmmirror.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" + integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-changelog@^3.1.24: + version "3.1.25" + resolved "https://registry.npmmirror.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff" + integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ== + dependencies: + conventional-changelog-angular "^5.0.12" + conventional-changelog-atom "^2.0.8" + conventional-changelog-codemirror "^2.0.8" + conventional-changelog-conventionalcommits "^4.5.0" + conventional-changelog-core "^4.2.1" + conventional-changelog-ember "^2.0.9" + conventional-changelog-eslint "^3.0.9" + conventional-changelog-express "^2.0.6" + conventional-changelog-jquery "^3.0.11" + conventional-changelog-jshint "^2.0.9" + conventional-changelog-preset-loader "^2.3.4" + +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0, conventional-commits-parser@^3.2.2: + version "3.2.4" + resolved "https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.24.1" + resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" + integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== + dependencies: + browserslist "^4.21.3" + semver "7.0.0" + +core-js@^3.15.1, core-js@^3.22.3: + version "3.24.1" + resolved "https://registry.npmmirror.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig-typescript-loader@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz#7e7ce6064af041c910e1e43fb0fd9625cee56e93" + integrity sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw== + dependencies: + cosmiconfig "^7" + ts-node "^10.8.1" + +cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-fetch@^3.0.6: + version "3.1.5" + resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-functions-list@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" + integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^2.6.8: + version "2.6.20" + resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" + integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== + dependencies: + array-find-index "^1.0.1" + +cwebp-bin@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/cwebp-bin/-/cwebp-bin-5.1.0.tgz#d5bea87c127358558e7bf7a90a6d440d42dcb074" + integrity sha512-BsPKStaNr98zfxwejWWLIGELbPERULJoD2v5ijvpeutSAGsegX7gmABgnkRK7MUucCPROXXfaPqkLAwI509JzA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.1" + logalot "^2.1.0" + +cz-conventional-changelog@3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decimal.js@^10.2.1: + version "10.4.0" + resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe" + integrity sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0, decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npmmirror.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +dedent@0.7.0, dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dijkstrajs@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" + integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + +dom-align@^1.12.1: + version "1.12.3" + resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.3.tgz#a36d02531dae0eefa2abb0c4db6595250526f103" + integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA== + +dom-scroll-into-view@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b" + integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w== + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +download@^6.2.2: + version "6.2.5" + resolved "https://registry.npmmirror.com/download/-/download-6.2.5.tgz#acd6a542e4cd0bb42ca70cfc98c9e43b07039714" + integrity sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA== + dependencies: + caw "^2.0.0" + content-disposition "^0.5.2" + decompress "^4.0.0" + ext-name "^5.0.0" + file-type "5.2.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^7.0.0" + make-dir "^1.0.0" + p-event "^1.0.0" + pify "^3.0.0" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +echarts@^5.2.2: + version "5.3.3" + resolved "https://registry.npmmirror.com/echarts/-/echarts-5.3.3.tgz#df97b09c4c0e2ffcdfb44acf518d50c50e0b838e" + integrity sha512-BRw2serInRwO5SIwRviZ6Xgm5Lb7irgz+sLiFMmy/HOaf4SQ+7oYqxKzRHAKp4xHQ05AuHw1xvoQWJjDQq/FGw== + dependencies: + tslib "2.3.0" + zrender "5.3.2" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.8" + resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.202: + version "1.4.225" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz#3e27bdd157cbaf19768141f2e0f0f45071e52338" + integrity sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emmet@^2.3.0: + version "2.3.6" + resolved "https://registry.npmmirror.com/emmet/-/emmet-2.3.6.tgz#1d93c1ac03164da9ddf74864c1f341ed6ff6c336" + integrity sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A== + dependencies: + "@emmetio/abbreviation" "^2.2.3" + "@emmetio/css-abbreviation" "^2.1.4" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +entities@^4.2.0, entities@^4.3.0: + version "4.3.1" + resolved "https://registry.npmmirror.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" + integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== + +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-module-lexer@^0.9.3: + version "0.9.3" + resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" + integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" + integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" + integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" + integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" + integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" + integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" + integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" + integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" + integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" + integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" + integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" + integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-node-loader@^0.4.2: + version "0.4.3" + resolved "https://registry.npmmirror.com/esbuild-node-loader/-/esbuild-node-loader-0.4.3.tgz#41a1b4559b04dc0bf554e4a9630daf9759d617d3" + integrity sha512-Jzs+nTsq7z4GqUTwlh8guP03EYTAhoB9r+rwb3JpVcNVG1/2fNE8Tb40syJ2nLY2yam+lZjsoh7FYd+2dGjbjg== + dependencies: + esbuild "^0.13.3" + +esbuild-openbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" + integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-plugin-alias@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.1.2.tgz#1232fbde807c0c8ad44c44ec859819eb492e12a8" + integrity sha512-WsX0OJy8IGOsGZV+4oHEU5B6XQUpxOsZN1iSoYf9COTDbY7WXcOwd1oCLYNWUIWCExyGXSghIGq2k7sXBldxwQ== + +esbuild-register@^3.0.0: + version "3.3.3" + resolved "https://registry.npmmirror.com/esbuild-register/-/esbuild-register-3.3.3.tgz#5bd80025c80caf77e6484ced5cc77233b1d39688" + integrity sha512-eFHOkutgIMJY5gc8LUp/7c+LLlDqzNi9T6AwCZ2WKKl3HmT+5ef3ZRyPPxDOynInML0fgaC50yszPKfPnjC0NQ== + +esbuild-sunos-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" + integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" + integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" + integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" + integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@0.11.3: + version "0.11.3" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.11.3.tgz#b57165b907be4ffba651f6450538ce8d8c1d5eb0" + integrity sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw== + +esbuild@^0.11.23: + version "0.11.23" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" + integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== + +esbuild@^0.13.2, esbuild@^0.13.3: + version "0.13.15" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" + integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== + optionalDependencies: + esbuild-android-arm64 "0.13.15" + esbuild-darwin-64 "0.13.15" + esbuild-darwin-arm64 "0.13.15" + esbuild-freebsd-64 "0.13.15" + esbuild-freebsd-arm64 "0.13.15" + esbuild-linux-32 "0.13.15" + esbuild-linux-64 "0.13.15" + esbuild-linux-arm "0.13.15" + esbuild-linux-arm64 "0.13.15" + esbuild-linux-mips64le "0.13.15" + esbuild-linux-ppc64le "0.13.15" + esbuild-netbsd-64 "0.13.15" + esbuild-openbsd-64 "0.13.15" + esbuild-sunos-64 "0.13.15" + esbuild-windows-32 "0.13.15" + esbuild-windows-64 "0.13.15" + esbuild-windows-arm64 "0.13.15" + +esbuild@^0.14.27: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^8.3.0: + version "8.5.0" + resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-define-config@^1.1.2: + version "1.6.0" + resolved "https://registry.npmmirror.com/eslint-define-config/-/eslint-define-config-1.6.0.tgz#fa28e0102b288bd6c74d535e8bb6b64122054b09" + integrity sha512-3qulYnwDRGYQHXHGdXBSRcfpI7m37ilBoERzTUYI8fBUoK/46yfUVNkGwM9cF/aoBrGgIDcBSz/HyPQJTHI/+w== + +eslint-plugin-jest@^25.2.2: + version "25.7.0" + resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-vue@^8.0.3: + version "8.7.1" + resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz#f13c53547a0c9d64588a675cc5ecc6ccaf63703f" + integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg== + dependencies: + eslint-utils "^3.0.0" + natural-compare "^1.4.0" + nth-check "^2.0.1" + postcss-selector-parser "^6.0.9" + semver "^7.3.5" + vue-eslint-parser "^8.0.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.0.0, eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.1.0: + version "8.22.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +esno@^0.10.1: + version "0.10.1" + resolved "https://registry.npmmirror.com/esno/-/esno-0.10.1.tgz#28f9adb30fdcc5960475d034a4f22311d334d6cd" + integrity sha512-wsXUWZxI0O59bvOjggWOGDd6VSwPxG+37Np8aUI1LwORIONN3L2nOOJHT7jZ3xAGkfq/J3YcnZsx+Mmw6BQFmQ== + dependencies: + cross-spawn "^7.0.3" + esbuild "^0.13.3" + esbuild-node-loader "^0.4.2" + esbuild-register "^3.0.0" + +espree@^9.0.0, espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.npmmirror.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +exec-buffer@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b" + integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA== + dependencies: + execa "^0.7.0" + p-finally "^1.0.0" + pify "^3.0.0" + rimraf "^2.5.4" + tempfile "^2.0.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +executable@^4.1.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.2: + version "2.0.4" + resolved "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-xml-parser@^3.19.0: + version "3.21.1" + resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz#152a1d51d445380f7046b304672dd55d15c9e736" + integrity sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg== + dependencies: + strnum "^1.0.4" + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@5.2.0, file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== + +file-type@^10.4.0, file-type@^10.5.0: + version "10.11.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890" + integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw== + +file-type@^12.0.0: + version "12.4.2" + resolved "https://registry.npmmirror.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9" + integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg== + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-node-modules@^2.1.2: + version "2.1.3" + resolved "https://registry.npmmirror.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.14.0, follow-redirects@^1.14.4: + version "1.15.1" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@9.1.0, fs-extra@^9.0.1, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +gifsicle@^5.0.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/gifsicle/-/gifsicle-5.2.1.tgz#efadab266a493ef0b4178e34597493349937369e" + integrity sha512-9ewIQQCAnSmkU2DhuWafd1DdsgzAkKqIWnY+023xBLSiK9Az2TDUozWQW+SyRQgFMclbe6RQldUk/49TRO3Aqw== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + execa "^5.0.0" + +git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.2.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.npmmirror.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^10.0.0: + version "10.0.2" + resolved "https://registry.npmmirror.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== + +got@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.npmmirror.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npmmirror.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +he@^1.1.1, he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.1.0, html-tags@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + +htmlparser2@^3.8.3: + version "3.10.1" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^7.1.2: + version "7.2.0" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +htmlparser2@^8.0.0: + version "8.0.1" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.npmmirror.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idb@^7.0.1: + version "7.0.2" + resolved "https://registry.npmmirror.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892" + integrity sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +image-size@^0.5.1, image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== + +imagemin-gifsicle@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz#1a7ab136a144c4678657ba3b6c412f80805d26b0" + integrity sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA== + dependencies: + execa "^1.0.0" + gifsicle "^5.0.0" + is-gif "^3.0.0" + +imagemin-jpegtran@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/imagemin-jpegtran/-/imagemin-jpegtran-7.0.0.tgz#7728f84876362d489b9a1656e0cc8e2009406e6f" + integrity sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ== + dependencies: + exec-buffer "^3.0.0" + is-jpg "^2.0.0" + jpegtran-bin "^5.0.0" + +imagemin-mozjpeg@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz#d1af26d0b43d75a41c211051c1910da59d9d2324" + integrity sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w== + dependencies: + execa "^4.0.0" + is-jpg "^2.0.0" + mozjpeg "^7.0.0" + +imagemin-optipng@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz#b88e5cf6da25cc8479e07cdf38c3ae0479df7ef2" + integrity sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A== + dependencies: + exec-buffer "^3.0.0" + is-png "^2.0.0" + optipng-bin "^7.0.0" + +imagemin-pngquant@^9.0.2: + version "9.0.2" + resolved "https://registry.npmmirror.com/imagemin-pngquant/-/imagemin-pngquant-9.0.2.tgz#38155702b0cc4f60f671ba7c2b086ea3805d9567" + integrity sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg== + dependencies: + execa "^4.0.0" + is-png "^2.0.0" + is-stream "^2.0.0" + ow "^0.17.0" + pngquant-bin "^6.0.0" + +imagemin-svgo@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz#749370804608917a67d4ff590f07a87756aec006" + integrity sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g== + dependencies: + is-svg "^4.2.1" + svgo "^2.1.0" + +imagemin-webp@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/imagemin-webp/-/imagemin-webp-6.0.0.tgz#bb2d77bab818fd6133df9675326497b877e7be4d" + integrity sha512-DmVCkI8H1csyqAExsk93LzC88gj2uKXaLLW5Ly+WYsvNx7xv5cJAlozXWIx9Z0kEQr9w98gphi5aP2b++iDH8g== + dependencies: + cwebp-bin "^5.0.0" + exec-buffer "^3.0.0" + is-cwebp-readable "^3.0.0" + +imagemin@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/imagemin/-/imagemin-7.0.1.tgz#f6441ca647197632e23db7d971fffbd530c87dbf" + integrity sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w== + dependencies: + file-type "^12.0.0" + globby "^10.0.0" + graceful-fs "^4.2.2" + junk "^3.1.0" + make-dir "^3.0.0" + p-pipe "^3.0.0" + replace-ext "^1.0.0" + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== + dependencies: + repeating "^2.0.0" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@8.2.4, inquirer@^8.2.0: + version "8.2.4" + resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-builtin-module@^3.1.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.5.0, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-cwebp-readable@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz#0554aaa400977a2fc4de366d8c0244f13cde58cb" + integrity sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA== + dependencies: + file-type "^10.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-expression@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" + integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-gif@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-gif/-/is-gif-3.0.0.tgz#c4be60b26a301d695bb833b20d9b5d66c6cf83b1" + integrity sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw== + dependencies: + file-type "^10.4.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-jpg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97" + integrity sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-object@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== + +is-plain-object@5.0.0, is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-png@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d" + integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-svg@^4.2.1: + version "4.3.2" + resolved "https://registry.npmmirror.com/is-svg/-/is-svg-4.3.2.tgz#a119e9932e1af53f6be1969d1790d6cc5fd947d3" + integrity sha512-mM90duy00JGMyjqIVHu9gNTjywdZV+8qNasX8cm/EEYZ53PHDgajvbBwNVvty5dwSAxLUD3p3bdo+7sR/UMrpw== + dependencies: + fast-xml-parser "^3.19.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0, isobject@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.npmmirror.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.npmmirror.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.0.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.3.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +jiti@^1.14.0: + version "1.14.0" + resolved "https://registry.npmmirror.com/jiti/-/jiti-1.14.0.tgz#5350fff532a4d891ca4bcd700c47c1f40e6ee326" + integrity sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A== + +jpegtran-bin@^5.0.0: + version "5.0.2" + resolved "https://registry.npmmirror.com/jpegtran-bin/-/jpegtran-bin-5.0.2.tgz#5870fd7e68317bd203a1c94572bd06ae7732cac3" + integrity sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + logalot "^2.0.0" + +js-base64@^2.1.9: + version "2.6.4" + resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-8.0.0.tgz#5dbe2cdfa9afc93251d3a77bf18c3ad6fa8a4de4" + integrity sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@2.x, json5@^2.2.0, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + +jsonc-parser@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" + integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +known-css-properties@^0.25.0: + version "0.25.0" + resolved "https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.25.0.tgz#6ebc4d4b412f602e5cfbeb4086bd544e34c0a776" + integrity sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA== + +kolorist@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.5.1.tgz#c3d66dc4fabde4f6b7faa6efda84c00491f9e52b" + integrity sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ== + +less@^4.1.2: + version "4.1.3" + resolved "https://registry.npmmirror.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246" + integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@11.2.6: + version "11.2.6" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" + integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== + dependencies: + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" + enquirer "^2.3.6" + execa "^5.1.1" + listr2 "^3.12.2" + micromatch "^4.0.4" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "3.3.0" + supports-color "8.1.1" + +listr2@^3.12.2: + version "3.14.0" + resolved "https://registry.npmmirror.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.15, lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.get@^4: + version "4.4.2" + resolved "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.npmmirror.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +logalot@^2.0.0, logalot@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552" + integrity sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw== + dependencies: + figures "^1.3.5" + squeak "^1.0.0" + +longest@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== + +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lpad-align@^1.0.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e" + integrity sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ== + dependencies: + get-stdin "^4.0.1" + indent-string "^2.1.0" + longest "^1.0.0" + meow "^3.3.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.26.1, magic-string@^0.26.2: + version "0.26.2" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" + integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.npmmirror.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.npmmirror.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-options@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" + integrity sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg== + dependencies: + is-plain-obj "^1.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +micromatch@3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz#5102d4eaf20b6997d6008e3acfe1c44a3fa815e2" + integrity sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.2.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + extglob "^2.0.2" + fragment-cache "^0.2.1" + kind-of "^5.0.2" + nanomatch "^1.2.1" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, mime-db@^1.28.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@1.2.6, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.6" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mockjs@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06" + integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ== + dependencies: + commander "*" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moment@^2.27.0, moment@^2.29.1: + version "2.29.4" + resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +mozjpeg@^7.0.0: + version "7.1.1" + resolved "https://registry.npmmirror.com/mozjpeg/-/mozjpeg-7.1.1.tgz#dfb61953536e66fcabd4ae795e7a312d42a51f18" + integrity sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +nanomatch@^1.2.1: + version "1.2.13" + resolved "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +nanopop@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz#23476513cee2405888afd2e8a4b54066b70b9e60" + integrity sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +needle@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/needle/-/needle-3.1.0.tgz#3bf5cd090c28eb15644181ab6699e027bd6c53c9" + integrity sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw== + dependencies: + debug "^3.2.6" + iconv-lite "^0.6.3" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npmmirror.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" + integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.4" + resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +omit.js@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz#dd9b8436fab947a5f3ff214cb2538631e313ec2f" + integrity sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.npmmirror.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +optipng-bin@^7.0.0: + version "7.0.1" + resolved "https://registry.npmmirror.com/optipng-bin/-/optipng-bin-7.0.1.tgz#beb8e55a52f8a26f885ee57ab44fcf62397d6972" + integrity sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-filter-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16" + integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== + dependencies: + arch "^2.1.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +ow@^0.17.0: + version "0.17.0" + resolved "https://registry.npmmirror.com/ow/-/ow-0.17.0.tgz#4f938999fed6264c9048cd6254356e0f1e7f688c" + integrity sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA== + dependencies: + type-fest "^0.11.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + +p-event@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/p-event/-/p-event-1.3.0.tgz#8e6b4f4f65c72bc5b6fe28b75eda874f96a4a085" + integrity sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA== + dependencies: + p-timeout "^1.1.1" + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg== + dependencies: + p-reduce "^1.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ== + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== + dependencies: + p-finally "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@^6.2.0: + version "6.2.1" + resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinia@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.0.tgz#6ac77af7a4ff2e2c87a5967b5aa2be8e04868f38" + integrity sha512-pqnQv1m7oEwYExGl//EtOn9rgFn7gtXECP/hZHy+WicmHXmWWkbsvpR+9z1xxrIgDOmVYuh1eYfRULJklzOKsQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.19" + vue-demi "*" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + +pngquant-bin@^6.0.0: + version "6.0.1" + resolved "https://registry.npmmirror.com/pngquant-bin/-/pngquant-bin-6.0.1.tgz#2b5789ca219eeb4d8509ab1ae082092801b7f07e" + integrity sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.1" + execa "^4.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +postcss-html@^1.2.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/postcss-html/-/postcss-html-1.5.0.tgz#57a43bc9e336f516ecc448a37d2e8c2290170a6f" + integrity sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA== + dependencies: + htmlparser2 "^8.0.0" + js-tokens "^8.0.0" + postcss "^8.4.0" + postcss-safe-parser "^6.0.0" + +postcss-less@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/postcss-less/-/postcss-less-5.0.0.tgz#3fa361ed8e52a9c3e6e4fdb9bb95fd9032f3c62b" + integrity sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A== + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.npmmirror.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + +postcss-prefix-selector@^1.6.0: + version "1.16.0" + resolved "https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz#ad5b56f9a73a2c090ca7161049632c9d89bcb404" + integrity sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q== + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== + +postcss-safe-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" + integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sorting@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-7.0.1.tgz#923b5268451cf2d93ebf8835e17a6537757049a5" + integrity sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g== + +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^5.2.17: + version "5.2.18" + resolved "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^8.1.10, postcss@^8.3.11, postcss@^8.4.0, postcss@^8.4.13, postcss@^8.4.16: + version "8.4.16" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +posthtml-parser@^0.2.0, posthtml-parser@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd" + integrity sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw== + dependencies: + htmlparser2 "^3.8.3" + isobject "^2.1.0" + +posthtml-rename-id@^1.0: + version "1.0.12" + resolved "https://registry.npmmirror.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz#cf7f6eb37146bf1afac31e68f18c6cc19ae61433" + integrity sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw== + dependencies: + escape-string-regexp "1.0.5" + +posthtml-render@^1.0.5, posthtml-render@^1.0.6: + version "1.4.0" + resolved "https://registry.npmmirror.com/posthtml-render/-/posthtml-render-1.4.0.tgz#40114070c45881cacb93347dae3eff53afbcff13" + integrity sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw== + +posthtml-svg-mode@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz#abd554face81223cab0cb367e18e4efd2a4e74b0" + integrity sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ== + dependencies: + merge-options "1.0.1" + posthtml "^0.9.2" + posthtml-parser "^0.2.1" + posthtml-render "^1.0.6" + +posthtml@^0.9.2: + version "0.9.2" + resolved "https://registry.npmmirror.com/posthtml/-/posthtml-0.9.2.tgz#f4c06db9f67b61fd17c4e256e7e3d9515bf726fd" + integrity sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q== + dependencies: + posthtml-parser "^0.2.0" + posthtml-render "^1.0.5" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.4.1: + version "2.7.1" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^27.0.0, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pug-attrs@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" + integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" + integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.0.0" + pug-runtime "^3.0.0" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" + integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== + +pug-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" + integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" + integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" + integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" + integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + +pug-strip-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" + integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" + integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== + +pug@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" + integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== + dependencies: + pug-code-gen "^3.0.2" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qrcode@^1.4.4: + version "1.5.1" + resolved "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.1.tgz#0103f97317409f7bc91772ef30793a54cd59f0cb" + integrity sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + +qs@^6.10.1: + version "6.11.0" + resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +query-string@^4.3.2: + version "4.3.4" + resolved "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: + version "0.13.9" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== + dependencies: + is-finite "^1.0.0" + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +request-light@^0.5.4: + version "0.5.8" + resolved "https://registry.npmmirror.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27" + integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^2.5.4: + version "2.7.1" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-purge-icons@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.7.0.tgz#4419b810d5d75f1bba3af72a238e70b4a675f03c" + integrity sha512-zAff7SrjC2nA7TCm6gaOclh1cZ2IBupX1tnebn+sfvcvrezu+avS7k0BhhAC2pAtfhdOvD6G/2a+kkkm6hvpiw== + dependencies: + "@purge-icons/core" "^0.7.0" + "@purge-icons/generated" "^0.7.0" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-visualizer@^5.5.2: + version "5.7.1" + resolved "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.7.1.tgz#7af30b02e6579155368a90b37b6ee9137b391d06" + integrity sha512-E/IgOMnmXKlc6ICyf53ok1b6DxPeNVUs3R0kYYPuDpGfofT4bkiG+KtSMlGjMACFmfwbbqTVDZBIF7sMZVKJbA== + dependencies: + nanoid "^3.3.4" + open "^8.4.0" + source-map "^0.7.3" + yargs "^17.5.1" + +"rollup@>=2.59.0 <2.78.0", rollup@^2.43.1, rollup@^2.56.3, rollup@^2.60.2: + version "2.78.1" + resolved "https://registry.npmmirror.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" + integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== + optionalDependencies: + fsevents "~2.3.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.1, rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scroll-into-view-if-needed@^2.2.25: + version "2.2.29" + resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885" + integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg== + dependencies: + compute-scroll-into-view "^1.0.17" + +seek-bzip@^1.0.5: + version "1.0.6" + resolved "https://registry.npmmirror.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" + integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== + dependencies: + commander "^2.8.1" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + +semver-truncate@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8" + integrity sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w== + dependencies: + semver "^5.3.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.5: + version "7.3.5" + resolved "https://registry.npmmirror.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shallow-equal@^1.0.0: + version "1.2.1" + resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.3" + resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sortablejs@^1.14.0: + version "1.15.0" + resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" + integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +squeak@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3" + integrity sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A== + dependencies: + chalk "^1.0.0" + console-stream "^0.1.1" + lpad-align "^1.0.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.6: + version "4.0.7" + resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + +string.prototype.padend@^3.0.0: + version "3.1.3" + resolved "https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" + integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@3.3.0, stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@4.0.0, strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== + dependencies: + get-stdin "^4.0.1" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strnum@^1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== + +stylelint-config-html@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66" + integrity sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ== + +stylelint-config-prettier@^9.0.3: + version "9.0.3" + resolved "https://registry.npmmirror.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz#0dccebeff359dcc393c9229184408b08964d561c" + integrity sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg== + +stylelint-config-recommended@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz#fd2523a322836005ad9bf473d3e5534719c09f9d" + integrity sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw== + +stylelint-config-standard@^23.0.0: + version "23.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-23.0.0.tgz#4ad58c74804c544cb4d30667c21a30ab14d1c17d" + integrity sha512-8PDlk+nWuc1T66nVaODTdVodN0pjuE5TBlopi39Lt9EM36YJsRhqttMyUhnS78oc/59Q6n8iw2GJB4QcoFqtRg== + dependencies: + stylelint-config-recommended "^6.0.0" + +stylelint-order@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/stylelint-order/-/stylelint-order-5.0.0.tgz#abd20f6b85ac640774cbe40e70d3fe9c6fdf4400" + integrity sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw== + dependencies: + postcss "^8.3.11" + postcss-sorting "^7.0.1" + +stylelint@^14.0.1: + version "14.10.0" + resolved "https://registry.npmmirror.com/stylelint/-/stylelint-14.10.0.tgz#c588f5cd47cd214cf1acee5bc165961b6a3ad836" + integrity sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + balanced-match "^2.0.0" + colord "^2.9.2" + cosmiconfig "^7.0.1" + css-functions-list "^3.1.0" + debug "^4.3.4" + fast-glob "^3.2.11" + fastest-levenshtein "^1.0.16" + file-entry-cache "^6.0.1" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.2.0" + ignore "^5.2.0" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.25.0" + mathml-tag-names "^2.1.3" + meow "^9.0.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.16" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^6.0.0" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + style-search "^0.1.0" + supports-hyperlinks "^2.2.0" + svg-tags "^1.0.0" + table "^6.8.0" + v8-compile-cache "^2.3.0" + write-file-atomic "^4.0.1" + +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-baker@1.7.0: + version "1.7.0" + resolved "https://registry.npmmirror.com/svg-baker/-/svg-baker-1.7.0.tgz#8367f78d875550c52fe4756f7303d5c5d7c2e9a7" + integrity sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg== + dependencies: + bluebird "^3.5.0" + clone "^2.1.1" + he "^1.1.1" + image-size "^0.5.1" + loader-utils "^1.1.0" + merge-options "1.0.1" + micromatch "3.1.0" + postcss "^5.2.17" + postcss-prefix-selector "^1.6.0" + posthtml-rename-id "^1.0" + posthtml-svg-mode "^1.0.3" + query-string "^4.3.2" + traverse "^0.6.6" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +svgo@^2.1.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +systemjs@^6.12.1: + version "6.12.3" + resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.12.3.tgz#9c4b614dea4445523d22cda0a7188714f0c4f64c" + integrity sha512-TtYUN86Hs8V1QGAoj9ad1xmJmZS9Lurfi8Iu8QWOKaUDDuTH0Bpfdxz9qZIdxsmvAg3WMQnZ5/pkQvloh2sr/Q== + +table@^6.8.0: + version "6.8.0" + resolved "https://registry.npmmirror.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempfile@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265" + integrity sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA== + dependencies: + temp-dir "^1.0.0" + uuid "^3.0.1" + +tempfile@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/tempfile/-/tempfile-3.0.0.tgz#5376a3492de7c54150d0cc0612c3f00e2cdaf76c" + integrity sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw== + dependencies: + temp-dir "^2.0.0" + uuid "^3.3.2" + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser@^5.0.0, terser@^5.10.0: + version "5.14.2" + resolved "https://registry.npmmirror.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tinycolor2@^1.4.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" + integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +token-stream@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" + integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.npmmirror.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +ts-jest@^27.0.7: + version "27.1.5" + resolved "https://registry.npmmirror.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" + integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-node@^10.4.0, ts-node@^10.8.1: + version "10.9.1" + resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-node@^9: + version "9.1.1" + resolved "https://registry.npmmirror.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: + version "2.4.0" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.4.3, typescript@^4.4.4, typescript@^4.6.4: + version "4.7.4" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +uglify-js@^3.1.4: + version "3.17.0" + resolved "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" + integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1: + version "1.1.2" + resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite-plugin-compression@^0.3.5: + version "0.3.6" + resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.3.6.tgz#85e3ce5047ae6747bc3952177177a852fac901be" + integrity sha512-aSskQCJsP3VQ8PsnY+vO7UfD5qoFMOEuzg0PG2E9Zqyx+ARmc3wr9KCgOFraZOFW1Y4UAa5BR0SMTjoxHRMJoQ== + dependencies: + chalk "^4.1.2" + debug "^4.3.2" + fs-extra "^10.0.0" + +vite-plugin-html@^2.1.1: + version "2.1.2" + resolved "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-2.1.2.tgz#aaf846a806b37e4884870e5ce1918166e9ce9125" + integrity sha512-7HXkL6n7M2qDEaUV4Vnz8yM2glW4gV36d5HSBIM5gOoAG1PkuQb4Vv9FTPgPiQxq4sPRf/6IgABX0MeLVW+CyQ== + dependencies: + "@rollup/pluginutils" "^4.1.2" + dotenv "^10.0.0" + dotenv-expand "^5.1.0" + ejs "^3.1.6" + fs-extra "^10.0.0" + html-minifier-terser "^6.1.0" + +vite-plugin-imagemin@^0.4.6: + version "0.4.6" + resolved "https://registry.npmmirror.com/vite-plugin-imagemin/-/vite-plugin-imagemin-0.4.6.tgz#f551dacb0529ca327a80d2f5830b5cc0ccb5677a" + integrity sha512-4dE7E77MM2ywFW5KOM6PTwgFZCh+OqlBufhpH07k81a4Ao2/Orvrido7JhLE3TWbWY2K1ZkiZ1E4buIPWtHQRA== + dependencies: + "@types/imagemin" "^7.0.1" + "@types/imagemin-gifsicle" "^7.0.1" + "@types/imagemin-jpegtran" "^5.0.1" + "@types/imagemin-mozjpeg" "^8.0.1" + "@types/imagemin-optipng" "^5.2.1" + "@types/imagemin-svgo" "^9.0.1" + "@types/imagemin-webp" "^5.1.2" + "@types/svgo" "^2.4.2" + chalk "^4.1.2" + debug "^4.3.2" + esbuild "^0.13.2" + fs-extra "^10.0.0" + imagemin "^7.0.1" + imagemin-gifsicle "^7.0.0" + imagemin-jpegtran "^7.0.0" + imagemin-mozjpeg "^9.0.0" + imagemin-optipng "^8.0.0" + imagemin-pngquant "^9.0.2" + imagemin-svgo "^9.0.0" + imagemin-webp "^6.0.0" + +vite-plugin-mock@^2.9.6: + version "2.9.6" + resolved "https://registry.npmmirror.com/vite-plugin-mock/-/vite-plugin-mock-2.9.6.tgz#04dd23de6baa052faa5b9ad317514c90d6205e25" + integrity sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg== + dependencies: + "@rollup/plugin-node-resolve" "^13.0.4" + "@types/mockjs" "^1.0.4" + chalk "^4.1.2" + chokidar "^3.5.2" + connect "^3.7.0" + debug "^4.3.2" + esbuild "0.11.3" + fast-glob "^3.2.7" + path-to-regexp "^6.2.0" + +vite-plugin-purge-icons@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.7.0.tgz#c460037438fd71372153360ccb9e7d97b030fb58" + integrity sha512-oGZUKFAL4waIZIeiCPT5KZvGbBA500AO/03oxW+ODTKUMq+0jbh9s+T8NPzfJQFC1jtE7eUb2ium82IP/gxZjA== + dependencies: + "@purge-icons/core" "^0.7.0" + "@purge-icons/generated" "^0.7.0" + rollup-plugin-purge-icons "^0.7.0" + +vite-plugin-pwa@^0.11.3: + version "0.11.13" + resolved "https://registry.npmmirror.com/vite-plugin-pwa/-/vite-plugin-pwa-0.11.13.tgz#54ed80580b7d3e61aadcf4325fe9bc6f7ffce5db" + integrity sha512-Ssj14m3TRVLfkFEAWSMcFE2d1cSdEZyrVTzfY2lSL+umHYvcIFHVDAY143sygtBCb44OPczsAOmWwBTxwOvh7g== + dependencies: + debug "^4.3.3" + fast-glob "^3.2.7" + pretty-bytes "^5.6.0" + rollup "^2.60.2" + workbox-build "^6.4.2" + workbox-window "^6.4.2" + +vite-plugin-style-import@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-1.4.1.tgz#47a66920cce5484640f2faacd73190aac0b91b94" + integrity sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ== + dependencies: + "@rollup/pluginutils" "^4.1.2" + change-case "^4.1.2" + debug "^4.3.3" + es-module-lexer "^0.9.3" + fs-extra "^10.0.0" + magic-string "^0.25.7" + +vite-plugin-svg-icons@^1.0.5: + version "1.1.0" + resolved "https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-1.1.0.tgz#a02dd241c6697565a016ac6197bb1ff2ec1a8c98" + integrity sha512-dmpr7Wq8vQN6ajBrVTrBxy8wJjQfcP30i73q+40uAZc8p7EwphBNZ+bVTI0enFaCrsITI8y0Ruo/mN/SaJQ6Hw== + dependencies: + "@types/svgo" "^2.6.0" + cors "^2.8.5" + debug "^4.3.3" + etag "^1.8.1" + fs-extra "^10.0.0" + svg-baker "1.7.0" + svgo "^2.8.0" + +vite-plugin-theme@^0.8.1: + version "0.8.6" + resolved "https://registry.npmmirror.com/vite-plugin-theme/-/vite-plugin-theme-0.8.6.tgz#31d373ccd44d9160d22dd8f58ac69b237073eefc" + integrity sha512-GyoP9JjGkF106AawBh1kvw2eQZ/CCPeZKN5p5XhQe1ah1LO7A/6aVGY5gYGWk2qHG9nXpM1IvxjdbMsg94bvYg== + dependencies: + "@types/node" "^14.17.1" + "@types/tinycolor2" "^1.4.2" + chalk "^4.1.1" + clean-css "^5.1.2" + debug "^4.3.2" + esbuild "^0.11.23" + esbuild-plugin-alias "^0.1.2" + tinycolor2 "^1.4.2" + +vite-plugin-vue-setup-extend@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.1.0.tgz#9f08efbbc2aed103f549b3696dee5d462db23f38" + integrity sha512-emS0pGCeWDdzxIpHzlPMaPv4HrNJMlXSkkzOFi110MrkyNweJv4TrDpB0ZYtjd+JywqjUCA3/cl3CuJBbv6qzw== + dependencies: + "@vue/compiler-sfc" "^3.2.6" + magic-string "^0.25.7" + +vite-plugin-windicss@^1.4.12: + version "1.8.7" + resolved "https://registry.npmmirror.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.7.tgz#884b3e7e4054df22344f61f5b2fddf07f2982405" + integrity sha512-/zwQ8+RV+MSkbG0IGqsEma6r2R01NzN/aNpNjJD7VVAkxAptNznqDXOObFTskkWfZ+9m6KJZCOuCPgAFtQIzEA== + dependencies: + "@windicss/plugin-utils" "1.8.7" + debug "^4.3.4" + kolorist "^1.5.1" + windicss "^3.5.6" + +vite@^2.6.13: + version "2.9.15" + resolved "https://registry.npmmirror.com/vite/-/vite-2.9.15.tgz#2858dd5b2be26aa394a283e62324281892546f0b" + integrity sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +void-elements@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +vscode-css-languageservice@^5.1.7: + version "5.4.2" + resolved "https://registry.npmmirror.com/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz#69ea74c000bd653dfc8e458a1720d28b9ffa5cfb" + integrity sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg== + dependencies: + vscode-languageserver-textdocument "^1.0.4" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-html-languageservice@^4.1.0: + version "4.2.5" + resolved "https://registry.npmmirror.com/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz#c0cc8ff3d824d16388bbac187e1828749eccf006" + integrity sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw== + dependencies: + vscode-languageserver-textdocument "^1.0.4" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-json-languageservice@^4.1.8: + version "4.2.1" + resolved "https://registry.npmmirror.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-jsonrpc@8.0.2, vscode-jsonrpc@^8.0.0-next.2: + version "8.0.2" + resolved "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" + integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== + +vscode-languageserver-protocol@3.17.2: + version "3.17.2" + resolved "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" + integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== + dependencies: + vscode-jsonrpc "8.0.2" + vscode-languageserver-types "3.17.2" + +vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.3, vscode-languageserver-textdocument@^1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz#838769940ece626176ec5d5a2aa2d0aa69f5095c" + integrity sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg== + +vscode-languageserver-types@3.17.2, vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0: + version "3.17.2" + resolved "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + +vscode-languageserver@^8.0.0-next.2: + version "8.0.2" + resolved "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz#cfe2f0996d9dfd40d3854e786b2821604dfec06d" + integrity sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA== + dependencies: + vscode-languageserver-protocol "3.17.2" + +vscode-nls@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/vscode-nls/-/vscode-nls-5.1.0.tgz#443b301a7465d88c81c0f4e1914f9857f0dce1e4" + integrity sha512-37Ha44QrLFwR2IfSSYdOArzUvOyoWbOYTwQC+wS0NfqKjhW7s0WQ1lMy5oJXgSZy9sAiZS5ifELhbpXodeMR8w== + +vscode-pug-languageservice@0.28.10: + version "0.28.10" + resolved "https://registry.npmmirror.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.28.10.tgz#805ce197a882b42a83fe602008d979fea13e63f2" + integrity sha512-zhpNmMxltAlid4ZWVq0YrCbD0v2Nk/OsUl2q1pZkSJheGVMj/ZAlcYqDvWjLbMfGPtpvoC6nPxhSCc6sIDN9XA== + dependencies: + "@volar/code-gen" "0.28.10" + "@volar/shared" "0.28.10" + "@volar/source-map" "0.28.10" + "@volar/transforms" "0.28.10" + pug-lexer "^5.0.1" + pug-parser "^6.0.0" + vscode-languageserver "^8.0.0-next.2" + +vscode-typescript-languageservice@0.28.10: + version "0.28.10" + resolved "https://registry.npmmirror.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.28.10.tgz#887387857e802dc8aab92a8efec21533fce19bd3" + integrity sha512-TTJSQss0YR784e0Rr8se5huxd0edqGzO7A51kejEQiPPhIcOlYCEeeFxDtqv3S+/fUUkeFVdRBZA9Ie7Jfrldw== + dependencies: + "@volar/shared" "0.28.10" + semver "^7.3.5" + upath "^2.0.1" + vscode-languageserver "^8.0.0-next.2" + vscode-languageserver-textdocument "^1.0.1" + +vscode-uri@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" + integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== + +vscode-uri@^3.0.2, vscode-uri@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" + integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== + +vscode-vue-languageservice@0.28.10: + version "0.28.10" + resolved "https://registry.npmmirror.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.28.10.tgz#3f5ea3b2319c542f23127c3017f945cae67673ee" + integrity sha512-xsA9aEiELiA9zHxzhI58Y6crcSfqxtt3EDKyey9rcNYe/bdY1NY0qLh3SRxdXF8YwoxzRvnn4iUw0oxCjHnFUQ== + dependencies: + "@volar/code-gen" "0.28.10" + "@volar/html2pug" "0.28.10" + "@volar/shared" "0.28.10" + "@volar/source-map" "0.28.10" + "@volar/transforms" "0.28.10" + "@vscode/emmet-helper" "^2.8.0" + "@vue/compiler-dom" "^3.2.20" + "@vue/reactivity" "^3.2.20" + "@vue/shared" "^3.2.20" + request-light "^0.5.4" + upath "^2.0.1" + vscode-css-languageservice "^5.1.7" + vscode-html-languageservice "^4.1.0" + vscode-json-languageservice "^4.1.8" + vscode-languageserver "^8.0.0-next.2" + vscode-languageserver-textdocument "^1.0.1" + vscode-pug-languageservice "0.28.10" + vscode-typescript-languageservice "0.28.10" + +vue-demi@*: + version "0.13.8" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz#5c568fb3b4d8f848acc658dfccd3d875035b5653" + integrity sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg== + +vue-eslint-parser@^8.0.1: + version "8.3.0" + resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" + integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== + dependencies: + debug "^4.3.2" + eslint-scope "^7.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.0.0" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.5" + +vue-i18n@^9.1.9: + version "9.2.2" + resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz#aeb49d9424923c77e0d6441e3f21dafcecd0e666" + integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ== + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + "@vue/devtools-api" "^6.2.1" + +vue-router@^4.0.12: + version "4.1.3" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.3.tgz#f8dc7931a2253cc5aa9b740f8b98969d08ca283c" + integrity sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA== + dependencies: + "@vue/devtools-api" "^6.1.4" + +vue-tsc@^0.28.10: + version "0.28.10" + resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.28.10.tgz#2fc0154537bef5004e86002b117758af4b2b066c" + integrity sha512-tGD7eC74MHqKH2/F66AYkC1zNiLrgnhMzeYWou3p/wApMaUEM4h29HqYoKN6uE+pq87uvq/penYqUSBXhIwLiA== + dependencies: + "@volar/shared" "0.28.10" + vscode-vue-languageservice "0.28.10" + +vue-types@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d" + integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw== + dependencies: + is-plain-object "3.0.1" + +vue-types@^4.1.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/vue-types/-/vue-types-4.2.1.tgz#f8f7e5fb42d4a6acda6d92c9736b510e5534c753" + integrity sha512-DNQZmJuOvovLUIp0BENRkdnZHbI0V4e2mNvjAZOAXKD56YGvRchtUYOXA/XqTxdv7Ng5SJLZqRKRpAhm5NLaPQ== + dependencies: + is-plain-object "5.0.0" + +vue@^3.2.21: + version "3.2.37" + resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e" + integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== + dependencies: + "@vue/compiler-dom" "3.2.37" + "@vue/compiler-sfc" "3.2.37" + "@vue/runtime-dom" "3.2.37" + "@vue/server-renderer" "3.2.37" + "@vue/shared" "3.2.37" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warning@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +windicss@^3.5.6: + version "3.5.6" + resolved "https://registry.npmmirror.com/windicss/-/windicss-3.5.6.tgz#30a34da76894d952a96c9a1921f2e91e13932183" + integrity sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA== + +with@^7.0.0: + version "7.0.2" + resolved "https://registry.npmmirror.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" + integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workbox-background-sync@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" + integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-broadcast-update@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" + integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== + dependencies: + workbox-core "6.5.4" + +workbox-build@^6.4.2: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" + integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.5.4" + workbox-broadcast-update "6.5.4" + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-google-analytics "6.5.4" + workbox-navigation-preload "6.5.4" + workbox-precaching "6.5.4" + workbox-range-requests "6.5.4" + workbox-recipes "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + workbox-streams "6.5.4" + workbox-sw "6.5.4" + workbox-window "6.5.4" + +workbox-cacheable-response@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" + integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== + dependencies: + workbox-core "6.5.4" + +workbox-core@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" + integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== + +workbox-expiration@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" + integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-google-analytics@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" + integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== + dependencies: + workbox-background-sync "6.5.4" + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-navigation-preload@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" + integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== + dependencies: + workbox-core "6.5.4" + +workbox-precaching@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" + integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-range-requests@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" + integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== + dependencies: + workbox-core "6.5.4" + +workbox-recipes@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" + integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== + dependencies: + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-precaching "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-routing@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" + integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== + dependencies: + workbox-core "6.5.4" + +workbox-strategies@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" + integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== + dependencies: + workbox-core "6.5.4" + +workbox-streams@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" + integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + +workbox-sw@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" + integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== + +workbox-window@6.5.4, workbox-window@^6.4.2: + version "6.5.4" + resolved "https://registry.npmmirror.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" + integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.4" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.0, yargs@^17.5.1: + version "17.5.1" + resolved "https://registry.npmmirror.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zrender@5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/zrender/-/zrender-5.3.2.tgz#f67b11d36d3d020d62411d3bb123eb1c93cccd69" + integrity sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w== + dependencies: + tslib "2.3.0" -- Gitee From a90c78d4bd5186865d45c564ede827c7a906fa3e Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Sun, 21 Aug 2022 21:30:18 +0800 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 98 ++++++++++++++--------------- .github/ISSUE_TEMPLATE/1-bug.md | 6 +- .github/ISSUE_TEMPLATE/2-feature.md | 6 +- .github/ISSUE_TEMPLATE/3-bug-cn.md | 6 +- .husky/lintstagedrc.js | 12 ++-- commitlint.config.js | 50 +++++++-------- prettier.config.js | 8 +-- 7 files changed, 93 insertions(+), 93 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 7633bbe..909011b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,5 @@ // @ts-check -const { defineConfig } = require('eslint-define-config'); +const { defineConfig } = require("eslint-define-config"); module.exports = defineConfig({ root: true, env: { @@ -7,73 +7,73 @@ module.exports = defineConfig({ node: true, es6: true, }, - parser: 'vue-eslint-parser', + parser: "vue-eslint-parser", parserOptions: { - parser: '@typescript-eslint/parser', + parser: "@typescript-eslint/parser", ecmaVersion: 2020, - sourceType: 'module', - jsxPragma: 'React', + sourceType: "module", + jsxPragma: "React", ecmaFeatures: { jsx: true, }, }, extends: [ - 'plugin:vue/vue3-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - 'plugin:prettier/recommended', - 'plugin:jest/recommended', + "plugin:vue/vue3-recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + "plugin:prettier/recommended", + "plugin:jest/recommended", ], rules: { - 'vue/script-setup-uses-vars': 'error', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-empty-function': 'off', - 'vue/custom-event-name-casing': 'off', - 'no-use-before-define': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', + "vue/script-setup-uses-vars": "error", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-function": "off", + "vue/custom-event-name-casing": "off", + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-unused-vars": [ + "error", { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", }, ], - 'no-unused-vars': [ - 'error', + "no-unused-vars": [ + "error", { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", }, ], - 'space-before-function-paren': 'off', + "space-before-function-paren": "off", - 'vue/attributes-order': 'off', - 'vue/v-on-event-hyphenation': 'off', - 'vue/multi-word-component-names': 'off', - 'vue/one-component-per-file': 'off', - 'vue/html-closing-bracket-newline': 'off', - 'vue/max-attributes-per-line': 'off', - 'vue/multiline-html-element-content-newline': 'off', - 'vue/singleline-html-element-content-newline': 'off', - 'vue/attribute-hyphenation': 'off', - 'vue/require-default-prop': 'off', - 'vue/html-self-closing': [ - 'error', + "vue/attributes-order": "off", + "vue/v-on-event-hyphenation": "off", + "vue/multi-word-component-names": "off", + "vue/one-component-per-file": "off", + "vue/html-closing-bracket-newline": "off", + "vue/max-attributes-per-line": "off", + "vue/multiline-html-element-content-newline": "off", + "vue/singleline-html-element-content-newline": "off", + "vue/attribute-hyphenation": "off", + "vue/require-default-prop": "off", + "vue/html-self-closing": [ + "error", { html: { - void: 'always', - normal: 'never', - component: 'always', + void: "always", + normal: "never", + component: "always", }, - svg: 'always', - math: 'always', + svg: "always", + math: "always", }, ], }, diff --git a/.github/ISSUE_TEMPLATE/1-bug.md b/.github/ISSUE_TEMPLATE/1-bug.md index 0f5e1e0..b061404 100644 --- a/.github/ISSUE_TEMPLATE/1-bug.md +++ b/.github/ISSUE_TEMPLATE/1-bug.md @@ -1,9 +1,9 @@ --- name: 🐛 Bug report about: Create a report to help us improve -title: '' -labels: 'bug: pending triage' -assignees: '' +title: "" +labels: "bug: pending triage" +assignees: "" --- <!-- diff --git a/.github/ISSUE_TEMPLATE/2-feature.md b/.github/ISSUE_TEMPLATE/2-feature.md index cbe4164..c34f1c0 100644 --- a/.github/ISSUE_TEMPLATE/2-feature.md +++ b/.github/ISSUE_TEMPLATE/2-feature.md @@ -1,9 +1,9 @@ --- name: 🚀 Feature request about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' +title: "" +labels: "" +assignees: "" --- <!-- diff --git a/.github/ISSUE_TEMPLATE/3-bug-cn.md b/.github/ISSUE_TEMPLATE/3-bug-cn.md index fade42a..5a68717 100644 --- a/.github/ISSUE_TEMPLATE/3-bug-cn.md +++ b/.github/ISSUE_TEMPLATE/3-bug-cn.md @@ -1,9 +1,9 @@ --- name: 🐛 Bug 报告 about: 向我们报告一个Bug以帮助我们改进 -title: '' -labels: 'bug: pending triage' -assignees: '' +title: "" +labels: "bug: pending triage" +assignees: "" --- **⚠️ 重要 ⚠️ 在进一步操作之前,请检查下列选项。如果您忽视此模板或者没有提供关键信息,您的 Issue 将直接被关闭** diff --git a/.husky/lintstagedrc.js b/.husky/lintstagedrc.js index 08d8c9e..017476c 100644 --- a/.husky/lintstagedrc.js +++ b/.husky/lintstagedrc.js @@ -1,8 +1,8 @@ module.exports = { - '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'], - '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': ['prettier --write--parser json'], - 'package.json': ['prettier --write'], - '*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix'], - '*.{scss,less,styl,html}': ['stylelint --fix', 'prettier --write'], - '*.md': ['prettier --write'], + "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"], + "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"], + "package.json": ["prettier --write"], + "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"], + "*.{scss,less,styl,html}": ["stylelint --fix", "prettier --write"], + "*.md": ["prettier --write"], }; diff --git a/commitlint.config.js b/commitlint.config.js index 5459887..76b2969 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,32 +1,32 @@ module.exports = { - ignores: [(commit) => commit.includes('init')], - extends: ['@commitlint/config-conventional'], + ignores: [(commit) => commit.includes("init")], + extends: ["@commitlint/config-conventional"], rules: { - 'body-leading-blank': [2, 'always'], - 'footer-leading-blank': [1, 'always'], - 'header-max-length': [2, 'always', 108], - 'subject-empty': [2, 'never'], - 'type-empty': [2, 'never'], - 'subject-case': [0], - 'type-enum': [ + "body-leading-blank": [2, "always"], + "footer-leading-blank": [1, "always"], + "header-max-length": [2, "always", 108], + "subject-empty": [2, "never"], + "type-empty": [2, "never"], + "subject-case": [0], + "type-enum": [ 2, - 'always', + "always", [ - 'feat', - 'fix', - 'perf', - 'style', - 'docs', - 'test', - 'refactor', - 'build', - 'ci', - 'chore', - 'revert', - 'wip', - 'workflow', - 'types', - 'release', + "feat", + "fix", + "perf", + "style", + "docs", + "test", + "refactor", + "build", + "ci", + "chore", + "revert", + "wip", + "workflow", + "types", + "release", ], ], }, diff --git a/prettier.config.js b/prettier.config.js index bcaa5c5..4ef37f9 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -3,8 +3,8 @@ module.exports = { semi: true, vueIndentScriptAndStyle: true, singleQuote: false, - trailingComma: 'all', - proseWrap: 'never', - htmlWhitespaceSensitivity: 'strict', - endOfLine: 'auto', + trailingComma: "all", + proseWrap: "never", + htmlWhitespaceSensitivity: "strict", + endOfLine: "auto", }; -- Gitee From 0f3e8655d57b11f93863ae79864f1dbf1de2b289 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Sun, 21 Aug 2022 21:31:19 +0800 Subject: [PATCH 03/12] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9B=A0api?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E5=AF=BC=E8=87=B4mock=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=8B=A6=E6=88=AA=E5=88=B0=E5=89=8D=E7=AB=AF=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/demo/account.ts | 6 +++--- mock/sys/menu.ts | 2 +- mock/sys/user.ts | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mock/demo/account.ts b/mock/demo/account.ts index ef993b9..8547305 100644 --- a/mock/demo/account.ts +++ b/mock/demo/account.ts @@ -45,7 +45,7 @@ const userInfo = { export default [ { - url: "/basic-api/account/getAccountInfo", + url: "/dev-api/account/getAccountInfo", timeout: 1000, method: "get", response: () => { @@ -53,7 +53,7 @@ export default [ }, }, { - url: "/basic-api/user/sessionTimeout", + url: "/dev-api/user/sessionTimeout", method: "post", statusCode: 401, response: () => { @@ -61,7 +61,7 @@ export default [ }, }, { - url: "/basic-api/user/tokenExpired", + url: "/dev-api/user/tokenExpired", method: "post", statusCode: 200, response: () => { diff --git a/mock/sys/menu.ts b/mock/sys/menu.ts index 49438fd..6c27acb 100644 --- a/mock/sys/menu.ts +++ b/mock/sys/menu.ts @@ -237,7 +237,7 @@ const linkRoute = { export default [ { - url: "/basic-api/getMenuList", + url: "/dev-api/getMenuList", timeout: 1000, method: "get", response: (request: requestParams) => { diff --git a/mock/sys/user.ts b/mock/sys/user.ts index cd4c394..8a81d92 100644 --- a/mock/sys/user.ts +++ b/mock/sys/user.ts @@ -46,7 +46,7 @@ const fakeCodeList: any = { export default [ // mock user login { - url: "/basic-api/login", + url: "/dev-api/login", timeout: 200, method: "post", response: ({ body }) => { @@ -69,7 +69,7 @@ export default [ }, }, { - url: "/basic-api/getUserInfo", + url: "/dev-api/getUserInfo", method: "get", response: (request: requestParams) => { const token = getRequestToken(request); @@ -82,7 +82,7 @@ export default [ }, }, { - url: "/basic-api/getPermCode", + url: "/dev-api/getPermCode", timeout: 200, method: "get", response: (request: requestParams) => { @@ -98,7 +98,7 @@ export default [ }, }, { - url: "/basic-api/logout", + url: "/dev-api/logout", timeout: 200, method: "get", response: (request: requestParams) => { -- Gitee From 1c9b178c0bcad412aae9934080f7c7830329af53 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Tue, 23 Aug 2022 08:25:35 +0800 Subject: [PATCH 04/12] =?UTF-8?q?fix:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 12 +- .github/workflows/deploy.yml | 2 +- .github/workflows/ftp-schedule.yml | 4 +- .gitignore | 4 + .gitpod.yml | 4 +- .husky/lintstagedrc.js | 8 - .yarnclean | 48 - LICENSE | 2 +- build/generate/icon/index.ts | 48 +- build/script/buildConf.ts | 24 +- build/script/postBuild.ts | 12 +- build/vite/optimizer.ts | 21 - build/vite/plugin/compress.ts | 22 +- build/vite/plugin/hmr.ts | 25 - build/vite/plugin/html.ts | 16 +- build/vite/plugin/index.ts | 46 +- build/vite/plugin/styleImport.ts | 105 +- build/vite/plugin/svgSprite.ts | 10 +- build/vite/plugin/theme.ts | 82 +- commitlint.config.js | 74 + docs/.nojekyll | 0 docs/README.md | 7 - docs/_coverpage.md | 7 - docs/_images/logo.svg | 14 - docs/_images/tutor.jpg | Bin 110496 -> 0 bytes docs/_media/favicon.ico | Bin 4286 -> 0 bytes docs/_sidebar.md | 13 - docs/index.html | 47 - docs/introduce.md | 1 - index.html | 31 +- jest.config.mjs | 36 - mock/_util.ts | 22 +- mock/demo/api-cascader.ts | 325 ++ mock/demo/select-demo.ts | 28 + mock/demo/system.ts | 202 + mock/demo/table-demo.ts | 52 + mock/demo/tree-demo.ts | 38 + mock/student/practice.ts | 4 +- mock/sys/user.ts | 8 + package.json | 200 +- src/App.vue | 1 + src/api/sys/user.ts | 14 + .../Application/src/AppLocalePicker.vue | 4 +- src/components/CardList/src/CardList.vue | 166 +- src/components/CardList/src/data.ts | 2 +- .../CodeEditor/src/codemirror/codemirror.css | 8 +- .../src/collapse/CollapseContainer.vue | 11 +- .../ContextMenu/src/ContextMenu.vue | 24 +- src/components/ContextMenu/src/typing.ts | 1 + src/components/Cropper/src/CropperAvatar.vue | 2 +- .../Description/src/Description.vue | 5 +- src/components/Drawer/src/BasicDrawer.vue | 2 +- .../Drawer/src/components/DrawerFooter.vue | 2 +- src/components/Drawer/src/typing.ts | 3 +- src/components/Excel/src/Export2Excel.ts | 2 +- src/components/Excel/src/ImportExcel.vue | 11 +- src/components/Form/index.ts | 2 + src/components/Form/src/BasicForm.vue | 21 +- src/components/Form/src/componentMap.ts | 4 + .../Form/src/components/ApiCascader.vue | 5 +- .../Form/src/components/ApiSelect.vue | 17 +- .../Form/src/components/ApiTransfer.vue | 135 + .../Form/src/components/ApiTree.vue | 90 + .../Form/src/components/FormItem.vue | 26 +- src/components/Form/src/helper.ts | 2 + src/components/Form/src/hooks/useAdvanced.ts | 7 +- .../Form/src/hooks/useFormEvents.ts | 66 +- .../Form/src/hooks/useFormValues.ts | 54 +- .../Form/src/hooks/useLabelWidth.ts | 9 +- src/components/Form/src/props.ts | 3 +- src/components/Form/src/types/form.ts | 7 +- src/components/Form/src/types/index.ts | 4 +- src/components/Markdown/src/Markdown.vue | 17 +- .../Markdown/src/MarkdownViewer.vue | 65 +- src/components/Markdown/src/getTheme.ts | 19 + src/components/Menu/src/BasicMenu.vue | 2 +- src/components/Menu/src/index.less | 2 +- src/components/Modal/src/components/Modal.tsx | 8 +- src/components/Modal/src/index.less | 4 +- src/components/Page/src/PageWrapper.vue | 7 +- .../SimpleMenu/src/SimpleSubMenu.vue | 5 +- .../SimpleMenu/src/components/SubMenuItem.vue | 2 +- .../SimpleMenu/src/components/menu.less | 18 +- src/components/SimpleMenu/src/index.less | 4 +- src/components/Table/index.ts | 1 + src/components/Table/src/BasicTable.vue | 36 +- src/components/Table/src/componentMap.ts | 2 + .../Table/src/components/ExpandIcon.tsx | 23 - .../Table/src/components/HeaderCell.vue | 2 +- .../Table/src/components/TableAction.vue | 29 +- .../src/components/editable/EditableCell.vue | 171 +- .../Table/src/components/editable/helper.ts | 2 +- .../src/components/settings/ColumnSetting.vue | 69 +- .../src/components/settings/SizeSetting.vue | 2 +- src/components/Table/src/hooks/useColumns.ts | 36 +- .../Table/src/hooks/useDataSource.ts | 31 +- .../Table/src/hooks/useRowSelection.ts | 3 - src/components/Table/src/hooks/useScrollTo.ts | 55 + src/components/Table/src/hooks/useTable.ts | 6 + .../Table/src/hooks/useTableExpand.ts | 9 +- .../Table/src/hooks/useTableFooter.ts | 7 +- .../Table/src/hooks/useTableScroll.ts | 59 +- src/components/Table/src/props.ts | 28 +- .../Table/src/types/componentType.ts | 1 + src/components/Table/src/types/pagination.ts | 18 +- src/components/Table/src/types/table.ts | 30 +- src/components/Table/src/types/tableAction.ts | 13 + src/components/Tree/index.ts | 5 +- .../Tree/src/{Tree.vue => BasicTree.vue} | 241 +- src/components/Tree/src/TreeHeader.vue | 183 - src/components/Tree/src/TreeIcon.ts | 8 +- .../Tree/src/components/TreeHeader.vue | 170 + .../Tree/src/{ => hooks}/useTree.ts | 72 +- .../Tree/src/{props.ts => types/tree.ts} | 186 +- src/components/Tree/src/typing.ts | 54 - src/components/Tree/style/index.less | 52 + src/components/Tree/style/index.ts | 1 + src/components/Upload/src/BasicUpload.vue | 13 +- src/components/Upload/src/UploadModal.vue | 13 +- .../Upload/src/UploadPreviewModal.vue | 2 +- src/components/registerGlobComp.ts | 13 +- src/design/ant/btn.less | 44 +- src/design/ant/index.less | 12 +- src/design/ant/input.less | 7 +- src/design/ant/pagination.less | 2 +- src/design/ant/table.less | 2 +- src/design/config.less | 4 +- src/design/index.less | 16 +- src/design/public.less | 2 +- src/design/theme.less | 4 +- src/design/transition/fade.less | 30 +- src/design/transition/index.less | 12 +- src/design/transition/scale.less | 4 +- src/design/transition/scroll.less | 8 +- src/design/transition/slide.less | 8 +- src/design/transition/zoom.less | 6 +- src/design/var/index.less | 6 +- src/directives/loading.ts | 4 +- src/enums/appEnum.ts | 6 +- src/enums/httpEnum.ts | 6 +- src/hooks/core/useContext.ts | 1 - src/hooks/event/useWindowSizeFn.ts | 3 +- src/hooks/setting/useMenuSetting.ts | 8 +- src/hooks/web/useECharts.ts | 7 +- src/hooks/web/usePage.ts | 27 +- src/hooks/web/usePermission.ts | 1 + src/hooks/web/useTabs.ts | 2 +- src/layouts/default/feature/index.vue | 4 +- .../default/header/components/Breadcrumb.vue | 4 +- .../header/components/lock/LockModal.vue | 3 + .../components/user-dropdown/DropMenuItem.vue | 1 + .../header/components/user-dropdown/index.vue | 5 +- src/layouts/default/header/index.less | 12 +- src/layouts/default/setting/SettingDrawer.tsx | 2 +- src/layouts/default/sider/MixSider.vue | 2 +- src/layouts/default/sider/useLayoutSider.ts | 14 +- .../default/tabs/components/TabContent.vue | 8 +- src/layouts/default/tabs/index.less | 78 +- src/layouts/default/tabs/index.vue | 4 +- src/layouts/default/tabs/useMultipleTabs.ts | 4 +- src/layouts/page/index.vue | 4 +- src/locales/lang/en.ts | 5 +- src/locales/lang/en/routes/demo.ts | 3 + .../lang/zh-CN/antdLocale/DatePicker.ts | 19 + src/locales/lang/zh-CN/routes/demo.ts | 3 + src/locales/lang/zh-CN/routes/model.ts | 3 + src/locales/lang/zh_CN.ts | 3 - src/locales/useLocale.ts | 9 +- src/main.ts | 18 +- src/router/helper/menuHelper.ts | 11 + src/router/helper/routeHelper.ts | 16 +- src/router/index.ts | 5 + src/router/routes/index.ts | 14 +- src/router/routes/mainOut.ts | 12 - src/router/routes/modules/about.ts | 4 +- .../routes/modules/{ => student}/practice.ts | 19 +- src/settings/projectSetting.ts | 4 +- src/store/modules/permission.ts | 43 +- src/utils/bem.ts | 52 + src/utils/cache/memory.ts | 7 +- src/utils/cache/storageCache.ts | 15 +- src/utils/dateUtil.ts | 17 +- src/utils/factory/createAsyncComponent.tsx | 2 +- src/utils/file/base64Conver.ts | 2 +- src/utils/helper/treeHelper.ts | 29 +- src/utils/helper/tsxHelper.tsx | 2 +- src/utils/http/axios/Axios.ts | 20 +- src/utils/http/axios/axiosRetry.ts | 28 + src/utils/http/axios/axiosTransform.ts | 6 +- src/utils/http/axios/helper.ts | 3 +- src/utils/http/axios/index.ts | 40 +- src/utils/index.ts | 1 + src/utils/is.ts | 2 +- src/utils/lib/echarts.ts | 2 + src/utils/props.ts | 185 + src/utils/types.ts | 42 + .../analysis/components/GrowCard.vue | 7 +- .../analysis/components/SalesProductPie.vue | 1 + .../analysis/components/SiteAnalysis.vue | 2 +- .../analysis/components/VisitAnalysis.vue | 25 +- .../analysis/components/VisitAnalysisBar.vue | 19 +- .../analysis/components/VisitRadar.vue | 20 +- .../analysis/components/VisitSource.vue | 1 + .../workbench/components/ProjectCard.vue | 24 +- .../workbench/components/QuickNav.vue | 14 +- .../workbench/components/SaleRadar.vue | 18 +- .../practice/practice-record/index.vue | 3 + .../practice-lecture-record/description.vue | 36 + .../practice-lecture-record/index.vue | 37 +- src/views/sys/error-log/index.vue | 21 +- src/views/sys/lock/useNow.ts | 9 +- src/views/sys/login/Login.vue | 16 +- src/views/sys/login/LoginForm.vue | 2 +- stylelint.config.js | 104 +- tests/__mocks__/fileMock.ts | 1 - tests/__mocks__/styleMock.ts | 1 - tests/__mocks__/workerMock.ts | 5 - tests/server/README.md | 4 +- tests/server/package.json | 16 +- tests/server/yarn.lock | 1190 +++--- tests/test.spec.ts | 16 - tsconfig.json | 5 +- types/axios.d.ts | 13 +- types/config.d.ts | 11 +- types/module.d.ts | 16 +- vite.config.ts | 70 +- windi.config.ts | 46 +- yarn.lock | 3738 +++++------------ 228 files changed, 5272 insertions(+), 5355 deletions(-) delete mode 100644 .husky/lintstagedrc.js delete mode 100644 .yarnclean delete mode 100644 build/vite/optimizer.ts delete mode 100644 build/vite/plugin/hmr.ts delete mode 100644 docs/.nojekyll delete mode 100644 docs/README.md delete mode 100644 docs/_coverpage.md delete mode 100644 docs/_images/logo.svg delete mode 100644 docs/_images/tutor.jpg delete mode 100644 docs/_media/favicon.ico delete mode 100644 docs/_sidebar.md delete mode 100644 docs/index.html delete mode 100644 docs/introduce.md delete mode 100644 jest.config.mjs create mode 100644 mock/demo/api-cascader.ts create mode 100644 mock/demo/select-demo.ts create mode 100644 mock/demo/system.ts create mode 100644 mock/demo/table-demo.ts create mode 100644 mock/demo/tree-demo.ts create mode 100644 src/components/Form/src/components/ApiTransfer.vue create mode 100644 src/components/Form/src/components/ApiTree.vue create mode 100644 src/components/Markdown/src/getTheme.ts delete mode 100644 src/components/Table/src/components/ExpandIcon.tsx create mode 100644 src/components/Table/src/hooks/useScrollTo.ts rename src/components/Tree/src/{Tree.vue => BasicTree.vue} (68%) delete mode 100644 src/components/Tree/src/TreeHeader.vue create mode 100644 src/components/Tree/src/components/TreeHeader.vue rename src/components/Tree/src/{ => hooks}/useTree.ts (78%) rename src/components/Tree/src/{props.ts => types/tree.ts} (30%) delete mode 100644 src/components/Tree/src/typing.ts create mode 100644 src/components/Tree/style/index.less create mode 100644 src/components/Tree/style/index.ts create mode 100644 src/locales/lang/zh-CN/antdLocale/DatePicker.ts create mode 100644 src/locales/lang/zh-CN/routes/model.ts delete mode 100644 src/router/routes/mainOut.ts rename src/router/routes/modules/{ => student}/practice.ts (55%) create mode 100644 src/utils/bem.ts create mode 100644 src/utils/http/axios/axiosRetry.ts create mode 100644 src/utils/props.ts create mode 100644 src/utils/types.ts create mode 100644 src/views/student/practice/practice-record/practice-lecture-record/description.vue delete mode 100644 tests/__mocks__/fileMock.ts delete mode 100644 tests/__mocks__/styleMock.ts delete mode 100644 tests/__mocks__/workerMock.ts delete mode 100644 tests/test.spec.ts diff --git a/.eslintrc.js b/.eslintrc.js index 909011b..7f10db3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,4 @@ -// @ts-check -const { defineConfig } = require("eslint-define-config"); -module.exports = defineConfig({ +module.exports = { root: true, env: { browser: true, @@ -20,9 +18,7 @@ module.exports = defineConfig({ extends: [ "plugin:vue/vue3-recommended", "plugin:@typescript-eslint/recommended", - "prettier", "plugin:prettier/recommended", - "plugin:jest/recommended", ], rules: { "vue/script-setup-uses-vars": "error", @@ -55,8 +51,6 @@ module.exports = defineConfig({ "space-before-function-paren": "off", "vue/attributes-order": "off", - "vue/v-on-event-hyphenation": "off", - "vue/multi-word-component-names": "off", "vue/one-component-per-file": "off", "vue/html-closing-bracket-newline": "off", "vue/max-attributes-per-line": "off", @@ -64,6 +58,7 @@ module.exports = defineConfig({ "vue/singleline-html-element-content-newline": "off", "vue/attribute-hyphenation": "off", "vue/require-default-prop": "off", + "vue/require-explicit-emits": "off", "vue/html-self-closing": [ "error", { @@ -76,5 +71,6 @@ module.exports = defineConfig({ math: "always", }, ], + "vue/multi-word-component-names": "off", }, -}); +}; diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e231ff9..b974f5e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: - name: Sed Config Base shell: bash run: | - sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /vben-admin-thin-next/#g' ./.env.production + sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /vue-vben-admin/#g' ./.env.production sed -i "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production cat ./.env.production diff --git a/.github/workflows/ftp-schedule.yml b/.github/workflows/ftp-schedule.yml index 1681a24..6db8dc8 100644 --- a/.github/workflows/ftp-schedule.yml +++ b/.github/workflows/ftp-schedule.yml @@ -16,7 +16,7 @@ jobs: - name: Sed Config Base shell: bash run: | - sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /thin/next/#g' ./.env.production + sed -i 's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /next/#g' ./.env.production sed -i "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production sed -i "s#VITE_DROP_CONSOLE\s*=.*#VITE_DROP_CONSOLE = true#g" ./.env.production cat ./.env.production @@ -52,5 +52,5 @@ jobs: METHOD: sftp PORT: ${{ secrets.FTP_PORT }} LOCAL_DIR: dist - REMOTE_DIR: /srv/www/vben-admin-thin + REMOTE_DIR: /srv/www/vben-admin ARGS: --delete --verbose --parallel=80 diff --git a/.gitignore b/.gitignore index e73e570..d3bf44b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,7 @@ pnpm-debug.log* *.njsproj *.sln *.sw? + +package-lock.json +pnpm-lock.yaml + diff --git a/.gitpod.yml b/.gitpod.yml index 2191895..866381f 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -2,5 +2,5 @@ ports: - port: 3344 onOpen: open-preview tasks: - - init: yarn - command: yarn dev + - init: pnpm install + command: pnpm run dev diff --git a/.husky/lintstagedrc.js b/.husky/lintstagedrc.js deleted file mode 100644 index 017476c..0000000 --- a/.husky/lintstagedrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"], - "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"], - "package.json": ["prettier --write"], - "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"], - "*.{scss,less,styl,html}": ["stylelint --fix", "prettier --write"], - "*.md": ["prettier --write"], -}; diff --git a/.yarnclean b/.yarnclean deleted file mode 100644 index 3e556ef..0000000 --- a/.yarnclean +++ /dev/null @@ -1,48 +0,0 @@ -# test directories -__tests__ -test -tests -powered-test - -# asset directories -docs -doc -website -images -assets - -# examples -example -examples - -# code coverage directories -coverage -.nyc_output - -# build scripts -Makefile -Gulpfile.js -Gruntfile.js - -# configs -appveyor.yml -circle.yml -codeship-services.yml -codeship-steps.yml -wercker.yml -.tern-project -.gitattributes -.editorconfig -.*ignore -.eslintrc -.jshintrc -.flowconfig -.documentup.json -.yarn-metadata.json -.travis.yml - -# misc -*.md - -!istanbul-reports/lib/html/assets -!istanbul-api/node_modules/istanbul-reports/lib/html/assets diff --git a/LICENSE b/LICENSE index 635b3b5..ba2fe3b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021-2022 the original author or authors. +Copyright (c) 2020-present, Vben Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/build/generate/icon/index.ts b/build/generate/icon/index.ts index c78cb09..d71c447 100644 --- a/build/generate/icon/index.ts +++ b/build/generate/icon/index.ts @@ -1,13 +1,13 @@ -import path from 'path'; -import fs from 'fs-extra'; -import inquirer from 'inquirer'; -import chalk from 'chalk'; -import pkg from '../../../package.json'; +import path from "path"; +import fs from "fs-extra"; +import inquirer from "inquirer"; +import colors from "picocolors"; +import pkg from "../../../package.json"; async function generateIcon() { - const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json'); + const dir = path.resolve(process.cwd(), "node_modules/@iconify/json"); - const raw = await fs.readJSON(path.join(dir, 'collections.json')); + const raw = await fs.readJSON(path.join(dir, "collections.json")); const collections = Object.entries(raw).map(([id, v]) => ({ ...(v as any), @@ -19,25 +19,25 @@ async function generateIcon() { inquirer .prompt([ { - type: 'list', - name: 'useType', + type: "list", + name: "useType", choices: [ - { key: 'local', value: 'local', name: 'Local' }, - { key: 'onLine', value: 'onLine', name: 'OnLine' }, + { key: "local", value: "local", name: "Local" }, + { key: "onLine", value: "onLine", name: "OnLine" }, ], - message: 'How to use icons?', + message: "How to use icons?", }, { - type: 'list', - name: 'iconSet', + type: "list", + name: "iconSet", choices: choices, - message: 'Select the icon set that needs to be generated?', + message: "Select the icon set that needs to be generated?", }, { - type: 'input', - name: 'output', - message: 'Select the icon set that needs to be generated?', - default: 'src/components/Icon/data', + type: "input", + name: "output", + message: "Select the icon set that needs to be generated?", + default: "src/components/Icon/data", }, ]) .then(async (answers) => { @@ -47,12 +47,12 @@ async function generateIcon() { const genCollections = collections.filter((item) => [iconSet].includes(item.id)); const prefixSet: string[] = []; for (const info of genCollections) { - const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`)); + const data = await fs.readJSON(path.join(dir, "json", `${info.id}.json`)); if (data) { const { prefix } = data; - const isLocal = useType === 'local'; + const isLocal = useType === "local"; const icons = Object.keys(data.icons).map( - (item) => `${isLocal ? prefix + ':' : ''}${item}`, + (item) => `${isLocal ? prefix + ":" : ""}${item}`, ); await fs.writeFileSync( @@ -62,9 +62,9 @@ async function generateIcon() { prefixSet.push(prefix); } } - fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite')); + fs.emptyDir(path.join(process.cwd(), "node_modules/.vite")); console.log( - `✨ ${chalk.cyan(`[${pkg.name}]`)}` + ' - Icon generated successfully:' + `[${prefixSet}]`, + `✨ ${colors.cyan(`[${pkg.name}]`)}` + " - Icon generated successfully:" + `[${prefixSet}]`, ); }); } diff --git a/build/script/buildConf.ts b/build/script/buildConf.ts index 342c154..63d0ec0 100644 --- a/build/script/buildConf.ts +++ b/build/script/buildConf.ts @@ -1,14 +1,14 @@ /** * Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging */ -import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant'; -import fs, { writeFileSync } from 'fs-extra'; -import chalk from 'chalk'; +import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from "../constant"; +import fs, { writeFileSync } from "fs-extra"; +import colors from "picocolors"; -import { getEnvConfig, getRootPath } from '../utils'; -import { getConfigFileName } from '../getConfigFileName'; +import { getEnvConfig, getRootPath } from "../utils"; +import { getConfigFileName } from "../getConfigFileName"; -import pkg from '../../package.json'; +import pkg from "../../package.json"; interface CreateConfigParams { configName: string; @@ -21,20 +21,22 @@ function createConfig(params: CreateConfigParams) { try { const windowConf = `window.${configName}`; // Ensure that the variable will not be modified - const configStr = `${windowConf}=${JSON.stringify(config)}; + let configStr = `${windowConf}=${JSON.stringify(config)};`; + configStr += ` Object.freeze(${windowConf}); Object.defineProperty(window, "${configName}", { configurable: false, writable: false, }); - `.replace(/\s/g, ''); + `.replace(/\s/g, ""); + fs.mkdirp(getRootPath(OUTPUT_DIR)); writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr); - console.log(chalk.cyan(`✨ [${pkg.name}]`) + ` - configuration file is build successfully:`); - console.log(chalk.gray(OUTPUT_DIR + '/' + chalk.green(configFileName)) + '\n'); + console.log(colors.cyan(`✨ [${pkg.name}]`) + ` - configuration file is build successfully:`); + console.log(colors.gray(OUTPUT_DIR + "/" + colors.green(configFileName)) + "\n"); } catch (error) { - console.log(chalk.red('configuration file configuration file failed to package:\n' + error)); + console.log(colors.red("configuration file configuration file failed to package:\n" + error)); } } diff --git a/build/script/postBuild.ts b/build/script/postBuild.ts index e1554bf..3f7e628 100644 --- a/build/script/postBuild.ts +++ b/build/script/postBuild.ts @@ -1,22 +1,22 @@ // #!/usr/bin/env node -import { runBuildConfig } from './buildConf'; -import chalk from 'chalk'; +import { runBuildConfig } from "./buildConf"; +import colors from "picocolors"; -import pkg from '../../package.json'; +import pkg from "../../package.json"; export const runBuild = async () => { try { const argvList = process.argv.splice(2); // Generate configuration file - if (!argvList.includes('disabled-config')) { + if (!argvList.includes("disabled-config")) { runBuildConfig(); } - console.log(`✨ ${chalk.cyan(`[${pkg.name}]`)}` + ' - build successfully!'); + console.log(`✨ ${colors.cyan(`[${pkg.name}]`)}` + " - build successfully!"); } catch (error) { - console.log(chalk.red('vite build error:\n' + error)); + console.log(colors.red("vite build error:\n" + error)); process.exit(1); } }; diff --git a/build/vite/optimizer.ts b/build/vite/optimizer.ts deleted file mode 100644 index 8bb0fec..0000000 --- a/build/vite/optimizer.ts +++ /dev/null @@ -1,21 +0,0 @@ -// TODO -import type { GetManualChunk } from 'rollup'; - -// -const vendorLibs: { match: string[]; output: string }[] = [ - // { - // match: ['xlsx'], - // output: 'xlsx', - // }, -]; - -// @ts-ignore -export const configManualChunk: GetManualChunk = (id: string) => { - if (/[\\/]node_modules[\\/]/.test(id)) { - const matchItem = vendorLibs.find((item) => { - const reg = new RegExp(`[\\/]node_modules[\\/]_?(${item.match.join('|')})(.*)`, 'ig'); - return reg.test(id); - }); - return matchItem ? matchItem.output : null; - } -}; diff --git a/build/vite/plugin/compress.ts b/build/vite/plugin/compress.ts index 3ad32be..a5c89dc 100644 --- a/build/vite/plugin/compress.ts +++ b/build/vite/plugin/compress.ts @@ -2,31 +2,31 @@ * Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated * https://github.com/anncwb/vite-plugin-compression */ -import type { Plugin } from 'vite'; -import compressPlugin from 'vite-plugin-compression'; +import type { PluginOption } from "vite"; +import compressPlugin from "vite-plugin-compression"; export function configCompressPlugin( - compress: 'gzip' | 'brotli' | 'none', + compress: "gzip" | "brotli" | "none", deleteOriginFile = false, -): Plugin | Plugin[] { - const compressList = compress.split(','); +): PluginOption | PluginOption[] { + const compressList = compress.split(","); - const plugins: Plugin[] = []; + const plugins: PluginOption[] = []; - if (compressList.includes('gzip')) { + if (compressList.includes("gzip")) { plugins.push( compressPlugin({ - ext: '.gz', + ext: ".gz", deleteOriginFile, }), ); } - if (compressList.includes('brotli')) { + if (compressList.includes("brotli")) { plugins.push( compressPlugin({ - ext: '.br', - algorithm: 'brotliCompress', + ext: ".br", + algorithm: "brotliCompress", deleteOriginFile, }), ); diff --git a/build/vite/plugin/hmr.ts b/build/vite/plugin/hmr.ts deleted file mode 100644 index 807fdb9..0000000 --- a/build/vite/plugin/hmr.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Plugin } from 'vite'; - -/** - * TODO - * Temporarily solve the Vite circular dependency problem, and wait for a better solution to fix it later. I don't know what problems this writing will bring. - * @returns - */ - -export function configHmrPlugin(): Plugin { - return { - name: 'singleHMR', - handleHotUpdate({ modules, file }) { - if (file.match(/xml$/)) return []; - - modules.forEach((m) => { - if (!m.url.match(/\.(css|less)/)) { - m.importedModules = new Set(); - m.importers = new Set(); - } - }); - - return modules; - }, - }; -} diff --git a/build/vite/plugin/html.ts b/build/vite/plugin/html.ts index 848190b..811fde6 100644 --- a/build/vite/plugin/html.ts +++ b/build/vite/plugin/html.ts @@ -2,21 +2,21 @@ * Plugin to minimize and use ejs template syntax in index.html. * https://github.com/anncwb/vite-plugin-html */ -import type { Plugin } from 'vite'; -import html from 'vite-plugin-html'; -import pkg from '../../../package.json'; -import { GLOB_CONFIG_FILE_NAME } from '../../constant'; +import type { PluginOption } from "vite"; +import { createHtmlPlugin } from "vite-plugin-html"; +import pkg from "../../../package.json"; +import { GLOB_CONFIG_FILE_NAME } from "../../constant"; export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) { const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env; - const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`; + const path = VITE_PUBLIC_PATH.endsWith("/") ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`; const getAppConfigSrc = () => { - return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`; + return `${path || "/"}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`; }; - const htmlPlugin: Plugin[] = html({ + const htmlPlugin: PluginOption[] = createHtmlPlugin({ minify: isBuild, inject: { // Inject data into ejs template @@ -27,7 +27,7 @@ export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) { tags: isBuild ? [ { - tag: 'script', + tag: "script", attrs: { src: getAppConfigSrc(), }, diff --git a/build/vite/plugin/index.ts b/build/vite/plugin/index.ts index 9c0924a..25e9fd5 100644 --- a/build/vite/plugin/index.ts +++ b/build/vite/plugin/index.ts @@ -1,20 +1,20 @@ -import type { Plugin } from 'vite'; -import vue from '@vitejs/plugin-vue'; -import vueJsx from '@vitejs/plugin-vue-jsx'; -import legacy from '@vitejs/plugin-legacy'; -import purgeIcons from 'vite-plugin-purge-icons'; -import windiCSS from 'vite-plugin-windicss'; -import vueSetupExtend from 'vite-plugin-vue-setup-extend'; -import { configHtmlPlugin } from './html'; -import { configPwaConfig } from './pwa'; -import { configMockPlugin } from './mock'; -import { configCompressPlugin } from './compress'; -import { configStyleImportPlugin } from './styleImport'; -import { configVisualizerConfig } from './visualizer'; -import { configThemePlugin } from './theme'; -import { configImageminPlugin } from './imagemin'; -import { configSvgIconsPlugin } from './svgSprite'; -import { configHmrPlugin } from './hmr'; +import { PluginOption } from "vite"; +import vue from "@vitejs/plugin-vue"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +import legacy from "@vitejs/plugin-legacy"; +import purgeIcons from "vite-plugin-purge-icons"; +import windiCSS from "vite-plugin-windicss"; +import VitePluginCertificate from "vite-plugin-mkcert"; +import vueSetupExtend from "vite-plugin-vue-setup-extend"; +import { configHtmlPlugin } from "./html"; +import { configPwaConfig } from "./pwa"; +import { configMockPlugin } from "./mock"; +import { configCompressPlugin } from "./compress"; +import { configStyleImportPlugin } from "./styleImport"; +import { configVisualizerConfig } from "./visualizer"; +import { configThemePlugin } from "./theme"; +import { configImageminPlugin } from "./imagemin"; +import { configSvgIconsPlugin } from "./svgSprite"; export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { const { @@ -25,21 +25,21 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE, } = viteEnv; - const vitePlugins: (Plugin | Plugin[])[] = [ + const vitePlugins: (PluginOption | PluginOption[])[] = [ // have to vue(), // have to vueJsx(), // support name vueSetupExtend(), + VitePluginCertificate({ + source: "coding", + }), ]; // vite-plugin-windicss vitePlugins.push(windiCSS()); - // TODO - !isBuild && vitePlugins.push(configHmrPlugin()); - // @vitejs/plugin-legacy VITE_LEGACY && isBuild && vitePlugins.push(legacy()); @@ -61,12 +61,12 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { // rollup-plugin-visualizer vitePlugins.push(configVisualizerConfig()); - //vite-plugin-theme + // vite-plugin-theme vitePlugins.push(configThemePlugin(isBuild)); // The following plugins only work in the production environment if (isBuild) { - //vite-plugin-imagemin + // vite-plugin-imagemin VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin()); // rollup-plugin-gzip diff --git a/build/vite/plugin/styleImport.ts b/build/vite/plugin/styleImport.ts index 111a3fa..11c1d1c 100644 --- a/build/vite/plugin/styleImport.ts +++ b/build/vite/plugin/styleImport.ts @@ -2,71 +2,74 @@ * Introduces component library styles on demand. * https://github.com/anncwb/vite-plugin-style-import */ -import styleImport from 'vite-plugin-style-import'; +import { createStyleImportPlugin } from "vite-plugin-style-import"; -export function configStyleImportPlugin(isBuild: boolean) { - if (!isBuild) { - return []; - } - const styleImportPlugin = styleImport({ +export function configStyleImportPlugin(_isBuild: boolean) { + // if (!isBuild) { + // return []; + // } + const styleImportPlugin = createStyleImportPlugin({ libs: [ { - libraryName: 'ant-design-vue', + libraryName: "ant-design-vue", esModule: true, resolveStyle: (name) => { // 这里是无需额外引入样式文件的“子组件”列表 const ignoreList = [ - 'anchor-link', - 'sub-menu', - 'menu-item', - 'menu-item-group', - 'breadcrumb-item', - 'breadcrumb-separator', - 'form-item', - 'step', - 'select-option', - 'select-opt-group', - 'card-grid', - 'card-meta', - 'collapse-panel', - 'descriptions-item', - 'list-item', - 'list-item-meta', - 'table-column', - 'table-column-group', - 'tab-pane', - 'tab-content', - 'timeline-item', - 'tree-node', - 'skeleton-input', - 'skeleton-avatar', - 'skeleton-title', - 'skeleton-paragraph', - 'skeleton-image', - 'skeleton-button', + "anchor-link", + "sub-menu", + "menu-item", + "menu-divider", + "menu-item-group", + "breadcrumb-item", + "breadcrumb-separator", + "form-item", + "step", + "select-option", + "select-opt-group", + "card-grid", + "card-meta", + "collapse-panel", + "descriptions-item", + "list-item", + "list-item-meta", + "table-column", + "table-column-group", + "tab-pane", + "tab-content", + "timeline-item", + "tree-node", + "skeleton-input", + "skeleton-avatar", + "skeleton-title", + "skeleton-paragraph", + "skeleton-image", + "skeleton-button", ]; // 这里是需要额外引入样式的子组件列表 // 单独引入子组件时需引入组件样式,否则会在打包后导致子组件样式丢失 const replaceList = { - 'typography-text': 'typography', - 'typography-title': 'typography', - 'typography-paragraph': 'typography', - 'typography-link': 'typography', - 'dropdown-button': 'dropdown', - 'input-password': 'input', - 'input-search': 'input', - 'input-group': 'input', - 'radio-group': 'radio', - 'checkbox-group': 'checkbox', - 'layout-sider': 'layout', - 'layout-content': 'layout', - 'layout-footer': 'layout', - 'layout-header': 'layout', - 'month-picker': 'date-picker', + "typography-text": "typography", + "typography-title": "typography", + "typography-paragraph": "typography", + "typography-link": "typography", + "dropdown-button": "dropdown", + "input-password": "input", + "input-search": "input", + "input-group": "input", + "radio-group": "radio", + "checkbox-group": "checkbox", + "layout-sider": "layout", + "layout-content": "layout", + "layout-footer": "layout", + "layout-header": "layout", + "month-picker": "date-picker", + "range-picker": "date-picker", + "image-preview-group": "image", }; return ignoreList.includes(name) - ? '' + ? "" : replaceList.hasOwnProperty(name) ? `ant-design-vue/es/${replaceList[name]}/style/index` : `ant-design-vue/es/${name}/style/index`; diff --git a/build/vite/plugin/svgSprite.ts b/build/vite/plugin/svgSprite.ts index 3817acb..82077b4 100644 --- a/build/vite/plugin/svgSprite.ts +++ b/build/vite/plugin/svgSprite.ts @@ -3,15 +3,15 @@ * https://github.com/anncwb/vite-plugin-svg-icons */ -import SvgIconsPlugin from 'vite-plugin-svg-icons'; -import path from 'path'; +import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; +import path from "path"; export function configSvgIconsPlugin(isBuild: boolean) { - const svgIconsPlugin = SvgIconsPlugin({ - iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], + const svgIconsPlugin = createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), "src/assets/icons")], svgoOptions: isBuild, // default - symbolId: 'icon-[dir]-[name]', + symbolId: "icon-[dir]-[name]", }); return svgIconsPlugin; } diff --git a/build/vite/plugin/theme.ts b/build/vite/plugin/theme.ts index c54f1a8..7e5232a 100644 --- a/build/vite/plugin/theme.ts +++ b/build/vite/plugin/theme.ts @@ -2,19 +2,19 @@ * Vite plugin for website theme color switching * https://github.com/anncwb/vite-plugin-theme */ -import type { Plugin } from 'vite'; -import path from 'path'; +import type { PluginOption } from "vite"; +import path from "path"; import { viteThemePlugin, antdDarkThemePlugin, mixLighten, mixDarken, tinycolor, -} from 'vite-plugin-theme'; -import { getThemeColors, generateColors } from '../../config/themeConfig'; -import { generateModifyVars } from '../../generate/generateModifyVars'; +} from "vite-plugin-theme"; +import { getThemeColors, generateColors } from "../../config/themeConfig"; +import { generateModifyVars } from "../../generate/generateModifyVars"; -export function configThemePlugin(isBuild: boolean): Plugin[] { +export function configThemePlugin(isBuild: boolean): PluginOption[] { const colors = generateColors({ mixDarken, mixLighten, @@ -25,65 +25,65 @@ export function configThemePlugin(isBuild: boolean): Plugin[] { resolveSelector: (s) => { s = s.trim(); switch (s) { - case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon': - return '.ant-steps-item-icon > .ant-steps-icon'; - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)': - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover': - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active': + case ".ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon": + return ".ant-steps-item-icon > .ant-steps-icon"; + case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)": + case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover": + case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active": return s; - case '.ant-steps-item-icon > .ant-steps-icon': + case ".ant-steps-item-icon > .ant-steps-icon": return s; - case '.ant-select-item-option-selected:not(.ant-select-item-option-disabled)': + case ".ant-select-item-option-selected:not(.ant-select-item-option-disabled)": return s; default: - if (s.indexOf('.ant-btn') >= -1) { + if (s.indexOf(".ant-btn") >= -1) { // 按钮被重新定制过,需要过滤掉class防止覆盖 return s; } } - return s.startsWith('[data-theme') ? s : `[data-theme] ${s}`; + return s.startsWith("[data-theme") ? s : `[data-theme] ${s}`; }, colorVariables: [...getThemeColors(), ...colors], }), antdDarkThemePlugin({ preloadFiles: [ - path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.less'), + path.resolve(process.cwd(), "node_modules/ant-design-vue/dist/antd.less"), //path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.dark.less'), - path.resolve(process.cwd(), 'src/design/index.less'), + path.resolve(process.cwd(), "src/design/index.less"), ], - filter: (id) => (isBuild ? !id.endsWith('antd.less') : true), + filter: (id) => (isBuild ? !id.endsWith("antd.less") : true), // extractCss: false, darkModifyVars: { ...generateModifyVars(true), - 'text-color': '#c9d1d9', - 'primary-1': 'rgb(255 255 255 / 8%)', - 'text-color-base': '#c9d1d9', - 'component-background': '#151515', - 'heading-color': 'rgb(255 255 255 / 65%)', + "text-color": "#c9d1d9", + "primary-1": "rgb(255 255 255 / 8%)", + "text-color-base": "#c9d1d9", + "component-background": "#151515", + "heading-color": "rgb(255 255 255 / 65%)", // black: '#0e1117', // #8b949e - 'text-color-secondary': '#8b949e', - 'border-color-base': '#303030', + "text-color-secondary": "#8b949e", + "border-color-base": "#303030", // 'border-color-split': '#30363d', - 'item-active-bg': '#111b26', - 'app-content-background': '#1e1e1e', - 'tree-node-selected-bg': '#11263c', + "item-active-bg": "#111b26", + "app-content-background": "#1e1e1e", + "tree-node-selected-bg": "#11263c", - 'alert-success-border-color': '#274916', - 'alert-success-bg-color': '#162312', - 'alert-success-icon-color': '#49aa19', - 'alert-info-border-color': '#153450', - 'alert-info-bg-color': '#111b26', - 'alert-info-icon-color': '#177ddc', - 'alert-warning-border-color': '#594214', - 'alert-warning-bg-color': '#2b2111', - 'alert-warning-icon-color': '#d89614', - 'alert-error-border-color': '#58181c', - 'alert-error-bg-color': '#2a1215', - 'alert-error-icon-color': '#a61d24', + "alert-success-border-color": "#274916", + "alert-success-bg-color": "#162312", + "alert-success-icon-color": "#49aa19", + "alert-info-border-color": "#153450", + "alert-info-bg-color": "#111b26", + "alert-info-icon-color": "#177ddc", + "alert-warning-border-color": "#594214", + "alert-warning-bg-color": "#2b2111", + "alert-warning-icon-color": "#d89614", + "alert-error-border-color": "#58181c", + "alert-error-bg-color": "#2a1215", + "alert-error-icon-color": "#a61d24", }, }), ]; - return plugin as unknown as Plugin[]; + return plugin as unknown as PluginOption[]; } diff --git a/commitlint.config.js b/commitlint.config.js index 76b2969..6a14a43 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,23 @@ +const fs = require("fs"); +const path = require("path"); +const { execSync } = require("child_process"); + +const scopes = fs + .readdirSync(path.resolve(__dirname, "src"), { withFileTypes: true }) + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => dirent.name.replace(/s$/, "")); + +// precomputed scope +const scopeComplete = execSync("git status --porcelain || true") + .toString() + .trim() + .split("\n") + .find((r) => ~r.indexOf("M src")) + ?.replace(/(\/)/g, "%%") + ?.match(/src%%((\w|-)*)/)?.[1] + ?.replace(/s$/, ""); + +/** @type {import('cz-git').UserConfig} */ module.exports = { ignores: [(commit) => commit.includes("init")], extends: ["@commitlint/config-conventional"], @@ -30,4 +50,58 @@ module.exports = { ], ], }, + prompt: { + /** @use `yarn commit :f` */ + alias: { + f: "docs: fix typos", + r: "docs: update README", + s: "style: update code format", + b: "build: bump dependencies", + c: "chore: update config", + }, + customScopesAlign: !scopeComplete ? "top" : "bottom", + defaultScope: scopeComplete, + scopes: [...scopes, "mock"], + allowEmptyIssuePrefixs: false, + allowCustomIssuePrefixs: false, + + // English + typesAppend: [ + { value: "wip", name: "wip: work in process" }, + { value: "workflow", name: "workflow: workflow improvements" }, + { value: "types", name: "types: type definition file changes" }, + ], + + // 中英文对照版 + // messages: { + // type: '选择你要提交的类型 :', + // scope: '选择一个提交范围 (可选):', + // customScope: '请输入自定义的提交范围 :', + // subject: '填写简短精炼的变更描述 :\n', + // body: '填写更加详细的变更描述 (可选)。使用 "|" 换行 :\n', + // breaking: '列举非兼容性重大的变更 (可选)。使用 "|" 换行 :\n', + // footerPrefixsSelect: '选择关联issue前缀 (可选):', + // customFooterPrefixs: '输入自定义issue前缀 :', + // footer: '列举关联issue (可选) 例如: #31, #I3244 :\n', + // confirmCommit: '是否提交或修改commit ?', + // }, + // types: [ + // { value: 'feat', name: 'feat: 新增功能' }, + // { value: 'fix', name: 'fix: 修复缺陷' }, + // { value: 'docs', name: 'docs: 文档变更' }, + // { value: 'style', name: 'style: 代码格式' }, + // { value: 'refactor', name: 'refactor: 代码重构' }, + // { value: 'perf', name: 'perf: 性能优化' }, + // { value: 'test', name: 'test: 添加疏漏测试或已有测试改动' }, + // { value: 'build', name: 'build: 构建流程、外部依赖变更 (如升级 npm 包、修改打包配置等)' }, + // { value: 'ci', name: 'ci: 修改 CI 配置、脚本' }, + // { value: 'revert', name: 'revert: 回滚 commit' }, + // { value: 'chore', name: 'chore: 对构建过程或辅助工具和库的更改 (不影响源文件、测试用例)' }, + // { value: 'wip', name: 'wip: 正在开发中' }, + // { value: 'workflow', name: 'workflow: 工作流程改进' }, + // { value: 'types', name: 'types: 类型定义文件修改' }, + // ], + // emptyScopesAlias: 'empty: 不填写', + // customScopesAlias: 'custom: 自定义', + }, }; diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 2008f81..0000000 --- a/docs/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# 简介 - -```java -class A { - // 测试 Java 代码高亮 -} -``` diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index b2b6e2d..0000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,7 +0,0 @@ -> **师范生学业指导系统使用手册** - -- 辅助师生高效完成工作 -- 记录导师制生活的点滴 - -[码云](https://gitee.com/Suomm/tutor) -[开始](#简介) diff --git a/docs/_images/logo.svg b/docs/_images/logo.svg deleted file mode 100644 index 130019d..0000000 --- a/docs/_images/logo.svg +++ /dev/null @@ -1,14 +0,0 @@ -<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 741 286" width="741" height="286"> - <title>template</title> - <defs> - <image width="52" height="50" id="img1" href="data:image/png;base64,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"/> - </defs> - <style> - tspan { white-space:pre } - .shp0 { fill: #2996f2 } - </style> - <path id="形状 1" class="shp0" d="M584.04 122.38C570.07 111.58 552.36 104.63 530.9 101.53C537.72 95.02 541.13 87.89 541.13 80.15C541.13 69.2 534.9 59.84 522.42 52.1C509.95 44.35 494.89 40.47 477.27 40.47C461.3 40.47 447.49 43.68 435.85 50.08C426.04 35.41 410.45 23.53 389.08 14.44C367.7 5.35 343.88 0.8 317.6 0.8C282.34 0.8 252.24 8.55 227.29 24.05C202.34 39.54 189.87 58.24 189.87 80.15C189.87 81.7 190.03 83.92 190.37 86.81C171.07 92.39 155.52 100.83 143.71 112.15C131.9 123.46 126 135.94 126 149.57C126 168.69 136.93 185.04 158.81 198.62C180.67 212.21 206.99 219 237.77 219L509.2 219C535.64 219 558.22 213.19 576.93 201.57C595.64 189.94 605 175.92 605 159.49C605 145.54 598.01 133.17 584.04 122.38Z" /> - <path id="Tutor " fill="#ffffff" aria-label="Tutor" d="M309.99 106.29L309.99 106.29Q309.99 110.7 306.68 113.07Q303.37 115.43 299.28 116.38Q298.02 116.69 296.76 116.85Q295.5 117.01 294.4 117.16Q292.98 117.32 291.56 117.48Q290.14 117.48 288.57 117.48Q286.05 117.48 283.21 117.32Q280.53 117.01 277.7 116.38Q276.91 116.22 275.96 116.06Q275.02 115.75 274.07 115.43Q273.6 116.22 273.29 117.16Q272.97 117.95 272.5 118.74Q272.18 119.68 271.87 120.63Q271.55 121.42 271.24 122.2Q270.61 123.94 269.98 125.83Q269.5 127.56 268.87 129.45Q268.4 131.03 267.77 132.76Q267.3 134.33 266.83 135.91Q262.42 148.83 256.27 160.96Q250.28 173.09 238.15 180.49Q229.81 185.38 219.41 187.58Q209.17 189.79 196.57 189.79Q193.57 189.79 190.11 189.47Q186.64 189.16 183.02 188.68Q174.67 186.95 167.74 182.54Q160.96 178.13 160.96 169.47Q160.96 162.53 165.37 157.49Q169.94 152.29 175.77 152.29Q177.98 152.29 180.18 153.24Q182.54 154.18 184.75 156.07Q185.06 156.39 185.22 156.71Q185.54 156.86 185.85 157.18Q186.01 157.49 186.17 157.81Q186.48 157.97 186.8 158.28Q184.91 160.33 183.17 162.85Q181.44 165.21 180.97 167.58Q180.81 168.21 180.81 168.68Q180.81 169.15 180.81 169.62Q180.81 171.2 181.6 172.93Q182.39 174.51 183.96 176.08Q185.85 177.81 188.06 178.76Q190.26 179.55 192.47 179.55Q193.1 179.55 193.57 179.55Q194.2 179.39 194.67 179.39Q198.14 178.76 201.29 176.87Q204.44 174.82 206.8 172.14Q210.27 168.05 213.58 161.59Q216.89 155.13 220.2 145.68Q220.35 145.36 220.35 145.05Q220.51 144.57 220.67 144.1Q221.46 141.74 222.24 139.22Q223.03 136.7 223.98 134.18Q226.5 126.46 230.28 119.21Q234.22 111.96 240.83 107.55Q239.26 106.92 237.52 106.61Q235.95 106.14 234.37 105.82Q232.8 105.51 231.07 105.35Q229.49 105.19 227.91 105.19Q222.72 105.35 217.83 106.77Q212.95 108.18 208.38 111.02Q203.18 114.49 199.4 119.84Q195.78 125.2 195.78 131.66Q195.78 132.29 195.78 133.07Q195.93 133.86 196.09 134.65Q196.57 137.33 197.67 138.9Q198.93 140.48 200.5 141.9Q201.29 142.53 201.92 143.16Q202.71 143.63 203.5 144.26Q203.18 144.42 202.87 144.57Q202.55 144.57 202.39 144.57Q201.61 144.89 200.82 145.2Q200.03 145.36 199.24 145.68Q197.2 146.31 194.99 146.78Q192.94 147.25 190.74 147.25Q189.63 147.25 188.22 147.1Q186.96 146.94 185.54 146.47Q179.08 144.57 175.46 138.75Q171.83 132.92 171.52 126.46Q171.52 126.14 171.52 125.83Q171.52 125.51 171.52 125.2Q171.52 123.46 171.67 121.89Q171.99 120.31 172.46 118.74Q174.35 112.75 179.39 108.03Q184.59 103.3 191.68 99.99Q198.14 97.31 205.23 96.05Q212.48 94.64 220.04 94.64Q228.39 94.64 236.58 96.21Q244.77 97.79 252.02 100.62Q255.64 98.26 260.05 97Q264.62 95.58 269.35 94.95Q272.66 94.48 275.81 94.32Q279.11 94.01 282.11 94.01Q284.31 94.01 287.62 94.16Q291.09 94.32 294.71 94.95Q300.38 95.9 305.11 98.42Q309.99 100.94 309.99 106.29ZM301.33 105.82L301.33 105.82Q301.64 105.35 301.8 105.03Q301.96 104.56 301.96 104.25Q301.96 103.14 300.54 102.67Q299.28 102.2 297.7 101.88Q296.76 101.72 295.81 101.72Q294.87 101.72 294.24 101.72Q293.92 101.72 293.61 101.72Q293.29 101.72 292.98 101.72Q289.35 102.2 285.89 104.25Q282.58 106.14 280.06 108.34Q282.11 108.97 284.94 109.44Q287.78 109.92 290.77 109.92Q293.92 109.92 296.76 108.97Q299.75 108.03 301.33 105.82ZM362.92 160.96L362.92 160.96Q362.77 161.27 362.45 161.75Q362.29 162.06 362.14 162.53Q359.46 167.89 356.15 173.09Q353 178.29 348.43 182.23Q344.02 185.85 338.51 187.9Q333.15 189.79 326.06 189.79Q319.29 189.79 314.24 186.64Q309.2 183.49 308.1 176.4Q302.74 182.07 295.5 186.01Q288.41 189.95 280.22 189.95Q271.71 189.95 267.61 184.9Q263.68 179.71 263.68 172.93Q263.68 170.57 264.15 168.21Q264.62 165.84 265.41 163.64Q266.83 159.7 268.09 155.92Q269.5 151.98 270.76 148.2Q272.02 144.26 273.29 140.48Q274.7 136.54 276.12 132.76L306.05 132.76Q304.48 137.17 302.9 141.58Q301.48 145.99 300.07 150.4Q298.49 154.81 296.92 159.23Q295.5 163.64 293.92 168.05Q293.76 168.68 293.45 169.47Q293.29 170.1 293.29 170.73Q293.29 171.67 293.76 172.3Q294.4 172.93 295.81 172.93Q297.39 172.93 299.59 171.83Q301.96 170.57 304.63 167.26Q308.1 163.32 310.46 158.12Q312.98 152.77 315.03 147.25Q315.82 144.73 316.61 142.21Q317.55 139.53 318.5 137.01Q318.66 136.38 318.81 135.91Q319.13 135.28 319.29 134.65Q319.29 134.33 319.29 134.18Q319.44 133.86 319.6 133.7Q319.6 133.55 319.6 133.55Q319.76 133.39 319.76 133.39Q319.76 133.23 319.76 133.07Q319.92 132.92 319.92 132.76Q322.44 132.76 324.8 132.76Q327.32 132.76 329.84 132.76Q334.72 132.76 339.61 132.76Q344.65 132.76 349.69 132.76Q348.12 137.01 346.54 141.42Q345.12 145.68 343.7 149.93Q342.29 154.34 340.71 158.75Q339.29 163.01 337.72 167.26Q337.25 168.52 337.09 169.62Q336.93 170.57 336.93 171.36Q336.93 172.62 337.4 173.25Q338.03 173.72 338.98 173.72Q339.92 173.72 341.03 173.25Q342.13 172.77 343.39 172.14Q344.18 171.51 344.96 170.88Q345.75 170.25 346.54 169.62Q349.53 166.94 351.42 163.95Q353.31 160.8 354.89 157.18L362.92 160.96ZM405.93 161.59L405.93 161.59Q405.62 162.38 405.14 163.16Q404.83 163.79 404.51 164.58Q401.99 169.62 399 174.35Q396.01 179.08 391.75 182.86Q387.81 186.32 382.3 188.37Q376.94 190.42 369.86 190.42Q369.54 190.42 369.22 190.42Q369.07 190.42 368.91 190.42Q364.5 190.26 360.4 188.68Q356.46 187.11 353.94 183.33Q352.37 180.97 351.58 178.29Q350.95 175.61 350.95 172.77Q350.95 171.99 350.95 171.36Q351.11 170.57 351.27 169.78Q351.58 167.58 352.05 165.37Q352.68 163.16 353.31 161.12Q354.26 158.6 355.05 156.07Q355.99 153.55 356.78 150.88Q357.57 148.36 358.35 145.84Q359.3 143.31 360.25 140.79L353.47 140.79L356.15 133.23L362.92 133.23Q363.71 130.87 364.5 128.66Q365.29 126.3 366.23 123.94Q367.02 121.73 367.81 119.53Q368.59 117.16 369.38 114.8Q374.58 114.01 379.78 113.38Q384.98 112.59 390.18 111.81Q392.7 111.49 395.38 111.18Q398.05 110.7 400.57 110.39Q399.63 113.23 398.53 116.06Q397.58 118.9 396.64 121.73Q395.69 124.57 394.59 127.56Q393.64 130.4 392.7 133.23L401.2 133.23L398.37 140.79L390.02 140.79Q388.92 144.1 387.66 147.57Q386.55 150.88 385.45 154.34Q384.19 157.81 383.09 161.27Q381.99 164.58 380.73 167.89Q380.41 168.99 380.09 170.1Q379.94 171.04 379.94 171.83Q379.94 173.25 380.57 173.88Q381.2 174.35 382.3 174.35Q383.25 174.35 384.35 173.88Q385.61 173.4 386.87 172.62Q387.5 172.14 388.13 171.67Q388.92 171.2 389.55 170.57Q392.54 167.89 394.43 164.58Q396.32 161.27 397.9 157.81L405.93 161.59ZM497.93 161.75L497.93 161.75Q496.99 163.64 495.73 166.31Q494.47 168.84 492.89 171.51Q489.9 176.71 485.49 181.12Q481.23 185.38 475.4 185.38Q473.04 185.38 470.84 184.75Q468.79 183.96 466.9 182.86Q460.75 187.9 452.4 190.73Q444.21 193.57 435.55 194.04Q434.92 194.04 434.13 194.04Q433.5 194.04 432.71 194.04Q424.52 194.04 416.96 191.68Q409.4 189.16 403.73 184.27Q399.16 180.18 397.11 175.61Q395.06 170.88 395.06 166.16Q395.06 158.75 399.47 151.98Q403.88 145.2 411.13 140.48Q417.43 136.38 425.31 134.02Q433.18 131.66 441.53 131.66Q442.79 131.66 443.9 131.81Q445.16 131.81 446.42 131.81Q453.19 132.44 459.65 134.81Q466.11 137.01 470.99 141.58Q475.25 145.36 477.45 150.25Q479.66 154.97 479.66 160.17Q479.66 162.06 479.34 163.95Q479.03 165.84 478.4 167.73Q480.6 167.42 482.18 166.63Q483.91 165.68 485.49 163.79Q486.43 162.85 487.38 161.43Q488.32 159.86 489.43 157.97L497.93 161.75ZM453.03 148.67L453.03 148.67Q452.88 143.79 451.14 141.74Q449.57 139.53 447.05 139.53Q445.47 139.53 443.58 140.48Q441.69 141.27 439.8 142.84Q439.01 143.47 438.23 144.26Q437.6 145.05 436.81 145.84Q433.18 150.09 430.98 155.6Q428.77 160.96 427.83 166.63Q427.67 168.52 427.51 170.41Q427.36 172.14 427.36 173.88Q427.36 174.82 427.36 176.24Q427.51 177.66 427.83 179.08Q428.3 181.75 429.4 183.96Q430.66 186.01 433.18 186.01Q437.12 186.01 440.12 183.33Q443.27 180.49 445.16 177.03Q445.63 176.24 446.1 175.61Q446.58 174.82 446.89 174.03Q444.37 172.3 442.95 169.78Q441.69 167.1 441.69 164.11Q441.69 163.79 441.69 163.48Q441.69 163.16 441.69 163.01Q442.16 158.28 445.16 154.18Q448.31 149.93 453.03 148.67ZM580.32 140.95L580.32 140.95Q580.64 141.9 580.64 142.84Q580.64 143.79 580.64 144.57Q580.64 150.4 577.02 153.87Q573.55 157.18 569.3 157.18Q569.14 157.18 568.98 157.18Q568.98 157.18 568.82 157.18Q565.52 157.18 562.52 154.97Q559.53 152.77 558.27 147.88Q557.8 146.47 557.01 145.84Q556.38 145.05 555.43 145.2Q553.86 145.2 551.81 147.1Q549.92 148.83 547.71 151.98Q543.93 156.86 541.25 162.85Q538.58 168.84 536.53 174.98Q535.58 177.66 534.8 180.18Q534.01 182.7 533.06 185.22Q532.75 186.16 532.43 187.11Q532.12 188.05 531.8 189L502.66 189L515.73 152.45Q516.05 151.82 516.05 151.35Q516.05 150.88 516.05 150.56Q516.05 148.83 514.63 148.36Q513.37 147.73 511.64 147.88Q507.54 148.36 504.39 151.66Q501.24 154.97 499.19 158.75Q498.72 159.54 498.25 160.49Q497.77 161.43 497.46 162.22L489.58 159.07Q493.68 148.36 501.56 139.85Q509.59 131.18 521.56 130.55Q522.67 130.4 523.77 130.4Q525.03 130.4 526.29 130.55Q531.49 130.87 536.21 133.23Q541.1 135.44 543.93 140.01Q547.4 137.49 551.18 135.28Q555.12 133.07 559.21 131.81Q561.1 131.18 562.84 131.03Q564.73 130.71 566.46 130.71Q568.82 130.71 571.03 131.34Q573.39 131.97 575.44 133.23Q577.49 134.65 578.59 136.7Q579.85 138.75 580.32 140.95Z" /> - <path id="Title" fill="#2996f2" aria-label="天津师范大学师范生学业指导系统" d="M35.19 283.54Q33.33 282.86 31.62 281.59Q29.96 280.32 27.72 277.92Q25.47 275.48 22.98 272.11Q20.49 268.74 17.95 265.23Q16.39 268.55 14.63 271.87Q12.87 275.19 11.12 277.29Q9.36 279.34 7.11 281.39Q5.74 282.76 3.74 282.76L2.77 282.27Q2.18 281.59 2.28 280.51L2.77 279.54Q4.72 278.56 6.92 276.17Q9.16 273.72 10.33 271.67Q11.51 269.62 12.38 267.87Q13.26 266.11 13.95 264.64Q14.63 263.18 15.02 261.62L5.11 261.71L4.13 261.22Q3.55 260.44 3.64 259.37L4.13 258.39L5.11 257.9L15.9 257.81Q16.1 255.66 16.29 253.51Q16.49 251.36 16.49 249.07L2.28 248.97Q1.5 248.87 0.91 248.38Q0.32 247.7 0.42 246.63L0.91 245.65L1.89 245.16L33.04 245.16Q34.41 245.16 35.58 245.84Q36.16 246.63 36.07 247.7L35.58 248.68Q34.8 249.36 33.63 249.16L20.29 249.07Q20.29 251.36 20.1 253.51Q19.9 255.66 19.71 257.81L30.26 257.81L31.28 258.29Q31.87 258.98 31.77 260.05L31.28 261.03Q30.6 261.52 29.77 261.62L20.69 261.62Q23.22 266.4 26.45 270.5Q29.67 274.6 37.04 280.32Q37.63 281 37.53 282.07L37.04 283.05Q36.26 283.64 35.19 283.54ZM75.67 284.81L74.69 284.32Q73.81 282.66 74.1 280.41L74.49 273.72Q71.08 274.02 68.78 274.07Q66.49 274.12 64.24 274.41L63.26 273.92Q62.58 273.14 62.68 272.06L63.17 271.09Q65.8 270.21 68.73 270.21Q71.66 270.21 74.49 269.92L74.4 267.38L70.69 267.47Q69.9 267.38 69.32 266.89Q68.73 266.21 68.83 265.13L69.32 264.15Q70.39 263.57 71.71 263.57Q73.03 263.57 74.3 263.57L74.3 261.42L68.24 261.42Q67.46 261.32 66.88 260.83Q66.29 260.15 66.39 259.08L66.88 258.1L67.85 257.61L74.2 257.61L74.1 254.58Q64.97 255.07 61.8 254.88Q60.92 253.8 61.02 252.73L61.51 251.75Q62.78 251.07 64.34 251.02Q65.9 250.97 73.91 250.78L74.01 248.68Q68.34 248.97 66.78 249.16L65.71 248.58Q65.12 247.8 65.22 246.72L65.71 245.75Q67.66 244.96 69.9 244.87L74.01 244.87Q73.71 243.11 74.59 241.74Q75.28 241.16 76.35 241.25L77.33 241.74Q78.11 243.11 77.81 244.87Q79.67 244.87 81.57 244.92Q83.53 244.96 84.7 245.11Q85.92 245.21 85.58 248.38L85.48 250.78L88.12 250.58L89.09 251.07Q89.68 251.85 89.58 252.92L89.09 253.9Q87.43 254.78 85.29 254.58L85.29 259.27Q85.24 260.74 84.26 260.83Q83.33 260.93 81.62 261.08Q79.96 261.22 78.21 261.32L78.11 263.57L83.53 263.47L84.5 263.96Q85.09 264.64 84.99 265.72L84.5 266.69Q83.14 267.38 81.48 267.38Q79.87 267.38 78.21 267.38L78.3 269.82L89.09 269.82L90.07 270.31Q90.66 270.99 90.56 272.06L90.07 273.04Q89.39 273.53 88.61 273.63L78.3 273.63Q78.11 276.31 78.06 279.05Q78.01 281.78 77.42 284.32Q76.74 284.91 75.67 284.81ZM50.62 284.13L49.45 284.22L48.47 283.73Q47.88 282.95 47.98 281.88L48.66 280.71Q50.32 279.24 52.08 277.83Q53.84 276.41 55.94 275.82L56.92 276.31Q57.5 277 57.4 278.07L56.72 279.14Q55.11 280.22 53.55 281.49Q51.98 282.76 50.62 284.13ZM56.53 259.27Q54.52 258.59 52.33 258.39Q50.13 258.2 48.18 257.61Q47.59 256.93 47.69 255.85L48.18 254.88Q49.45 254.1 51.2 254.39Q52.96 254.58 54.72 254.93Q56.53 255.27 58.09 255.95Q58.67 256.63 58.58 257.71L58.09 258.69Q57.4 259.17 56.53 259.27ZM78.01 257.51L81.48 257.32L81.48 254.58L77.91 254.58L78.01 257.51ZM77.72 250.78L81.57 250.78L81.67 248.68L77.81 248.68L77.72 250.78ZM57.4 249.46Q55.11 248.87 52.96 248.09Q50.81 247.31 48.66 246.43Q48.08 245.75 48.18 244.67L48.66 243.7Q49.45 243.01 50.62 243.21Q52.67 243.89 54.72 244.62Q56.82 245.36 58.87 246.14Q59.46 246.82 59.36 247.89L58.87 248.87Q58.19 249.36 57.4 249.46ZM102.28 283.83L101.3 283.34Q100.71 282.66 100.81 281.59Q101.3 280.41 102.18 279.63Q103.06 278.85 104.38 276.36Q105.74 273.82 106.33 270.36Q106.92 266.89 107.06 261.76Q107.26 256.59 106.82 243.99L107.31 243.01Q108.09 242.33 109.16 242.43L110.14 242.91Q110.72 244.09 110.68 245.45Q110.63 246.82 110.82 252.19Q111.02 257.51 110.87 262.84Q110.72 268.16 109.8 272.7Q108.87 277.19 104.96 282.46Q103.99 283.93 102.28 283.83ZM126.25 283.73L125.28 283.25Q124.79 282.66 124.69 281.88L124.4 257.9L117.85 258.1Q118.54 269.92 118.54 273.04L117.95 274.12Q117.27 274.7 116.19 274.6L115.22 274.12Q114.73 273.53 114.63 272.75L114.04 256.24Q114.24 255.17 115.12 254.58Q116 254 124.4 254.1L124.49 248.09L115.22 248.29L114.24 247.8Q113.65 247.02 113.75 245.94L114.24 244.96L115.22 244.48L136.75 243.99L137.73 244.48Q138.31 245.16 138.21 246.23L137.73 247.21Q135.58 247.99 133.14 247.94Q130.7 247.89 128.3 247.99L128.21 254L137.73 253.71Q138.9 254.14 139.19 255.17Q139.29 270.21 139.09 271.92Q138.9 273.63 138.17 274.6Q137.43 275.58 136.31 275.48Q135.19 275.38 133.92 274.65Q132.65 273.92 131.48 273.04Q130.89 272.36 130.99 271.28L131.48 270.31Q132.16 269.72 133.23 269.82L135.38 270.99Q135.58 269.53 135.68 267.96Q135.77 266.4 135.38 257.61L128.21 257.81L128.55 282.27L128.01 283.25Q127.33 283.83 126.25 283.73ZM98.37 262.4L97.39 261.91Q96.52 259.56 96.37 256.98Q96.22 254.39 96.13 245.94L96.61 244.96Q97.3 244.38 98.37 244.48L99.35 244.96L99.93 246.04Q99.93 254.1 100.18 256.39Q100.42 258.69 100.62 260.93L100.13 261.91Q99.45 262.49 98.37 262.4ZM150.23 284.22L149.25 283.73Q148.66 282.95 148.76 281.88L149.25 280.9Q152.67 277.68 153.69 276.95Q154.72 276.21 155.4 275.09Q156.13 274.51 157.21 274.6L158.19 275.09Q158.87 275.92 158.67 277.09L157.99 278.36L152.18 283.64Q151.4 284.32 150.23 284.22ZM172.93 283.93Q171.37 283.93 169.86 283.64Q168.34 283.34 167.51 282.66Q166.68 281.93 166.05 280.32Q165.41 278.66 165.31 274.41Q165.22 270.11 164.92 259.37L164.83 258L165.31 257.03Q167.17 256.44 169.27 256.34Q171.37 256.24 184.7 255.95L185.68 256.44Q186.36 257.42 186.16 258.78Q185.58 261.81 185.33 264.98Q185.09 268.16 183.72 270.99Q182.94 271.48 182.06 271.58Q179.96 270.89 178.3 269.33Q177.72 268.65 177.81 267.57L178.3 266.6Q178.99 266.01 180.06 266.11L181.28 266.69Q181.57 265.03 181.72 263.28Q181.87 261.52 182.06 259.76L168.73 260.15Q168.93 269.23 169.12 272.8Q169.32 276.31 169.56 277.73Q169.86 279.14 170.69 279.63Q171.56 280.12 174.01 280.22Q176.45 280.27 185.58 279.73L185.38 276.41L185.87 275.38Q186.55 274.8 187.63 274.9L188.61 275.38Q189.19 276.9 189.34 278.51Q189.48 280.12 189.48 281.88L189 282.86Q187.34 283.54 183.48 283.93Q179.62 284.27 172.93 283.93ZM153.45 269.23Q152.08 268.55 150.67 267.96Q149.25 267.38 147.88 266.79Q147.3 266.11 147.39 265.03L147.88 264.06Q148.76 263.37 149.93 263.57Q151.2 263.96 152.47 264.5Q153.74 265.03 154.82 265.81Q155.55 266.6 155.4 267.67L154.91 268.65Q154.23 269.13 153.45 269.23ZM155.4 261.13Q153.84 260.35 152.23 259.76Q150.62 259.17 148.96 258.59Q148.37 257.81 148.47 256.73L148.96 255.76Q149.84 255.07 151.01 255.27Q152.57 255.76 154.13 256.34Q155.74 256.93 157.21 257.81Q157.79 258.59 157.7 259.66L157.21 260.64Q156.53 261.22 155.4 261.13ZM160.92 253.8L159.94 253.31Q159.06 251.65 158.97 249.65L148.27 249.55Q147.49 249.46 146.91 248.97Q146.32 248.29 146.42 247.21L146.91 246.23L147.88 245.75L158.28 245.75Q157.79 243.99 157.79 242.62L158.28 241.64Q159.06 241.06 160.14 241.16L161.12 241.64Q161.9 243.5 162.09 245.65L173.81 245.84Q173.52 243.4 174.4 241.55Q175.08 240.96 176.15 241.06L177.13 241.55Q177.91 243.5 177.62 245.84L188.51 245.94L189.48 246.43Q190.07 247.11 189.97 248.19L189.48 249.16Q188.8 249.65 188.02 249.75L177.33 249.65Q177.33 251.46 176.64 252.83Q175.96 253.41 174.88 253.31L173.91 252.83Q173.22 251.95 173.32 250.78L173.42 249.65L162.78 249.46L163.26 252.24L162.68 253.31Q161.99 253.9 160.92 253.8ZM201.59 282.56L200.62 282.07Q200.03 281.39 200.13 280.32L200.71 279.24Q204.13 276.26 206.82 272.75Q209.55 269.23 211.07 266.25Q212.58 263.28 213.51 261.18Q214.44 259.08 214.88 256.98L200.13 257.32L199.15 256.83Q198.47 256.05 198.57 254.88L199.05 253.9Q200.42 253.02 202.18 253.22L215.31 252.83L215.51 245.55Q215.61 244.77 216.1 244.18Q216.88 243.6 217.95 243.7L218.93 244.18L219.42 245.16L219.12 252.83L234.5 252.83L235.58 253.41Q236.16 254.1 236.07 255.17L235.58 256.15L234.6 256.63L220 256.63Q223.81 261.91 227.47 266.94Q231.18 271.97 238.12 278.85Q238.7 279.54 238.61 280.61L238.12 281.59Q237.34 282.17 236.26 282.07Q228.5 274.7 225.08 269.92Q221.66 265.13 217.76 260.74Q215.71 266.5 212.43 271.53Q209.16 276.56 203.74 281.59Q202.86 282.66 201.59 282.56ZM267.95 285.39Q265.85 284.81 264.24 283Q263.56 282.27 263.65 281.2L264.14 280.27Q264.78 279.68 265.85 279.78Q266.83 280.32 267.76 281Q268.05 279.29 268.34 277.68Q268.63 276.02 268.63 274.16L253.16 274.65L252.23 274.16Q251.64 273.53 251.74 272.46L252.23 271.48Q253.11 270.84 254.13 270.84L267.85 270.55Q267.46 269.04 266 267.57Q264.58 266.11 265.75 265.33Q266.97 264.54 268.15 263.57Q269.37 262.59 271.22 260.59L261.55 260.39L260.38 259.86Q259.85 259.17 259.94 258.1L260.38 257.17L261.36 256.68L275.42 256.88Q277.57 256.93 276.84 259.17L274.74 262.35Q273.76 263.57 272.64 264.64Q271.56 265.67 270.34 266.64Q271.42 268.55 271.76 270.36Q275.23 270.55 278.74 270.75Q282.26 270.94 285.58 271.58Q286.16 272.26 286.07 273.33L285.58 274.26Q284.75 274.95 283.48 274.85L272.35 274.07Q272.15 277 271.81 279.78Q271.47 282.51 270.59 284.22Q269.76 285.88 267.95 285.39ZM285.29 261.57Q284.55 261.47 283.97 260.98Q283.38 260.3 283.48 259.27Q283.97 258.1 284.55 254.49L251.45 254Q251.64 255.76 251.84 257.17Q252.03 258.59 252.33 259.96L251.74 260.98Q251.06 261.57 250.03 261.47L249.05 260.98Q248.13 258.88 247.98 256.44Q247.83 254 247.44 251.7Q247.35 250.29 249.64 250.24L255.65 250.24L254.33 243.45Q254.43 242.67 254.91 242.13Q255.55 241.55 256.67 241.64L257.65 242.13Q258.38 244.04 258.72 246.19Q259.06 248.33 259.55 250.43L263.95 250.43Q263.56 248.14 263.21 246.38Q262.87 244.62 262.29 242.87L262.78 241.94Q263.56 241.25 264.58 241.35L265.56 241.84Q266.54 243.65 266.83 245.7Q267.17 247.75 267.37 250.43L274.05 250.43Q273.71 248.87 274.25 248.09Q274.84 247.26 275.52 245.55Q276.25 243.84 276.94 242.13Q277.62 241.55 278.64 241.64L279.62 242.13Q280.35 242.87 280.11 244.04Q279.72 245.75 278.94 247.36Q278.21 248.92 277.33 250.43Q285.38 250.87 286.85 250.92Q288.31 250.92 288.46 251.75Q288.65 252.58 288.07 256Q287.53 259.37 286.85 260.98Q286.16 261.47 285.29 261.57ZM302.28 283.83L301.3 283.34Q300.71 282.66 300.81 281.59Q301.3 280.41 302.18 279.63Q303.06 278.85 304.38 276.36Q305.74 273.82 306.33 270.36Q306.92 266.89 307.06 261.76Q307.26 256.59 306.82 243.99L307.31 243.01Q308.09 242.33 309.16 242.43L310.14 242.91Q310.72 244.09 310.68 245.45Q310.63 246.82 310.82 252.19Q311.02 257.51 310.87 262.84Q310.72 268.16 309.8 272.7Q308.87 277.19 304.96 282.46Q303.99 283.93 302.28 283.83ZM326.25 283.73L325.28 283.25Q324.79 282.66 324.69 281.88L324.4 257.9L317.85 258.1Q318.54 269.92 318.54 273.04L317.95 274.12Q317.27 274.7 316.19 274.6L315.22 274.12Q314.73 273.53 314.63 272.75L314.04 256.24Q314.24 255.17 315.12 254.58Q316 254 324.4 254.1L324.49 248.09L315.22 248.29L314.24 247.8Q313.65 247.02 313.75 245.94L314.24 244.96L315.22 244.48L336.75 243.99L337.73 244.48Q338.31 245.16 338.21 246.23L337.73 247.21Q335.58 247.99 333.14 247.94Q330.7 247.89 328.3 247.99L328.21 254L337.73 253.71Q338.9 254.14 339.19 255.17Q339.29 270.21 339.09 271.92Q338.9 273.63 338.17 274.6Q337.43 275.58 336.31 275.48Q335.19 275.38 333.92 274.65Q332.65 273.92 331.48 273.04Q330.89 272.36 330.99 271.28L331.48 270.31Q332.16 269.72 333.23 269.82L335.38 270.99Q335.58 269.53 335.68 267.96Q335.77 266.4 335.38 257.61L328.21 257.81L328.55 282.27L328.01 283.25Q327.33 283.83 326.25 283.73ZM298.37 262.4L297.39 261.91Q296.52 259.56 296.37 256.98Q296.22 254.39 296.13 245.94L296.61 244.96Q297.3 244.38 298.37 244.48L299.35 244.96L299.93 246.04Q299.93 254.1 300.18 256.39Q300.42 258.69 300.62 260.93L300.13 261.91Q299.45 262.49 298.37 262.4ZM350.23 284.22L349.25 283.73Q348.66 282.95 348.76 281.88L349.25 280.9Q352.67 277.68 353.69 276.95Q354.72 276.21 355.4 275.09Q356.13 274.51 357.21 274.6L358.19 275.09Q358.87 275.92 358.67 277.09L357.99 278.36L352.18 283.64Q351.4 284.32 350.23 284.22ZM372.93 283.93Q371.37 283.93 369.86 283.64Q368.34 283.34 367.51 282.66Q366.68 281.93 366.05 280.32Q365.41 278.66 365.31 274.41Q365.22 270.11 364.92 259.37L364.83 258L365.31 257.03Q367.17 256.44 369.27 256.34Q371.37 256.24 384.7 255.95L385.68 256.44Q386.36 257.42 386.16 258.78Q385.58 261.81 385.33 264.98Q385.09 268.16 383.72 270.99Q382.94 271.48 382.06 271.58Q379.96 270.89 378.3 269.33Q377.72 268.65 377.81 267.57L378.3 266.6Q378.99 266.01 380.06 266.11L381.28 266.69Q381.57 265.03 381.72 263.28Q381.87 261.52 382.06 259.76L368.73 260.15Q368.93 269.23 369.12 272.8Q369.32 276.31 369.56 277.73Q369.86 279.14 370.69 279.63Q371.56 280.12 374.01 280.22Q376.45 280.27 385.58 279.73L385.38 276.41L385.87 275.38Q386.55 274.8 387.63 274.9L388.61 275.38Q389.19 276.9 389.34 278.51Q389.48 280.12 389.48 281.88L389 282.86Q387.34 283.54 383.48 283.93Q379.62 284.27 372.93 283.93ZM353.45 269.23Q352.08 268.55 350.67 267.96Q349.25 267.38 347.88 266.79Q347.3 266.11 347.39 265.03L347.88 264.06Q348.76 263.37 349.93 263.57Q351.2 263.96 352.47 264.5Q353.74 265.03 354.82 265.81Q355.55 266.6 355.4 267.67L354.91 268.65Q354.23 269.13 353.45 269.23ZM355.4 261.13Q353.84 260.35 352.23 259.76Q350.62 259.17 348.96 258.59Q348.37 257.81 348.47 256.73L348.96 255.76Q349.84 255.07 351.01 255.27Q352.57 255.76 354.13 256.34Q355.74 256.93 357.21 257.81Q357.79 258.59 357.7 259.66L357.21 260.64Q356.53 261.22 355.4 261.13ZM360.92 253.8L359.94 253.31Q359.06 251.65 358.97 249.65L348.27 249.55Q347.49 249.46 346.91 248.97Q346.32 248.29 346.42 247.21L346.91 246.23L347.88 245.75L358.28 245.75Q357.79 243.99 357.79 242.62L358.28 241.64Q359.06 241.06 360.14 241.16L361.12 241.64Q361.9 243.5 362.09 245.65L373.81 245.84Q373.52 243.4 374.4 241.55Q375.08 240.96 376.15 241.06L377.13 241.55Q377.91 243.5 377.62 245.84L388.51 245.94L389.48 246.43Q390.07 247.11 389.97 248.19L389.48 249.16Q388.8 249.65 388.02 249.75L377.33 249.65Q377.33 251.46 376.64 252.83Q375.96 253.41 374.88 253.31L373.91 252.83Q373.22 251.95 373.32 250.78L373.42 249.65L362.78 249.46L363.26 252.24L362.68 253.31Q361.99 253.9 360.92 253.8ZM401.89 284.03Q401.11 283.93 400.52 283.44Q399.93 282.66 400.03 281.59L400.52 280.61Q401.2 280.02 402.18 280.02L417.27 279.73L417.17 268.45L410.43 269.04Q409.65 268.94 409.06 268.45Q408.48 267.77 408.58 266.69L409.06 265.72Q410.92 265.03 413.02 264.89Q415.12 264.74 417.17 264.64L416.97 255.76L406.62 256.05Q405.94 258.2 405.3 260.44Q404.67 262.69 403.55 264.64Q402.57 265.62 401.2 265.42L400.23 264.94Q399.64 264.25 399.74 263.18Q400.81 261.71 401.69 259.27Q402.57 256.83 403.5 252.53Q404.47 248.19 405.26 243.99Q405.94 243.4 407.01 243.5L407.99 243.99Q408.77 245.16 408.48 246.72Q408.09 247.99 407.89 249.46Q407.7 250.87 407.5 252.24L416.78 252.04Q416.39 244.96 416.49 244.18L416.97 243.21Q417.76 242.52 418.93 242.72L419.9 243.21Q420.49 243.89 420.59 244.77L420.59 251.85L428.11 251.85Q429.52 251.95 430.99 251.95Q432.45 251.95 433.63 252.53Q434.21 253.22 434.11 254.29L433.63 255.27Q432.45 256.05 430.99 255.85L420.78 255.66L420.98 264.45L429.52 264.25L430.5 264.74Q431.09 265.42 430.99 266.5L430.5 267.47Q429.33 268.06 427.86 268.11Q426.45 268.16 420.98 268.26L421.08 279.44Q425.47 279.24 428.89 279Q432.36 278.75 435.77 278.66L436.95 279.24Q437.53 279.93 437.43 281L436.95 281.98Q430.89 282.76 424.69 283.05Q418.54 283.34 401.89 284.03ZM467.95 285.39Q465.85 284.81 464.24 283Q463.56 282.27 463.65 281.2L464.14 280.27Q464.78 279.68 465.85 279.78Q466.83 280.32 467.76 281Q468.05 279.29 468.34 277.68Q468.63 276.02 468.63 274.16L453.16 274.65L452.23 274.16Q451.64 273.53 451.74 272.46L452.23 271.48Q453.11 270.84 454.13 270.84L467.85 270.55Q467.46 269.04 466 267.57Q464.58 266.11 465.75 265.33Q466.97 264.54 468.15 263.57Q469.37 262.59 471.22 260.59L461.55 260.39L460.38 259.86Q459.85 259.17 459.94 258.1L460.38 257.17L461.36 256.68L475.42 256.88Q477.57 256.93 476.84 259.17L474.74 262.35Q473.76 263.57 472.64 264.64Q471.56 265.67 470.34 266.64Q471.42 268.55 471.76 270.36Q475.23 270.55 478.74 270.75Q482.26 270.94 485.58 271.58Q486.16 272.26 486.07 273.33L485.58 274.26Q484.75 274.95 483.48 274.85L472.35 274.07Q472.15 277 471.81 279.78Q471.47 282.51 470.59 284.22Q469.76 285.88 467.95 285.39ZM485.29 261.57Q484.55 261.47 483.97 260.98Q483.38 260.3 483.48 259.27Q483.97 258.1 484.55 254.49L451.45 254Q451.64 255.76 451.84 257.17Q452.03 258.59 452.33 259.96L451.74 260.98Q451.06 261.57 450.03 261.47L449.05 260.98Q448.13 258.88 447.98 256.44Q447.83 254 447.44 251.7Q447.35 250.29 449.64 250.24L455.65 250.24L454.33 243.45Q454.43 242.67 454.91 242.13Q455.55 241.55 456.67 241.64L457.65 242.13Q458.38 244.04 458.72 246.19Q459.06 248.33 459.55 250.43L463.95 250.43Q463.56 248.14 463.21 246.38Q462.87 244.62 462.29 242.87L462.78 241.94Q463.56 241.25 464.58 241.35L465.56 241.84Q466.54 243.65 466.83 245.7Q467.17 247.75 467.37 250.43L474.05 250.43Q473.71 248.87 474.25 248.09Q474.84 247.26 475.52 245.55Q476.25 243.84 476.94 242.13Q477.62 241.55 478.64 241.64L479.62 242.13Q480.35 242.87 480.11 244.04Q479.72 245.75 478.94 247.36Q478.21 248.92 477.33 250.43Q485.38 250.87 486.85 250.92Q488.31 250.92 488.46 251.75Q488.65 252.58 488.07 256Q487.53 259.37 486.85 260.98Q486.16 261.47 485.29 261.57ZM522.69 241.79Q523.91 240.52 525.28 241.69Q526.15 243.6 525.96 245.89L526.69 279.68Q534.7 279.83 536.75 279.63Q538.85 279.39 540.22 280.9Q540.9 282.17 540.07 283.1Q539.29 283.98 538.41 283.73Q524.05 283.2 497.15 283.15Q495.44 281.29 496.56 280.07Q498.32 279.19 500.32 279.39Q503.94 279.34 511.7 279.54Q510.58 244.13 510.68 243.16Q510.82 242.18 511.9 241.64Q513.02 241.11 514.24 243.06Q514.44 244.82 515.41 279.49L522.93 279.49Q522.15 244.28 522.25 243.21Q522.35 242.08 522.69 241.79ZM535.82 251.36Q537.14 249.95 538.51 251.21Q539.78 252.73 538.36 254.29Q537.78 255.07 533.38 264.84Q532.89 266.55 531.77 267.87Q530.5 268.7 529.43 267.67Q528.35 266.3 529.28 264.69Q530.06 262.74 530.94 260.49Q531.82 258.2 533.14 255.56Q534.5 252.88 535.82 251.36ZM497.83 253.17Q498.32 252.68 499.05 252.63Q500.42 252.73 501.06 254Q501.54 254.68 504.04 259.91Q506.57 265.13 506.92 267.13Q506.62 268.65 505.06 268.84Q503.3 268.5 502.91 266.74L498.66 257.17Q496.52 255.27 497.83 253.17ZM556.43 284.81Q555.21 284.52 554.18 283.78Q553.16 283.05 552.18 282.27Q551.59 281.59 551.69 280.51L552.18 279.54Q552.86 278.95 553.94 279.05L554.82 279.34L555.01 269.62Q552.86 270.01 551.2 270.6Q549.54 271.19 547.79 271.38L546.81 270.89Q546.22 270.21 546.32 269.13L546.81 268.16Q548.66 267.18 550.76 266.69Q552.86 266.21 554.91 265.62L555.21 252.44L548.18 252.34Q547.39 252.24 546.81 251.75Q546.22 250.97 546.32 249.85L546.81 248.87Q547.59 248.29 548.66 248.38L555.3 248.58L555.3 242.43L555.94 241.25Q556.62 240.67 557.7 240.77L558.67 241.25L559.16 242.23L559.16 248.58L563.65 248.58L564.63 249.07Q565.22 249.85 565.12 250.97L564.63 251.95Q563.56 252.63 562.19 252.58Q560.82 252.53 559.06 252.44L558.87 264.64L562.68 264.06L563.65 264.54Q564.24 265.33 564.14 266.4L563.65 267.38Q561.41 268.16 558.97 268.65Q558.67 277.68 558.72 279.97Q558.77 282.27 558.23 283.69Q557.75 285.1 556.43 284.81ZM586.16 285.49L571.27 285.49Q570.49 285.39 569.9 284.86Q569.32 284.32 569.22 283.54L568.59 266.74Q568.39 264.64 570.29 264.54L586.55 264.54Q587.34 264.64 588.02 265.38Q588.7 266.11 588.61 267.47Q588.21 282.66 588.02 284.08Q587.82 285.49 586.16 285.49ZM573.03 281.68L584.41 281.59L584.5 277L572.64 276.9L573.03 281.68ZM572.54 273.04L584.8 273.14L584.8 268.35L572.64 268.35L572.54 273.04ZM585.77 262.69Q581.96 262.49 578.11 262.15Q574.3 261.81 571.76 259.56Q569.22 257.32 568.59 254.49Q567.95 251.65 567.95 243.01Q568.05 242.23 568.54 241.64Q569.32 241.06 570.39 241.16L571.37 241.64Q571.96 242.33 571.86 243.4L571.76 246.72Q575.76 246.33 579.23 246.09Q582.75 245.84 586.16 245.65L587.43 246.23Q588.12 247.02 588.02 248.09L587.53 249.07Q583.72 249.75 579.67 249.9Q575.67 250.04 571.76 250.68Q572.25 252.63 572.49 254.14Q572.74 255.66 574.74 257.07Q576.74 258.49 580.35 258.54Q584.02 258.59 587.34 259.37Q587.92 260.05 587.82 261.13L587.34 262.1Q586.65 262.59 585.77 262.69ZM626.94 285.59Q625.67 285.49 624.59 284.71Q623.52 283.93 622.44 283.25Q621.86 282.56 621.96 281.49L622.44 280.51Q623.22 279.93 624.3 280.02L625.47 280.61L625.08 272.26L598.96 272.16Q598.18 272.06 597.59 271.58Q597 270.89 597.1 269.82L597.59 268.84L598.57 268.35L624.79 268.45L624.49 264.54Q620.88 264.74 617.66 264.59Q614.44 264.45 610.97 263.81Q607.5 263.18 605.21 260Q602.96 256.83 602.47 251.26Q602.03 245.7 602.08 244.09Q602.18 242.43 603.06 242.08Q603.99 241.74 609.65 241.84Q615.31 241.94 629.87 241.45Q631.57 241.64 631.92 242.77Q632.26 243.89 632.11 246.09Q631.96 248.29 631.57 249.99Q631.23 251.65 630.84 253.12Q630.45 254.54 628.3 254.58L606.82 254.97Q607.01 257.03 608.67 258.54Q610.33 260.05 612.97 260.35Q615.61 260.64 618.2 260.69Q620.78 260.74 631.87 260.44Q631.77 258 632.65 255.95Q633.33 255.37 634.41 255.46L635.38 255.95Q636.07 256.83 635.87 258Q635.68 259.37 635.58 261.62Q635.53 263.81 634.55 264.11Q633.63 264.35 631.82 264.3Q630.06 264.25 628.3 264.35L628.69 268.45L633.72 268.55Q636.26 268.45 638.51 269.23Q639.09 269.92 639 270.99L638.51 271.97Q637.14 272.75 635.38 272.55L628.99 272.36L629.28 283.64Q629.18 284.42 628.55 285Q627.91 285.59 626.94 285.59ZM614.14 281.59Q612.78 280.9 611.55 279.97Q610.33 279.05 609.06 278.17Q608.38 277.39 608.48 276.31L608.97 275.34Q609.75 274.7 610.82 274.8Q613.17 276.61 614.29 277.24Q615.41 277.88 616.29 278.95L616.39 280.12L615.9 281.1Q615.22 281.68 614.14 281.59ZM627.33 250.78L628.11 245.26Q616.1 245.55 612.73 245.7Q609.36 245.84 605.89 245.84L606.18 251.17L627.33 250.78ZM667.17 285.49L666.24 285Q665.56 282.66 665.56 280.02Q665.56 277.34 665.36 270.4Q659.02 270.4 656.87 270.6Q654.77 270.79 653.3 270.79Q651.89 270.79 651.3 270.26Q650.76 269.67 651.01 268.65Q651.25 267.57 652.42 266.64Q653.64 265.67 661.75 259.17Q658.14 257.03 657.21 256.29Q656.33 255.56 656.92 254.05Q657.55 252.53 659.02 250.68Q660.53 248.77 661.85 246.87Q659.85 247.16 658.48 247.55Q657.11 247.94 655.7 248.29Q654.96 248.19 654.38 247.75Q653.79 246.97 653.89 245.94L654.38 244.96Q659.55 243.35 664.92 242.62Q670.34 241.84 675.76 241.55L676.74 242.04Q677.28 242.67 677.18 243.74L676.74 244.67Q674.64 245.36 672.3 245.45Q669.95 245.55 667.07 246.14L661.02 254.34Q662.14 255.02 665.66 256.63L669.76 253.02Q671.17 250.87 673.47 250.87L674.45 251.36Q674.98 252.14 674.88 253.22L674.45 254.14Q662.34 263.57 659.11 266.79L677.57 265.96L675.76 263.96Q675.18 263.28 675.28 262.25L675.76 261.27Q676.54 260.74 677.57 260.83L678.55 261.27Q680.06 262.69 681.13 264.5Q682.21 266.25 684.31 268.6Q685.43 269.67 685.33 271.19L684.85 272.11Q684.21 272.7 683.14 272.6L682.21 272.11L679.96 269.48L669.07 270.21L669.37 284.08L668.93 285Q668.24 285.59 667.17 285.49ZM654.38 282.66L653.45 282.17Q652.86 281.39 652.96 280.37Q654.18 278.75 655.21 277.14Q656.23 275.48 657.31 273.72Q658.14 272.99 659.31 273.19L660.24 273.68Q660.82 274.31 660.72 275.38Q659.41 277.39 658.72 278.56Q658.04 279.68 656.13 282.17Q655.45 282.76 654.38 282.66ZM682.4 281.78L681.33 281.2Q679.96 280.17 674.88 276.56Q674.35 275.87 674.45 274.8L674.88 273.82Q675.67 273.19 676.79 273.38Q678.69 274.21 680.35 275.68Q682.01 277.14 684.11 278.56Q684.65 279.29 684.55 280.37L684.11 281.29Q683.43 281.88 682.4 281.78ZM734.99 284.61Q733.43 284.32 731.82 283.93Q730.26 283.54 728.64 281.98Q727.08 280.41 726.69 276.31Q726.3 272.21 726.54 266.4Q726.64 265.62 727.13 265.03Q727.81 264.45 728.89 264.54L729.87 265.03L730.35 266.01Q730.06 272.21 730.26 275.09Q730.45 277.97 731.77 279.14Q733.14 280.32 734.31 280.61Q735.48 280.9 736.85 280.8Q736.55 278.66 737.34 276.9Q738.02 276.31 739.09 276.41L740.07 276.9Q740.56 277.58 740.66 278.36L740.66 283.05Q740.95 284.66 739.48 284.61Q738.02 284.56 734.99 284.61ZM713.36 283.93L712.38 283.44Q711.8 282.76 711.9 281.68L712.38 280.71Q714.04 279.54 715.56 278.02Q717.07 276.51 718.05 274.51Q719.03 272.46 719.37 270.01Q719.71 267.57 720.29 265.23Q720.98 264.64 722.05 264.74L723.03 265.23Q723.81 266.99 723.52 269.13Q722.93 271.38 722.39 273.68Q721.86 275.97 720.25 278.41Q718.63 280.8 715.41 283.25Q714.63 284.03 713.36 283.93ZM697.3 280.22Q696.52 280.12 695.93 279.63Q695.34 278.95 695.44 277.88L695.93 276.9Q699.64 275.97 711.12 273.72L712.09 274.21Q712.68 274.9 712.58 275.97L712.09 277Q708.48 277.88 697.3 280.22ZM697.88 271.19Q695.1 271.43 696.03 268.84L702.08 258.29L698.08 254.19Q696.27 252.48 697.05 251.41Q697.88 250.29 702.38 243.89Q703.55 242.43 705.4 242.43L706.43 242.91Q707.01 243.6 706.92 244.67L706.43 245.65L701.3 251.95L704.72 255.37L706.13 253.12Q706.82 252.53 707.89 252.63L708.87 253.12Q709.55 253.9 709.36 255.07L701.5 266.79Q708.09 265.72 710.14 265.52L711.12 266.01Q711.7 266.69 711.6 267.77L711.12 268.74Q707.99 269.72 697.88 271.19ZM735.29 263.57L734.21 262.98L733.23 261.32L716.78 262.79Q714.14 262.69 714.92 260.35L721.27 250.73L713.85 251.17L712.68 250.53Q712.09 249.85 712.19 248.77L712.68 247.8Q715.31 247.02 718.2 247.02Q721.08 247.02 723.91 246.92Q723.91 245.65 723.86 244.28Q723.81 242.91 724.49 241.84Q725.18 241.25 726.25 241.35L727.23 241.84L727.72 242.82L727.72 247.02L735.77 247.02Q737.63 247.02 739.09 247.8Q739.68 248.48 739.58 249.55L739.09 250.53Q738.31 251.17 737.34 251.17L726.06 250.82L720.59 258.69L731.09 257.71Q729.87 256.44 729.87 254.78L730.35 253.8Q731.09 253.22 732.16 253.31L733.14 253.8Q736.85 260.05 737.53 262.1L737.04 263.08Q736.36 263.67 735.29 263.57Z" /> - <use id="Logo" href="#img1" x="458" y="65" /> -</svg> \ No newline at end of file diff --git a/docs/_images/tutor.jpg b/docs/_images/tutor.jpg deleted file mode 100644 index 8cc0f68e64e6e30bf3bc9cfe60836099af75159b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110496 zcmb@t1yCGe*Dg4NySsY`t|1{1+}+*X-GW1K9o&PvySqamI0Uy4B)ChmO}_ipf4Ayx zZEe-QQ_LK?`}OW4&w2Xq^4~2GhP1epI0y^|fxy5A^mhk}UP?s7Kv7viTuN5#-w7xJ z5Kv&)Kp;DNS7&7jVG2zxZHm`p|1Cx)E{^||{|~=FySIz4t%E>w%>Re;|8Iv7P0d_P zfQ!z7KUZg<b6~KhfQ)1DAKCL&HvW$s{VF@FDvJQu<N`9i#s4N7|8KH~tD`G$&FJg( zCXUXp@){uX+1a|i_Vrp`M~q@-uciY0Y65>GAQzA_NCG4b$p62V|5;Cmd=TjU4G07s z|3Al!(?Ot?5D<vq$NwCo$pwMXzkoo^(~d^YM*ju_1AIf7n}a}?B_I&076^p>9Rxzs z`R_pgr|$pk#s9-xDS$d8z&ss*j|IpUWCo%DNrCJ^CLk6-;sCLM*g^09u7X5B&`_`C z^&1)}FmN!h1py8Y77h^s2?-Ga5fKRm9R&#)4H*#;6%!Q=9RmXs0|^BS8w&#)kTG5x z0l(IShCu)-Vjv?T14sWqmcP9qOayQObSgBM3Iv4-hQ<W{9R!gA`v(L4dSm~$K!L!} zaIo+QFo?iu2MiDt7z!E|78V8u9uXN1nh^L81``B}1qY8!sf0kqE@Xs5&7tfh90<w7 zt?QdX#KR}xG(M*h(R5Bo$)DS%rQ=d@2}-PQ=)ZWwZIV<lNJ#(A^h@%<?EHICNi}uX z;E*96aS2s(_pqYICZIz?U?~5$;Q-?UdV~c|31b4!9uyb>9u6874*uV8fm4_;SlE>8 zN|19QWh1A&nQhL%y1v;9SR4*qs)WQjE@2TB=YDEYV-uJ9hQB{RD9~VF?$DSZ0nnM< z#%Yx6jd%A-R)3G%6Rnb(TEfgnu5?<?&e-pi7VdAIrDzhIjN~RxosuZl<wvaaodtd| z=v(BTnk;m@pT2ac&(lr)fD1P7p*66O*Q~pw$3?cp0~utJ%fgEB@U+9Z8@2n!&?I2W zi^({Yof`cGL8_)g8J|;Z{l1X?e1Vm5=Q$^x)PZmv>6uC1FOvzn5(vo`@#>`AN%>E1 zy}cpMTF1(L<CaO0@G)1BgF*k-BA<7TAGsgx$E<Y(<%;&-@yO(Ze?fU~?G=R9hKkG7 zFsM1%IV1+{)aw?RAGW^A$BH$2igzg(6hoDE<gN=a+BcYTx1QGglD45g@=lX!XPyH| zT$<H?#%!w{v#K7+JvCm$>+csv4TPL+@fyuQRX0>WRuLKGKvg{_*w;!Kb)Y6J?k4;R zDXxz#X$#DBBd(TA8t9NqW{3^UyyoWK>}0h+kl9%(*mzeKM|&6JKWfNeLWg5GStvyq z!)h-S_EQ|H)kCHI2L3OIE|Y=AX-r%}&Wu#S1<^yNeJgUnLx&BMPv=^UfBBkpQY(@j z1toOLd#Q)@LYx4OlDR^O?6<?#CzF7xk@lA#$ocjMW((6RFPI8N_|MT8>p3Sky0&oN z!gt98@^d@LFP%(8=e1yB3b9PR@3*y25m2{JQ~rW-pqi9A?A95WZ{aPJ_B>DU8G=T+ zqYOF@wwyTak3Ec7I*=Rsuv2Pg9QCFZ!UhP(i;xNRuTxw(n*M?+`99?cxYL+21T<HP zViFl_lgdLwWwtL<8ond8Xsr}@T7iZ5j}45}euT-bUG9tu4egC?CvH1D-{mbWQs^`c z@E-1oI1E(dIZauV`d;`<UDj(9+IOOvD7d`#<s))D$1mI9=dUDOPuO+&+@9_tw6n26 ze?bM?9WjFB4cj)mJOfJ9XpB}$XGDMA6jPTA&J?$pn$Y-gU(9Xd^(+m5qd#KTZE>JN z#<*+S$olY-$oKBI=S<wWU=#0462It+JcTm0{RO=tbdD<Og*1ZPy8cklA*uxk%ivSZ zR6WD11Pn^lb<ny;+ZM|W8cY4zjvN&j8~6*tX%^9Rs((;Y!!tOgKRtNP@f`osTx)6v z%AxkzNb_YP!6Meei*eWv7??jv8K)8ES*a}L93$kl%&+(8CAYx(3&M3*WyP@FP{;Io zi{o_Ua?{MeKsA$zbwndiP4>B?|Mt;yM_s*X%+8b)*+1lS796*`g1PJY@RXVMvR+)> zh$(qkESBx?q)XDtskSO9<I5Q7+8;84F$TKeO(TN)AAdoZhoNFNm&}7Shsu7K^IPnj zLwZ?D1@~Ra)>J3H2_Gr0_XA5;va>B0C7b=3>qi6q+e|vMxBXdChZTfvj0WwH__uoo zok*48M0Y+i5>kKXb44{?diou3`EK&$HYM&FPOJ1T>xsr)=x|~Lt%JWIm#HV0<4JoQ zmO*b?WrFNh?ECudcGTMDt}R8(8aN_3jM7iC6~%L<>Z_Zl4&{Ws)DF2>oOEn(3d!Eb zPo_J5fq4{F@!lMIe>&?<5!$scc~IEfdU*KR9%**aEW#&74YmkS+|-5Q3x(f}St4?X z>qfeQS$dJ32df}^f`tCUGq4opVEI&kpzp{KDppsmc*%^KX#-D#%WhgX8{L$h+IRT( z_~0GgU>e4LLNV0e9u5{V6u&+g(a9yOO+1oChteu}B75BM)tw+@d}weCixY^cg=n^c zT5uz-x&s3){es829ec!Qobg?HWmxA@nPA10k}a`{b;Lumap4h#oJ#edJ4aZ1$ks8B z`46@O7x%yY1@XZuqcYHX>~KM@;2uBjY-ZPDl4LR<nGo8M&f~dnF{gfa-Vf8QU_>In zR%2x^!Vc;>111m@t`yshiH_#8UYktZ&Yi=^$_XqUI>-J8BNfbvLy$P_YEZL*&_oLU zugS`>!4GoG%UbwBEe=4{5Y^ei27+K`{GY$WX5Qfan8v69>avmXW;HNL3TL$^2aRT| zekqV!^K{-{!Xjy5LNd5EV_QVZN6<(+@-miMXr<`?mMfWp|MO+rfBYT-d5AF`m+;(7 zV3mc>cCKs?R1%Sea`D(^Wd*v&+F!AvQ<!Po&x#K>*7qw(;YX?%fJxbovNGVYrIBa@ zkH+U*86-r*XYG4g*%KBN&jy{Y(e6+8I`0RRP1OG(FcOm^^oXW%3}{_M|D+G7aeiKt zR%-PCrl9BLO=#6zstCfUbn1Db`+rLZwPLT2Q$8~nNdC?b>+;h(k~SkGBr<vDN9S3z zBgdr+zB)#R^BcWZlLY36y5lfadubZp@u1&+(!7S0+DOE>T(wpa5f<CA`oSgZVK}Nb zl+6Yp4(8<dhR6nkTQjO}?PL{sI&`i~mS6|`m|IKqGdlo%#ztlx$-oukI@90(0b3_+ z=nuQMYfCJxHLv^?Hx6$hNn$7yyh?~-;b07LvJ#c!;_bo){<GKxBQ>ft4ef6)qUR*n zUeQKZZ8hH<W=ze7B>Wzsxzhn!T-@a+6r!~|#bG9X1t#foD8_7Uu`gDBrZ@efcCy^@ zOLuX8fbB!@4GlKn^=usOI@pfN@q;c|4=Bqo*bbPlEs&!5tSZX%ac7BK-@uO_tfBbM zMrWP*+1H6w5t%eQij2lbe8KSJ&f=rz7G_=^lJuM?o&f%KRN{9dW>ngMTLxcy*wj#_ zg0lSx=@_DpJ|8Lt&f_noOsdj8;8#<J0wW_PW~`mTjG1Zuoy8Zv7{5*ho`K#Fm13`x z-HcS8MvTY}Y7@U*=HaG)`>Fr^$aZIy{{$H3+BJfxlgkl85{~RRTzm$yyT<Qpf+bK! zMg7!*KR2L5f8^!4eWZMzho-V2(XVWG8+LsDbU{toP=j-c4>@}<q{4CKRf}QLrp8+s zz&H8+*@zbPjTc@d=#uzwJBEQ5;y@yeb12SR?IoJ}JVmIoi%N-v-sye+2vpSajDKGg z&Sc#8#rV{hom37MBv>PXV3ELS7Gaxx;lR>acgWyY)?iJ&UiHi`4^<{SVv`Cbd0+YY zh>To;yaV)2OsJ5pC`{Bux;fCDAHEoC|Jq2@IP$B?^6Hm%MYpC-C&n`5(xZ8?0-1ZX z5=13iK}Znzj0`Y6P`J4h-_~Y&l~4n>gLLn81_qF??Fe1SYv-(;oZrisK2_~TD0!{n z%}Z@p{lT2yc3cV{i2NZ4_ygE;;GbVv^AYNWL|_v{LFcI|ccC>bseM^BtPPYCWiqvG zB((MD10%4ife`LjO}t(9#D8J);)ULWRSzN+jVY1<W}lOW0H>G2hV{-sUP%yooq6rv z^}M%OEhT=&FQ#z*o6D*Cr~o?2XEjY2n&x_DqD{a~6Dn$*Q9JhW{<9SUSAJ3B?}H3x zk_PGP$&ij*w&%cVNoI@~5)*ITxFCtexb=DgWCjY={Otzed~V67%zrSC!;jQwFj8H$ zu)`Jj^|t*7M!?wnS|V@b_mkQMXS?_950+9xvG!J!<S{1bPuG9mA-`HJex@p$gdd~4 zcz;1iH}9n*a_?3{KXLkpU-x=pza8u2h^|g5rJ={DF8S2i$rdY-l)9Z&9=fL&2WI*z zuX#ho{eZWV;2QM|U5zPuLp-|1_Hp<xh_D-aNF~vXDT={N)ucPn0ZCs7P{!>Buyi5` z^=VTIf|D#Ka=cm}yqx#!B97v5<f-dNXC(?ff1O1coHf&$D#ut6hqAi($JCMueD@*- zGnzJvVwxFP$g~}K8ERNuzFWW?bADP&bugEqzuu2?lsLTu3>u3M#Bn^T2w22m;>;_T zfb%~AD}UZ#U!%f?*RwXzZXQoys@a}SRT_~~PNZE>FZQQ{WLinuOx_lY(Es#|?reL8 z1}m0?oJMgVVyiu*o*}QEc0&(7eQ2;niD`InQs&BkV$ge0U_w~YOE<$L%^Cj|T4EwW z`f4(w6ARXWAp~CSMSUr6=hOMZSMzNZ92sTmE(JShRv+I3;}l6BGE(C)0OihVsx@h0 z&f#L@;b0Wi@#|w}U8<O`C>)<T-Sa7qq3cL#w!#2(sz6N5!&R@5bu+8U26y6pSweLg zH3BM%h=GsiozJ;lZ3muG!5{j)Fu94IU-!2B@E(NPg{Sn8EMOg-OSaCU{M-kl%LZ&X z9m6Q6Gn=6i-eDWX6xl_LMqw6nzmTF%D|@$McD#I{EU=3j{aBdlKT~^oO}b{GMxcp^ zj+>g^L!-+<Wogbd%(gz`XYWV=-Lbxz?pb2k?AcJAtdb(+P9}Qi*BV>m;oT(}l>KF8 z5t+(~_}Y}Dx>wV~*U9vsrNew}h9K6>1c9x=5{m-rFNplr`a?rKHLs76h;*!HbwFVX zhzZ^2oWj@-xK{?Eo!#0<UqPl+6n4LRu$!6snP_ofdhqO3%%PNbvJJMNIIH#W*ut85 z7<F*S0AAupHW@5TG$n=moS!hK6>j_Er0XZ$$@q{Sk-7V8(kabGD(+=?DrN6)e$s63 z;uNX11ev1zqc=yuYUS(l$B~TLYqsT_qZ#<u+ybF>yK7hHPv>^+atl`UJT~<i%KMww z+&rAG11VQ5g^8XVmb|Hb2e`4%=e89CU8`Z+M1WBXs6d@Ltw<zYI)QlLiGE<_4gi7{ z%y!f{kK`7UdTosLwY{XZ7kC%Eh3F{y<feG!u0NP_P~o}Ou#rc1uhykk^)Dy^buOL7 zL#>`D%R}Xw^j{OP1ujp8lEX2Jw!sXNfoprNOFV|CmDz|xBcc7uFeU1lqf6(c?4-ij zSX}mMqLA|?wI+`cz{&K1Rcras&SLAKRQI^{+8V2?8~-HR+Tww<=4pk=^&1|C@2V{( zz^oiijmkW~bk$HB#FMg(H;b8+Z(tTZE9k=VdvLZxY5oP#tdb78n5jUNS0q%{2K=d> zGUtWX)kiFa+<_*#cKyL?LqnKN95%c)USxluQ44L9^Qs(NTP|*TtzJ5o`8RD-=4^4@ zr%%*{AoKGUO_*aW1}P#iq2x1eB_cSAl1w<um+i4>ns;Z_rp42Dek6pFQ%Bhk%erPw zg6P+^wRqot;C-xHF;gxNrp{y9WWROYk77V%DTGBWNfp)a(N%A;96VhzjS}}VRpsMq zVZG;dd0!tYhez3n=FHtzcNl=voh=#^*irHGpqhrniMzU3T;F1!0LP`YHu?gQ5+_!g zcN-6B2&W~i)5fJ2R>}$O3xc9#dy{WNsln}5+Bo7H1<cgvkU^Ksd>$^|#4kNpfzRjG z(A1o8Z+E^qg#S4Ki&xe$#e&3sf}bR+v7EG)FVTDyMg{yZJlvIWHrD&>1${;k5e$V; z`(aW9*l&6%_x9*x;9Y$-S|bY^G{0To#|=Df`siFW(^zS11v8mudcd}!s{~|EqtMut zxmD*6WM&KBLz(k}K$avBKa=_Gd1>Dt7+PUoUA#uth6IOn;&^<W@Iql|Fh1NUuwA=4 zmjrNn+6bp<3zeWJi(-WI6cy);6&8gA6fTFt1S&fZDy|k<0$h3>m7}*di4M`5H->O- zsX?(RAjuHCTjmXX0nctaK4V>|_R+JJab6S=^~WSawSjc%IU`@v3x}y?$etXLDi4a+ zLx&-;%CG1{9rQr>AN-DoLnuc`p){%fNk-J~4+_&Yo%hEyP%4WgDWgAk-`PUJMo}Vg z1)eVbyy;c5R%Lk9zLcn{7SFkF>dtwe#FeFD#wV_y6>rQN#)rF2O|U51!+3m#{70jg z7>_-SArGE@uIxC7M97iQExDs-l-G!}<(=g;MsShcm<B4L9;m(r(JMh>(ASp@m8?jg z5?VTE=Z4>}RsW&Ls7eI)jAxwJ2$3*5vcd_GSBM<p_@*~B`dvJEC_JaVy(9F8_#wjR za(W1ijkh(>C)Hn2EG?CRXI`ojKIHMUF+&P0Jf?w;6lvuraOLYpnG0tK*M|GCEW@kN zrL9UYJIC<mv`P)nUj(&Bbo2;?X_$cy=`={%oYe-6dSL<Oxi+2IA`5+FJgSD*tId6U z98f-A$7Wdl9&$naby7ehmIn0=Mij=r_wXj@x>tU0Fo>2CCZf>ipR12Z(4A}?wQV_9 zQjK+tFiI#vVd}r~WvZ9QHC@vqrj216k}BOmjj*(><0H2OO4Mu!!EeJX`Q1N9*P>5# zuP^bECi%PUBrI|yy``5ec%;;WI24`|*me*ul?aZVtAZCfssd}HfI--11c6ks*kTvZ ze0X`5<z4yX56M%B<^R}_Uy7iZ0dj;Z_ajHNVj1xt>bH$nbMxCtQdT(iAt<tOOLJ(I zeYV_A2t+?N5q`0aj(_~2nae-aGWdCm>@q?vk|n=c^ugB&SIP+!#8?V>A1!pSL0)ld zEGKVDb)ZCg+tSaA0xN<|M39`UHYa@lx(yn=l0W6;$J@gxvG++GC;W(^1_TeNeMX8& zvjglUwD2KS=dr;k)kt~l&4J@wuRUSm&l5`@(|i%RmC)r0bkwzi?%rfS4AZcG8Gw7U z!QYMf-KaHEPbUa)@N68gmq55eD<&Mc>a1iTEdzi;mkXt#Y_-oz6~6L#h?A92-8OEh z;3TBp;R$`cOVg6GU4sVzWTder;yA!<R}VF*O^52apc+=h(s8mK+9UITpY3RU_Tv)O zB|q>$hDs=HY&QkoSvh=ah3|Yel&)^pKY9+voOgnOp{gh!%^1U90zwkD&#}$;HV`kO z4d~on)pw<Hl5Z_Uu<rFI(GRxowrEV4Pt`o5yA~esQF70_r%}D?9;Ptg$OM-E;ppn2 z3`4VxHsK4&m+|w2301yB>J;w^8|B@S{3$jZav|`c=U^JG(zQKXq|-CbVbsWpnZg8d zj~Q$Asuxz%7&}tX-SawdTH;mrpav6UW}MHjea-H%rz&%#I-_(ni<Tbr*L5bBmA%xp zW^W1W06Kx!e^+!b8{OGc+U3YtA);FrqjOyOXYIXFfr7U}bd9~m97@ebYfO{w`RrO) zS+773=S#M2&mM||0De#>1`<=maZM-d&At!mJiAVFJpZmvIzJn(U72Dn{hH*xwFKoR znScR$517%ZiKpMx?BGQxP}x&3zLWc${G;F6M>d3UZYz8a{<g$9gpa7q1GK*_7uN!g z10>BB7v}~YurE;%F5eO1_xk(<z%x<;E62V@YdZ0kcK}$i8Rdt$RMOhKS5OVbTlLwF zHmYI7`P0b1sYkHu!fuz<$7KOVn5PX1k}5>ygoytdF7o-ENKUOyqg)`}sjopC(eibY zQQF62<Sx<DV7ucNl><AXraK*l;)mf<Fwt!7zO5pXHgP(xMoP`Tb_CY8XGE2$N;%o2 z7<7s7q@P()GnGUBkA}HtRyz7gG7P)Cy35nM&|C;7*f$9|#Osc|Z`rX6NN!znL^@{l za7c0;fLh}+t|)XCeTdVgGuuuEx0>wOxVR5g)Yg5ME%Xp;W7r~uY0nl?+{;$Dj7EH; zj1eqJIs{xyu`8uaFjBhq(Bax=6EEcpGd?k@lMoH#rlHEP$H@grHMA?~W`0<O8$2Jd z(t}R2xgu*tTniVBAp`)L|J<525rk_;yyzHl$j)Lf_b~bLm!UfG$UT5f;J^d1sWn%K zXDjIPwp;2HIEE#6zw4K<lNBao#NKx-09CQ#rfMHCdibZ#0XIB~Qa!F9O<ZUTwT7o( z-Q&4-0Sa6yd*F2Hu*1U^!<r?W;`Suu9zDPY@A)?{`4os7^KUQmlH7h33dyzd>lpse z+j#P%<F(<Q{(9|MwC<lk7YIM?&RNfTIU>+8W#|vi$Zw6TeJ$6x&l|0t9LL9s_caHr zMtu&@t5qoX0GIw-H#i`+uzq;F&tOAh(B7wG;KuW1IXUW3oxUKsKt886)}4-Kn-La^ z4svw|_)m;G!qXe4b;)6#s{p_PrMRyJ%^I@j{YTT3bu6gtjEu-{jn?gZuJ{`J7V||j zDUD4ll4m8Ly%BoZ(MXrVyYV4^LFQ0}A7VMA^L8W#RQ%M99-luwV|d=Mb{GeEz;<&k zfmM&F?;?jLA;(4&5<c3SzO`7jz8ow?wFlHUfF3c^LsN6Zw4BR54rR)N#xWwgjIrDK zyv^8D$!$YnZR3Od-H^~T1)`NiZ!`Mh%XXI;St5MIXljt;_TJQtq@P`J<M-?J)@IIN zJ2U&=4qrYSLX~LuD>Af4V22O?JWzbm2k>DN`UZ~bVi+o)f@<olx)>De@d_$}r2!33 z?E9!4;YpE8J5lf9mVjSuC;@4sOnLA;Cbx02yoAu!v+ZM)I4@syDJf>7XPN_zh*o#_ z9Y=p};u-GU0S4f@ml0#CXc&0H0d);k%C5>`rOqLdXZPwr3@#fE)L=@6RKj=YcmgY5 zwqV>q{hA7JK=v4_y6%+}am*HB3HkZ$iY$$mBPd!p)#!Cv1Dw_I!|xDa3tlS;jjCK& zQ#g^mni{C~{!xM$aL2cw2gS&n5n*m_^_S!n1LD1;!teGZBbXnytsB^AJNb84F9|@U zJK@X(>S7RXuYb<PV9gNR-djj&`~yCwYUXfEVNqe+my*<A^vQeQdyWwq=<>}?vW+*z zV3ul(?i`{V|0RdjFnv~xWmepXo9}Gf({7Wt+KVyF+sA?Gyn6B#)_f8z`vE5QK7jh= zdjizZS3Xqz`f@Xhk9_Ve{QtbCPj9+V`vg$)b^I(a=ezRmk!vvDS89xO3uv75O4=LK z?S`VWl0CWI^wFoW-OI)Ts<u`BFUYRIW;uLzgRB)}iw;r>J*CkiPz(;OLP3OM`wQ~U z$!Vo{vy17rI5GVgj7q$`Ci>%4)KY?$)G<PF$o>`1us6N#wMKpBifAP6PJoe9`swzA zY;F1uC$H@*i>KzLdsNEG&wfJ0aHRHIC5JCaHvSv^y|%t91`k{-f<&h)s9^I4{FS*B zrbr=#A0N<^-l)v)RCMruHeatE6M$t($3^!kou9Oti+|sUByAcER}``#Z^VU+4tUTs z!eeDP!Hig1odL(;%OmBtwDA4tQ8^`;k=lyQY{PhTG_8WDkF2t^MG<>%PcEP-I#8j; z`F$OcypuZumJ+z*zcRMskt?i3m^x7)1-E{nifjD*0!LXMly<nSJUB!uWL%)cLlSr# z{8`!^6}_Q<YW;v0jQnQ}W~RE<SY_gA_vV@)y1m5-@34Hl;5Ydi8`glhEi9LZj@~uY z;5B?TeuK)Po3&?CTL)A?2&rEywBIhr@lT0PqsLGvS3Yi9`6{PFBtLMepQmX_n0hyi z`;3trIl9Ucs+xo}r5c+kVGdiQq9;83*QMJnej0-L{8cTugE4%R3^m*pdC1Faa2OuK z%#iDX^O?FUQ}U-TFAA5d>j@H)XA&DxfRLHNW<UxzlkTW3i)YMVkgL%IUb0Tu)W+}6 zpR<G;uZu<4N@Dveo0ZC@mx{5K=H6}-P_z+cuE)H+CV(oh4bRmx2@h4jdZT#$2q?6V znofit2er9=@$OD@^O?cS^af2u7D#r)2=6W>pW8{v;^yJh;_)AxqP_(dD1S&g^fb`R zpeA>qgxay|QZfd8g;bte`?I}r69;j1k{;FB&2?`TDLY)2a=&IBlc(|6b+23@Araei zKxfU;99YFYf<z0H@Ci$QsR4cQgQ0IuTqGUWVKKYm54aKmT`?sYnS#)HC#}LbMKuuZ z8u;$2_w#iM8n^SG`xk|Aezu_-7+x<lr5cr`!|?r}*q>s>;g(NAaK-ik_gi8#B%kmb z2DP3BaflS%T6AF|5f(G5rY^^x;7G6sm8lPGM6=;l!V_|Gp7o*FREj<psC-=yIZ@p@ z_sxNloL}!N`V<UOd#4!*yO=M!Q+LH1c69Mn$LOIEer#gLULxyt^fqrhVm2G35skJr ze_X2nB33hjHs3fNU7Uh3i=6zOEBECdQEE2C?TUhsJogvdOc26s_xT#tR~S-x@Y}=w ziYHzy4Ph3D`{Sb#Gbu~Tm$?Bm+Vn<b*12LR8F7Lb3E|i$ueQU0a-DpxFO2B`Jb142 z{>6{L9+nkjavpM*DqS7u@pv<+GB;akgvzD9ljn>9Dy)Utl!Y%07+*hg?_8f=73hE| z>WH22pqeQe=gkteIz&CVwd`M&zJuL7J`B}nP|m_sK>x^@4K>Qo?}$};zmVBVkWT*d zx_^FH&5m@Z`?sIc{0?nN(W3dS<!GB45nRcql48QrLwjR35gTilT&+*R6CgE`e1@nh z(TG7B-MV?!d(R#7dAR(7@Ch>m8eK1IE2|Zle1xQq;qpR|t~Gw!RqOsV77>FT96OA< zOvAfCGk*MHC^5u=pOO)PZ@P+7v@!)b)68@gdb%JeDY+k_(cZ&T`~GoV#;sqQ*SMG( zMm;)VO40e6lnqOp!p@~%X+z*cH&jJNSyKFOn$Lpx-?;(IYQUSHJ!$kURYz5_E81O! zF+=!UWp1&O@bEo3g<KCQ!w=5;e<tCJBI_{_F<B$7-1}In5BCSn_Gj>`sjRJa2>BB} zjv|%+!l$lq>#bsbt0opiQFoVqjV6(M7!YsCutYN$<F8?hv2)=AkC_^ODHN`p@l{3Y zq%M(?Qbq9KXx*_ZHc?RoN81G7{QC#ujR64O=M562{=!N$ntH|I5n5BjxFfzO)zw<r z<IH+Cl2V+Jmg@(j)L0#;A^4L!F6wyuZbwB*T0^=IFRd;0JKtxtukKJ{GXpSDqTTxT z%aXcvwRe>YGx(Uy+yWyf5bGqZ|8zScB@LGn#LUi4+lWpUT=FRm(Sd;HU_fc2B6Ei~ z6PHBif=KdNpzCg^=c7>wADwW20)-jr!gpr-s=%`1V$CFGCiyyEIOCvQAiJG%(fgSo zFD~_3X4K7npwt005ZP<(K%*-<-?->(MYTk~mjN4a<d~8WU;dQVFE-f?@dh>pE(0n> zV20X5A~TDE)~hX3a$-Y(;_zlrN={yDTzQa4*tQ+EYN0kGAx={t<+HKAL#_ejoB+C% z$yf=Ueo++kpO`f{_%5Um60+V2`D`+wCM7d)HaA$q1X=Mk9_VKFFMIKPS5%0^4D;D| zzecc)A6^zFw+2-{G0%(Yp~LObh{C&mW0t++)zK7hjJK*Q`qJ5X{R>ZNemf;4aj=gp zJf`UvQJf$fmbIL;FewsK)D`jl7Q+eF^oDr?zb$Gb;6~hScO{^j`6iGmM;&fQ(f33g zIpX469~1GZ&LoG-xLM*;D|U4U-J^>ne<zkJ&{wLN{Jc%^iKt^xU*bVRC_ILiKmD~b z@~`heCWh28gqsvH#AieWf<xeD|HaRSMVDy}bwo5%qOyb#JZQG#5#Cwz-IXB1>TTsk zq@-JiZgpUhuVV;51;q5$l@ec?l<L&q9aQc$L<ld@DG#KXr~U;xShc6^@HfeiIcb;k zvr3gz_(kC<2^>EZwGa*AXt}P#HXW&vf~A`wWz%7CvM}Xd)b;nsqJYoM@s@WXqknJw zFR0d-Ca=V78_CjskqHW!;_~S{B_~lSb7hxOdt4Y*-iOZ->!_o`@wp1iZ!Y|(u~JOa z<_?msf7=3hoIqv;h5m4WAchOysWb*!`tvH7pNo$>g~1g}iYpH(8_x4@U)m42&V)fz zUwdsJ6b6Q|W|Yw27DaU4wU3BX2CkSW{GX!qJUkSR_>m1&eyEhI*V7^k16h&4DEau~ z{i9LU8KG=&|7Fh!K?MC_xMc_vW!8FVU=h3lV0mYq)WwQLid^$%xj#H!_u?veVI0kz zVFMUj80QU;eWHYxDYgIA2Ki$$N2Z-2E%rtDx{iB4x+@8kY6x4$IX6o@WmSM|$GArH z^*A623+jVT9bOFY=PZt33w3)9I*sFB>{v4@mj9N={1lb`Q?_GDPQp(k1w#DUt{Gre zIp@GE`KIdISB!wCedI(c)yP*lN*fnGXrQ(ReQy+k%P9aKh#KZKDrCkFUkz7`<cw#T z8zKdPx)bE^2s!<X=@fANf!Ta+gW`N{pH!XzmOU9o)MiQ?fDeEr`hkKBLlf1I4K;Rs z_=U3MUFM2OS7Yuh%Rw1G8(gJB=^LK}Y6ZYy_ZCNnIuInieVCRNO>!O5rYrdZOPdXt zlH8kt@VBy^4rbBTdJJ4qJxib)5oPKRNIxa-ZR}-UgJl%STZCT(hvc&YnPh2KYO_j( zRBwvIp9YzPk!hE;m(%8y4>|d{eD}YXE9!;S=)#n13D<!}`$xN_*^uB;=QmE+SvKrH z8*>#Dy&c#R2AzHQ&eR>ew1jANXg~YJWI8GhC{YKXUQ1#m8f4JyG!6jry(=jT+G0%Q z#Ftn%@dacIP#RT>27L$`M>b4yHOYdDp^7uIlcbZ*^DGn#1c`?8yk8_(d%%b8#%>%> z!|>A2Q2=c821WmweRolOP&_t`QXWM;uJapEH);;1v9Z^QEP-kknZc6uOl1j7WsNdC z5WN?`mt-h`QrAYujsNC=XHZH)R!9Vf(!_YO4+Of_PxH4Z;l$T|UqiJ5=wIGuu$o6u zx;<%O?Bbu>S93D>Eq7S(T?n7T)bf>@iZYFKPzIgmp5T<KhyCtANz4VcigLCJk>+r% znkq%d=Pa0tn)XFFbv&iLs3kJ5@?T}xYG%4hqPhX5j>YP~Sa-v;rRBiyF=1Z^?F^Vd z?hyTNvv&5IzY)G|FQMWjU8^Qpt?$?bnwn69%M@+ekc4Qi_-CS7*URU{ZB01e`&jHv z{dN%*$Bdq^7}HU}NlmGT@i4%P2Svrvs(U5U2-4Y!QcGd09S9qAvL4LdS5}|if&&BH z4c=&5%e!%#N3zYb@hwP_gr)Asp?TGNH;r+u+y;Lby_79a$KfSPNID<FFw~aHipS9z zOaQ^-WTrk+y`N6VkjX5F%RgNeO31mGvP6kSgZzGLYA`Z_$T=BZ`i3W;z8m>BqKAD+ z4*gl(YHeioSH_e?2B}CX{>ePk@|hCN5N^F>nOs^4W|?^d^smJ`?<Dvq-nrPg=p~Ld zyc9B$$t9Y9=yaW%hx#Ex<3QnsXs@p5bxHC}EtO;+%efar`)y`qrg3+QqhFK7N@B>_ ze$9;%em5wNW4w@ewjC~p1qV?T040{Hxj#+SSX9+baWbc^Fz2oC-FBF-{mF`B`IcW+ zTIjg{URi=9q=0uJWfBa7xf^}4etHJ$mG_Y|g=Dyxl8MmErJCMeFnRH=sqbLh$$^9` zT|)i+G^DVt{rw}W8n^0Xs@JYLD_MR$vN(5?%j4BZUQxhEg?4yq0=)p{ag0;?3EXjg zR@;^KNg`t~^LQ1rnVZn}Sn$~u4ZR{FO^)zJ>PR>Lj}xNmygDx#HMOd(;DE~7k*m5F zU%7z6p@|pGT>)w1{nxpAi9a!HjrUsHT#EHp3^t?eiWdy%TtRy5-%8bf?2HhONgRve zCV!^ND>Y_j{0kbY8rgLysm59DS}rf819Eg@$|Y>d5HV65rzSrCi;#IZ^@AM*o?3!z z+Ko!5uhdfdzjl9h1X4>2ITF<PJO=~lp|z#j4h)qPSqK>uH-MiGF}gv<9yvM2uLu`Q zO|=RieB4+!tf<9=QJ)2A$C@6XaGVKR=4X}9Pp!7a6C|&T1MTI}1!{f|H&<I(MxGDg zC8>RtRlWJ(w&09X{c&UrA1Xtb8kbk1x7&7Io=V%=FtAnWF!I(gf4?0q7^cy6+ci>C zW*j`1Yo#>5D>hqd(;ft!=;2RGmPTCMM2Qx_O!PcbO|5M$WNa8GE8f?LD(e%_fBPOf z?Ii^;wSdcAQ&ZM!`Dc!mL~C)VF<7U-9POZ_BOD|!-anGs_&9`SQ7<Ql1jhYjDq@9i z!_DwVySA3t#GL`|#9dl~NnniulPLHvX!39x&#=&Whg4g<rKg|QxS<1$0ti!eWImeW z;Qh&e;x!&+G0_*y<qLZ@F@yzdF_`XPz3dZN3Cx!GK9+h{$8Z1N(`Z#RVj*+kgKN(P zpms>|HI!s~@Q#8?08x0nc=)8+L@~rateg2h(^yL|1jX_|3E#aZ6sk;C2~1rI*%R-H zsoaWdza?<28rW$H?{Ou^<99@Z9E!R4ntC_&0KjOz&AbdA%*}nAK{0vv-B0uYW4=fF zJ_^Iivs?<k7l70Owo<dRpR|XA_}Mz)3TG32?Kz{yBB$IW37Z?i@;;<%W2h>54tzSt zMcK!s{*J+09wa&MhW`6*3o$TtK&@&`2jD@V;Yw?ML>L+LS#L+7+X4Nm{0}UJ=$0?O zuTco#WGLkty*Y1b7&a545kxJROznxH>K<aTDr2Ww42U}(T?bMPkAC3wdN%<H3#1}g z49SyfJtX93{%xBVxjIU*?}HtV&)@#M8&o42l+{ui!TLl^{I&4|dP&@RM0OTEWI+fB zTNHGmkjC*lwJk_z{J$6_2*h|sV_*;3+&>!4nBj|=E%u*o(jNvY@4*Nbxsftnef}y7 zeP~6i*aEly-EZ{Bk=we092J@)0;6r=#pvPTWtnp@Qn-9vE9GQlVhLliJ}o&>5}C>h z{`YIvlW_~BDv7;2AK+2+y7jB-(WKfz?>fBWhr>pc@~%IkdhIGm&pLuqt#+Ttjo%R^ zQi8oAaxg^anHsH*`a@?-E^-I<1^Idi(fI!2v9tH@Cpf}QCAf(JB{S&XhES#WVkXpY zIVdBfehrKO9{%?DTM2h}#-BdxT>y#=yP~xsa`#;zcm6*s5Zl3+qysSp?0YY70qQ%K zA;w*RD~2P=Fgdk`YwVR{>v&Z8OGEh!$(}>z92DV7XgsS+p569wfOCCkGm0BzX^XrE ztcVafqdS;DVX|A%$$F1MAb~bhQ4_Lfvt{iWO249|h=?89LiMu!iY>xK*VrViiNi~8 zZW-vZslBzcr80=#+_6t{2ezKjUThCY8Wqd2H-{Vo;3YIeycZS?%`!FsRN!$8MG2sw z={~ge#F9coD9rUJtAAg8Hag>!E~E-&TziES5snhuJH?%UN}m2N%9lO1Py-K&vyy*I zk2`f43nhJdH4tWF-^S+ocLG2}d;}P6ynV&C;xe`sUUFFz5ivPrrDjY63LuwyMGLhd zU%7l?9WX<ILUZPs{A~0#p2tnRVN7F>07hAa1wzSzdq#YzG)EviZTn7w#Y9T2DP4{U z(vFR@a6w%=&m#FIzUd;VvhcQDIs=<tHH9u_4a&h$;`b1;`@=iE<P&wJ^gcOM-g#vq zEw0jv!P4}T1EmWFM2fe+_(It_oLj5uOHe(hI9I|l8IH>tB8|-LdX_~-?G}YijW!%+ z9hcF9yF!V5Yr)>D4iJR7K7XkJcY%E)B1-Mq{_9#NI>kAgXxtzHN|T+DuYaInNw}0M z-QLPzsi>?NArdTnj1|1RIJo~RtHFDFzx~PjU}<H#3;!~z7Bhj^-dWC8zF4=P3Uuh` zgzO;TfpGBhU>1Vmp{iOo?{FCBnNWv3JG`Z)N<0c~@9$B7^4IFiD2{<7SiQ#ypo$-C ztoO7c75lT}<%z=HwHS+iL%47jOI9f+e|_gvg!4NFCi*lZ-Hd;gji0a6@8m5{U58;I zX-&a)4Xxs&6u%E2dvb<!ni^z}Y(`nFkf*&j;QlL%2H*2^?qHb)D=K4Q@?r+g98zX# zYH|}<%jJ>R4tvjH-1gVfskZL-pX=h!csvrUkeeTrJJ7E9m5U+Y^_R!?i6t7+FCZLz zk6~<>#OGz!3F`RgG;iOL>q33g?kiJQepA{oW-Q&CV{p}@bxlxaw?LybBGHuYouNCx zTvbq9ToDe<G(jus#LM$+Y-PTuz<IaB*yg^#si!F`VNU)*bgepVD%<C-`3>q|yJv}( z&gjy;IFu_Ljj6jD)*DnA9Su)|3;cmtpKpz5=6_iH?TIRskca-^t^YEYBRYB1)E-Ha zGCwZ4AHZ`^a78+Bb6ZjV;Wv*)pYjOBs6$KAuiOuV^%<<16RE4hZZtsS(a7}iVO@LP zm(VD<B5)1b8^0YUAGZ_LLzz^EiT;9izpe(+IdM<L*!DQ1z^F;%G7V*2Q17t4`(Hs7 z7S5?PZ@_s3>%-26FT=Q&RYj&U=sai0U-dNxzYW87V^gyV9I=3tK}4c4TPSh<=&~FX z$fefzRagdB{W|AKE1uR~=-IW0LyNsuJKU#!LIHMU=QV_FterN0G-LCmVhAKvHr^mg z{i(fp1Yl}vW3d4GZs-G^0kwp3JYjCmVHxzgO}wWXTbSr(w0!kFR_e{m0a!}KgdgFJ zR{rQJUzWDvYQKL1{~W2tiuiE1q@@4!T#(z#kqf^0Xa(Qh`z(<=aF`g*=NaOi{}%+h z=@;&WL;A!hp3~(RG%;j~)*iXOSqx$j)T}J5N5qg+_?Xa3J}`1R7+v&AHuv}sfh;z+ zE%FmF6+HwBJ+t#)a#<%bZx^K~eEw_>)TjDZ@q}8*>y;c%h!cC~twlp+uuazLwv<Q1 z(5{j2Mr8>lNZktWh#=?bniLKUBSNjO{vF=8=7K~*J)=PQ66cjm{z=_w_g|D~Ql=w( zsAQ^i8%tGY!QcjCGe*?mg$$s^GMixfXx_FR9uybzH@gBI2=J70%WVJwe2X{hjkzhR z8NvrDz$L+0gl1`)7hC_M1Po0qi;!5*{>f(~ci>B6IEdzhzVKfV)OG<HSF+NMs3q`3 zTE&mfgc%@@{slFFNhKTgPZEiMWbQ%vDeIHhj<`Ct(n4i$p2K-;3FbT@5&a4hRRo53 z;p)Hpl-!TTo??fkXkKj3FDDHSDFb0~jr}6?%KaBxfjG0Frlb_W9D6!HGHvu7>gtG? zdmKS27Q>P#li<+%3u?&$<3_V9o((9OOz-fV54uTmQH}0N&Pv#j2ft?W;LF8askpl{ z#k2XHNCnMe5+(f}2?_k81vKK;10c!5Z0hy|7d!y}SaP$&gHM?EQfz?Klo6K<Uf7jX z9_z@AJ(Nh|19?p`m>~~ErUh1~=G}X$Y8seCAnc2Jrd~n`3Ba-<d-s}*gY|%%9@}`V zjz0RbVNO+2E=E7XM7Zo2bhG%Sbkmx-UzqP;$VJ@a-|g_Gct|eSDtKnGn_Qt;07i3b z`CSAK$05m{f7*2~McF_bb3YmMw^gL~>sc|fBsmv=$L8yJJZu~~QCZ{a6AbJP?(RHP z8SUn+uOmu7zixV~G_#=}wLdt#T%)zv_(wEkE%=21c!gvY3z`uySivQ&J@f$B11AJK zCnc85jm27h3Vx3${RX9tiJBY)kcbhLB9KTf5YC97k>`%T{AOgM70*XYevnWJ#K**e zu_PzFGMNJ<s}I7NkX0~j0(TAUfYYl@;<)?qoMe<3UgcOZXkuoNWK=1`3$I7vJ#xGR z;tcMC!y4v>z;^qc_w4&fj_>7M>}a1jjNz9oVX7XP#VH}UjST4c@Lw4Fbpk{S1bbqS zRN>49pWgw}x#E>>mgG>InPjacrb?>ai*`wlEvOsa>E@-aB=j$lP<BT?-Dz#mYz(%= z;yUyX61qy4cC1aS4suHB)Imf)K9n=btr1D~8ptGn()dJh(DPV&_7`MZ*U_Bw7nD>9 zd#HsagdItbAZ;lTBbvHrH~SaVn5Eu)Tl?L%+bwOuqJBS4N_s(UB}uVxV+_YaNlgM) z)5BJR$}2$Vj5$)u#;iQXBu2Sd@_L9opeU;B*P!P$x#KXr-B-$@<?)AxN1`7mk)){n z+_<=Mdg6v^i`$09>KSVLb_i8|9x%r4;~icHIZIq;<R+F=^Cus|oV<UPM_QK_=7(9_ zo|`_nyq}=^3kp&~xup~y_YtPCF^jkH747Np?BMC*Yp|lrU+!ueyUZ|M`IaFaDOWsx zbk#YV@Q}{Xgj>LM7hPSLN_#^;OOW$$J(hKAw;`JR<OOT~htp?@A@752$AeI@w3NAs zk(>frh*I9SMV$JAE3ozfXQmyz1xh0I7{$~PPgMGTlZ{B$5I-&1!q3E?Fm<sI8?z9a z<kWBkNrucWitZTUoe7iBA_<er>}!=hH{69)gGBQgg}S!+bTK@k2JUn}GZn@K_K5AY zpIEr@Z79)L+qSTA{scoSTEpiIqN_2#nP{V^qZb0ZW_}~QKN~as!*Q3`=Za55oQ?l} z?J46&_SA3r74u~8cD?H2={I>?mvmk!2iL0UZn%t<thgjvNmejo2GXNRM<t4|LqivJ z`F1J9s@6Z4KSUGS`ViRBl^xzs7lq#=a@e%|xZ<lF9D)0~^1FFe<ymlr;a53jDC_qJ zeG`c^fI6z3UdmveLAW7qQpw~xIkMB4wY(OsSAUf861DnB`eUDP*eYXxgjTJ_%a8*l zw_<dDzXSnMib~3uC@q;y%<sBA*5k7`Ps6H616K8_Uotv2ongHhVTc>49zx_Em+}m+ z>f1U)QS;xWQN+tbwcg;m4#K4APm|N>i!<g}5_}5}DIPkRsz05<r@f^WDO%dJ^RA_K z6b%?362p^Zt1yS7aB$)9*n^9MQl9r5?uTDI{tPbASiLFXekXwIt9OFqKU8znCv9zL ztS!0NZh5M6GAr`ZgB?&J`2w*>!xTc^pbtNrAKR0>>WLq8r$!4!cFV#m`tf#GT{Ct@ z<2-RPU|Zu78lNHLbp7<!b1?Kd%+vXmUye(<Dx!w-q=ZsRon!~A8qHU*L!<2c^c5d* zuoK2I0I8lf;KJ{`?U^-v%uTD9)|+e!ivyG~mFHwR`~0U>NRY_0Y73>tf7EDs9N7S1 z3w{;VMY6^$NG6i#@3voe`aTa~-XLniqv8TWzkc>uYBWww)~?qOXfCR(mw`0St6M3s zhnrG7gmmUAbL+!hlO<J+d0L$y$H}*N>}~7lP8T4yL5BX(3(<o(NtzRWvYZ6pOEjAW zpid)%TUrb!p3`j86o2>&DH0Nwz49Z4+hjh9%RpY)F+&z^d;YXf6sJs4@!w$#(w=x- zhLTVXkL?9f?G7)aL6rK=lE^F-_dXVPh672d5mfB%q%*dBMz$95T0-?K7^qC&$^uUB zrpI~FR|A49T*&cd*mmd|9LUaLd_mo`3F6L6$^^)sKFCi~aAkd}4Qaiu+kt=Be)^&V zY7WXnQf1#+;rLS*8!90YylZ)B9fc?QhR-?WWXzh#=sF%i66(XlV#u%h?u>lZa@tQ* z>WadRCDRPjTYSV<&-94PB;Mf-RU*((Cg?PImcMT~u$4~Lz|+4V?fc2EPz~o)%ou=# zNR7pgzpx2<>HqT{x*g$Et<_|E|Dr{g&B9L*n-Y(&8}=|5GC_QJhPn2Nwo2ogd`EZm zm)vCk#RjU5Y-W%Zyu`boKJ7>O&4|}({1M>bz1&NcZ5+Yndl!sJ=wfJ2U;=3>_t!KP zKu)BwTu8>86MP8G175?4@3>2kPuC<yc2?_EO?8!$fuR%KE_>JG>DL3i1|aFmNY~MJ zKz)5p0N!CmHBqw@u&HQ~<#To%AS2|cqd;~hKk3WG6t8c;t1?yE2eK@JTp_1|Z5=H_ zb0FHJuI1)<mf^MKEe2hVU<$*bIZ1Mp&R0W+UA83c+*F|QI7O5{fm=!F35n2rSnu7x z?mCBc-M;5R^xD`YHd-h&InSX4dA@RY-WcE7ebWEUi=MXKhtNs?V=zYf!(}gA)AyNx zer}V}hp)0=7n;<$Li)pV7L2oaNUUHs#h->CCBir9+oc`kSzA!XvX&;w<@IzS=dZ*l zfEkn>3?gVFy9l_K5DF}BV2EHL&Eco;_kLvy_Khl;u;uYe3~tzdHiQ|kEG-WcBwc73 z^moVN3>q(AQ|I52=x4JgglY<w2B2s`w|*tVU)tk{90CSH0jNqxAZo|n!;8!<>om)| zz}DD{d-Q+)4OR*xg>m*ya||!Ku9za%pm_Y2WR^PB-5L5T<Pg9yHgK;K%E#Mb#K?*4 z(S*U>)Q$U#O;#(8wgLCFCV^Gu_zRa~f7JQN(86jlNNxU^ehAFR4bTR+@yy)u?L_s( zTf*jG3d?N3L&kpLtsrV<X9ZNR$F^RWy(Do(RUp*v#{Vxl)PjOHDwXPz8(<U~GMuQ1 zhR$+94#_D0y$xj{C^Gen^#;=Z!iG|ft9m{P@@{JRI_WsmfNEooBDJ`9FOG`a2S2P% zQUlNwIg*j=9f;~$Gz2<8d}3&YqPF<!RXu#p#SbPc%_mFo)$1CzTjQZN04eP^QNMF* z{~|1^D(#&)Tc6Ovc&}%co6!zo%`SD^r8qasxb22c<7)THqc~^(bz8Jo3lW~8Mu_I+ zFj}s7;zT=>Ld;0)2Yc_&AItA&`wtpR+Wq8Nrdzx_oW54Mt95kc#-_4{y)B)n$RBI| zxNMahl*mfOsiOV0Z~;;rO>ju8;Va6Z7t3S*(rm%?L-kvIRt8CaM#qP5W%oOYHk>ah zURE>(>HXhGaX7_q#0eTX-@94PxaDIK#q?#IGJ3Q%yQSO3=xUXHJGP#!VXl@wz$NsR z9)v{DkMto>(Jn&e2(a^Dv0=lDwArS+ht^oSFy~Km>dsabm1Z9ud=Zi3Yn+g^P>tn+ z6M{-ow2vxVrf++r3-}gEyVHEvjT@&|NP2Up6ZS5?CEqUfQUl9+#P_+Ay{Eo4=(aP? z!WS2!=QJYX3URze#iFt_L_}#GZdzXd)5ncUCKvC};e%W9HjjkYwt#<K&wFl83<LcQ z6kLjPcy59)CoGu-sYN|;-sn3KYuZ&L*{6?{#kXSl`4iS%>3I@wp`^IXD7CZ-Z#7xS z#C3`m6tPe;)!I8J9IhT1T<i|*)aV2cNxWjGl}1wh;!4#Fhp`!FnhZPxD+`Y&;%j?{ zCZ6VhWKCGO_t^dNNd19te#w^-Q_mGG)ySIib7eXCr{$Oas1=$o6gvTRawN_$%rp=R zciB(h?8wecMw=79dJs=cyqTzv;Akpbd2aE1$Z>h({!$N7O;+I6jOHH7$iX$Ep&r~< zD?H|}Sz8?VU94vS=kzFNQZt#*R$+Nel+m^<108Od!^|Oufm2JdoopjsNx+64?aOLW z6&w`&VZ3<qcHFZ;i~h*EoS}J+C#O2%Fg=3>)@44U_1o&UR?z*Ot&R!-do)QAa0{)j zU76G$a@u9a@#Vx;@MQ9?Jdb!1cB?@bED0ge%JFHrI!z+WairxSQb4pewcf>iM7G(` zmJ2D8a*os{+)8DZEVay3<Hsrz<sY<ryH4a<1|;gX_~71H+(Fl_z><n<#eecWxfvtj zieEb5CJde%PDWMUH!HWILAq@Cm|{*74;w&G@4&+K)yy=n=q`fHMAV|p#CVol)CP#x zrUZmyeaf90^odKh#;<opw>xrte@6}SDT>lP+7Yb|%meWXGF}YI9R#Jy-lX$2aEbtV zZc5sWPE02HLW3Dvz@~BP$q)oG2Y@CYa`EF>s+8f#a+w&DNM~T_I8+&l_^9P>xaILZ z-QrNq3nl69UK9{xAe}EnJ~h>fJ*-xP)SiaE*vgH@FpqxTvakHP-w5_1+Qd8zRy>(% z0Y}`$UB(6@{UX#6`d+XO<fON#%XyP!f?@{aLJOVooF1RqDUI^NycO<7URkZUqA-oY zDumRFy{i&Fn&>?_G{)`F$&DsSR`WN#w2;sg_Jloc?iLE(9k$+zvV{V*JsTI3Id~U4 zaL1nh|HaZ-_%-=||9g})0s_*Fba!`mj7F)^AvL<CySp0%>CqtFT_dF#9ZCrL{>{(# zw?ANU@3GzIb<Xp;j^Z5<7D1VA=BJEM|G#D^#j2E?qLB&hW@@~m)}ag^GYJ1fv*H;1 z-yY?b2{rnA`HAEBw)h*mYLQd{{dxZ4n1Cc7pFaT-uLvzo46zj8t2lT0^IwAs8l<TS zLzIYH+l_MAIGEn>BjvHUM79?jVmJF%oI(MrDS)oMvYC?i-O+>snV$J6&^_~HDzEL8 zOLZHc+0mmXHRyYkNm(TKW9$YW>`%`Po?bE?qST;5s;HqUXMkZKrxOXtZtlY#jx{_i zT0^a%7jh6ooROsS!~M6VzOxi=;s5S)KS<2h<CynNvN)9b`?0=usX)J|jGoLSsgXvY zS?M>n9l=BHD-8n*!do|MM}M0J*xi+x5tJNFlAlno2bTN0^kQi(4W!nn-osI)&fy4| zrWncr_QT-Iljt)JZDI<FpL>i8QAuk<*8^mt*m5QNc<^v72Z;(yx1`l4)Wv1py|`}s zIXD1*$|X)wWzuit;cDhgjR(;6LV=ouNj{r<#1w9s7=#@v!gt5VPYnG*?53d~j3jL+ z50$>s9qYpz=ei-WHIbpiSmYBFUpb5aMPtJ`BG~Xcf~|eKy@W{fZlZzs2=Jsb72Yxj z>U_{wwKe(GDPM9Uy}*<|J)aR9w4D%m8j({a@Inl<_;E*&%oOt=x?yGvIHjI%6MD9O z{<cWYJ74l8PL6|Tl>uH#4P!-kQ9da*SjfZKYch{=G3A1r*O-4E`mpTTTuzkUgYT_i zk+n!NQO)BY#gQgN2X|xI0nm-<66KVrfXzLMHxwj%%uIs}Z4rHRQS*E}Z?4#<li(Rn zsqXZ~7LyJM?R#=SnP|7Sp|JQq>LC0c{vic3!f-PZB}3{7PGsw2{9qk($1^;KH|!-k z%x;;QLuo$BPP{=Rt<t6_Fl>S+JB018<4mrH<9}2yk=X%mR(BX{24;eA4I}22vijqr zwBRRiwY3EG0sDO89TiD10Qj@=3wC`7$FR@a%f0B8&_ldfL{H9XzkFOe`A{+LTPi`9 za1>(8=~{NW068C8c$N0vmK7{Wd0YRCg{@YRBIGTPlg|~j<`XpgDF}O73if`lx(R7y z=9QZQ_{DKVAf=Fp{Rf<1on1$=Woan=J>HY#im-$ekITyEJZ{VfIr%k+5yo>FM0)@J z7JMFtvZj2SGv?__`vZZZ`xIfH`?{?UFLE_EolQ*-XCEG*)j%@>E~jb<`aE~Sz92`M zxZ@ZUDXk$8s)oMz#r&xBRKL^**E$GgY#9p2uVcz(zTUh``~HUJYEiE7{(pT3HB}~# z{kx9Cex?BoZs1}`M?8WJ-5&AUGw*Qs@Wws4CSS?jy(YT&YFdc@VXz+N?%MnFYIRok z^2e@j&)=4zS;ukd&Z{d!A7L^cq_sl(4H+RZ?CQh|!Og>&3+_m`17!6{9J<`^Tx^41 zKoQqh2mME^bZl;J#lHEa2}Ti0w;sW#Yq#zEQ4Y$?Wf!*)Xr?U+7b<lP!E&4S=nb2+ zi%$&QXoM1x`Bj{yH0aF%NHyE~=N>4xl%S;I2w9yPTbKPWT`*pNRm=30^*x3W&+9$k zMBRsJzH*q@f-*9m1FEt<gJ#HKV9<;0k_Pmoh~F*xq|mE_ti|u5W+y>m`pUz;x}7#j zxU{%@rbRrb3Tj`6VC<VSFHWHkQj<$kBSxo7SThZA?6fG{eYj@6|BW3InHt;gL~EMG zJzf%7W>sBh8^cs(NLiyMDw?l1N)JwnM&zRy{F<;W9@R#of7rgsky_-!Q=hm&-UhT# z5nClS?so(Qsw}dVglhfyfz~K~m0fQ`mT^&4Kx)Vvxb70iRcmZlGb68|n5n`9qch|F zj%O`Gs6SaN3=jjflR5~F5sXZF-_PY`iHf=O^QAf;UL0$-$bLu=U>of8xaj?$$Lm|g ztI#x~%`pQa{J^#Fjb>Oitvbyj?yG-H@Da&DTH~C};Jr0Bzl70mEi`G~j)UN1OcG(k zZTWPZ$K+iT)^3SuQM`hNRi}?vg7z&dd@Kt(%SXcUC=8}uop{3uz@LR#O>jitSM9_m zkH=}kqbL1%MQ@*(6-7=FS~En17uh?<qxAlkey^ge)IvnXkD=UM=;7Lyah*MFhPq*r zr>9gc@5A(d<P>rS5@&5{DZQ8WNDRA1>2PIr67^8VIm^Mt&M#(n?DR?2L~Z#r48QoM z+H3VJ^pEz;pjg4=3|DUvB|`aBmCvFzpt(yIU^jagbaete#SWb*9w)LpRIB5U#ptL# zGC+;Kog`7dZ5#W>CNO&8atX$W42Uup@CJcDrdA{Xok%Ds#0f=AaZZ(FYAgZW#)k-V zLud^-P_g^t_|wyqB48|ktj~^Ljo~64YIWxB(zqDlZ}kn*o0WI1=d|DbGLO^|p3HTR zgTFdI`*}o){3eYszI4m=^B5|t(npP9OlhYyj^;T%`%wR_sv>pdoRuL(N5on}I*DCj zH>;9(SV8E1E|(TwkY?psW>`(PHwY9|0B5CBH7V3D^tz&+4gMH5ue4X_43xRS!=RKz z|JS_M+6JBR#1Gk#7An=W<S+Vd2o<PwenF1qkv?&6dh_zzgy?rsNESlxp{2qd#qD^Y zn42))fdgX@@2H!-tr;F2JpujM0vtqy&*9L`o(00JX~)^&ht?0&)$Tp@c4-fL^X^Pk zIdF^(C!DMevH29_Y|1s<?b`&4+E*Uw$2w=-B7*<@<7XUxci}gtKl9uBnL@|W2Xg&) zXvG0v8t-nC7+@RT+?fu*={j{6li+1ZEH;jn<7>H9w3<}l%~(`|7pmkGybmGxNm;|& zs@cJQkNtzRlt~90JTRVf=4PLmn=_t2L|TgJu*k6+#A@<2UgG>g8Mvu=iq$i|b}KQR z-(-tnNKM-R(?RpM;t~SB_7ZPb1)IvJ;m;!(enqCD-<3xURIC|L(j(q`{DQ@>R~fsJ z4!n$>pNhLFZ`8j2ZgF6K@L-*(oV0`4MFd#^5zD43wo{qj87F@oA>Y|SS{xIF&@Nj= zvKW|Z6Ho5)^P!V6#d68jOe>&unhSf9UxugV#slyRSrw-YrQQ9obRF7Vc{8Z1YBqao z-c9N&>j;)><2w*pRpuLSb$X3uJ>`RpY@B~M7op%p8+o8DkDp8cE#Lo6dWf(56G-4Q zm<IN%gH=?aSJdp=ru8U<NFDwD^BM0u;QFSF8vlLw!QW}EPu>+ru|-dh?FqbqB~Dl~ z5&wNBhFE`F<3#sX=RvCXCVR78O4#U$5O|-`a=`ech-U3-*uLSHSRh`-x4QjxR(T{r z)NqQBZf}&VdB6LC<?jefY+7<v#t|YYaI;acs{6~Wj3{JE->#;}4qQ;-R;x$SBtrDp zR#TGZESMbW>V$!rzP`wrPOhQm9oBH_6<M~nOCaa!AFid3XFk74jeqw^Bz#%++~>vA z9aL`<W?~C3{xygzHBE2q^9vU-f%ej+s*;JlJD^;QZ?{q)DS;ZBmcwC~`b?u}=!Kl; z;*Cb_onotr76Bf)CZ#jOp-U{_WS;6<CaL4L(!r^{<Jr@10Yq(Gu03MfRwq@7(5ZRP zq0h`%qro-_Qip8ex_SFCL{~p}7+5aBYoh~>`5ywA46~Lub56zn=HE;;5lj%Y*+cRi zniM>x6kH5De|8l~82-CF>g;Bp2#;%1Q>Yi{@mR&8hta;H?+_h5TY}0f@JQ%G`MxX` zS9enOcN6GANl$a>$pYI-^|@R3>Zp?yDndHh(a*;NHA7DJHXPV?87Jx<y5d|~o{uIE z_7^Lx8*_bEILtmW9Y_r%NC}RdxH+**vXti3)-oD6z4No=&NacaXC9w#Z4CQiiVR?) zf~;YGuj*^Uz%38)jBEO{o)~6ZJ5_ULov`OyqWnR|MLW7vvm=%JGzNR*+c0C71UxfS z$w)lXqaiZLv}ePWZP|^jxkUsgC>*FmV7bJW$RaGMrFY&DBY(4q)4y6k<r0c<p8Mg) z0Di4Pj23QuxC;n!gYX@46!VsWf!^&VfsNzZ!x?dEd2<Sn*#07pLWF{L0QO#@NKKih z5wvO)eVzB$(C5HKDc<Lchv1U}Kqr$31xp)B+#-=O1^Z$Td&*r+WY_2ddg55snXl;4 zv~a8I1N%pV!FUESSBvjh*(drLh|wHsn288OmK13WWQM7)9;2eJh9e8}X)=Cj+%z|& z>>RlSe&$v1F&>$W!T<3D@%eP!cFRj=qD#cnD5C#QH8G&js<*`r2RD?j1wY$M|2+TF z`ZFYFM$9^Zb^Cqrw@P|F_4gcuG`ILcbfNNWYbYIG3aE>|cnJX>gwVONX#fcteAvuC zDc=w1eb<l~PmzO5e>h67_%V0q;j_{7T1RTp<|oQvvQJ2Qu}#$(o6&GDg4nx0_Q#Lw zsDA%Y;O}_z=(bG4emL1~>Kbn#716E5DC$T>aM+kBjOQp@;eT^d678I@D2B<$+}8|0 zbGpRT{6`;d<b=5QXede2OUUMx_$1im1}RQ8#b$jS40>qOMjg`KrLXII_CX9AGF0m8 zyFVx-I?!w@sthya`84q5*gSC*wK_g#-hR(@@aK!n6`crVBJlVnWPiYp%OqMyi=q?Y zKlmRY@LNm{xv8Vb<^SXd2&9WT$a+5%D<weiba>p-)xcMRftFaiZ**kT+S9)z6LBWB zh!|z=fc-H;qw$6ba!S4}pZ18~vfCJ;0O^0K>?1DlkSr)vXUCa|;7!2?*|b?=<2(WV zpmRarT!*QWSaeXigKg~B5)5L|$;cUJ{q_=nUwp8Z;n16FJERWInS@t2jUCEILG7+5 z<nGBG{TZiCfgHZ$&K`n>Ni=~3ig00~-gJEDA8rX#!oTFTh19$QplhxYZeys4X5};c zMvTr|&Qt^xX!@l3O7QRAX30Y$I4hFIxxSEtf_b}P?FMc6p(LizruSu7b?-PBN0#95 zGO*D^ruD?jzi%h<_D8i9IX{_bGmu%1*tZR2S5*b6PEHc@^+>3`Oo2cZ?9-iG4%<Dz zcY0$C;u0QhWFQKlHPhr|^O&kM@+~^i*$=T17dBZe9VdeY)0+rBpjRIz<o38cG6mw% zHbE^y5MQq%1vx24J>HGdd`n`z$+O77b9LZ&P=&$IdD^zdnccbeSTvL=oW*$o+KjTR zE@;1o0KwV@+{*?u<@G*41aB0KbIo1ECf}+VH75>{?Uj|=@isuaee-6|UG3Aj=Jr1O zMI;HM2iK;+qUX)dpQKCc>VNF0w|g}s32k33*M;FpZXGUQ?5w?a1K+@whA2Z@33XM{ zVciKexU`Oo%RkQ+ArdZXL+39|6?c83d9X>I4L>G-tIGnt8%%$o$8k%~7qYOa-&zcp zQ>pP9qGAt|<DiFv!pp>*u%y4sb<pa4MM{;sWqzy870-N)uoLwlTssF?-H)vy!MWUA zWxDMh@CSE-@i{qUB{4!&sz;AeNueolnZsc@bb~#sZh{HFl;o`T+&Wx)Z@d{0_pYy! zL6O&7_|Ha-z!;?c^3O5!D%cW|lR5YU6{@yfU3(BUtN0MoV?ZfF8}ey@sx1zDA!>G2 z<m0bNG+^tRe?hdR0UxguJ@iF1Z$M+{QNlmDTaFk;C~)X~QbNUOc6yqrtr^-rRF6L$ zv<V<<U@<l`&t8&~IciO!(g;V=RaeoYvQ6ZrD+b~vVO!+|YI63!!~J@oWZB;8_%GsN z&XS=o&Y?<4AE3YD=snW^ma3bAeR#Pw*H@Y{TfPnUp0QX6PZ<d@ER(_=!L8UxQFr;r zmbXHIKBU{^KS23sW!(0RlzPYU$Ja)@3U<z)30Qu#l9VYmNm70m7)tyZ1fL^Qf+&fb z<DLqukmDu~w7dPw`;R}rijEt^u3}yr{|CrKWQG;%DbrLXscFR3NijqgWB0NLh%PR% zG-C*PjY|N+{=sg)Sd8gupn?0unSZ7Kd6#YiI5d6V()`b!2e7KFz-Z=UhGSLm`^e9q z0~HM1Z;2}+jAqvD;AqtEeR+Kv^-W;!#_mAC7$Sl9TJ#1&H)Pt+9PnKUgwqPMCe@1| z&Hvf=rZO|ba<7+74XY`uIRrNoV6yh^tLrcTpGuP^I5ap2v6zx@pUu(;?!5Uw@q(!C zB86_Q-2ioM0^;?r^GIV6U{b`zO{PV4ShxyK`&hU`3p0;+&Wy)*4}L<dU$`X_D0FO` zPnIPuo4l>5T6D*ofvtF&^p>V0sVW`>oQ~0JG4GP)2LuG@-<h+$dCzHMKp-#FQhV%d z)I|L4c1b71#tyfdlz`y9#raDkZ7kw3f;#qQ&j59EAgZa>uGKwh^waG%rW4lExIACb z8b%h;Q#2kn-Ge#(_K|XR>bsu$h6Q}0+H@Ozpkn~-BuB8;$cI0(v0@hRqJZG(+X}9< zbtbVTiWy>)cFoJ+{vUR?a0eC(k|=12t)R`Ll}g|n{`|c5YCpL`^?m2+Okbcq?H`UG z9UV>7iPt92?!%YeJgLgWJK*ilWjZVsfB3ht9br1UIcEV;Yj{<?e?P_3sedvUX?)^a zQ&6#cDO2%A+4|#WF~T4bj@lwK=k8lfgKFwHvOV|6$N3txIcJv((<GilvwuHk;w@Ub z>lJd}NB>uoCeb(jn#?&K7tz5+c%uCq1Ck<dWZ|{$=(~S)U*8QgavUcDUnxwt+#&eE zQY6+77$>W%Xhr+JIRyU#0BK;lY~)3bu-YtWf5_<^dS^3u26@Ws95*SXPqQSIV2<-4 zv%2_s<g=JRfpNCXfpT!{?C})HE#g?9NzB*g6=2X_S+Tez&K7vISXcZH7~m?a#ET}% z#h=-6EM5$U#i}})d43+_b>3NjQI{nQd-n;?nZo$i{b>5<@OiVBGFxrl=thxkD5ox~ zrka#1!~2k}UoTDEeto%O79vJx^)OA<Kg^+M|HJj*@fj>TSSWWZZm2W7(9x`FV6mc| zqYWj+?%9ww5XI9Z2#fjJ&l|2eZjv)}QD|G(uyky~T5zm=+&Hf@qMs8cMPq3Ol~F3r zVE1$+L`r?KTnK(F&8^8E>z?8EHkBJ)sjW;Uii>A1Ln-8Xuhh*^;{U6I*h5*pqU^y( z3RO2bY|`(oDN7@XLF_E?1O;3-2@iz7d)$08S)rcuMfH3pQP2S;GT;ARol4@YTH9Nq z_cOC9s?ZZ2HhWECDCoDPygq|M*)Uy}<QIztEmm$zE9~)4`|vRiIfnV~88+)?dmt0X z&>G&dj?PzB%q4}tcjAgl&1NI@PY1FOa~mWNw%$1)4`+D+r4}2W@(e-~SA*upyV4rF zl{y$gG9_(^VZA*$3mH;?gK=Q<R4pVTV@a{V75!f6p#iPs>tevYGZ{zan<f--G0$Y( ziFCCV>OD&O1(p_kSs^-v&9^A5f`rUv_h>S4osbxDt^^9=7z=`%)HjuuVdHN#vJbIa zHxmAyh&pFG6J56iUg|4<QsqY`6HNs@+sx`LXsVg*VQlKkk+!NdjH=`UuRf2tEf<^R zH5>i)GHZH~)GTz4gsvUu2spKNW(MbjTw8c14CwGkV^w1P{7eT6r!B3Bz5#AO%2Xiv z)QfWpKG;Evx?=TA6YJLy?U`jiKWW2~@&rQ1cfb2tr3p|48a;sej9<g@+8g%ngBLNg z?5FJASJO6ZIayRu@biC7>t-Y%09PT_F1VH>XWjDcF9YQ>58njT*Ij!A+yoZ1#ZoTY zXm#nifzssastB`)i+n07x73M(-C-4-$rRnXiU?6Ax-z87bj^h11D~Dz@);{C(X4P~ z_#WY$4f84YjFH0pWgF1}BtkmlqVi4v+|M|R&7uDyZT4ZwhVOQQ9wjF*vAv<8ETTTY zIGvkF&*H&q;&G-|Wb1%!^4z;9Yq8S81e;!w>*BJV#FS@(E&|981WsYG4M*sEIHrt0 z;lkP~LY|i7K57AULgKt!IutU~loM+9X(eMO5v5MK@26O%y>nW+r^%)^0;@MC3!)k} z$WPe+kYU@bDUvE`ZhsIyoS6|xt8^h7kHhThh=1!n)OXGD%@J(iVf0`{sogu1Fj4bR znrJsWe`#M2rvd#8=Uab`*}+V8`R+b#+aS~7{6@jzq9_`u!ZE9%TVZN0k)AtWL*N%f z$Ipo5X_|zGrDq02{1B3I{L^+Qmu7ks(uxCboGF)9R&3IjlaF#f?u8iUNQYuDY z_Uho!J8Wq!FDb+pj9^KNBc)#>`HMQ{IIqq)J-mY5AsjUu>vs;Oi*Xh$a8aXNCbCrW z+F0Hg8Yn}~DH(1j<EXUOW}2sPSzfNKrzwkeLjX#JXP<qJV4#kdGl!Fk;CZ&f@HO&; zo{LRi)vkj4X#t3%hjYt}`=7=v1|zWT&xc6~dt@$6f=bZDhlbkRdzr;IiDcfvr3qdV z^xLL+Q^E=p;sVd$<A{6y@w3zRpf*?wlY>=trmS)EvW=cCParz-@im`InbKnBQpmYn zRTV?F&ge%CX_dD)^=p{xr&AGoij_1oKQW)4aI#bI;&@O+uCFOyLttNscs8<|hr_!# z59ScC<>}vWaJI-*941bbW6K(T_@n&(yRxcMQ>#rORn9+d3~(NyUp!i=|M~YqMCU2# z$hXH$lp%ORv~xESat!bCgDSox{t{EWOZrkwjZ@XYM|m%J)U5<bc};h^I(>-q6E(^r zwwfu1PPda-P12<kB{;HF`s{^kp@i|?A-^lf)s#YMTx@O>c%#@K0!!ds|6RmN*0!Ox z5mum6CbUBd)i+RoIQu|yWU6$%98DW4IU-MKSg*HaYN2O^mK|G$?nA$UF`hl~-a@<; zi~%G}oIrWG%+34bn{QPo@Xc<Khq?RBr7z&ja>;3c-qaMEBph#Ye~5x1BG!)G%jyej zS(&GB&cmGV*M^_L-*5A}`3G-3db6Vuj;1yyUYmYYZ~S@wYAGW5<I)I$zO%@wJxD+- zDb&Exqw#2sLOUWda#vr7R76lV)4(3`dPjnK6JQ<dBoiaB%ZS0b%%<>!R{#$8MWh@M zWuaqHCEA>B(rD0svRChU6|t)2YMkFV8$(i5ICUTH{ANcarg{9f8R4oO6Jq2Qf`v}> zASJx9_G@6O;Cl0mW!jUZKw!i#UfK3eWlPr}gHX2>A;bTDgnuueMZKYZ&AQX_ByP1V z|4p-XQ<7Tyr?-^m+T+3ci)<UF94N0*e_5VE^p+jRz6BMSFuvRw;xRRVB6x_>wD|P@ zpNK_JR{ttIz#qLYHeg3QZ|WYaN^snPC{6<Udd|UTl&H;(lEN6#AUes<TE@fmWVpU* zuBnNR$;WpKH6x&)(@l_~3|2kRyeN<`(S_?D{W3g5?RU~F9%L|ngy4vM0~T<3-?Pyf zrhghYnIem<;a7;*D*Gp%yt_`K`WCgDU?5ypiMHTRPg>NY07opZ2XS=(ss3UXRtS19 zcnSF19ID4!oza>Eqx|O~{!%SdMwUgpQ1J?%$uTf+VdIuZnY2xwk{Yb8%j70SH)D7% zk^ZYRtYENky{921nJ}NEU@A3s_F-MC>Lf7aNl`cCgmR@(5&b_v_;9hc4u3L2dH!I$ zkIB5pedpl!helG`B3Yt^6mIu`iD|o=MzSQYk;HQW*)Bw^I8H#o33Q35WcZ_WmI*tw zPdc{!oFel4K`Nb{2KpNiwv`cBAiO_KA%h5v^(p*B7Ic9`0|Hc|=FC_9+OI=STe?P- z1XjJ9bnj`ATKZfSqbJQcIaV;sp3==x$=#F_(?~Z&@XU|_ei4dA=VQwe__ze8jS3qM z-%64ptga6}Y%oHO*cv>&Un|b5)4%Erx4h|&tj!N>?;nKRkzYvkb);iNV|_g3w~n); zxeFD8|Ewe>=MYN>@r#EiV}IxjqII{uYJS48eLx6Sh@n}-nDVPpsLkmq{TO}^+4&p| zJ1OcGN-Xq!sp;O{h+neswrcfPO%@lfnS?#ni_2rJ)X-O~IGKlL8ilNQkUNolB~+gk zUTtaZd$wb3NqtdQWVKG$2I_w2wB2qjKXBYP6;(E>Og831ZZ-p02H-U<h^~*bf`=@Z zKz2-L36zc|%BrlotNip$i!s3C0&5w1{rL#3QLl3^bN!9Tl+D7~OIh7Eo{KBRUbC_y z{*v;t3WvZG8z<`IdMWQ3!kltPJ|<&vr7aD$?^cd|jD)3Dg}xi>FW$Y*T@#hl?%3Nd z-gfOn0%esIbq)39wUa+ebeS2UaX<rUCd=p{V}-MdbZC<IJ3ZH)C6I8N#_~n{X5Xy) zXo*@^xKj&TGa4&tse+-Ea*e}D!be%Glms;r<Ly!Mr0gpyuNV7PqtVT44^L6LB8@xw ztRp0$NoEg{z(lmcid;QsghO5>0=$Xu)cm93Ufr?l^@Zy*b>o7HO(v{OIhl(KZ13{> zIaEZL3_nHA5g-7IdR(Ni1_#>0l2_)$F6q$V<DtepMTp5|Nt)oMSVL}@c*2y2v4cua zgIUrvOUuTY1-;wK45q9eF$%jtgs~!9lLKkSa<2Z`L+8d;zaP~|!M2nB#3hQrCrx^w zC%>q|b)h1S67-{36<ZjDE0zySUz(kE68jgMQf?l0HrRWnh5f7g>4|t@J5h7e&wSx} zHT*GI%2k^Tt!hvqdgeP6flf;q=8gLBx;Ok>h4k)8_CeF4BfGO(dM7y?Q%>LCS-0XT zYqt`TX!!{fDVyz)JLT~t<B~{oYht7ZFp%Gbag7!Fj&wXy^b0+<DCSukZ8{|?x8?v% zcgx-5>l_Yd&K6P3>-cVOEHd+(4rwzPJP*lP9i-dzrnJR$6bWZq7nYs?65vzra)0)# zEIWv1OXrSst1ym1)`(F)Mi;4Rr7>ezxxbi-q5p?ZS)%}u<4(p~*3{RSoj7o+VWy*d z8%QM%fcjYd8z82+dk_s%fUe9*R38h5!mN^eXr(WC0bY9I1M}^7cSn2iL>o%?PMLnM zLhJFB)e2cx@>J-Nbx$5Q6hWDz#+AT=(nvI!Vj7zGJEWqbO9=x=jL>&i8EM7ti{F_U zY7NY7dXq!b$*4O4QOTo%CzwEu)1q+EqEg!?XK2U}^;BrO8VuRaWsPAl!QeMJh+w=@ zZn-3eVYhfJi)nA^X!%xGYQk<%fyCLGJoM!?&^1ZVPl;_WUd7cvK(S`b3@?Hkr#4s( ze;X|&0|@kw4G8KtmDe+i>RB{xCiA$0hEfILC{JWXPbzZ!fJ8OWCJQ8Q{d#YL$Qg9g z$JV%Frbvy+B|w2{O1f>y>Q)}$44-ues?{F!e!Wkrhp!}{0}vVEg?(dMehW9vO`5$W z%<xK;VN}DY6K%33LcAE8LswOrR>@1-5x60yy=@5t!m|MGPct_NS`2mv$%Lv(`Fy?K zcBsC(50@+313+*?=il$qwb=yZz(5<Nzj!y;mT+si)9FM7@QdnGw>d7y6d8dDjy7CL zfN@nSZ=*fe_b2cTxv;iBB@N;+++McO{4Jm^19iK;N7EE3kwxYI`=TsG5}Cd<!{A|$ zcG}-B@TTKu;?$#Zk+_dLH=%IbG>Tfpg6A743L*2ilsEqYh5#CioyehI6VG1DzOCUD z-^6aqIo?7fZebDbgz0Zq9LHC0eh#6sz1uFJhKurs{qhlI=>+PStO8jAaJ_^a@yB`) zt2<qJ{Qi8-h*=iS%j-57`;-0oAQ~+uiFFk1R$K$X5;~uI@ukNPK!q9rZ=mQp!3B^R z$aWvC;iLv)r4-$wELqokXTg4-w*%%m&kjthCnbJ`RRGv<7a21cu0B&VwF0Nvxz8j+ z;}0C}e^*pZx{HX!k9Gx<$zs_kzpc+u9#z-$46V!V`R0l+Z)Nrn31xfnF^So{jDp%t z9UDE&tsN~Vn=<FcVbUp(bTWG}Ac%#Ue<q~@(OjZz^1P_$I9ED$U9L_}C+j%9M7OZ5 ziY9A2{N+L&T&gIwSxqS)C#ry~!n*}7?>*b_j!p2oUK8^K741z#YQr~qmFZn$Hkt!H zQiI1J5>l3R(74u*!>)|B)q?)|Kl8*PqT(u@fkCsX#1*MOPiyaV2Uo?o_|hoahH8K- z{uPi}Bm~H&g?#sA%pCZHr?j@NV%+`t9=*6iYjHe<#<G?;)c-9H;GWttt*Lu|gS3N; zcSm93(3etPJFPEJzEzlLUcw`tpVXd>vDU%ZE7FXkp%$sE+OokjB_X1<)%VyUc}@Fb z)jdbUk&Rw^bwYzt33RKokcVn=NBd(v57$XiOwz{mKY&B&CUV1i@6OeTKo))7ltb}) zZRZKejP+u9otg2usvPiuyU~p1@bM0h<vDULyw&CO7zz`}XqjHjEo6Cehm_YrFDCQ2 zjBAp6@N!Aajq4^$Z(r&psVicL2W<kYAMjYf_TZpA-s$T0%rxNwR_jS#Cc2U|4%I0_ z!v_UF8ypHVke=t#4L3FE?BIj{CRV$j*tK}^B+tcnfi%|XGaBdCIe|ijin3S`)plo9 zKzrweQY!HZ%GH(nShwhw%MC+<E_0r36+cPjYMWxKf#zF`JOP6rUG|~B#uJKpC}^jL zg%^=fCSK%SD$~S@p#gJ})p30Fsj&r5!tw#jdiN`1WJ~2MVfnIe-^Z5n@+yAamRcr} zHh2izp7s)zO$U)=$b(&zwboX?@@T=018d^+psL8+cBS6Jk^?%mu=mNMF2soC7=tdn z4hHnIcmDxgCZ3)P-C785J2F+#npaBSu~Jf8sq=NAa(S^&Zf#_xJODSomI=?mg14UC z*GuM1n5Jvn*CgwFKTP9;w10n4Bp?tGFIg#1N~o7#6`G=;S=^M&{aY~ZzI7cs@P|ej z+W=F)o?H&Q^5K2kr9YMhB&zGrj;pQh5!Cs}$pzTzYg+sg``arma@fSw`Bv^=Vm^|R zIvxbJVk=^Rey#dY>$Bs4LCkDzH^E{=2c*YGXd7b<jW0yX<aMst#2L+#PG7vVSv(fi z?Nqy~;ptM_6v(LM6;G^Ae(9)XdFxmCB`+dXb%MCLr8ik(d?RRavjDn%a`E>t5vqGk zW?y9RLT@Bs@NP{{w|R7lcjYThf{5LxSXFmtoAHKovr9<3D4~2uLe+Mn8>!8UW)E9K z6)iL{ziNpAY?VD3VeV7fJ1EbbsGt6*MNPj|E!LJ6j9U3B@Gc;)VVe2jntc|&LZyVn zOV3x{^o7wZQ;|)hWu}fDuTAetABCUcOADcVj!Zah)IvQk;^3LJ1z3^^7O6AJaM;6t zh&sCqAvOL6Z|6^wMfDWi50?Ih3YHX+6&9S8#XI#TwyT))!9&m5ofHGz6Eip|YrV_^ zuEX!%dy)FY`_J6Pqgza+-YmOQ36F_MTFzty%07GT4pK83kqy=hio?N&x0d2L-jKWN ze*Y9tR96=4sE>{zr?tt4AGI)f$K0`7%|`mgln%2;!fw`5nc#+D;X#*Se_8^Qz|Gqn zr0PI_4`Fy9`$a<FBxe6YxseZ6eytghD$LN@zO4`7a0$W}^UX(<GaFzc@#6Yt)Ui+? zwqGQ;7a{l$uqrhF8O*gETg`LX{=lfihUENU#}9dhMv7~Lg|->_0?vI?m8%_Xb|`(= zIQJ&2eV&3Y-rO&aY$Mf&Ji>*q2->4Qsd9@YaH-{9wF5j9p755_VrPa>xAm7lYa1a= z!|X3IuOby|OW(BG)}0en>Gh=M9d(o6D(s7623i|5blfwnEodvM^}X9_R}l@Uq951Z zHwj@U^a)qRfuGM=nRpZlIEKomqxAx3;xE<aXWrw>E8U%9PgXZp2UlhH7v+rB?6~X; zQY2p}*ylU#oV2qt)K|*k8O&P~w6-yk${V2b*)>39CRG~g@wp`~UbtN}-51vuUFN{g zHagEe=*Xvw>P8I(UYL_BIERTZ-mW$Ry_bo~55K&1Z)@fZS_@B~rfj7gHjMb}6WhHW z6Xi$PKFYpYEqz;}1gGXKZt-3ajD8O=t~7b_yFdO6#Ag{}Aix({lJi<wrgS=d_G|ji zNv=#5`#J6O?@>e)xKL7<YVF~#vBthPpTvWx>@}uk`y&sOE!^`zK-ETSVXA!#ih4=5 zuG^a?istFmE_!N!|6-Jc2)pG@KueH`*M|w4=deSsO~oADxwoeQh2mk;55~fnO&^GA z=2)m>>mxIJQksRH{^W<2;kmMU`>${0@0c#x-r3tsG0q(qwigIIazRtr={;+(@MjFN z*wREr>&9u(CXwT6M-;eG!7nG1U{1%op~lW-Xn_;d`h_=B*Y!=E{c3WF2j6I&NNS;> z7L;%vN9s&IrJ>XdzAxm(`!I(xfM;!j2d&N~9H?Eh^I=lKK75F51dlVfP64<fpE|+F zpfB^-&eQquAD|rue&mMEq<kBvpIj75qaze$%+VXTS7A~C_E~0dF9O3a69aR3QtkDe zrO0ysIzszh9C>mc2D<|5Bm3DxVP%td;s-X#Y?&y?dZ7-?utiaJ@hh5@A^L`IBoDjp zd5*1}eI9woFOa#1*cRccWWA#ku}Bq+SiT414%*DpdUHaa3cdzwyLm#8V&<O(k+hn| z2Uef%ZMSwjTTjk5pyvk+2bK7Ki+lE5d|*?uGJqsOu4K=Q8`8#X=-JsK46sb-4qAB$ zY|qnd+3d{&c^iFd<(gfvH4;#SWat<il@?kjHk2A0@yr*~bznpm=kR|NNRf8?vc5AD zm+FMGe9;F52aZpZr0L`uJxH=bA7fxY(koasajZ)V>JE&o{bGE0hF59vR}F8Irv+(x zMREi4*44WkHrYFhzfLoqGfdr!^;?}i=yFsVrIXszX2!A%l@cyS7UuFVPfEoTVXVwa zdKifP**3p6AWyCFeE9vP=bL{$n;GYy1~+7<FtjS4q^9B3s>n5moFI3x=Y0$o5eycT zl8PAfNf@DahY}tL1Yol(OO|g0;OLV#opEY2$bsWt+U1w9^skoW@2Nh$a+}p&o)l@* zdwHny*#M1m-qhB7KSB<smU#akU~GyYzuWFktjZN!#y{iXpjO2^S#4)^u&T!{Mvaov zk$5GAw8MQIaO;w5n92!?@77_9iXJ+s%gXYk%(|7l7!$tsXmOc+h}qnl%oCrkZSHxo zVX3*tYIajb2}FiV2`h7JF*58}EEjR@&B+Z<J(t%8Fa84zL#TcQR21mG{Cs?^fOy+) zuzGHu%?Xs*dYiOyUy?d~NmtIb(M#bj@pYios=+$6D^d#0ZuLu@&b0DyPPf4~QKdQB zl5(|JBUgr=GzN4M1@;KPs5@1TU6$vpdc1K>w@r5y5m!|saVYfz?Tu-Y67MsUGGmT_ za3<@jyk^#eo8u?HKQg4A-C9z5EsD6OjZw^w-fMYMI{rHpP^DYYxDTqc80OIiZP~rQ zAb}D&ishvj18)#T&W727V3A^DPm-dvWGP)A5*@dQTV5B%k*b$;#JI>*eK!&EFNgVV zL89ua8G72%MwKeLsC991Vjr-b;`roXvC1J@LwPkX0wPDE+?Q`YwY8dfDfc3v*k~Hx z9X@}aWY3x*Z*fDLE;%^+nknF`hEMl>kO$(`u+h{Kj5-HmCRe5$y2NIw?%=vi^yDur zCoPr89M%CNUF>OumQI5E=!T^>z(agjhy%W}zW04dbgjL~?Sc;X@$h=3Jq{$OoagLf zL0>pykmIsnSjL%PY-W5$eGqeYrh=l7b0)Jbt#q)wciGL*NzyK8)&9w**=dTVyc*h- zd$E|y!WIQ}A89DCnV(Q3KZw#KsdjI?#WbYeH+A60TaR+T#n!TU8H)(+t#ux?<2?T( zz!=r!av|SgV&7{xw#f|1$$p9I9k978*a0V3Y{bIn#JiN2HiV6fiz~z3J>TSgihT|3 z7)3-3Z;Nu4g*m-bdNR6G=33a+IQjjpvZgY0>3?A>x%*<P1D)k9fqJTJqvhXFa_NE5 z3K$I~!;T3;H0zJ%1e8Q~-h(MSlQli$(+-k9I~XpanlZ-UI9~UeD$cXn{&Cn&(c%xb z^v!7KOewUzd^d8|N#eHU{mk(UrC)DmybgVHx(+k!th~mqo|K6(b|jiHxj7z385+d~ zb?zXUojx?Ff^YlcpVyD?xAFGtw6W(I7*w(>>=S7rk8ZB*ersa_1K8gVdw`XoZ81jP zQ~eBLa(h*GX}NLOvi|{851c++q_oThzd~Gh&felh-raxv2!BJ&QH_)%?XD6l^6iyu zi%zrsJh>%cMH+bW(te7%CNYL}HbuNm+~jO&2bqF)sdY1a_apT1If2r?&pADgf2MqD zv9ck~+Jl8JHZ|s{kzNdIk1<S_Rmm7wc!*1A#acc0x&ZbXKnm=BzPaMO%gOyKxwtoG z&7MzRdp#EHjk+UvmzRh0>1PK<pEgw0zf*tN+C=rWcV4fc=$q+xi~6dKo<a0z#e|fS zh7F^=P9xHpq2<b9DqL5i)zimsz|><dZC5f&%Z53DFScGh22O$2^K}aLBP`#^eaoH6 z#x8C%!6`$Ku;Qx&B2k))P8a{n-CZo4)4#ecF1P;yDhB4DWHvzQz+bLM<DNJg_bndf zL_~l8934EG^Stmve^=Ilngg?U1%lHq139Ku=%*y*w2n#Gc$yN*(l*Wi(1>|;4fT~! zFW9;jp9$T%{0C@0!nwAZbacnMXP;`RFHEg*$4j@4lg`xE(Nn4yb6=p3aG=l7;ZL>s zJUm*-@z&Q^@;IUS4B~w6y0!DlCptGP?Dro)J?34r!W0>cYf?~oo*UV-=4|j=*bUhv zA6P%0=Vm3wrhnwi?6JIi+}_rw%>?S+w00?^z{~5A(%z82dc1w`54Oq$gQ{8^O{Dp~ zT(Y406r7$^UHu36@<UK=&?d<k8imIh4EYD=CCQTLHHyI9!T$lOI~H}p!1dt-uWQbL z-|;a+20Mwt7CTh0EASYi-@E43VSw@u<+CZkt7)fj{xL}dSV;U<;jCNN#lYW0G0*9P zY@6HBi&3%-p^+DO<^=u1H;WRTf+Ces;*V%<o17^MXsx_}j&R*0LelmuU<D6&uU@lJ zJAp>TW+L7ID6CSceu)%rk9!hs@AeU$*$lY$?fgS&)Iu`qcbzqNnIS6O+H#bPwpY~_ zWV!f)*`@oPPMHedMTUA|w1j&hFtmm!ym@p=tGq>t`JSRU&UCJRQ^U)cW9A`=!*&i~ zKHJdH5JTfxFu|a!V0ZPh4QFbu6-dxVkbVnFzmEo0+n>>WLALzL?>`mlVvXSDpG4q) z2^HqW@Xakn1A_xIoa=<Amk5+#t9t6}BqrfDohP3a3Is=W{rqWioJXf*Q$f5-@?ySy z1|N+}a&)8AO|b4TYtyRB)lgYY<C29Fta7d}eMmm8JCAyG&omWJ-c7&QI@r65xKole z_so`-YwA|Y=~ki>J7N|0xUzjg+6Hh6gW)0vtDK7m+t%b`k}ce$cSEW`d7~Di0uI~J z^fwW7Q^!@toyJlwVM2LkiFxarb2$&mTgRH2AmQGirIiW+H_T-PU50Ndr+dmmI;v)* zG9SZ)4!e|o$uJ~jWK3pIJ7VWtT=!h&7k+cJ*U*738;u$i9zE-W+M%-^?^HF_wbl9g z;N_jBc1dcPvCx-V2*+D?*Md!K==F)6x{Ze#80~n|sztqp<dtW2wSq$%J=aDVh8{8F zL93@!L2s<hO50u?I*$Yz>b(rD-gN6;=T(97T5i$Mg7_mtW(N0f#Czl~dV;8e!$<b* zPb$|t50v3^Ebxh~cb#IvQ9|a?i=<L?24Sm-V)oaZd}TFS+-2*pk>T-1+6nICA6W6> zmbKB#0XFypRmdf=v)11R93K(e-vruxi^$M<U)~T*3D<SsojhKjHOpkAj>L_cMg23q z_?*;FE3#3vyr`)#{|Bh7SPx4zyl?-cg9e-2{rD)!=1D&*Cp8*xW%N!PG6IIvTQ~R~ zdr>TiI7<E8=V98+^l!}M6)K-m)p*B;(}qMQAN6+;e+}wu5R;ljN^qENcbSv$8{!gF zyX*&yHDD~E8^KqzK)}z6YV_dcRoM|sC-w;iR6S6=?Oy1P0KAPyezGyq-*INr72Ao1 z7YCo_TqSUdu?aeA^^N7s(d(x@^}>zf4*lh@ubgmPr;)74%RHE&n-=Lmz>8#74ps4k zb#uJ27F6H<eL?GRI3fGW(vrY=yM%Wrz^rI$Kt!QRV!AMp+fIeWS&Um9%@&YS{4YEi zl0uNWmpl6R7M}MeuoC0%9-W(!xuGte;yIlxB8lvZLiRJO|3%z+!>sCtj9#H0ZckdY z_%v)Q`mQ-oS(_ZXGdI67g)874ZHDq3mxKq~3+^Z0DXrcAP|zfFewF>)(y6wB7beV7 z8j<OHl;Ci<NFCk#1>J3?%lFgGFni8niacYh&2rxy$p?M=bbh#^S@JFBp8-pwN8iRs zh718J8h{A$r-jC_A+6q*KFil8n(eDWz_<XN?NCb1_!M<BPI&i0thyjXk>pO7=fvte z$HF1asuAyNlfyBQ8PE+@m2`UxIT^RaYx5@|6=&LrueUE@sI)Sn?93~^_PFcc+Y11# zS%66p#|1cP0hrW(DBk)nKYqTs&>wqDx;0>w*9BY1;=V*=5l;6*_v5Du;z>5y(|uDb z)oUj7Z95{=J>|_mR`pK*_RS~nwrF}I5F-F#eDE>l%W8<p_3oe#Fdfr9_QjDULTKJ( zB_q+82B}~?YH2IZoo^3&I8{!SOOx613|!N`t4tJS*z)sD`+X~%^*9z&*17&&V8f|A zjsCK&ld5$REeROFz??Q+_$$sY*nIJ_VK_UtkfL@HK25$7@1y<26P)4BdGf+-kp_A& z`r34{YAADux_;12Ro}yPVl5y~Yp5^{!WuTsDvgFwXnN!21PA!!istQw#W}VE(Ucw_ z9|*l@=UCR{^b0vN{C6ZZAAXc?IOn7U=Eg}(jZg@+mDMWPfBcI%S0pLXuVy_ud|?uH zcaf<vUb%gS)-d*(FXtWHc&{Ssq#->G@Aq{!LKUBdY(Nx+Obc5VxAK%Asc72DZ{?{C z?!~R{bzjk|4c#RGe?OcM1|Hjxn6Lltsc=A=$YIr)*JVxQ2g$ncn+(?$T0fa01X&T) zK)f3*Y1sVVrNGrBYg79SaM3K`P2028X4VCG3X~@HtUnFn(`|-%SCuC6)ZJ}M9lH^3 z^nznbKgWA{&W+cuc<JT|@#0nC;;OH`9C-b${yD%~XIgYR1Q*CrZHJ^{2+~A|$;!70 zNmmzU4bbDZ@ZO~8<>fJrS(RJ$(xl2bKj*V#AP`JCUEHQjrNU!@qF4-7Arjv}@mWNA zi);a%@UXU@pI3tCccSP+shM&drvWlg@*B!j!j$Yh8Hm`c=`SJNk2*b_8~+T&^Gl+9 zF{-3nhDIneud|p?=6p0{JfcRn5rjqdBlr(e4|gH5)xqU*FIY`{B1I{wpq}(61zex# zr!(qm8z16X<>>&&8X_G;K5yY^BG5ay{8)tJ_&}boHe40UN|6S?mjB10qBkz<_DJLX z^ML!FR7ICgk#on1uxu;TyeaYjjTdCdP*%mFCyR^b#ft(!TJSSxke8)|Fh=%FNO0_S z<AfH>M3mG22YBXwxy4`7ZCYifT|NhyA!Xm&oQLwY7JvRzNJ}TSE7kGO%Psn$p6M;N zeE*naH<A{7*C+bESV~^#&A$s}ky%Iq%FU#;rdU~I3)FzCUQ?_LN7!8GJlVdZf-l5` z-63!kzhE+*1+w=~%srG~8Wq>r1W7)XbfNWgaBom&Gw(ps2yqhow*2?2P(=mnEOBdn z&aTp7K*+BFrFNF#`*^{uO;?(qgO;x{oZc2zRyT>+(YiV>gZ5S{G{;@2C(C;Y{1U}N zZXqE=&U6`_?gL`KJFFr(VqwATW_$jDYr|uoBxGZ!=E@zD_<k-QArV_8l=}=egigPq zdJpF{zqhedn_*(<$K^?c9?W~bG~y#B5CbSl?;!aJVd};?`hyDM4|npzmYJ9y6%pm> zn9S1VB843Y>MH*E#6O39`$FALxkxwt&GH3#`*N(lZK|h9=PuegsNHj9RJRD3VK1as z(vri(2Ae>rQv^PbjvKpPTG0^u{`evv5<MHC{YmeXEXlSZiUBx}oNjELGV_<&!r$X3 zM4FwCo!LSemxq&KUQ7gHiXt!0Q~IS!h7Lp;7PqO@zkM);P^xK{I4{aNEINMS)q1Zx zG_LRTF<7=BW}JLdnof7RU#8!8SbcNJ{aKDYaL;M>UI2@8v|F)><O^GoHi3H(?E%^A z;z0FAO&L2=qdM(?myl0MD4{29xm%(WN(_9lCX$kMZ*MpCB_cY{_HS!xP0p+ATITv+ z`=jkIx8_N0kDwTo{{Z;{*Jb|!GBz;m=6=j_H{N5#(a(}3I;PAUs2mUIEzx%=HWa%h zk|8x}DPfTjCevuf%1u#YX;x$*D15ujfr@fO&q&(!?kb@|E9Yv?s9vLU^6o~!8oS~- zESN(r{w4*N{3<@usZM>idY@p_A@Y9<1!Ja8Va!Bm_VzyvQpIsgQKW6izY2T64beP{ zOUNrj@$?2FVTsOg12>L)T073|L#Z&`HkDPuxh)|=tIUhKCef_U+(N2-Tv%WETcji) zk>aMKZ(7ko;?4#5^iJk`ZWieDjca~(^tHk-pkGa?OA@(`@!I{-yrZ%P(asc34eHRp zY;a_3ZtklrzFj;_hrp~?5*o5b)_8H>Exu-Rf9YbDbxd-#x+X_kyOB`Zkj6Xfu#Ab~ zkQ2jQ5kf8$rhu4uO_PvjP+_%rq6=TX^Z9?vclLS{0VCr7JmWC9{Iq5OZZ|Cz<GW3H zR~k9bF{IT&nc0Ul?_4ZUc>2#*sX=aLAQf~AfP?IClXh-mj&>T9hMiGd<V^;}XWHE4 zT3D4-HR2Za@=iFw0m*o38%u^!_dLv8wi#VGqbF$z7CpkwU&yP9p0eJAf`EA*iK~NZ zB!nizo}TgE^}(F7*uR|i9KL(%t-_m=^Ow(Z-o!2LFaH`CR&(O~Ji|a(SyKu>pcuLP z?cBhh^#T~o3FKgSO$!6U-z(g+uTl|NC^b0+qJNyCRp$N%{})D)OtD(oV<!($_f zq1OEx*%m0=fsUGFxWhDy9AoE82<%gnCHUJrKO|(2g-GjJ-(njWe~q?w6+NTMzI|zA zmsdfH3dO`NZ(?H0x^29JUm-kcG0$<tE|y1yD$<DSwTx$Tmd)MT%Bt;I=gV--Hih(7 z7?{*-Tgv5>9`+Os;cCAh)h}$v7%$+7pTuYo!e3sai%ihj`YKJkdh`C*sD@K>Y%K}1 zO-ZHCZZ9pLik2r)+qd(0k*j;}fi~&&`1l&Sl&O7ZXPDO^9KAhm*q)(Z(;(fa15f)u zHr2+q+?N&9(4;03A7p3Pg>S?bWWUMPd|Lev;2LrgO1Hs~nc{fBHWXu`V`%89eTte% zr@rk(K0EcQG_EMxMB*tx8QvZ7;o940uG&dK0WW~>=oZ`dwFryX<qED$ZU6=52jb6( zizVy!ik1#EGnIxk_R5}7Jp8=9Jr7W^PEc!gG>$YNJ+Ey;u(;#Y2roWK!g}dhM^+UW zJ~W1=X_I*BOIHUQ+zyv{ccYXG-cr#BBGdj&h$^bN+Kbp;7!63v`(#TcSGc4xND^Cx z?bNC_5L*3uNX5w=T=RYSMpRwR15KI{=%w`;Ky~X74EY3K9dz}8Tpc06XnXD0o!^Y} z>GX%fbvr_0|Gt9skbZO0LgO}k7d_TycUk;1NydZ6mGTErR`&=;bq8JuQ;lp0NJ3+1 zB0#Bs4Oeev;br}3x@H@iyr$<yG~N}}tqIq-JX*?j&xEgPT`0`GflKohq^&6nw&ZoY zw?pS6z^pWhS7DNm0+fM!(~kjg=_#-4KeaTxjEf35-~c988M5b%ux5m56J=0>-! z0=N|VnIoA?osP4yMb6JUCee@nkiu<B1A)%rf!i*B`M4W~4^cw8xu-0S{wD2(nC)EP zYF)xb6XVUCr|X(K{yn!OkblJ}F9(>iu#$}3Nr6rbqM{_5z*W&l_mh0$&ugP7j{C+; z`^MKPrmy_1^@P}BE79M}3M+_YsTIhhF&4t-<85ZI!I-LYU`CqG!)cy%m$KsKrvqNq zEG_MF&t;=PF>cx~u}lX*E!1M7#*;6`4Yf77H!I%;ty=u-A^M(bKN+gqBbG;$eSU6U zJdPy6{cR9@E`1q-6nqcHnMCSB47~&bS&{`>v!6I}jpSWesu#<-YBQSukEXW@i=*wj zZX0(E5FCQLyF-GzyKCdF!Gmk#4#C|Wg1aU_aM$22!LsXlzkhSu96(>)Rdug5=NR~g z0ysAR!P`A}<=Vs=IX1@T3Ej!oM$rgQ7U$T05}s|bzb!{I5PA~A35gkSVg|tpBh=Lr zfR7czWsc1{%uC0h%nxOcgEE>X*-Tog48>n44@KJJzehznhwbU&Jzghwv;H*(f$8pH zu_Q}Bc{;#AfB@p732j-KX?b6yg?AqmLU;j`V;fLsAkCIJsJn(ty~h0X-OgMXE$}iE z-=v(n!;iL=6BfcP{gz^M+Xz!^qLoKuGLR>%!~_qS0y45NVurITPGmAmkK6MRE|e@8 ziH6cf0enDs!HWFK{1?*xv*hg0zo<}Ur5u|AbmAV3@%Y4@IZ&Fd^@U;{|Ie#=`J>)( zOkDzI&`4sFWjUlUFH=>O-aLS)v~-R|aB%SWg`H7to`DxTjpF8sCP?i0{S~&70Q7}7 zb(Hfa7CJ~XS@XMuJnxhX;jejI9WBK8U{BZ3u0H~%$i8O7b9o$kC!sQ3=w<Uz^c-A; zeT?9X1c>jO3vqwDocVqX1^E9!Ay<s@a`;AkcVAfaWe$O+8DW;3BgqsNr973dx>(!D zf6VPZUws|sBhGk#EayG3gz(Z|<=t@$cSFjOaunNsLM&p`nTeQ1^QADsu<_jjHvNot z#~&#+X+d_C+T>oK-d`UdxBDec4iHs@SN{_Z&1I!OYefrVeXs(qvh(w(^yDn6;7{rl zuL5u>9+Xqtq-7aRwWVN6bf+uB;h>klyRrrXk$Xnl`vv}mLhqrNz{>hqBR=UP-5+j_ znB;O-gjy<J0oORJvasCRb9Y$Q7ia9kkZvv~#{VFgFW%;g4_p)RlI^w%=_^kt;>~N? zN|57u3&Vmb=w){XC{ito<+b-|DfjWS>##_ao?xIq<1(%fnRzT)@n|jc&{uC~{;~RO zKL|d#jSb~pVX$SW)XUNfO5f}L&F)OYK{@uSNKPOF8-~8KoT2lJpbYHaF-ZV<`E(gC zQM!5TstaWI{}T6KKALsut})vF$yRtvcw8?_JV>n0qZxdr4HQC9*fCGtKOb&pH#W9V ze2SwPefy)$o$xwFgoVDLyK;4w-m`_W_LQG#wDsHyQ{~(+N@Vy-rAu>p)9yCieRlrC zKWDO%K`oxJd(GPR&rXsTY_;62M6^Me8Q$Y3*&Dv*&uiLX%TLng=g;dg|3EjE^XUM4 zaX#qymB}ra%r36JGMd+M)bC2-0goR*Xy@g~71LggSY<cYu4uTDKzJ95QCiD6xa<Fc zax-J$ZwE#)L!0r|HNG^JS=3y816+W~)+*WeXxY&0cn+%=-uy=T++MfRo9l6y`%xmZ zQ%(mSp`1zj#zWQiVmExKBImCEK$homy<RMpoM^erS*1s_G6r*$K;@482Lq9TONs+X zCWl(6#p{0rlTkrW{f&!jrG<0gzQsG4#G}~U6-bSvdVr=v!{y#wsEQpT0{XHFeM4=c zOQ0reA^ArjOHceGx}5jLjg$^7p3+q-%)&tbl6LAr;4<5(2jYR>kRH|Xi3?U~NgMur zX=0~(C%5R*Jm85~g@sN7G%X@$|C?2$ieHvip(Hcq*PGg2{{NB^U=RALu1ui80|Zaq zcJ}5`mMiY@e`KN5FAR#!<$D<*2t2fQ9`J9(7j_9N8FnUTsk;sg8P*gAyDGfv>}nu2 zHD{rPt-bv&1Js)JL}ebffl1SGOtR)pe*?mLgB~mnU2GbU>1tQSx)T=ehK)Uh#5*?< z5j7fC&bphv7Of-=;yLR}=xS}52AD5_#)|8aiBxH2dI#9GH??kB8Qrtld6v$5?5J6c zlB8u}RldwG9OAn2WK@6)#EihX9Sr1D%Xwnh%r3<ddWO;>FIzVwG4Y{)CC{@tt?7~v z^Z{h1z*Hq<sf*MuM?+KU-n@#L8!F1lp91V)w$vxp=-IqQ>|mHu`nf|fHwTF>-r)=9 zMzIGv0aX$lgznEIbsZ7+XL?v7($Czq)*HK4IPBuN51pG+$#9Re;_^)kGUp2nmSI89 zU1SC#>rOAW+nd#0>Fb-vrEC7*Cyv2Yts$*Vyb4wH<0j?5`#)$nA9|&RoM2H&Mtg;w ztxB`abb;lR|J1BGs%03bH#_t=h`t$Au;Gt)(OCUvt}JVbe+Om(+BP<Yz_-50;ENz> z#Q`n&?H@?sY3=E_EdO;`3RltkDyZXqZ)IjSG2xBHBX|7ZSgt2<*?eU5Nh<TAVx@=r zkG`<m(~2|c{PF|E>MXeC9|#)(*npFgrN7TYza_xXsjdbF7VhKqtepHvsOGyx1V-FC zPrn~rjEpo^PJx>@lbK}b(`TQPsTV<Cy$GQLV6l7@lt((2+I$@r(P9N;kr|Fr*VL6> ze|XI0_?n!xG;2)PqA#x9!Uho;*`-dPb@PiD4bHykm=6!WV<u|9v^5Q)Joa|DwH%o5 zTw>%lFvM?dqdBbHC*-CJkTq{}BCVV{k;|(+v~6B7IOf>2`l?{mR#)ZkC4AA3+2qg> zwKF_nqnLs>Y!dnhA}-#8ZhUx=g|a1`y`_%ptDGt1y*V0mGG_9ta8p|Qg>{~d)_wvx z8d&Y#M0w|T+h))H+=>2sg<Ie1rSn{oG~m<aVAA=><WEAM3`{ZG>Q)9YC2_S(Tu;W- z#bm(WG>;Ypcfa-J%DCW7?0H#TIGj{@_4Fh6Ux`%ZleQ^Pd>_@W*>ug(x#>ZzjDj<p z|3G%RYx@b!E8)8jgmtt9WocEM)ngBNb=<ZxMTA+>Wl2eCW@#NlxVghoKV8DkKQ*ge zayDFiUiGqU)NQOOTG1n}^6|lO>-|xT3@}Jw8iQ+ji<7*UUA17bnV5r)OVqYOa+UY} z)po^AcyxsQUzc|U_|<BY1j@75$71NrC$?h}mZG$yjpabZH!%BTy`W~9Tbo@HNx#F_ z6!#$ySQ{iHM|?}tkG<Z;=?X-KI)eoIdQ;MQ(C#jTMCIlbI3)JKIl1YwPi{=rJ!C|R z^dk^D|AqyPN%GBnkM}7-Jc2?JJ*c*j72s72pq@k?;0^wdeuW$&#O<P!SOqu-LTFl< zDRE%B1Kf@y#Oc9M3}}~>z?7qoaw1q&+N)gvy$p&(A{-=Jo=0U4d5^zfe%xG6O_c+y zt+S7di4wdmBM0q%z@`AanYw@fAKo4^1-bp?9oq`Cj}PA<hHD`t0p$sF;qmuCAI(-j z>uSA@4~PwOV?(oY_~u|YN3Vv|VMQSWP#zjx*fea?Pe#|kFGqVc%c*W?2;jDH_ziYT zD>GrDmB)l53?*OZZ-kdGm2eAZ7E2%^jH)z<<QWG*OT<loX0yW{%KsK{`wfIxx=(i) z4d60R``axH<zV*yf$+Dw5D8=vAXZP(=kHqvFbwQWFg%5_RQXWfaJgZ&7#(+k2ZM02 zRUPbZw)L@I@4NoAOe+MrQ_Fo3@u28(h5}uZnDp2#m~p>>tz5wFfOP^e%;SW{Pn<s> zeSs=!P^I_)G-ChLG7r_xg~%dXy6oJ<!oZQk$|AY4oCk=Rs6r9P;4DZm|7{ph@%HtB zMd+4}A<gjMVB`*o5bE%U0K(FgD8${QRloB9<0liExLA1#03gX{s~Gb?Wqk;Wt8UHr zfFFDF_=e4^UskGH1)}KnYC9VX8Egq<mf_RBXI+=flC!WVCnAjYEp{HaDg4$Nlhl-C zk8LU;>gJ2ktfSmYyu&vg$L-pB<~s4+&8P9`{tO$1C*4G@9w>Ljm7CJg%lZdy?Di-U z-txyGn=A?ZnAE+z_o7}_(gbsW2`!7xh-;QFg||F2w_sVwxmi{U|Dv*g-8LHp7ZGv~ z0)(Zvd_|JlKjvD{f!IMUE~k++t9Ef-J_ZLudR;9wch@G^bRnB$xZKzsM)Og!&XsH3 z_02nBYE;Xc&}M@%PUd1$>9IRjMs~l=1wgq3oXPd!pnB*JQ1vF%(sLXV&Ewoa@J6qW zEmS{!SXj;uk(_WFs>ryM>6TSZKP!?~X{)cUlz^+1jHOksxfaccuf9^s;#G$0$K<~J z^b@oz{OZs4CkV~|Gz~z_9z{ENdUR_{GFX>Q@HmQ^!8X;n-x>z}NJXV1>1N`N58#_T z6Zxs!BFHV9$BQbjK`b*-qG97HA;#M>k!-IQbGKw<VIGfv*3Y$3TG?cpO~)5YXl~MT zUk4nxi)g6K4)mkQkYw8cRqFO=bZa7(w6ohK(bKL#qXSs(#5(@)aB>rmEUuwRyz|Bq z`@_TyH}J=ugyHI(EUp&;fvFtsXzA+X`3GqLd+kg`T{}S}v$#bEh-S+LpVyCj{eyw; zb~y4SIeFrcm(Pvr5^85g5RTqHg-J-Raz(!i%Q=v?hRQ??;!;@s5@j0Tv`Lt-^OY#v z7<<GTxJF1(R_=1Sbb+;4!nvN=M00DRh@$XaDm)-wjsSLjt}+WZTRAk*r^y|k?q|uF zGHzTDLQ=xUx8OYuNUDe4ST5TbwH1V=dwS!wW*#&VIkN<5w`Dm~9&*N&Bhe7#6Oy?L zeh?fOdVA<^5)`nJZ0QQEtDA>W_uk#%&bpB@>~DZ=Z|GfuqOAO8p>0YCQ&YF=Yo62A z-y64UO*CyZOOox{$u#OfUl3m<I>Xp+-)nW8124|p;gU<B1C1YaY;yqj<Tq>YS;o4& zku>Ak%lnDrER>~U>V)|K6^ko=YrkS7=4_2ru|03{zUy^!*ffH7b=9XWtQGf_H%aAQ zY?efTzDtj8gF+{`-d|7bchK~ill9xHYFW$qrM*MTl%0k45~(u8qFG~12NNV)L5rX` z92a&MqMeC9Gv2;&&}5s?(sQQ~Y}upT1iuxo#vVELShPB6=W3dNV3^sePhMIsa7@pW z?qpduWrPhwl{DX<K9QJ&*zLg5LLLs<8`W*wXfve^T{-o-Nq9qF6Z{8SDocP$&vw>d zO4JoJabiLV7if&jJrwUv(-UnokjLBO?ZT(-GP$JAh%vCp=H7Wch`=TAs#?ne_F>C4 zO&(-7g60aW@9L;N`TlPm6|aIAKeg8OH+l4dc_fJr%JzD|y~Lk)FTaVofKSgKt$hB0 z-WfqJF`G?pN=sdnY9d4yFI>z|mgYDaUT<qU*_wd}cNPCY)ISt*|AF*agnwQhwajA# zF7tB5Zk=6{Q8~TrLFEO^b}c048rFN|oA24TSr5-{q?=(J9&}#=k1Tn3_k_|Ou6oIo z6ep6^=*DBN#1V|Qw|v*7uYQ_sqsxBW%C%Rn>d*NIuPvT6PN5Boa{oXRml*V9_Z}u3 z4HqarV=|6Qesh+<T7UXQaJn=5z#1;&Lh!3d-zmhicavJgbTWe3Q@Y86E#BCcYm(CZ zQHDK6@#3K)V?~hU0OGsg#F7}eQ2N#4PwPudi)r(ZY##JTGJ)J9Ifs8B>69MmeB%ty zx%G*hS;0w9YyTHc1sKhMkRtnJn}N3u%2F_CmLDrSAx9UM=`M3en_ahI^5){0<(gN0 zM?>u-r_7o>F8er46>bs%=3`M3ua=hj6dNT@+=6HD>UsU9hv(5_ddEr4w^duAJcV;} z{!S~ddz^7DRl8`5INXKiNi$YET$5_#SgB)IuqSN`{BtWqP%#0`Pc;jD4`sQS5{jy7 zT=$k*<|C#|UzySAn0z7ln_Tz7N**C<2n^9z!)=Upcxr|lGCVZ9AmzTE9zdng)hJyu zfM$aU@_7vExDx?P3a-~hL$Pfw8^AmyvyXkgKq__>fzte%G!(T`oDM(Y#UVhh-GhTB z2-hREF(J{TkEOA?4G!j(au}ErArtfgG-gwvI53Z)6Gbc+$LK;RGw!6ayL9&>oT|G) z1_^oQ)C3{D;BE*PUZR)|W6RL`@DMQjob`QxV-T}qkgf0Kb!<=Ki^)Yk-{y-0;NQ&? zNGcz7jRF@)*kbBq!kMt_3Ab$S`gj>JOQLNX%SEx?maVj85qEO|9e02n+lhq~6~i@A zBA}`!Z`kE-W);kSoPKqN5uy#MMPV+E9cgReF;U)>qOx#tsm{#siu+49<RQLHIW|F( z%f%|sCYncO@+ba#8sLTo{E_f;g={zt$}qEgP8;De%T3VxWS4P)0E{q1ZPGzt;^t3i zEjF~dUE>v`?w!An@sr6uPonVZRwf@|dB{k&tW4&9{HBT5aKzlhP<pB*c4viItK@NH zWek{3qU)pDXnv%riAV-Q(jxoFS>IFktMsGEUL=;uJ{{?G-CxsGY86e12u9Zc@p%+= zF1hd85;w>qD}B_41`7>cfbi<jpY5WX_LHT9p5uRREhIgem=8sf`+!^P(L{xVqeDgZ zu;8iT6p(9anu*P5PC@>V3i$1fo_u|C;iL|gO5*+GL!3W}r3tU`^9-dMk~I0?x4Y$W z9?HA(VPmH*;(pcuCb*Q_t!hjv{aV-=g!|je<nglph6JG&kw7EDtaIX~H-y!I%NOEZ zEe_RH@RYoC8sr?#qaVH~34yxm)1;t)wRWARvRo$nc8Vt&*Ff7VTPx8V-yJc*j(YaY zCu?<CVSY;#3niRklc1H~$hvnL8coe0)rg7yV!R8mP34J0^=fnVfV6jfC`LuB+z?$H z6ZGp5RR2HF0B*9=tX*pYQv}_{p}cn2RB04PrNH#}sRdPyb9gURQms_@Bw8OTTO9_S zp$o{>rmn%qxhPtx2id~ScindXtd;Y({SOEFx=mL+>S`9XWtH6ZVypCJyW*4;%!si( zh4`Hvlo>QFYn6?1!UI42bewtWtPaiRBeK<nBmVOJF`F?YE?h>D%Jp}K(j@tXn#2KA zuM517FJp`^>xZgiO8Owp%=aztG{<pnErNeHdM1y2YNxEZGq>6f5R(_P{IjMRD0<3e zq6rGiY>u+G2E5rh$E``Wi2NS3zY5~ELadT3%LFHrDS~b7C}&&UIK~P2bc9RijbW+x z9$mdsFuAfJL7hQI%AB=}l7QP|han6-M*@e;`|<h?|Mwd6YIc+3(s<gO{m4Jiqo1LE z&edWP#4|e8cHg=+V+eIu^%E5uoQH90gL{GlkAK+=-D0U#<;wk@rYbW3v@~jkWg1_z zT`u7i?jCCO*a?!QB~<R*>OznQWL^CMXs4E|QFL;0Abrpkx_<-&VNhR9I32d_YZV*j zoY3p|_V!7qaaF4eO0!x@;-ysaqv^2rQyM&=RCS|xTCUY=&k4HlD>!`HDpqyoxl<Q& z;YW`Ij-R-ZP{V5^St`j%LN*Jegp`A*;D0(VE)2KFqK5(hVGc)O7-eKXs5>t3!#w(z zLA?`03&XVo61EBbFZP=5@iO`Br$I8MkAy8r?)0LFC(hq&4C@%3`z{+qu?EB$xnexv z-yZM&u(hzeo5Ywf6W-tVxp~?3NzI;9j#mPfz)p^$1G19iSLgbTx|Z5$2g8X5BJMB1 zx%}^Lb{ZaxyJJQAU;5>3+;8UOlb4fwPS#2~E#IA}9T}l!wxD-wI;-M-pV@J2#Lrsp z0(jl2bXvT6_>kagW*_4R6DVEx<0j|SPJ@o)IMv1*D&blnZW3qi`(xuQ^-B;&R5HhG z;)jJ}29Yy|lxsNcAFh<2AN-ZLTBX^P)&#W`>Z+nTr}I5&r)r(D6JCy>V%Otj(_2Qt zI?NMDp2C5|B?;%FpZD^;2%tr6(dRNlYy_J8GfJp<In2kl%_lZVA2vnE??%N<@PHo} z<4c$TKZGvAj$_ZxWcyTl@Q+5{?k+RV>X~@DYFVqw;^H*idNmnV58|<p_)Z7e)RUfp z{6JEA<#ox7$C^HlHiCcEHX511_fL+O9yd3Qj_gGoE_>gj3D@Sf4a-W3?g5W(Gk<L$ z`piKJL7p*-cG9$Ful+xeb@7ztHaixLs<Hw-ZBBy;1^S`bN7W-!+c93_9|l$C5BXHn z53b476Sv)&1=ThFm*=F58r7zL$7mv!@`UP5BXjXouF&W)RY6Q2ZT#fV@*MvvS`D9# zc(tscTPlmIi~O|k$TV09FlupY#$p;i#nU#WU^7K^J#Od~(OFwQI1A&*&EHV+X#QY* zub61z-o>6Sn|Xx0E*VA7pjP-juTZ_BC}I_vfXYl7X^@>kN#KKNYp&;#g=<Z9d@B9! zbj4yVPP`*WMt&BXA4<3(^Ul%HUeL^rsi_Iw+I{|t7iBj?_F7nDM{|11D?K&eoTi6U zW*|JAp~hIDEH5rkeI@iM0Sb%>Ka|TPQD}2)ILpk-T<TYKv)fiO57gz~KD7oN+E-w0 zOZgr7_7&5kL+wxG$&cFt7z~wiIkn-1_|4VL*W=hwlUbpG8wp~GBh}GFk)z#<N3k@0 z?Fl9ijw(|(vdO;^4P!97aSmk<1Ik7T#!|fUBqS;hl{1g;`#3l#Z7m#l_62g_WC@{C z*iwsQV^DzW6<~2)&6uFFxWuxVFRO(vOZlQB09dygNQJL=?%pz>nYuYQ95G)FJ99Xi zzip02N-F{2XY_*{1jb!vLO^hYyC7YFExl&CJ9>Z*g^mW%Xxu#M<v;OflZ@sB>9Bu< zobQClmz*KscKDJHvZ9hW_#?Bh?jF@b3j|*zhB17JG*=T~6ODRnchwF3;OgLI7htS_ zrnnBn+`?JV7HM<^s3{aA@W*>QjqlbTP4H!)tC}55gjd&w?)&J?^i>=rtM}0ZcVjUZ zWUPc=0uy_Ck(erFVd;3<@_+i~3&Gf3#*8Qqr;6?Si)0{&czf<-vQoI9^;Z9%Ot5<Q zvny`&V?v7EJb=SCQ^A4NmWStg`Fz{=VLZSRt;P~>kiMPV_E31worLWR_ZS%gnJcQm zAFOc7jk=&)&pu>6qery3xFY!gZxhG!>Xw>I!mTu9wu>`mTH5Xa@t3RTq6Pe#BJp+O zjQc)mwc%en;p#Q0c24Ad?*aI(Q@9Jpsz;RWcYVJ>8U)Jzd7OdC{}WLp#*n=Cb*Owb zcpU|fNvqJgu$Y1|P8i0uP=3!X@W>ecy;f+N#h;v}0I#I<<$xi%0m?{?g>lX{k-iHQ z7SVCDofFi;ZhAK_O7@vA*sM%oo-&cOyq{v-c*+3sGdQLmoyx?(j?v30#T~!=d>_nW z+K6s`A(;oS(K5*}x4`Lo+XIQ^$Qaq`5n-En=;ZsVi(u=6&9lP>q@v2Aqy;h&^2>Xp zZr_yVlu$1WuAh8QN{NSsOpN88mji@e8_01L**@WDE9Cxe^GqTu1F+ehd$U?UmD6T% z6vorV;^)SceM{xtjt*I0gxS>de131v|MdbRPwgfp_0pdG?M9x;(;;nR-8t-HE3M=* zspFTPUQ}e5DhMeE=dmNzxjQ1MXfto@f=hEEa%?JZRU>|{)T793HT^tNiZwR&%%|R| z0n)$*ud0292PL5K%XgjERBaSGyjv<K*?05zD9YQ$PI6;PCaI{YAKPZ?$PPd^eqfNb zQi=RCTLEdXS~)w+w|PKdp7Ip*T~mc<9(wS%cxpn<k}Ntx4<moi;~#pJ7gxm#SekrT zg{cu<HjHBQ^OTtHBw{stk-4Ds7SwwA&>%RslJn3L&v#f-I@weyyIJ|!Q;16zWnxFF zbgl%42oDvJNH|NA<9j0W=i1852zJ;2nV#P2+fm_*Ez8zfFaFwD`<XjIF^8hVOEtpq z=qlE6({VTH%$AHa_sKNPWc{{|J*v@gU8$J0z=jgGH0sTGTAqW=>g>AthXBo7ecW7q zY-w_jaARw8Y!WW60zk_m7|`_(WWKx6_-Ey$#g*?f-_$tPE6hu+(aD{$XfFY+S5fRN zJ({7wG06K%cXiQCuexch)X81#7!v7lyk$lMOosJChu_jIUMoH6YQ|YUM7cTgEI(;= zu8l}F_LO3*^-212NF5IgUX$9Rw8`!SV4U|EV}~(Q+WNUZ#?8+|sjbfOXd&`NQW*W% z`JZ5J;SW(4JCn+3!yNM!t8p!YUaBVYDnfcT57HR&1mU~mn-VFPiPm6`v{xbUGRXYL zI@r?gaT(*AJHCO=eK>o4oV1I>UWiID8_mxmgM3~-@r*HQo4*j7WGGy9bbN3NQ|vWl zVn@scAc-g9BGvqEMz?dh{&490Aq~rg+t9n=)b6X{6~;Q;HB+tLl-8NFi!VmTHmuOM zpi1v=`h!WVmxBm~0=PP*MU&IB3M9WNe&Vma?D-`B^xgTwXVM`*HY!J}0IGmc3C~%2 z96F3kUktg8yX)+dY}j3+oC<_px$>klRwqe!o9-%$2j?-fRq;S50gJGRma{|9qHq;a z#ER2b`I6YWdLjwgwxBl>5qgqF1x>?n&jIhmYD()r3|vyBt9Z6v6qDPncp_T8X{;ob z!H!czJ7Rsw^?u?*0cCezU&HBzi&hx@Ko0g7db3@_`RP$D3~V>TY$UW{VPQc!-yJqz zcsRXQiuQGD^;-$@EK=<B&$>h#{<gY)u{R*ME-FjnTZwhVk(u=SurvE{-HjFOP&Zxf zdCEA}Dw5!}vgibhbKgRMEA{jDa5J~+wJx>}J;zyNX%9PTg@ooPhcp?UIYkO=(5n82 z-i^q$oLQE!<3_{IaZaHL_%sHG!sXaKdX-7iw#Zp^g_J`{l_gC`U2*CH+%>xKDyL^l z$FPW`N|&Ozrn*u~h;2>Alq9VClyQVmW{AXs%g_!I>O9mGeUqV7#YXMwrJuu}Y|reK zW&2R`rVf)SOU^|HW`89&g?Xm<NeKpyvEwQ}RRszkFe9~0|3?v|Xn)c(4&k!#kG4%D z1uJPW);t^;lg+w6IMk$@mI`&2SRZ!ven#e=P#Z}a6m?L1(LgWB_kBT2-~Vgmm3u^= z`Z?F?h+=ZDsy?l<ZIu)*noD9h%H4djU)*XAs->6soJBIlq4bzX+U~)QrfAl7W^rEQ z=V1!hsV428rB%4x{b&o=D*`MkrZRC&EukR3KRM6?0|R|-euqh9I|MN_kUGK(&67{? zNAf(rcoIDlJ7&Ft*|c#TdN-MrB(*$;c#29d9V;BI#A5_`fi8E4tal@V{Nvc@>weVD zVC>Vn4Wqy>7eqfw^LZw69fg9pX$ME%i5vb*6eF#DwikoTxfrwxi2*9mGaZXCPMRE4 z0tWSv;<y<7ftmj(t;}*UuCY%3pm_TL^Wbb_l*k&FA^H5LnXC3^y(h@zM%^1DE9ZVp z5TJj8ul3v&?)?-RmBwb_y^QHzxi<LLPN%5}+vueVw?Othij__s<KL*17|?eD*aUBQ z8g+o_V%&ccAKE!ev3^K<)F9r~WxVx?kJ%Rxn}a~z70g3|dYBd-Ur5)>Xc7;z6AEA3 zh94?aSLB|}PwrR4$fJLtcqlR%Et~0co4Kt#vb2!%0Q{cBufSsnl{Ta!&-0QOFlQNn zMm-niU`qG9FhrG0NlLU5Wv&4}LQ7jbqVtMQo(iQa8T&w26l{D!7y52K9EtOP&WrBv zQ(=45K~Mja3VjJ-!HR6_Qa^e#56)MO#Sw_W`Wo0n0<bevubDG!#l#_D8{H}HeH?7` z1@QBGjBA;915%$a4e_PQ+FNh?3#%hpH^TVyPsuidccFX`kK6{;4^Et6sA`EDVEK*m z0pnG;3Lf|G8iR2HCGEDaZldawmqQJqb^6f5J(vN%PVWY)=pa|?X=c}%#Qu4}!%h&b z2co&6xb(=T#ob`h)q>1*(!MU<deHkOpL2P`wE<X?^!)34uK_X)^`=&1`6Zch3ZNa9 z67Oyd(boKn5&3@h5o^&<kpR#tN_Nooe}dWK$dCS2ijT0Hy0pdULv%m_m><%c^}bjx zMdwIJUU($@eqpEVseKvw%1o%Az67J9TL{lh%;gRh;P{_%ku)t?pT8yI>)m_#TRT*2 zZ5~x{GYYoMQ^Ey4RnnA|_i_Uj#Tsm}KvXea9D<9(uJ1NV>cUY<tnzDr5CSAMvSVSe z2S8Wg$D33Uo@%38Bq&A<ZsCc>Q^)z8ta4)u2K{}`5jOf3E9E#eP5`;IBQYDjZUyBo ziO1o7v-5X2R8~OlnviynqfCt$5O{OWY)_L}oG9w-eT+whW&fjYvy>ADOsvr@-m&PP zNYa~pzrmRSo}!MA3pHwFEAd%NtT?%}k(2XDD0>;A-(rm$mF5-A5T{&A;soq!!&u)l z@Q)Ao4`8;^y93G!`dsqvIch4h{ruFM_1Tr>aoi3WKc`#aX1<%MEB(ICDF%Nnwkbuf z6`UWX%RDm|5Q7!(ylvI*Unbc(ho3q0<800RMvyDS{YyE;%A?v1SvzIXGEO=395JpS zctgQNV^~hsQ)XQ^F2UzVp&yTB_Ey#U=CY$5<1|lnr_PN}UTK{rs)x$L1dUCJUd}Kr z5+#}yy_vSBg#eQGy#ddxgO|E=(m9Xa52fiF%kf4ZfB2SJFpsaerUb*?Ts8KKc|Q*O zG`=$f)i)`zfb$Oc>=opiU1i0j^H%i~CkfP|yGFJBgch6^&g`?e55G0PM5!x_OJ<2{ zf42~z&$PA0!_T=|`CS*c)S6AJ-c2Z6K4$Bs-taQT&tnZ=Y1m#vp9XM{Sg{LjseKt% zDC)Dg5p`2+J=B7ge#mXK`O%%TY#b2jW;zD4)~r@yQ4tuq@i;ViXfD{{<nUn0Wj4(q zagbn*dM4trSH<kvIl(x+-~bFfYa*y0tJA-<mh5wz2-{l=4ZaU?F0kuDN2gQMFqKoa zt6x%d2!z8J+SmS3q_sXlY@FV(w>oxXx;tBEx9S4X+nzQBpR=_+YByWD(2*xo|2U7N z>PcK};7>b$SkzvVe+b<qu1S~9@cT?ilHb5#japu3Uyo@paN&M@*j@c&-RJ?s+c4hs zJh^gH+WLIqOvKBOxVag3MPx{2U*)iQR+Uqoyqwsk2+@M+dwU5!_Lw1hH8Ii9*}Qm) zy8YqOgY#6YDvvfB?v-V-<29#@YX$v2<9QT~GKnQKOE?GU@QbOHP;du&N>S9Y&8OnL z*3zb6!s1l*N+eqg=;3v#%5>VyxdP)ps7cZ=YbsD#q}UB$cipDU6Ud+_53-dt$3SeU z{${L7rXcH~u~Vg^cO#lVe;R~2Sth2n1OKvqH+Y&T=U4XM2RvqH@4_p@Yn+1Xuk)%@ ztJ-T&cg@0GpPRPb@KTeXhMFvF;BXc>&gxX4!u&>^-MhC=ddto~kYBdiOl!~7FB|=@ zly}3T@pv#U7nMnwZJLc(S>A^E<dYjw;+F4+N`VG?X?bartWDA;Ty_6T)<=(=Xeynw zO3d`b&mJ61ztcR}{56}mg5qyTjc^9|*oZ&UQW!s<{oGQu5`a&6HkYxOqCDTo8>%X? z*dSHg_Gop>a1%W+_ZcNz$;^$0zq$4ti73!g+UkHL4R5(Eh&mJe)@FQrf?v0%Pk*R6 zr%i8gp;k1Su!<~+Yv(vHAn)@IlvQTyE%?L!^Jz|S^Q>RGdt>(?dtr<>yG0PC*&PVl z%q?25Vhex48oS79`Hm`$r`Z${TjiCQszy}<SX6MAb{{&o1h(Gk8xea?EbW3ebaalg zdd3A6bpu%K72i>SsnAj8SL1uSbbR01A%awg#iCYiFs}L${A#h{Q#D@OPmk*ZljAcc z*XlrECYj3mO52hSCY=2TB3#Qj=-pFHka&Pz-nx8w-qKWl?U_^m0lZ>>plWKK5n;l- ze#81B_vA<1%gTYM=s-5SAI!z2Jd@w*<^oj+w`6k^0ck-s4Ai`i&f!xRhJ6jMfa1H; zZb|}%)!Iph=n36uZFa+1GlG`!YE?566+2~2Yn0}$lbwe87$Pb0)yKT~mK1m4?8g#S zV|5(Nf1nR;8Ixl>;?_l}n&Kk%Q#cqLV#G6aM25h&CUj6>F}9?QRo#PPi0r4s*xpM1 zgWB}NNM5pK>r1oe4NsF9?629(vkTiywb-eVojLl-3Y(q$&<br0->$`L{MLt@vXJz~ zhX;D__jr8MW#R|Ey*P<Vy2(-~G2$SYM10hqWBQ6Mk8BbPIMJBDes}@b4W&vJ`Pfd6 zPrJWKgjq`SSN2f+=nz?smTDP@Qe4zKazitk5aXvT9Y+so(l}$XC_ij4QBfVkzQR=W zNuOyP#M0zpxm3J_%J~aBa}FXk|Ln(J`K8^?^0pHYs30?uH4#M=UexV09S>cBBbB3V zX?C4TDgy(|W?P|znK?#&abYH3i#mgq#RPUGOM_TC=!>ip;WQZd-<-dJ2f+l{(kmy^ zOX!fMJXfONExT9Bf<9P{l*Nv4a!7+&KcHN2$H%Y^E~ch8Gc@a$fO0tvt>;x46%+n_ z8j8i1E|VBO@5Kw8hWf-+6_pywaend1e$dDH(bebr956)y05Oa8Y*N~JRDukA(gt#j zxUsks1uDZu2^N6-pCuC778PV_3(|H*mIuO1%NFa#g41l7K>z&WjVhovpQ}|8qmdJm zLL8yhU%BzwD^m17!*Q<yn;JLt;eM`Sfb?4i;xso+Ln-1}jDsHB`CB(Uv<*2TVjN~y zfoieaA%f`VoyT262EDgkp@?j<^Ot&V#LCb}faPsEeO`LO{CD|n8TvuaBn_Z+vRK|F z06=`yl=_CwxgkRFad#B`L&tU+sI<u{v3AMcA>TJPQ+}{6Q6GWPJ81@DT3XuUwsaw- zgRkUl0iPo*)HqH94EaTYxcQ0i-|djvq@gxcUKgibXK|#&)0EJ%o~0{bnE*{+@m(f4 z0#<<%!hcLWQ-ElcQ-7ET<J|nq)-M|tucbQ>V-)$j2Sqs#;Q~dQXfuDHlaSo6W7Mio z0K02za2|@RNe!&tuZZQ{0|7K6R3&AX36?Pi#kp`mfL{qs<ycCf^Go{cRVqQu2=UXV z^i7`>J(!>$vp^<o^)4n~JUVZE7{{k|LW5e!b~YztkqxvkEvs70yRddW+!5Xe1p~ek z16C$6t2Nn^t)Z;Zp=?=|{GZCBO9isP3a;}LrIQr(R}@Dh@3aI)rFKQgo+np18bF^< z2@|Q}Q<F*^>ebtUgRZJ`fF$kU@xI8b6fB4H5tm)R8D3Hb9lX_z)!n`5)85Es<r1r& ztmg|jR=bn>n433uIRnW_O}0<u!Yau~(22;dr4sC=m*r9aSL^2<LFJ_+Df{6l@^de| zngFn7`j9ap<)qHGFS?)jm+qGGVdriAoaD0_OE^zSsU}QhfSG{%@!oyG(O;vB2VJU? z)$`{=etx6tP_|V$Ta}{Sh5q06%ri&$uWfwmjt&fyDG!-)Z*m&)%B^>E#<|fIQYS*f z>;y}ld2FU`Rl6(6^CP(P?FR&kmSQ0AN74(yJF>MrB&{^McvEdz!U#ezI3(2ahRUa5 z*fzoIML1Ix$u)P^f!YFt0f+4<+yXX{#eLo2z1xCn<14f}hr{C1X)Mv$N?r{wDU2Ga zHL8<`kOGUxSED~*|3+B`Tdq+Y<9Qj8>4?5E0J4_87szr}R8+n)z8ww=&$Pr5FG(l7 z^=ME!x+H5L@zOhEUKF29w~6P4rHvk=i^i=GP#jN~Pj>44m)N@1+Pb3EoQ^<JSmX8^ z<e;J=<?$$WxrzOr>d6NMRk719yFp_<ykcWM!pY2GUMql;1T`uo7O=CpH=>dMkM>Sk zQCh6i?xc)16*;|rQL!Mz3^Wn7w28;;yd>YTUapDD*V%rxG28IxCv>wQYy|d_I0pL( z5qex<rm2;eNPGJvAAh4e)?t!Y#sgZPDI{Cs^VkCI7w|M{f+Ik3YmlLeIka&g<P7+d zfKu*CR*U|-G@_6%96jtL#pmwR_eF^bWXqw@lYU-Wf{&aNPO0Z@?_DPAMW4hs`@Sp{ zGMYc+w9SUO(61zxMd+P)YAD?ABRKGQN3jPqw5U10nA&>lMlLLgmmm}jYD!-uPSRwe zLQ+ZPt?_zKUarX_Ik@5|oks=p@r0dWNSOJIxSFq*%QX$j)1L2#0;c66ud{TZtQI!< zOGGZ(Gfp(Mtb`;4gZ}e|*qEUb>Jne||Cr4@4Z<laRkKLT<w~trD@Z#IXb%VaYycyl zORVX;2_{(Ss_ks_drNb0e2s+{6tJst!C6ll8;S#$pS0Fq_1TFmsHpc^<({wNz@D)L z6dV&KJi=~@25`68$aP>`dH+@)D2vNE^OQ{<XlpsB<!UZx-Da5&4n*&6Xzr2|n_Zdp zZHPG$#L9#DC0(yLc^dWT)u_+f%`&}4)+h*01h_IZE{y~l+$r1;q)(Y>R8qsr8RVGK zY+~dgP<{5VOg5d4(?rSuU*dqM>YTg#Ep-Crq-5fRYO-m<7Y7;FEL>qC%{DbkQ%q;- zKx;jyhcUCvI&U$V-M*+T+(p?DeC`L6s%U;X$PV)u<Nwg--h;=l{TKFpTzOp3#m}(& zA1I2zQuuujr}gzpwxef5C7f(#LLgV7uSYdyv@C-cZz4fN>nQNUA2AOpJbn|$gf<(X z<Xl)HQj>mQeQyba@S6B=mYC$Hb#S$n8~!<M3}OClR{ig`Kr#w(Pj<%n%p=+wCrkM5 zk|0L9qLZpk@`u6pp0zJ0<>x>(Y$CgQQWoerO~0^_aE8Tum##b65&Z*sJ?u>x1m5yo z+}I>M+dj>xI?4wihq)=O2>Ns4QrxX^H#r0G>zT=%cW(^b0Gr?bovsRr*({o!_H#Aj zx7@nJ$l3nFvBoECD>l)NYx<_d{c<#?4<2#Dubc*JgRj+okGw0PbQ@CZR(?}6ya}yD zJ}o|}NE81+at_oA9FuSa?umnB$XplcacFUUZSKsgPhWFWUtAr&lP8m&bHJ(y%^njE zy|2TcmzR|>md}sGF_xszk=cATbOP>WHh+#MPPRu&8CRO)tu~D^koE-pHeMzP$CM*@ zRZW2%Mw(i6F@huZ%{7pHIu43dpNkPtljyFFrUbQB+zkL$9hTBCt|He)py_5(B(cP@ z4@dIQ8}x^r%BHeZn+aq`@i*aN8)k+6XX0IAlkAjq0f0|jo5h?|Mjok7xlWCj>_Ft- z2;%v}{8h1JQw{YS=8xL|IRO*eE{ZVMsu~HHLk|qH-;di^rD2n}C6NR`=}iZ{tfD_! zPkIgyF(?vE&F14XOsK`YcM&88%ZKnCANPwzhZSbovowf(es1Fgjmy(a;{Qnbq|*w7 z>vRJZ3#%$149Wf=d8~@mT1Qzxt~nTn++V#u+GQ+S(f3(hUa?3aafDQt@{>CX`c=z& z>EH)K0c&Wk5Dp6BEwLZZKvyC~Q<aF5vl((~@)f-Sn2@Ia)+E4MF&Fzx^puwY+Ez1A z0-J%nF@u1ri-I&R7xaZmEV<pWCiGDOK6$A=Cp%(j<{tqwNtICDrSb->lE1MaZYJba zG$y7SuV#RCyo3e3KSRmV*syWGKHGdWF@Sm0d&)H1l@m`~-Mp^bJB~cjH%iqdQP+cO ztAcVnJ_wRX%aeGfH;a=wga(1`@85JF;A6B((mZYzCiLKn*;>?*>gvifN)-?8cgk>N zxhj$`Prz+`2Ac1fzH6-6IXv<IS{SHco2gI*_OK{>W3k?!#4@-oT=JhfsKy=->=6}R z;bJsv+<V{5gTjHvO7L&FAi)uQIOx9imggKLaD|0A!~9Sc{?lDdLz@Abj7kXg!Wfk} z<%dH9jM3aHN6ha68DIG6dI94$G`q4~)zE_sP>v}OpYjlPW>@b6xnYCVEuo~n??^MK z485#9=McQ#``>!kC}@JKepDx6vF-$YkOnz^Y?7GSQze8?y>F!`56^I3r2BNiQEsK` zdB_hFWkE<>4vC_e5x*9Ohc2X&`9%;3$rIG?2cj9d_3(Eo2MR)n88J-_;+D_u13L6k zAF^!D9T+zVbDp0~qFKVBmcR6VFy6Cg<OrjVN{rv`9bh9qUpr!)tn8w92oqMsVQE<0 zZ^5P$H>t?}l?1v6CG?UYH{bO?)gT{h)?dW5iEhQCyki>uBywu{ow;SzJ?ZHaZYkbP zNSs$>?q(3D=NsMG-bAO@n5L80UyPit8KbLmjfa<#(V5(2^>jN85R9srH`5&I6&pYE z<dtwdlg-5#QI$q(#o6*z5u&lEMiPDnndo53xJo@8%r5x~_LUT`R39AAtXal)<O=bB zFDr>M3)Um^f+$LU|4}M&sL)Tk@3m78KW*HqA6c+byP!3Hnaw6B$us8SHZ@@QM+@nu z`{JXMbrI9=7-p)*X`qa~Ud1Fc0B=M#?6{q&BW-hWLc*Q>YOV64C*<e@M`H}OLNz}K zu!V{!lk8fk04HOSr@g}HHjc?9&Z@Fab7{IVZY-*5Bj(;J7n>L~i8Qq;w_?4$%G<cA zl}@zUO`}y-oAb=?6C7Ww=q4N8@LZ%NC7Jc2j!H{w>dMn}Eh`#PAYAfPZjZaBo5Hr` zC2|p_gtw5oU1x@}vy(;Hor?d$3B>8S=d}}_@f$On_V4GnXLU|ZXy0d!HTDV6{gSmN zQ!TmfF^BHq^BT<+u%0-^x1@CWD%_o2lr}bXGtWHb)w?2j>==^J@@L(Mlfm(`v&!nv zyj11oa+y|@@o6F9h*THfWXQjDNvq7;%*86ZrixAb5SNqeimbWg+m_b=Tkhr>Dqkp} zupCS_EcIFdH;sBHGO7uuAmLpaBR}-3zTKS?qJ~JGK&+6mP+7$|Pu=`Sa*pL6$ao`U zCtTVS(u{7|<MvX267Qa?U_sf=dKF&=g$*>hZ2Yq@<!uAD=R)U~(80%i-A<NDb|rp= zm-l!5l`QGqaRXWcaqpZF^Pf^s5)XXbp5S4!UJS)i1-V;HKSkoMbmBQMfYjWg15p8_ z$8w_m#iAn7xM>rP{PcA8+e+EZ)e8{NAgc4Q965R5&Xf!nPyeP=wvwF3%uuUYdurzg zAf&pYTTfQPPg^DWGSO!(U(d%st|a4?xc@9JLR?&x?4jx7NY|GwHprIBW&d8Dn%;Kq z*@immcDGuybhog)MR%cF9T7eB*Ht_YL#%<<Df*aFIl>*MsyyE6@51BJV}K57>;2>J z?oQ!-)eA4@uCB?4HZb_l_Zgn>I_@bnQr)DV6E{>ST;<j4;4FHs!YZ~etl!i7PFvSn z&IPgLS024^LEiXn$!dY82lTNl2Ubg~r_Hgbg1_S8$^U^=4w9DrS%|Lr{@B9@5e=Oe zc4s$94e)YKdqwu?y>{F9nv7ftTIVXhu025a`+V9YPVZe>W}Z#IJnm(yClu!yZRM&8 z+^6+qgUrl1Ay=>a#9wIn?5(=JFU_PUxW5ztfH7llg6x3m?1#OrZk9Rywv8GqaM}@< zAUNZ<#X6Q=2hH%|N(x)^cR5DD`?hehYN#)pNQ5=94|5t3s85n{w&~wYKq}vIpKSl? zEc92?YI@P)_k3nXF$LYN%yB4!i3Yz(P^c#!AM(zOpG_jy#hz=>TJFOV53lGO@<F6A z?|Eln(Z>5;#M7E-c0QnnF`x6(u>a<+E2*&7x;Z$RDQ8v@5^8eGH0`><Ou?U57*1c2 zFF&LaNu60cITizHy)oEK7M-BG?ZmG#E2|B&j$*X2Dk|4Bb*2h&mo;-NKdBZ%M1U#{ zcUbc#edu%KjwoF^JpBjyGnk;kzhyrRbY2`MU2g)T+H@-ex(oK)O-=Z>yu0?!g*(57 zEABXiAG8G;H?Am!=BS^&uWBwF(tqGnS0!scxVt)z-)`)R*QQ>8b}`wCU$W@(TVC?k zcWX+PWzo#PnCG4PllO)05UH`lLQ&4AN;j<k5N(7hw}=YM({J-@&2~0HZo{E;80w~Z z9=E4AtZ{!w23(XGQU{WKG!xzm(mq^7#5`2vi^$Bq;J1xb8RRe7pOU%kZjGWTt3LKw z5X;=t@pdO1$9b)EY6<7I=}o#ZW#dA!*LI9eBZ$!Cz+Ld{;Rlm@_Rxf(MK*YCT}C}+ zQ2fc?EC}VU)%EpvFF^s@Y$nY~x!PBki6U4(&B>bAB$Lk;rL~*+&s_k*((+p=xSf?I z@@L4DCX|^_HI&d50S(94QaxJn^4HM1C1~APGwwO8uQD&vqz0G5<E_4VVNLd<E8$>$ zbYrDgS~un|BfrYrNq9x9`g|Z^O+K5_Ed)N(jf9tW#qp(uvAsxp%|8`>$+bFT05fo- zMV@vloo!(krr@sc@=5m0SMlvuJ%z#HsU*8XI(MVRV*U6?f-{cOj^3k(E2Zj*Em%`k z-taxOLOqZ#3g=We#&SUg*~{!yH!4Uxpd8p#h6DJL_=7zajG#;O&r8@mg>lpFp;HO1 zUxV&OFswb-%v<Lg>*!a`j@B6HilR$B9>6M0id+pvi~>P@<BH7D$^N`o3`+7mv#x-# z7;qm<w2N!zX$a%#e?(fA<ruhW+z>~(*mLtFcWsLTMN|`rU&Ad!O`gSvg4*UrPH;#q zeC}XK^Q|tHMH3j;Ch^x#`Nut-mMvzgo=`HhKc}m~eCX-SR4h_2CNlV&4Rt65vslH8 zqpQJh^m!j2DK>{3!qCVRjUgI)@^SEBelT;+&yc<{&Ty0GAzGGxpPIPhLZ-6MP%*B0 zU<ezL#>ZwT8srDIusCpL>U;OR?t?+n+6M1(-2RCP`e;+*+)&05V4fgbCd3h<WDmTD z*7!ALvyIHLW3~@PU^fhliN>+^rpbOEShH<ghM*=l%03feNQ8AeGEr_P`DwUSLw&s_ zakr!L<>+^l-(>WTWZg>nF|f`3#zqD9Ol_p3J?$7I633DlCTG`A{_#&hLWc<2te1r_ z@AHwpA~V|#=A3K04|;Z5n~>CnG$+AtI|@K!9?%ZkZKx-%PD$4Rz@XrkDWwp95)Jtm z&0|zE*ceK@?%TONo0Fl>o$VgY*^eGq!p~Bc$<6)>SjbywzL=?CkA5EDlqScp!;WQj zwkN=(2^X_3l{Wf(K-NV#>+@FN<<a>%l5NGwG}6Yu+WGq-izIF38OcrPu$7zFT2BWz zlX8w|Q?^h<x|_*G=UlNTu6$z?_~410?L-%O>-W_dlu>~tn%zGgM1QP-C=U}W3!!X_ zfmJhbw1;n9{o<D2#_Z2JJf%mcnx=j)R@v~x|7h<>^U|HwxaVYNT3=}{xhvpN-E%I= z?L7y#j;qoPI$~HoaOB=`Gkb11(Ah>r0WryK0$b&h&Z>p)qzL(;A_so5=LR)2>kl>A zG(~xAWX#JBDaDg%G`GJr^?tkM*DM{!y+uDPI>DGf5LQtXtxjDqbsCmT&C^aiK|1uJ zN3|?s)Iu;5<IIMj?O9!+(EYQY_`3M5@9zmlZmHJ%cdSw^2(#XbSEDN!Xvi6AOUrD! zaj}4btR_q%4Bj*PkZ=aaDpcyc<8&58UnTnMEqkUoRk9<s_%)O4=~3LUc(V@=IQuXY z4b2*_i`qu5lZB`bb`n2H<Ql}i5V}FL>B)B|Vy;YTiKp>vA+t2>NJ~#w;gd@FrxKJw zt*#h)lPMTXL@jbIi?@&$@`Y2d7j9xE$>L{*?o;OB8f$D@m`;8e^O<*AeAQR7wWyUJ z#U*Rgvm$|A{<Q@xcPopk28=m)QM+`%tQge^VyhB0H68g4%uBB7iC_Pw+d0gAp`La1 z&)X6aM=sB+`}EBsTPBjlNZCA1s;H8ou-`ll-b^wv$LLYJ$3JNE9?n5&#A?Q_(I-sA zA!%t|Ryy;5n<`LJTb@qW%r6{zPafBSI;e+-hnw`Z4F&#&Fx`oVh|4f#Gk#`ZYxu1+ z*nY96&b(Un9|*B1aa~A(a5aWHI}<J4%F1kt3E}Jg-QaKdpTQGV9}^^ATTPvYmdy=4 z{kKSXUU(hETRHZR=x4ws=?t?RuFq@C(-muyiu@ubygtfV0w2umd8j`_k*1?s`cP5@ zU*-O%9>B(;&ck8c@gYMkmBy;9Tt+|n2ioLQI33(6Y)}f+cG?KRuEt85E{Q(zAxo4z z@rQ?^hkPEw2O$BEXKS<2C=uFp1yDBggrzaf7bjJm&tHR0*39utGbPgw2vYoTvllFV zh8oE&lhQf~y~@&96E;7h*lb)D*zuqpUM5?#>FcM@owFFWa=RWTNux4D&H}*MQo&m? zXw+2L6fN)lLJ}gld?=~niQml&>ae*zMc^;sA_{tFAR8(CC}jiOr>D`2v*(+}Eva_m zY5SSy!W`pN0rQ&a8GE~5#BGYzyc5~g@R3wm@G&BBhs_1f2|CfT3swx)99p-SR`eVi z!+mc4HmyGE!N&8Y;4RKg;9%=&z%j`>p}>>#D9BQ^QN@XZ6Y_z2K~44#OUA19An&~P zB|-gFR(C<hCN>B2^Kku4`<Hp-y15koxKERJUC!HRx>VyzrC|S67+Ma3_!L<ZlMStR zj@%nd0;vUimeC{44i<ac!t!Z~DOcNQ`%)W{ltC5n>Au-{F)kZZkvu)MQ_zY<FIKRL zEXm#r+Xwi$Z>>p&Tx%0&{P`9A&?rHawCV2pL(h9;E&m@$XBpK-*RJ8<6o(dyyA^kL zr?`YdaS570ahKx7-QC^Yi#rq#TC})pk)FKYnV-qZWX&Wqv-h)~`?~a%8Z)Wl7OkGY zWdE{wGQ^FsT_52n|7`2!x|GK~y2pebCm6?pPyQ=Q8hYZzG02OwGI^ngl1X8jnLLx; zXJ2aDU>I}STi<EdbY~XCG}eO6I$8NAF&7!N;c+iMy4IU1N9y5vQ22bh0aA3j)`hWV z<t$_{@TqELa`UV0xMGU6EwHS3Zj2hQs<e#OT<xNiIalNj!#3PzfFQ_CPt~l?=7Nrw zS5!Kv3`bHooMsY_gWxQ5i^7hz6}q?<)!FDbE}LM5j&G@?n0eN?4^1yf;G}in(fGA6 zOq9HIY{aig$b}B?+i>B~Jc*_8Oun!6{r;#mRbkvO>$A3a3jYwREH99USKFzmPK9{v z{jhyiu%QCYXr!3|is)ER&5~mS_JJBpKy%ti7r3&6#q%M_I6G`B)c47)QUU_Y_Bh*1 zx(6lPycn40J4&r}--9hL8s$eD4O+q6B4dn8txz|A^BeG9_)43^jJz7HV<X`@V|>az z!$1y#o?>sz;>o2O-V6n-T1Frv{?}fldKIC0<Lsje`0yVfy2~Ki{~`-K^<(RN5Hf9* zYT*K9+ptK_0U;>i^Zf$LIVP2XV)X~D%1b^wQ<vFQj4sc8K8Ak`V~2ICe_h|nr7klp z$*U+Y{rZzvXVQ{7P{@*fAV>Kpm94<ex8P8lfP)Xvnmpc->$^3oSm!!fO;{|+L71N6 zPIB;<LuU)P<sV>&Ump9V=C<MDx#=uAGSe+|BSs==Drd=xry&0TPec$O0@l_T(Y$@J z9V<6WVG_{W_2p8%D%W=Qra6K#jgJ#4P(}udp!Qi4Lr&a=%4mK-(JgIiVL7dC#&-Ys z)D~`SZ^-IgnfLjOen%n0o4Ds9{no9gu({K=3D5N5!)ueiO&95!i~jV6sQtzL49obu zNJR9Ft~1lum+lgdXBm84Bn-q9q|c#-QorAWb?!lyxviF$<br9at={qdUs7^hT~#Xk zA3jn#w|ZP(Hfb)0yy1F*>uPT^lQX_4JUOonh3!6JAP*^hI-BX%Y`}YO?nL<XeVusE z-uTDWjR00qr6uk+9bU$ojOzVOid<M6_aVv?iNHvD>?53TU>VYaogpA{{g`wHMiU!+ zNk@f?GTYBsUw=D=kJcS--~dJo1~^RK^#$=HkN`+Gm!A<}qLjJD!v=B*YkiNuS*YI3 z@|y=653Srs0p^p3`uL>n9_<6#<ua(JUGg4NBhW^4?BcVaFPsAOG*#8{knQkeA{ie( z9ZS#m`ucsx1TSX+iAwm^aW%;Y7Yo~V@lAjaIKq|le@EW!slb|QCCGj`z|6O%Nr9=5 zuRa#`J!#15QUqpb%rFJP&rL^;y%Kq2>?E^9<6f2Fy*1r6>@0^;ld_g{Ce3K4&(Vd2 z5zV%=bqZ0Kl!@W1DHA0JI|FG$SEli7$Kw{JlR0hJyk9!Pg2D25T&LI^u8}0Kp4*(B z0onj+1k*hftyu9RgMwPdME=6*>nE;pKV~)EX2#jtci~B0fyX=_OqN9=GFMlGq9zy$ zCTOOZxg!X<j@rK37L@@bq-l`CQ5Y04Ci6WXBGHW=v89f6m*muO{qS$hmobT_Xj%iD zuPBmS$lHdZ>!Add6NkMqM7WhxRym2RLASxO$0dO~E<aq2<fAI>fbE9#_bsBh5Ud%M zY#nek{T#^2iU&s?_ROfZu&l|+k&<y5!x8#LS_l{fxMUiwVCy$>hnt}nxr0TppE-B| zRR*j~%L$?oZ{1XYA89X!NejEjbI0b#)_(v7?*V9ZX(Ed$lKUZe6>ZDH*_$?y9)i*V zCLUbb71jPNg(nax*FfJOd$INL_3<5PO3b|m-nF{eul}wIslXCFq}uB!hD4Q(LWqSP z!4_&C@?3|6nf|Vwv-lz*vY{JinGRC*o8apT2c4dWMl##PrhS@5dlZMl3@oMEN=Nu* z?lYAM<br&C7{H_yF5p-|xH!vS>tTEe!)0au_yogCzm9X@;~}F~pfQ3_Szk?ee}v`` z@!8}2@%FK*od+Bend=d0!(Fm#EuTb?>o<40XM8zGPB#K3OeD`Q&B&7gwZ{-+2h4&C zsYg*4up@%*2n3q<^wr|d_>BLWTi$eFY^MHT6;hMdOvb5-uUGugfyc|t%#4jAiM%9G zb&5Cwbxz|6^@6cqOiLt$3$=$;WV{@)_ha8*3Drz%SuTF056?PU422!hk70U_eycCa zzt6`$6>@b{lrUIstX@6YZA3!<T6w51pr)E#d(yu9_EE&|?C)ll^GJqa(I#Apl`xzn zb*iCq`)}Hod=qxmUa>St{@PhKbo_SA)~Y<A<Z}celZVDe;_88Qf!U<g5nF7<U>*AQ zwwDfYwYG87Q`S&lsrxm$B$JU>&K4~?FaK+Vb$JQr7)$-t4_OFh;L_fSx6w+q9v@Jc ztKw1rEqC*)td2RP!(;KzH{ad2d=uwem^)9{XG3)>8`ERoO`11e2kcPLo60s5nAa~e zHdk2JU2xZU;lB5DSze{_PA}!DMJj`=NViy(ZFcqtwH}Stmu!#K1mXOsHjMn!ckqAk z&eZHMXHL)kQ!M^)PCG~VOt8MvDW-uB<n^+Dp^n?BXsXM9!nmv)&x04xXv9O#*3L>~ z8K9Ul*tYv??0LGBRx|RXeN}n<%)C*^FW%H$aE(z*HQDmHmU5Eo>lhQ`jdG(%Fi;-j zN>tPUE`uAC@s3u?M{=(JFW5~^HvOz+%0gRMyz#jt4>rLb*DYiG9V@DW^Aj&PhW5b^ zP8)7_)U3QwwA>8^a>VU%k8a8LAXYiPq-Yt)npRQ#H7$@Od`wTfUV|}(K~Y^%gM^D~ z#o%a2*yh>G{>HQsqb1hv!M&-S*AJ8mQ>kj}mH0N?s@7=}32<@b@+*bvMiS^(gaR#f zgru*DVELPAgKaC=LCIwd`iH0yztuMJ%gQY}h&0HoH5ElC6;@=O)09kNi(O=QT}s=z z=luHkrdl?Fv(i3|_b0nbxUKx4yV%_-;nYZ_HB*IPNn;OsZ;T9P%7ZG8a7PFfF?~=G zMSTAgw-c^tY<gE^=*P_7+79%ruyB%l+#txd;WY76QAz=LL}Zky!DDw8fxo?4p@O2# z6-6OKOxE=n$x&?-<Y6ud+9c>Le#n`!vjOjhM&$7N8e4;?Rt*n?S&YZtzVZNEvi3ag z_@Z_|tE}6_Jk1Q|PN5=CY%bgDPt@L#25ZTqWC~Y9*w)@U=LqI@TvNGgtViI38B1v7 z5Sg2C+8-WAoqY#dQqbqowxN7lJtdMdmb^I3t41fXyfL>_rovU$j45kpgI<nswbVro zZ8}+=xZHO-GIR#yd2x<K7U@9ZQl|F)t=qeoKkWw3y#JlZp4ujQXm!OzOUfs!q6k~h z!xd>!Ol>))2rH337qO3|KR+URkXjroC9!N16488N=rbIly1g0_ruHQ9(pz`w`!)@f zAMq7EaHL(byKBVt3*6LgUr<o~OciyxIQw;r!o&EwN7x^2+#aMS#$Q5TVOx=&7DerB zn>JEvPyFmSpq0zqtdg0g(O||9Wfl*G0>`7pa7&F1=&+09gdUCLkB)+;U(b(r;%8E6 z4Y)dv)M?CuwvDrU-9#Ba$r+s#e;GVf%_&8jG@MmnLFw}ANmDpg%F`NT=vjJ{FTt_C zWAC&ljyY@{b_h6_UZKrSU3EJCK$cO6+KqA)0cH^gBbztss}ka!HEL({R){NWu9%we z8yyG2GT@oic~E4@)O3>adyD-@b=GyKR;T|ZhM4qgN=t<6phP(toNvF?8P73QebYsJ zIjugp6o_Fr4mfW*4-l*CkGl3L2<I=fvKn2zj2&_o9OC!p##rdWL4K)2<)J8o<@-<O z9(1CVi`-gNi|arpwk@N!Ur(}3vTL=%jNu*pN-4IeEO6kR)=~e+0LU*|n&y81Yx!W3 z7X5lNqay^};_4Ug4iU~-frHnvKY}tF_0RJAikb7>e%VRPpDm0i6|T2DfIfQKGvozq zA4c<5;yC9Bk^XC`-;J3ksoW%O_8wgecQd4*%r3J{>3(R<0bjFl45&7Af^KoTc_NC5 zZ<NP>!$XQcWSlED>!W0z=D_NY<ZEC8SGM{6CtqPY`s<U{Xh~U8S5u-JqLW8Wd4y-R z7g7#61uKZsroed?3km|b#9SkJk3>`jAK6r|@yQj#^~q;Vu-;qJIN{HSorbaq1##H{ z4J2M>{0I}WgE<1Y{Dl<J{EqSCsu?%$Pif2AGg=zJgkLHw^Nl<S!cxJF1P8i_PHMtC z^RQ$9Y{S%BZOA|J=5TQH7{lsB&k3d(i$?78voK5ULdA=H6y;0E;DG<xo-wE{5-_@s zy%@C&iF&3P6=re}ZJfMMWyXKzPE*%ty0*EGDF3uB3lBGyKEn*R?F5FSA?fz8EImbU z`EZ9bfl+@R#1W&gZ^#zKWrd{ciQ|d83|H!o-cG*U-m}N=ody15FP*Trm`RtUtqF?m zRIVw~=(}~~ae1+f6Y2O6vIPFREHcd(qtzh>)rPShz~CSb>X(XEebo+mV^@Q$t8b^x zr0?A<HxTRR3qP)i1bngp)V)%mcy{??KoFD^K8Bh^h0pNMvWcS9AV_|(e{QMLLT%`o z)9<bbU?eWxSg&goo$5n3S|%sGSWad0=-xe_X~wiaYe{8YBfGI60V*0N0OuDipvVI% z()z+(7-da&%!V{HEFrqMxU{UDMe8n!T74mrbAw+cghSvEieaNs-J?JiQdAFcUR)1c zIP%i10G833==f=hV(#+XQ2T8;^eb5-RQViD2$Jcwg6D=!1~TA~f4?!c%dHUUPZ0N* zrTx*I-?*VUleIAu(r(aSN);rq=E*G*6KT#=p;<Mihg+KVOA>(>OwS*rRG<(c#XEwU zbk<VlqM}@=<%9m`VRwR#4oStA4<cr$$O<8Kl0{OID$xzjaIFwLsBo#NBq5`ILx3C8 zV;it)w}+l@R@&SnH}b7!2#Hisaz`gt*QNwALTjvBLUW9;bj_lF<S+#c=MAdc;sv^6 zZFs9!6;!T3q9>6Erqr!G*Eu8;r<5E2V5o>tnRAv~S!PsdE(v|d!;}mn>tKiv3D6vb z%Es>aa=gvDI@PO-K&~j1QRvTf4$E7ZMOK~T?Kc}bxk{ia2^N#rFCqIG-CQqy-Da#( z#YLGij{GRbxThJwDpp45Bj2*uliRg3WbqG|I@{H5)dbUxVNy9Sj>NNA+z{|*0y(dU z-&}mCmG*W6rWe}vaXC|w3?dTCkOYO6eQzl00zdc0Tu_&<7X}KJTBpHWr=@dNsnvsi zv!LHn&nRpeWB|tc)t>jutxb`+H*3b|a2Di!R}`a=WAp*6-C&36p7Pj&;9lJzOwy>G zSsB{-X=SQ*%y!sVslf>-D^H@hnSomPJqT`)UOt@cquD-qX;aPy9=&WwyuTZzhN>(k zm!qhxXwoLHtT2Nw)VerINV$q-T>BbC87FzwgAkqS;^}vF?`(a8abgOZSqiggiFUH| zqR*z8LUuK{;z2~PEvEX+<vq0EvZlkDso4os%&>Z9rXPSn+)SH<CF`H2M3sqnl@~%& zkn=vL(^hD6%3U>KePsY8Z2T^kq$zeXsAYm?RYY33xzpv1Hyjgc=0pUBW}5_N;1lT1 z@xW<F5TF4N$jdACBwZx7^`zsECHVfD2u?KHD`uPxdNUhwS>K387x~QP@=e_MZdmGT zp)Wq*<;acO>;>kZYC4ihEQRZeR-I5TJsWpsEr7c`Eidm8?CvLQD)_Kj@}Z<dElwpR z;GPN^8XcAdS=P^>8;;*R8OQ8gc~K&h9h_^J!UZ=PRX44YCnv$lEPb82)Ub{YhP*y! zAjMS-=5LTN(Tmh-Nlu~{ujd`m{m^sRn7~jJUoj#NnEZPbooiTww1XSdwlIgAWVaX! zDOfWo6y9Vz<x2$Ls~RL1j#?k_88y@t#0uk6%mr&>OA5wH#MBs}jTCp^y3<}PmL+$7 z|Dq>G!Fbot%V*|kt+9Ip`<t?kv>*TVEeZ3`7p{*@fpm2aO+^vy`vF<Co7#PvfbS>> z3kxS?EVjAj=yf-y20~39p=z*E-E8JXrR&g&Vehq_@dm{!>F{!n8;(t!e1+x*X7tGS z_U?n96yfwQXK76yn!Y>FdYSNAc(bp@$<g`V+ILaEP@XS!9gDw`j^McUZt%U{-!!xJ zX-K9V2pc!+S<2kGLYFS??R_(Czw(#G&CT~%X{7<BRSy)HMsSmr?U?m!(Sy}Wn3d35 zoigayT3WtuFWe10^RnI%n*YLW>88=5pu|E5x#y<Y9G<#(Fu}I2t}R?8y|H3$Kr;uT zv4vZo*tlg7Lo`u$-V5sxqvjY9+a@qZ*G_f*A?9wv+RgP?C=`cQFc!^}TU+LpPrMe* z$!F|e3n|z<o=l^q?MDb69fOs%D4((EnV(b7j1w1?UUD7$YJ3vKCP2zvme6W}{Foa3 zqZpylv1WYpwciXuf){gROf5-RiNhsZH9v>Cl;=%a{5i*tD;v_eGk&HiVkq~g@J%rN zqGyA{ji-?>o~ruGI=!+cpo=A13Ek+atyq=pG2F6jUz*wP)Ju|ViW^E)N|$YFhlm+m z6<cW674mA!xs@d767VyP9s>iNYc#=ze)IM-0)<ergc&(4t+=yueI<MrymV8pKkDIm zIx4cXv$4gJ3p^xnMQaUiBc^UN9-e~Gv)+}{Seu4I>Zwz~VPi~)IIiEv?eVIPkg4bz z_NW+OGRTuaUn$Wd9l~auIy+dWIj7lQFOB$_r7S#;sSLgk0O)fz)H$Mq8WyZ>q;1d- zPBroZ@7jTG)0Q8IJWKN?PP$Wo)z$3%){@qJiXRoZ8ex3@hKuagA!)U`Clxy6nI((( zc`1{Gz#4i*({$Y*u6QUo=?JYK3>1A$;`%cA2;j^o(w`j;S9^agCM_iUyc593S5MCm zRbhZ>B3;-5R+6!b0_2LX@PLbRpxeYR%ZsuqDk>x@Jo5qyyV0`H^jJy&VuB}tbBttg zb9&9KxiZzoFn!;H58mC&uxe9U&No8gJ31?}zBh5Icd{qW5&AbmJ3RnU7@O_h)?!O_ z5qxgm&>p34oHLOH;#E@-6~*NBwMYgUXyG-A9A0Yg-{9{Q2FIK4IAQP`8hu&Q1169) ztS3c!+#N%+)->!QSDyX#Gd-~kUK|_vy*pJBH|)nWPE{w>D>UYq6=@Tp`x#bdb85`G zw#h3g^nC^^008`uC@DQ0RjE?rFg{vjG8Sg6)_-1EYd))1m@Pvkb^m#8{a*HqI*z<y z>S?q0f&_jLPGCWWZhL_CadbOpb99=A6KmL+Y3gkF!+g){(jR>aC5}{>wPif*wUGsb zxIoabSi$_kYi=Jc06*j9>KAfMR{0N`ZREe}!34&VCt)~0t7#)LM9o&Q;>%+-eINmQ zq=|0XS(})-731FA;LuAxw@ms9VcBLute>E#Y|>;fwY4o(dI7#*9ADOZsbmaN=mPG9 zu3O?pjBLhUX7MB+gpb+Q8Kahd{Q7IhS8z>4OMRO1r$V>);5Ty~m%NO$*rv1sMHlZz z>O+Tu9V>=Vo@10QpMXB%bfVkgfS}8*ndPH^9p448-0v1++fPN)?yU74+{E&UETOq( z4S%a9__<~&tE`RC1m<k5m4S?3qdlCSHKFh#US}i>4b^Rio8SWoc|SPi52j!Q%bM8K zeMutAMENd;RIw}%)o)mv3$61{OhQnjx3ZSrmnvH(5460MdJqO=%wD4RPpEAPTo&W} z@761Z2NQu*&&@5pj;>N(gX@}_T;7QrmU-%e@nDUn<l5{3S|Cr=;;qvd?UgD%0aH_| zbUZ<+6UhM7fihRPV2rEGJ*3$a>vCExV+jbte|j?=8fW<GWoxTg*<dxz6crIe+W>6f z#{V@CPEGADP~jwaMDWqv0ptDWuk?7sgzZc;t>K5?hymw`&2tKQZoT8dQ7sMjOL0gP zz8d=xZjZ2~LSU<2^H@`NvD`99V;`SeXV0axE-wQ-ro**4L+tp&hBV*<mRESIh^w&1 zd?4jLta-M*1D#>M1lh~O!-m#T{@Y>2=g3|U17Fl$7L*Cdq?^(if9Ls3`t;I)zImGc z2tydiS$RMZ`nNpVBK;I1!7I&Xgr)@=r`9pz+ySPeH+_Gnt=hjz*-Y`XG_9U8bls%} zyY>)Ia(HU%Rg^_IWK+>PPlJ5S3Qss0PU|_wNV;^H*xA7uZI$Bp&kUc22v`|{Us(S0 z1lln(#*=}g(x+Ca!k)YNb-n;r?8c(@;#v<hVl`x*RZc~gIVNhBN<4iij2zsNk`l&V zoS)y?sMQ}YZSI(_jr0e$fSm<D!gZgr`m!2k-_R9le)!;<ZFwoFrmqpN4Z$?fmj+Vc z$I}HSvQ04A?cyFM(HS_?I$l|FeUeZ(s$xN5Jzs{ncemWCbgG=5@=4Z1*Xt~~(ogtO zdP)ULY*OSw`S?T@E{j==CAcC@$q7X!k-3ONVzF*S<nw!x&3ZAj;0f8rOd@5_D$8d2 zCmQI<FBZGhXGd0R8Pz+yTIw2&^>}I~w-N$`ByN=hQ2RmuerCHtqiuzoux;UF<qa$a z{hBb<c*x9k)cEd9Ns-=Ig~#+DDgk5(N8`#!+V*Mj1LypZtQtP83h6sM7KQO~Ab<do zpVQP{KG#6)|K~$k_8FMQ{rrlW((e2W>H%AEJ>KswPbRKkc;Dm`FW4Ge>HpF|yGs*4 zgNTTto`Jl~MXUf&_;Fqt2L8kfR5e>Dl6P!n_A|41Fk8{QB1ZlGT8;vf3wjf`Qr3x# z8RmD!jHVnn%12T&cYU0Sv#H)-kHSPbwZ;fuMj^=}O`mTBDwQie^Ua=4k`3Oog%ixa zC2TxT!A-80X%`T5QcnX!zJf5F27o3{W+1bc{cfxIFi=<l>_oX&_*nn`Sp3#JMM$b4 zBQ_L%PUbHe0;h(5xCeRR$oW7s4_b9i2KDvLum4(4m*J+Ne#g)Df~mKucB09JzD(Lb zI}dF`+P5^ghf3C~?Ka;GYI%gS&*I{*XwUK!GWlIFmoy`DTJ9%ZXtkThD`{i`1zxb? zC;xhxn3ony%$&v}P&EwW=)TG!NJh`P4e3dWHaMjukAz*DD{fHyT|zxiZJy$%Kl4oh zQo1fAoKL4Qlf?2?qNK)Bi*WYjBqXD}%MXWf6eOfxQ4HioKJ0t{qE08~0BCHN0rYFt zdf|#w-3+VWiNDy~oBj3Pdg4(%Jo*Q~{>gUMsrN0Y)mAhGHLR`F%?{?{nIqijnNl85 z4}q6rttx95g*yt2Nl8|pqGOQ|sFMilzJvAN!9tKEzf$S8WES+^X80}+)|e`MizZSn z56Y&^Ccb8*0T;BiGlqgY<diCSxpkRws{%?`&n^^~eR;IK8Je|5_%zbNs}czgSPdz9 zPJh$O2NUNlv=<I?dZOnb*k6EDbNl_t+j*j)i(aaU6yB4@1Bi{>3N+g{%`@V`CIa4| zn-0bXmJxO+q<zL&<Zp#ad#ug%ryIeqx$NV>oA+wm>IAr2wPdEc6$HGVL3QkukIp3A z%@El}HMP#{eF&SoM7r1npT7p5tEk%H>4EZa27j@B`~4?!WIt9~FWfI-=gWHRE7w4L zq{2vDj1TVBWr@=(f(+Y~EZsNv4$t36`6c7_n|SniIvLWJbSyimvLM55=DFOtoMnL( zvAm_30UmS0!xrCNlG@tRnrrs5qP6kY{IQnKUa^$)^<Mm-UzOiVB82qFD{5(8*+BtP zfVjr}UvT{`1%@eundVI)@|`<exRnW!H(+tX6jZ!(HBNuHWw?p-^M_W$Zqf5ox0&<z z9wdSU3m_iPVzfUvBc!l~f2CBxh}4epW~^lR9Jzuodg@w@9MRz6A-;=e5DO!$eyL;v zuIc#rB#>m>C3rpQIE(B8k*J=<rpP3JcT}FjDo0qrC1j%>fNo1JZj9XvSCnb;49aKO zC~WmI3|W0{%j^*UOBbXPe3pnt8`i{k9!ahc=8g}utHLxWUUTy-2J)ezRG-Ucg_mD* z(i9a{NPUkLloT(Aar7_yYy|EZTBHOKnh4G^<U~)-4@%=;J!RP(;)9zjUr_mPI_1fY zpM)weDBdD=U5ULwhVX>XQL1@C@rT_UcJlA*!w1M#48N<xQsu31#YHP`%fE)DFGgIa zGj_i)xVxsbo3O(6*45>A>ZK2QHaf%;d*;{Gc9IqDsJZZ3yY1n7RmK4@L}W12hVxnz zXLiB;x$VK5>t7uWq%|gJ0HDAw=<8nhwa~NAu%pdvT8mVkv8V|3WhGscR7vsw=%(X2 zFHx3#Sdr17+)u;f$`mhy7Mi3q6rvDIA?t2KZV?B;@C>d~O3S*=x2-S<9wMm!U?3-B zX%<j#2R|usBPP(xD$0L*kiuDJ14M;&85p${oWBt=aaGN80@W;PrcX}rWcBS-xv7!J zC4wnpMAQad_uEA|f8oz`P}786$Z=hai6)Po#}efxW($9DFn4=qZT@vSWocKB59I!t zqL{93r9W(#oxvO0a(l0E#E?|!tsG0mN`x!-c`Ju=t?i6G?#z&W6?EyK<(f%8K<{~I zljvZ&%F>V|$rGorgAy8QO|v~hq&rs_G+<#8pRoG;K}I<RH!nkDPf)Ih!t?s?b_HH; zFs`{4h6VZx-W~<q!_#g9M})tZ;FIlI2QMVqiYQxaX6BF3y>u8~B&4hbi!5{OQ>Ur@ z1xqI1gwtf9z<5g(EG4pEb(<xv#SCf>HTum&$D?2+b(rrm%G;BFhEn%jQB|-pZU1c7 z-Zk#CMU&3N*K2)z@6BE~MUXW}b8mCvR5gvH2{VEa;)*DJ6!Lr!8l-`XvYj6nuC!MW z|MoKd5kA?3BgE)~1(5~XJJ!9(lONOl&J}Aj+#SLoqPDkF@Shy$>9-53?v(X2KCRZO zC%>Oo&LBZh{`7-}F_NF{!kx6VMpvh3^8Q@nU@0CTp4-NBCizNpO}ZZDW^eGcbZpWS zo3Y~g2I3(q0XAnBIFrV57jX=Ue=0wmlE>m6T4)qGKaL8=qjDXYT?|3MsVkUZPl(Z| zJrl50AaV%-mc|ZMvHh8UcJ60hj=H%&+Gqri@$3@Hi#$G<Y)Ak72Ow~UY}k*pCak`$ z6W+742b$+BI@pPnmQF|)O4p#Rw-Elu8|~8lT~&#D0<on^)S~ASB(t28?1VK|i<XSu zTYV~9HO$Vh9j~~->{|UgRZyM8qA5dL>-C|$8f~6Fq=4(vB2I?Jo|5p)GFB1qP&WNG zeD=GAx{oS3lLwEZp6DF8;ii+|W!<av#ekSqZ;rR{-emZnT%$wB51E2ZJZl_$TP&MK z%ja8+W7dof;BB+o2|Lq?9D^a6s(5FiV{98eVm3OUa)Ncdg>~CcJq){Ll7>}<`!%zM zuD@X-2AgOr=`b~HxF&7Y55sud4>VlXuIk6*E_Eh-j6$-RAvF-(5elMH!vKOP7g&#+ zfsl@R0q^hr^-Psjx!c!Ge>Y~G9?ysKXpL&l${gRd`%|5J!<|e|VV#Ntf&79Apd=ql zN?L-~dV=4Jp{?w$)QB_@%{FTf`Qz2!N8iUH@JxeZS9ht|51znC_AfGk@T?!5QC>%= zepivnKssW{elOj%O&YNz0;Rgk5%%BWP}_fiG53FfYJafM`^VUp*xUJkfGSaTketMb z!drY7v;%`u&*i&0b0i~7%jKY^TrquHpGY}ZUStqcT0>-Ao=$)iNMmomij+F*GSalI z5P{Y}@L)UG=`&J-u5~4CeZjTLD{kQ`5Mp!0OVpjg^^U1fqVrWvnWLbDwV$IO{vj)v zKx@{e&pFoa(myg&0r$Ljr~@Lm4((OeG)6~np3^Fk&4tZs;98t8nPg$r`HqFGsVZ1| zccbg!fEx*w8@+U#y3NPE%G0A60$15zWsTp$V(-@QqnE?pl=(D(A-xi_A06J@Rdt&_ z#Z?G1J$~hZAu51&iEcafLX!W*%8H!?5}z(0N`(a5=e5*243(BorT+k0Pv)+l;yohE zCA&99QuBtBpn}S;O>U=2OrIVc8r8p>3HrrP<z75?`L$uh+;}tEPk0JL)Vfib?_(|8 zR@3KXR>?9ZeN(E_am@{FkFONZ7vx;!lo-BkfH`^P_FLPQ?^T!AMq^7q(m=yr^)$B~ z82p6w6C9YroS%y~^dZypEr#UInay%e={m-VpzHC=A(lH#(yHkT(hRd0KBxM|uLD`U zo?GB@qV6y^@3a6Co1L?1yHBJqXGz6R`lZIoC<%t6_kpZleyb#Al`~11G>y}~f)R8h zDTbqN8JrzI*UZJgP#)Uwkx-im8K5Ga-F>_rSoq?06;G&n+Okb)=dPUo=FEt)fW|YD zzV;|#m>TxcYE<X-WGs6WV!pj$EbQm;E@od?6Z`Pl_CWmR9)Ur;Tn=Dw-0VT{=H--Q zHRA4R{0{&O=|6i^c)K`#$@XvOF8K#I3PQB$^jS-BZ3EZ~k~Rum-uwfcMFHqx1({H% zjppni-UWXKLESkPK_7#s_18zxdaWI+s&PwK3;pp&cRh938_wo_?&5xQ9BvQfL^Z!* zUy{XL4BPPtAad<a`-=AT<=|jR`AD{QV)98JP`Dmz>ojR~)|?)vMn!OO4XSIsi|@LC z0WJ5urIEYcA*{7=E<qN2UgCcj9Aa@YTUS39?Qi5BL@F*I*}IawceEpauj}#TGAxzJ zbJk5n4y{{@DI@n`t(e+=^>qGCY&7mEwg^$3f!P1$&utN&&IDQ6b``SCd|@kr6*R-^ z%6Jxd>R9IBzF`#iA+DhBimtYWoOXBbXmh+#|7q3orZ|7sPU1Wy?BTtACf(7Umg~S* z>LlDX$;DDBeNdSInF24WOX#AMq4Ryg`?iaswb9PVq5w4G7R_tPWmz*C)*o17Nsas~ zEWXiVl|JW~sB~#HVG+;EIu(=p@#9sWx9}&nm<jKkc`B?mxW?0|y~@8r7!X>Z3>T*z zGAzfvRl}PKD*H-4>0S5*K&y`)hfYC2!yar7Do>E7AJ8H<%3XW*G{KQeP`$~F-=w`p zK+D(dCnF2|fm7DYcY&VU|41pAV~Z>A@x)&`kGsg-Q90%+6j$BTx4@zbFI8o)w`SN0 zql=<mYn%j^!NV)zLZ~GF3)n5c3qqv-4Vz-moC(n3tpl_LjVTym%8#%f^f<|f80<X` zOtWR7!0#r#jnBRuzw0#Nh(BE4iT7d%lt`L%L_Elk3;l-AW0at!&9*6f>E3pj-U_8- zDiF1(Q@gM`P&1I{$2Gwu&qk*<$o-#{`3Gu-9E;2Gy#E!-MIYl1>r|0QSeM-+c9JQh zI`6Ta?StL(x90bF>x@5qP^SIeh?GO_^pvYq!X{1vWC<1IaZZ@sVF`Z(5x@P<jnzd` z5h7qhXK@3(NRn$NK^TR|>y?vC(h?!uvoXJ|*Zn^{9~^z)YG~sq-l<wx=`t4FTo?@N zP^k1~g|YR^6LsMl)(%9OM6TQcwV%3XgG(0UWm}K!@_zh_!O#4Ikhj`;=}qLxl#=e9 z9ctX8&j|XK5<hf7{t4mPuM5#R$iyI}v!K&Bt`pAm2kk{Pqi$&+>x-{n8gZx}P6VA) z{sP4bNsMmX5A%gW#rV|pr;jCYhyZInLUf}qz54;c_6FNUzn!gZGF37qL?y;KG5n`k zt-v3kg+o*fHQ&D&2rP=#sS&IAzPrYQw?hct`q3LLkJdYHf_ni6xbmk>ddb{r%r@KZ zNQHQ{-0$OfrT!N9N&X6ht-iPGQ_dEQ7M_tJ=~UAS=+G++)X~~>M#9~ST#`1+ww*6# zhVQqjoa{XtH@b94K&NU#3eW-`QV1g3YVAMQW$1p$Oj}*z1J^d+J2V`A>Xf?o*(A8I zj7FbH|FvJ+M8p*UaRy4%jQNxBm;n4}%<Y5R=*1*u?8f9LVT^%aRW)iJ2=+HVg%7`Z zb7tI{PkWm`{93Sh&2xi`>cP?ebGxvJemJXqLY*t85zb}5?3=~yGh=;S?*6kO-5`_O zpoy33KyQkUhZiYdQAd}~hDV7AyX5yeR~@Aj{YjHIQr)v{S*LNmuz0RqaFxb^9++1e zwpd)6B3SAuoVr0rVf{9%_i4jucuX<LiU<+v;ggaaLYez1R1uGE8xGHr4ctSUd2=9b zZspt2$+n+7!Z7BZiM4E5#g30W_DkDJbJB}hvv8PwPp?nZF)*=7-bQ7&ymUPlWUxgS zs0|U^ygr_1h{%2$^Fp0i=*T5MLd3>-*CGT@+7ruK6q*v6fF=-Bip5BcTE0bk8zXfv zKt7E1tAQC1Ikk2mfaO$tTHCBYTOKQV2I{Uj>nw?o&B2TxHy1RT>i-?8ewn|s^a0e- zHFfYaDMt5@rI2y_nzSYN)0opSxF;bVktfNeo`qw6urQ&55v>9x4q(275mn9{AW;`B zl*MC1TRee3U)i-OKYtXUNKC*b%oo7!d>?DP5m2E%ULa?3AT!5)={{8Zu!hHzz!R}b za1XoS9LW?cqVnO!T&zsM@*evC^-$pn0Oe%d=GflB_}*!>;lq`dtlTjMPjJt5LPoqh zTr~we1ug>wt~!QhdzfI6Ze)PMW1KKo%Ac9cR%OEIoo~DZ$xD3*qyCL(bk<=wWsAOy zIp*-|Ml|pzPQs@mVUhu8F$z-kAgu3WcD6!cp{RkL2Ak{c*BSwtdNSysi<&sr8?0_e zMmY;BIv4Z=KlA50Y*O3$9|m<AW`&bEy`8AYMt3Wdg8}T9QDWurRdYz))x>`5Xz$qR z3-a4f{9&X_WYq6#+ELnAPfyV=$nfP~q^|UW9BG<kZ_RaK5eNm0EE#Iv%Llvph2IQZ zsIHZ4F)XHOubpiu=YIkU?gM2F`yALbC+kZ_{?NgRF{~8-iRFVWlvi3mv!0(=HJ<jM zy)^QyU=+l(B;+FuX&|P%DAL-OCNeYQ$fq%&tjc*}TTT6Gho7iVUxS-PBkCL>tX_s} zPS`g#U=2Xt)(-4aExg6+h(tlIN}nLO#fTz-G2p=!B+@ZTEGxMEQDLrwXR5|qeVY1> zlGg6TJwXepT=qP@>#x0_03S}4J5O*kMg&U*x!hbHV;ulV+_Jl-oOWvU#E<mnUa}{t z{~g!Q&@uP))i6jIg$OifdX2v^-QtvjJr?3N_mySZnn;?qVNPQf$SO!xW#-uy@iU0A z1-_8`Y>1}5XeE1Cs~kZg(U#jYT;#%u>$W#lZJnIxnf{FSVQ~%Hf9D^7%{_(v^($N~ zMt6+!lVUH}Z?@NMZVvX6WK^W$+JW?X(K?dAUHNoL>)&^wU+uRvee^beQ~m{cF7!V4 z|K^xkX%zM+hmz&P>I9=B#{p(kE14p7%WDixoOaGMb^#y%eycYJ*S31YNYA~#1H+Kb z`9`7v=icO#zxw2!PGXx?V*{J?djQt0mdS&F@8;WHjn3YF{!)alr(c?I;|I=SSCKcp z?#uYu)!cWtcm2Nnja4>`<*R^=kjx!+-~9YxI)$ZxT`2wZ{SB)JjNxC$B1o1!DFT^! z{s%DN+UxE$JIM5H8}p@yp3ZF@E<_<FWvB3+C;uR;=bx1jU0VW8Lmb5DXbd)AMS4p4 zRocjQG-W1G?555?GD)S|+<U2Gw&PJS)4tK1L;=DcrA*xx)9yVg)i-7t8#|n2!(zJ= zh96G$qms!XYY{0#BwQ;hBbIEq5om@LQ|0gMoc5l4f=0%7k43%_ZH&7)L$fC=J>TY~ zn=>_<*VLMkaWkws74^tu4aRVtNliwGsq=PlO<L<Dy{VCwI*Y9A*EjM4TjJ6!C*hYL z9i&PL$olTTubq`|lK--o_RGXqYk2lfn)k~rh=@_xE3O&Wi$^RQ<7u%-9@k4FFk}S@ zCEMxed_0?2<=v<$mu~Q#|Krm;aNXxp^sDuqo?+@HRkXw8L&(M5Yg?R*u|7{&oDfXw z9ybUST1TL4XD8(2`{hnBIH|Ww<?>$!qv#tdV3b^H^<x6-Q(`EPxqO10`TZYQ02QlC zb+4vEksw;!o~AQyD4epDOALC*fv&*DTDG-~az<W?saa83l(74QFn;WY4e%o3NU0aR z`bD+H$ZC&_10Q1tr|f-b!*G>akYS&AEgW0G;q>GL9@Zhl$TIv;JP?|xM>g~yiTp#& zkW6f;!sEyClkjB2Y8t>$bih;Wd7p?zg8e(T;ggwHnm`L+T*Y`F+y(KQ_}M^tGI~MM z(qM{1l4+6+wHz9*?9!WG8(ew7CI0GmaD0-|BjER&NZpR8?Tzvum1^(DoFLeUi-^{U zC88JxwS7Z(N4UBfJU7To?hk?gReRO~*WXalNx;R?!1{u6f7MrIk*Y-n_<#7jE8b>b zO^Zf(kL*#vM+@p>YPq`$Qg}Wq3~3wKN3{adEw&w%@C4$+#DqfYFuMVR-$5x_PL-hg zx3Z&va+@5wcnRF1a6oJL0^I&>54<KiRfeUB2#x+tAMY>!A{g!CzcJrYVEkTBD|%J= zTrcCvU7uVn2tv93p#541TXxcrQ-o7oQgfkb5Xw?8*PxP34rF|Y_9vy?g}*8{v`Dy^ zHRG<3*WFduMu*$;RVx87VdZuI0b+dz`{C#U)b1|_C&Pbba-)73$Q^VflLQ6lp^eh2 z(ok^eVo!{m|AZAd#$(ata$5n%wHp`jnXwLg``U^nJ3}XK1dp9m8m1eLKc*<A#Jqn$ zKpLZHPdpwK!KPSe^hM;#xs#HS5Kk87wXno<{}S<20eQSzRp7cSh+)Dqy<3%AwJk0E zN34&sTBl{%`s$K~(=eyZ*;<1i)4-{p4=>Uty$8AJs5dX>OzMk#NIl{+RZ~82cT)^3 zqnu|H6R|#uyt(IrjiIlGGdh%JQ0oD6VR74iBErDCrvE;3@V}xYq1rYP&+YQdM6Q<F zv|;qtfLcQJi}LC~#oELaVgh>W0}=(@-^*SWu2Z+gxFQE`PMm(>-g8%qA6IqTJDckg zFh<ivRxHf;hmJ1~GGsRSaYL$g&!*JVd$93${^?{RcR(#Mt5e6Sb7}*5@5ZnPntik^ zou+l5XCai!RNy_p3g-OG@(YJ8W?&#rqzWvz5oy7fp_!0<VCh3E(GT?{tiOFQRx<w# z`-M;EenKh0CFjSVtLmX)$(8w(e!52()qA#R1iC}3Ib1<+))%Du_hKrUA9jsupHsyI zAD=sf_{PPB-AP^jF~vSlsSZPk<a9R09BXtWmJ17o>?QP9ss7mOCO{%r@m<lox=t^D zB0Og##*0aBc<d|!VUizm3z${lhB6e9Vg#jlN8%K@fF<%kd~F%``6Jzy@eP}=&CA*O z%y#LRhDyjP<HE>Gv6alUV8#3#!ijVL<>g?Z*^T9w<t`YsUy7L$6dLYKy|LvuaXwTm z4NcYjUo&K=X8)WGN;+<7t-+@k61q}Lf7o7S_FGHcFX#6Lz&)e;&onBuAJjBNf%-%h zw#ODbD%^=z3U7WsAz|DLi7DBHQe<S+gHnPwewXbp?1A+xljp_qd}7L8*vgn{xQk>^ zU}PzV%LVrG_QP&3!`PWcOTkozS%$fVbk6>G%_8rzz+{nypSzi*=}c~4+qd$8mKI$0 zL5C~yG#Q0TTGN#KuGnXei9r!zrp=9^qgV6jBrY26IP`b##QfpkUYKQc1E%^l94Ml; z-g%^W1hIan+o~ZY5(w|-y=?k#<RRGG{I_n@dCDRMk{JqnuA;uO%7=VE^VqX^S_h<< zHac>*B$~gSXk7P(yuvh&t!^y6V=-gMa=10JlBNzny0bYgznD%U44F=@C9pAPHg=q^ zSxlg}kCsWXC&XH*dNeR<78!5U3X&X%asWd7=yf=e&m#>w%@x5S)#4D$KPec*m?2P) z6?{tcMN5c@T6p~xx%;7G7tYGb{1$Ea{Qhw4#&OD7eD^SIOLPpBZo%h*&)U<=fMNh{ zcYVFcZRm_ddAIvi|0CD?gV2a-uqXnJpIF<WkF{Z7(Ffnghjv;!Q^WdB1}&=NeuHt& zC;8~R|8Hc}?^5}z4MuiPw^(>CTs<o_C}bfT0;#H`?McWhZFYsCRSlzM!bkCbYf3=X z93=JBYO+^M0zDl#cAZ5|^E;&Oec=3}4TOlf#!+*PPu2}1v6%}qkB*OLNkmM-=1weT zos#FNLaQoStB@L%8;GB75|OOSf+vVgKW;)zS%sN4P>{(9YO59AiXpSyh=WRi@H5L^ z*v1W(J^q?*`OH_*gK@%KnaWX8J;BAKn_Uz|bc~=5TDWeOrfxv7LA_WHWnv-F71la; z;LuLAx?wF^wKhVv;?-wuAnKXbq>OiEBChJl@Zep!k))!TG`9xnC5t(y%pEMmFUlhs zDDl_;6<JxvtJn|*n5yDifvy;^7(6LsI=Pgy&t{=z%d&^(&4>!Q-l?b2n$^{eB%Y>B z+<~i2s&a!OqSg=)8_#=;X>gTTi(EL!;+Si-I(3|h3;e|0@i9MO-cm`E3CY3>IlV0} zo<4tb(b;?R5u@clmxR&%kAHwuzfDNtj(^wbNxR+g+fHf<&yb-@dhDe+P<zIn#XBwK zlgl--LW5J3e7=Q9{oI;bycR@m%5sfc{~rKl>d-1L^+nO#!eJ~%P~0-R_zmsrco@HD zt8n@P=Ue0cyx_|;f|r~3kMdTOP9{0&*O_`K%jcFOS)A9j70yIU6&Ar98W%ETX8rPf zaI2dzMM_yy(i5`rySKcrE)=mWdfy2cTeq3@QzLWI;A~tKP{WVV&zII?%WwO%MGG-J za_8if;AVD6XG%+zmCWXJR}uto_xEopa*%!HcrEM=WagdisTSCu3^3pb_WekVMna1` z{B^g3qN%ibtKDfmvPjl#4ZpZO&YY5`0p#Lz-C_80Qb6I;A^qN=QEB-=q^*h4*UhVr zzb1tkdI9@XkC|gIR1aR%wuYhvOXW=#qAQmj&_qx8kOtuN_&;mx;N*Zb_3@l|k)5;o zJRGo?W_FpyBB~SXD+~bh{U@h1*_m}>LQE;3U+KtA%JVC4YYfr53p<^9`zM6-x3ZsQ zX7*E-t)8%_|6QK}xuj~G0`S<sH3p7|Xb(|Nk$RMMe5(^d{XXn-K4^ylH~b1F9wZk? zm?TTp#rU!bV=80FbI{XTG%&^^+Nuq0eteMwOi+XmyC$F0wKJXsR}t|5exe8xuaEr{ zuxm1{Ic0~Pd=9$gWT5;v4|Z5}1t5K5zmp^1)^d3_kb=9(%OdDK+$utxh+~4fQ_nBX zc=BDMtY1!3wkE<y_f7!y_yg*)I@A8{b~$NC7RAi{Z)kv2sfN~7Yi6rj32_k_qEM>Y zp#{z91I)eZ@wyThBPG=}+GH~iD<>I{9MS8Lw)@c3;5CF;G=3W(lUrZ8{aH&lTWxMP z`YOu7C{JB^AY%i&DUuk38YxI8*AeUm!D;RW(!@}Y(yF+BTyRByee+0JCCy9B$sB$2 z2+cdzM)+LQq^<K2rAx%$4**Rc6T&<j)lZ0N^R?B`00x`y9G}f2zAjoXzJmOrp;|@E zxR$Msej3Zi-vG2UdW_Nul5b^)oHNg<5297iGW|c-C;8-Rc<SaiCoE!KeN4q&>t}HT zR?~X`K3%%Eguk8}LKTD!FD4X>=u{=^6EZy*oVkq`g5WwU3}wC&=|w71;CA5kZ+#z( zIvg9*GgXyNg_-h@bf}2YhZ`7hI}-Z*Tk$x#beUEMI>a;<{@%jSCP}MP-n#!09=x_4 z36^F(Bs(im2EBYaEb?MQOO<Vf&tOd0;-st34=_;dwE=>i$9f~eAgG<zNh7=jb3hN@ zqAr1}a5CC#?~bpB4yZ@k6}=9Bs<tZLiK(MhAj}uaMHQ`<oJQ_%jDax5jH#@BrSKg8 z4OZ$=qHc+wlI>D6uE855`zmMuyPfv6@VQQQCB&&4CJOPJ4}hZ~F#GUBQB2f9_i zQApzGioyVgZ-L#>yU}%^pmP*J!1oV8>-T~P#616LJ%L4QyBCYzMnK-%`M&G>vi>Jr z#`8#zEKIGhl=Wr5i^55k&f#7}zNsqbT&1Q4+dQknC1=GAzNaE>cal8`)zSB1`4xH| z%kN--Gp8OnBJqdDv;L6dkSHyL*dVuq_w^BuxF{*8EJ1V|;T89LMOsIN3|bxtjrGbs zjJ*U)M^=P!Dp@wVYesD=yi}bAu0NHX;zym)WgU4BA*SQ1tty4(#wiDe!ivvbddF&@ z!vyh{CM1!1f8-KlX$;e1ND359TSv~WQG5RoDK(v+W`HEMnLFfksQXMD?Ude6k-|Ev z$A97j<O!r+YaX3EdQvDKw#M%-594-!CcR*iL!@9fPC+QHgKg-r4NzAfrcyCM8x8tu z@SAyFO&h^tG2k#Hu#Ix)+g{F|RWD_`tO<Lduv$t@<-Fy_Qi&G0pz0<I%6k6v-S6oV z=0G8Y-Lgd%1cQkJvVM|%_7=HNeetrP>iksCJg8CaCA6VGn&tKFzpsLuSr{Yj?ztgC z%XaC^EmQ}4zH_d~yt$;9jjitH4A?+a?r!Up<H~1&x{Y+)e#}oYekBE6FIo2nQ&>~6 zJBs~rDwjAa6{;~_d;0BeuE;75VSO1RUR%BQHwUrKemj}_2YBXwG~r)V4zCMeB+QE! zh>{mhA%!V^6(*~A8#sP=Qm+mEX0VeHFyEjJCwy5pdAENQ6rcWsuO5BWC-V6cV8QZ^ zHb%$X0p@{lF)K=rj!LEa5F6||kO!1?DvG_ZyCE+{&iHAePn7kL36s(QQn%@A%r|-4 zf7=$()8Wc_d_F{N{qNpZ`$Iuum<PgGx#a-88_CFj4B*tHk&^&Wpe`U?B2R<58W0?? zjN=I7^$OLc-ZP^!!eW9>@C>*q>(#`buWB_P6lT8ZPi*qP{t7^?l4K(s##~w35$}8l zt)NHz1i&)rLNTtvr8n=7!X%Cki@y^KLdMmb{Jb$le$`{&hFW1Ef^QuktZ?;+eoQ>{ zc4CYt5~XMv-4;xS?hx$S2V0G`KK==a7qIiTy}(`)^nK)CK#(idj$%8T2M~XclKCDO z<HSj5!E!Fe48W#>edO=&B-?kSX1ha@&+-RiX>>Xe?W_97AMuy)pM?=6`f15_m*Idk zLWOKaXou$d9s&Ii&+WdCeAYke-hLnjJk6XB@*=je9qOW}=)lf^h**vQd{1TPF=dYB z7VaS@7dIs$6;~a>K1_2lutJUE+K2<YxjuXTMz_|CcyI%BVzWyIkhyE&g;LhH-<Z#1 zwd!yd-{D_m`q1PJ3<_9%F57ADBUj)EkJV7$qmK311bdmlyV3LfF2}7b4(Sp54>tdP zbeu3*M2GarhXz5jqwtIUNvbOGE!_8)vq0byNiNk?X6^kyfP*pul_6EOu3V2umnxy4 z70ZV(+7;Z(C|t8`mY(?9vjIl3OZ^UP->^vXAV6Qf2@j_+l|$5aMY@cs0bh&99R~%r z$JZ_2dfp9EoS^Ut3uBlxI4>ktey~esr?=choCS{ilM<kx_NI04TTnaoxJR&_Y!A{; zg}yQ&PyLP3*WFM<reK5k*Q>6TmqNIS+<xu9-lUK^{g7RC96$53c=M9${glwq45Ha* zsriC7F+c#^b4dMUZvWSHv5`)r+V|WG3$rr$5R11Xxj#;V?vU|6X(JkP1&YLanH@-D z*J8QKh)!YKEG<qR@pad%n;*qPp3HRIFYrnu<i!l)zwugh6bf6LQ-517_3(K05qnY4 z{s3BD*H5Q_4a(uGI`Gp8WqRPZNKCXF8yn%frW;}UJmlhiP%AYG`!P(ULWs{Kdxl2Q z9Rn8?F^9}ahQ>+^yWp4<bVqQ+ardGUP+)-mm$M(C^^9)n7N+a4(-Twl+z{R+K_(FV zSpVN2L);B+V<8WyvmJRvZoi>QDhQm-kBSkVa)1k@9d0!dh+_HR!Fco?s2NPqfaSz* zEE({D35D03xYb2}7fett5c+`ir3-S2t^C1aOWo*+minczd;pHTK<PbkBrL>mNxHFm z8<b!v@d+p_l+XU>?RfU)<+9GO4xKcoYgDjjIuknyV<`w7uKfWb593BbtsimupMOZ5 z523g}XN!nBf<D~#&Ns98ZWn*~KbFoiD6XdK+B3MjI}8xqAp{HV?(Xg(I0+2y8l2$n z?iyT!1`RI3Jvih$_w#;L6u+nedggTR-fQh^0gANmPIsrf$=;gP^JG1noW!52_h3#- zO*c(@di4*VfrN`lhVo?|noR7Cg*~c<SK&`(o@}M>qMP5Y56cf??SaV!%l+-up$Cul z@zISI9I=3_CDIV4&`;HEVzE<i-1B7F-7Gu86L<3~N{2Sh^l1!hLKSIN8$QUo;$00@ zqXyeMw3`K1pykW2^&_6|`b_Q}a^`+{PHt-JX;d(kwS2Z>wEdM3D5T2jIN!iq<=*@S z9D2@MYv_)^6L#arKGeGAhjG;s;OA#juUF;4vDmnmIK#<{J<x|ytEK`evkfXr4BH;X z_o%cpV0xSCG{~s8?^%34C%nSawoKmr2eL|Ktt0J4CA)uTNm4$>D_q$rF8pRx8^-=D zVAU5lyx`T9UD7GuyX4JX`>IKV5!OE<JhHsY7W@4l=mXn~Q*|?FZLosc2W&Pmkn&cv zBYhemsabKCxcT&3f7j(0nKJ4-qNtfgF5M~gl;_84S`!`t)xGDeN#EvK-*TMsXvTKr zZs}RzDhjJ;+}-R<ckQulGiF;1qQtgEcDU8oJsFZJ;fD9!Wp=b<yr@B9y)UACZI`{_ zkT1UF&+jk%3ANvR3?>`0pbT88|3J0!eXqOVcF#3iO3OQLk=3#zC562eD{a%dcw$9P z?$GDkwTlsc1v&h8mxf9Tu$2|(B;w>M^zUrOXnk?yhDL0kxtzjQ_mUh_SMSO;;+z_r zM`sQ)+<qjfksPYfhnAM)#aYEJ9v@S7RY?tVu2(X<DW&}8G0NscQ=R>jHB=PswZ{If zczHxl0L3>_9JS$xlFV>o5zRQZ*n2bA^$aC?{dPVRblOjHD)=n=){K)ii6u)X6BNzG zrRMj=3hnhIGQUN7dUU<1qL3g#@Y_Q;6~n=&P?it=`N5L)X631aCx8-Jx&%VVOp7cp zh#U35!TRhR467xl(9g6mi;yHKAYKOB#rl^&8Ct}-@WHS7==c*pK*IV!o2DdrGrvLE zvW#f&>wx_uUj8#{k@xB%k$XwVKhRy1{ytf9ULCnIQbkIyp9&`lfDCW*gC`-7D2pDw zza&C>%}m?I8nKOSJ|w(_g|nkZQ=RKK7W+yEMm_f3Din>b>~<TJPW$thUkVeiEICPM zgZI&tDhI_hdZ0wSo{Q0m=8gs2`dfuX)-K<C>J(sp?{y%CYoCOD$0a%Z$~>qV*fYDp z{@VQs5{;ncrc?_t837ZQ7R|Mk#>=y1>%&i%klW=^C(KJ4OH9cJ;d$`$sKeC%`us{_ za>H+>0Q5HNM6ND&kDy=`xk1byMx52bc7!fsf#t<T*q0kQRCA-@vT9Zrs6O7CxL8`j zdVxSXTl!!AxMF+_vBk4$v=B;+%hn4(@L|DgK>-G9Urb~HW9SbQdv}E~71FL8Bu#^3 z*B4&hhd5b+2G+|lN}T=g%RmO{1b}_#S?K#j!h=lAM=jcZd)t4f3(Ik5tE2xr7FHgk z$m2)F@j-F?N6#W4c$+Hf=iulnsI&PE0*%tQy=AHIgEG^UF|qBcw!N@N>c?fM4xQE! z`d^W877IItRYYA;dodlzKG>^-em7l_`u>R&aOKnjF}omC6<HWr#=-_rIe_(i^)+Lq z<Iuot=rc;MCqYR5+d`{prDZOc5G~z$Nrd{v-jde%eBBkhnU^}jwp4-X5K(qvBi+73 zUkoWu7s7H4;hbR!S8Y8V{6S3QCa~;9@J49}cPy!+v%nug^zABJeCz8{pZ&(Hph{CG zW&Mhi^XS5v5k%A4T%cq{{!4}7qP*^rJ-t8H6yDtRHiAG{HPa8jL0F~r;ZIpw7l>A6 z?}L+Fj%&GV@p&`&Y???V8ZWI*V8n?Z7W@Qt6BeYVSb-_(JfR5Knqs0g1H1ZXttPz^ zt?bjDrF|g3QD!hTQ)q<A_t=633Xwld!Qx~FXJa{lcsiE(5=yG;JA-Q1<J{Zteq7M_ zSWa3?P8F^SHIN+c74Hbe;-k!ysEI0kq*Kz|8Hz!NG==ai&Rk?QRah4~G-ST?bh3>% zM1B9+lFPiDocWC{Kea?trkqz$N%k){)2yt76mp$SLr|aj-}DPVZyB~x&-cPXh9|bn zcf(&AYFaH1m32tfX3NV!tV)JKgx?Fqic6`RN1ZE(s>cMm&ZAm_;*@HZjS^PZ3npw= zlcIU1uNf*s`EeC^e5q67ptYQ=`6-$Grz{-`R;>Yag0qfyvlpb)Q+$=otCYK`Rs?!! zekAF~@RA%AbHa*qVx+c-TB|Z>Gjc94cuaznO@dEr<Q>)31<U&1!{3cJjvY0A@3r%+ zrm4AOJTgsGC$Z;0K3YjVz8Y;#)J+50DZlT#91Fk1)_eRi=vt|Mv_b|3#UveQC+~Jz zxh$g)v`T4o?@}p<V(blgrptq|;T9LWzqMpF{cQYNtdzIHx~0+p=qe;hEKdwaG1W%! zLLIwXZHdA;4&R6qBJm5&V@b);ItIM66AIVJf*j*=?L1|K^=~xPOfp<BEwk+Gha6vW zN+K<)ii#(eqwV#5-L*}LqBpiJPwSJ<&b2yyS6L6$ozV1(MZC1@Byy&N{!;uL!xpXO z^*5a&7O1u#3y<fmms*>d?Hfwg7>uISz*hwcBVG(Kf9`CmT92C?YnYR$<C*o-m_{=o zY<Op5yQ8gzUX#080V}JEW61Se*KYr_4@#hsM_nj#@5hMSK5$Tc^vIoVUvugx+n;-L zM#gR3q4J&ip?Ixi5VGk9-{^-O51CX`HnCO{sQ(MPDhw-jkhzTL(#-|x+R-jl1)h9z zCzB3lTUHb`cO9y)@1aZ-#GZZ+pLWOzK@i?iE)XmLTB`$0Ss-34A8<g#7J`7cUT2-O z?zO6>w}(hNeL=B}ZYok-=*0&y55nuCNPJ=!63(6a3+ycfP?7IAOAJJ9^ZnKPJ{cjb zdRz$=thvLyBT%omN$%VOUs1`-?6c7Ohu??)%@zfgOKlf)a@8jZQ+*Ar0>IN>>#4P7 zM6DV8vHhLb{nHWfW;oGL>j^#T;1M}*-W#H-&sGq{3MuL&S`Z1yl+e%ji`gM3hK}`8 z3A}RRP#v63O8rbwi9B|Np$b=HRZjERD;C?|Vh1$q(o!UByFznvHgQ<zOPEbXMG2N% z;zg;kciVuOG0yuLit+VtoeOuFe?Vm_td3`880~3q4}z?Y?lNm0v)Lqen##|&+#IIY z#!9Z&tkVo5EqEsZiPWXjriBJ#n8M4?nTQIwreI{h2k_)F%%?WbXNz*aXEV=lri~=w zQCW6eQIiD~nuLt_lB~E`LZ@VJRrc$H^QVB?^vtrCh1_+TD%Ag_CQdkIb+V?woUZgI z*NAQj+H9TocO{r<QWzrU!L1uaaIb590awkWpj5*LGy~Sojrr%LQ7(OP?P&H?#Zu0= zIA&1Y5UUYd3JfiXDL*|F1U8Ei_Oe!b(5&aUn_4TtOn!9Y_y?-vc+>84_b2$^Y&>r8 z^f};<N4C;G5W8F!`)imB;eLdQ<=IofmouJu%oFmOm^aQduD2>gEi;RhkD11g(<7^> zI<-gSZIqSvVU&-B7cmca;g*0qw$oYe<*xD0RG<=-tV)pj0t!SkD_MU6T$<WW!1tzA zox%D$=}nm2w+Z3u=r`#vTL93_dd~Deu=|SKih*ApmO%^ORqE!IeC$7v<Mqx+ny3Fp zG4S*J26JAZBl=+KM6qjHrL^vm;<pzB#$9=nZP>U1JCyGOpQrFp48EmvSF4yUAkXL4 z<_{ZKmoe;|`E>OuO6#wOuAnq}z?I2QUh_Rs9Q#8koEAMTr}&utcm<C)Fz%RJF6`D= zvKYfUDw)Hgq)HNZzv8%Ng=z8Ih)X9@aZL{CZK_sz+D%jX3GQ#w{{xl1<34S1&`EPl zog6Rh)KW^N?edxJ`K_*^K3OGze}xF1_25v?W=R+h&CpU#^dt$7&%bOz)0hwW)i0X( zfK_k`h$(2h?Vg>`Ls}8>Q~2=tk@LYJ!S6B)h#_+R0frz}T9j0ty2gpEO!)BffhYm> zE=-%y47pAo^YM?ZsdT#IOwiML{*$ebo>cD_%%!b6Kfiy71CgNEy(44t9!gz}icVa} zN%uJ_*k+kPSup|$Nd0yo={Ye;rISr)?+O<+zUrmFeKHqFFj9+&3mN^+Ip6gmw>Eqe z8ejnpSFs8qB(y?e3BKPJ!mH7;D2}MBW6iUF2N)HdX;WtzqdpMT9~=O0T}HobjD1DO zm9ATBPz(q~z=s`N8kwcWG6bIYPnXV#m>R;nf(HEvLRa>M-Hn7X(Emh4lVoZB<*P`W zIS+>$5ve}!4G|KP?U6P$>3lzh97I4on%&!A;`|3MF9%8x(VEypQ}j0=i$)9CveDji zG4%9{VE^LZo9B9NnSK@AK{G2=e{3kMoU*DoBY+d^k`oo*gt4<z`jrR35PZd<xp{;6 zJfKMGMd?zY?8Js&aF;0y8j=6D3v3Q{+ezBYa0=zleg%C1+`ObXVz`kO)pWG5gIC~$ zr1r?+dN7iN!2FsI$~F}cvH91mVy4M{npzuZ56WFO!cLz+?HKJWq@|04HEx*m?9`Sp zk{1r6jI)Uv4kejB#G9N=VCK8?Gzen(VAO1OBH)K5kY%KMJm`S2ic028IV9HUGMZ4S zZjVB!i+6~pxWJ|I_fnfDOK=fIyz6c9OTdSWctCGM&EXi*0T_1RxaQ|8;I^dMX^cl% zirQdrfV8~Couaoy#$B*r#j144N8@zggi1<uuocF430L+F3Q85qP7JLoA&<m$N`^k9 z;$RibV8Y2iqQE)W3fFX-$5X8suJZ}6tn;hy)-0Axbw-=T(yq&Tpz3O5C$Vl8>I(!! zF@pX8gCr-kY)hhX6qZBeUR5_hKD&Ux!21!{$Q4X*Y^AJ?neAXV0G@s@ST#5-7Sh1! zeQR(E*dL!CP042GBUbrJ!_yb;fiRBw8gxdxs$aMo!+6!unGf;CZJ)3_tl9eM+S@;3 zpM+`otY~tBT7;&<YnQ;||A6Md647Z!(*?fJr(j^*dQ}trvxd{9R>*@fC_Z*rUpDjy z3Jl2b>B%C!HzfPxL*bc7m=OPs;&<<dZ|R~eAIUsGa*9yHE0pU$muPVKcukc^kw*nC zzM-S4FgSgv<}zW~drRazUR0p~5MEtHktxs;dvM9f9;5K8dF1Ye6GE*p9H$uKwfd55 z3c1r4uZV;bm4@GAU=v2bbHD9t8qN{qoU6by>gjg1jT$S@2vOL-A)|Ix;oC`aL<XAh zq;u*)=35fm<v#;0pD@};qHNI&WkT^9he6DK(1D$kfVD_9Ts6;Md7sG*|MqEm1*N70 zbC+cOSH`dV>%yNV;M;}@Nu;c`u@sJ6{iwnlo+q(=;VJtMP_8kLq2^wP(NFh~`42>D zHcLKUX1(M>`hxm=i9I5txLSDUEnZ3Bi3CE-JNi3t$*5SOCWF83UN*z_Rtkp?Q@8M& z&Ow(l=5`<?VPb03t$Q~BYWktGd0&Xr3SW-w({IO@;s{mH$6~H?iPAU%%;sgvLK9hm zkI^@WXaPn4K<?KkPfw3NzT2knozEYFy|S2e89(MT1hI?tDccaxEnp{b1v-rW12y8m zZg3iHoX)5MNNVv}dxtN~eagDi;UpUCErFM;J@mjc7$!a-AD!gRJ}$5eZY71S@0?u8 ze2rQ=`#y0q8P)?KH)6HapHsMAC>=61K0cOUtXD@uB!IUONE+mPpLn(<V1@`IHIJ*y z-l;D1RT(yQXPw>g?5D~pY33%7C0O#4rL0L$`*Jn^prDk6Fzgq{@XgPcQ?dyX5aIf@ z`5Ndf-qDupaMftaxuB$+V6IEh&p2x8RnxIHZ9Zbt(3vDvD_Tt2%~FEdApHW>pRy6h zkm<yGnSmgd^>ORNQ=|9SwgOY?)7Lu8%07waYQ}#cW&U1k&ZG;4R&xh{g?QFz`EJmB z%FdGVXo+4xix^smK4^-{+k@X%NJYpr%&|VyI_Ucyk#ns3d_9qi{l+>!q5e|7tI5z{ ziJvI;eq}9_YH~dpN3@6$!ZVI%m=$pUd$)}DLrRxN;s)OXVhN<|Q$B&n4x$n$9)KzX z**2GCLkc}_8({Z^JHgV7zk=w33Mt||_5v<%hr)4LCX06?9psO98`KJ(jClc&TJI0; z!Y2>t^a|H40&2P9Tx``c-{WNVLt<#a85os%1RDT-5S+*8HL=EJjr`F<I47{{A#1*L z|4j+izsvgYef;WN<CFhX7NWSof{TE~Kafpw&wCi7Xk1rzFGpEg7|}CaT};oGm$x<y z*ENBf%`63dx2|aBb>|_gZ>?wxvwu?Xn`eU@NdzJf^_im|c!}FvdH=*5?D=u3I<MJP zwwAUEO3|-epmGPVSp7WVk3U^_84H7D?#gslTFG2IA5Ns+-u2StoZS%JFB09mro=jr zFQKz0_?4F=<8F}n4`kX$i-S&Ow<vY)KYHvs=9(F)9yL7hM_8F$PhNkj@T|GL{wNT$ zERDfg<&zUsa?+|h(37nDqbH0pJL)=UoZRKr|G$nc{$qk%bN8<QB(DtrObXMFnc)^- z`+vwXrTt8UJEj=dLrJrpC_hX~Ws8__<JnKZFu7X2b9O_KtN0N+ES13{(RT5_l?3%o z44Q&=+W)+&1^#iXkWL(3JIe{iAcCH3kiG6c1_F@i!e~hey9U-C?B`3cmTSHxV|k8< z7Ztm=u0P*Eg12vM6RfGo=fLcUxNTInrX5o6djPnMNhW*ltb%sZoai*BQv=4JHqR?h zOzYaDIto*$us^^2)meE%(dJ>f9cYdH+UV@)Yet)DK^>DyKiaa#fpSCJYThMd@cT6} zqF4_OMhaGZG_CESv;WU!54z*I9IJ!TS`9*p>NaaR$Q>K{u?qe_aAhA5@M)N%-vk)g zKKf(P6{;1vE+wel{lw)$nzSpUdRUu^SEK__+ogI0APm{wUeGw5b)s|Lw@nu+0n<R! z@qL5@!D!%*QcFQ`CJie211Nq6a*7>I6x7CtkS!p=Rx1@r5-6yAmnnmLSRZc&OLfp> zwZv-~mH;zasV7#Ybd7}`);EW=i|B9nCOBivhK&#hnsL_4_)VyjI);97Ck9}nE+L^( zlMI1@^&;4KS3@EU_ULHE9L)M6b8q%*xw9n|^Yi`~A@HtLzr+5^-%frl)LX$xF2T*j z?%{Wcr@y;H)=P%VzkrWj1rNP>cfVz0ny^yHdI7<qL>Im?{jWU?qmGIEJdy8D|2VBE zQcfsYQ(+iQ<37L>p(zMKS^z}r$dizoab7I%BJad8!WwX3B0n_cKZm+6rlEaywjSin zsMXoRNWv?NrmUMi!wHdng4CEM`hwiB%z3Mo%lGwD#hs^)^Dol=ci;YjuslD=J%T4a zqZ3~0NJWb3q_t=I#)uN*)wjU+=F(n%Ockr^zYaw#0?QIy=lK09s~wRZe&z?9E#ahc zRx(xcRIyFUK>N7tH94tOL7lxScRM^w5C+kncjAwj8sUpo6_KR)*OY?3Tf1(ViJDis z_n8~8HQ=hlDI9@l*7cWvpsPWR3=$sZb?}mS;H%lsjW&Ak2@rl0_|M&R4W!(mv`byN zsn=`!0yV&e1unK$0bTTEr2HsSRSrwTii^J?E*J)-;Kbbp24VnIw{)IjR%rA5N0%|M z>{t#VT)&fyp3tat1?*zK2u3e0Y(p4~?I$za1B~kSmt_Z&h~l0Nwt-Mzfxvf26%}I_ zxDm1sodXF#(xBpR*@e!~#s2ZaQTIVDP<rB^Bg_~@C^>A9|Fa3k`JBBq;?qdpAqN^P z$HF4>_#Z$$*e*h^m?+CRJUR)-@zTn`NMNaSAwx3vAVAp5mU;H^?}F7!X*TpW%qe~L zf8iBx3B@2(^FC#F65f*848o8IXK-=ef-DVg*(1$h72;Tm4lmK1v)*rvfa$|skBi;Q zF5a7{l<*>~0L~a(XZzOHw%1OjsMVK6hQgnA_J?14=~m%Fc?KQqB!-Wepb^a+qe*Zb ziBxr@f$Q>clFmfk&}W-_vxhML+v<lHur<J~=Xo<~TCXcRl4A4dIGa95aTu#)xZC9} z2+3u4d(@ol6@z^J^rvPOWA%(a3Vrol9Y^YnZPmKrh@xeDo-~sWc@jd<K2zlLm!C9N zdOzYB$Qu@e&U~|3?>Va>kNQnhZdyTV+ZaZ>Iq{reHtezX#+aZ|ZxHIv<XoA1u=Q<x zM5iIkAeWW?{)(V}Q;X^{C6kLXl342+#Lq|3Rd@cUOaCeU9p5ETV%jk@zWtVjc?P%j zdw|zhfB&}sGl_Z6f75!$KLiXmbXVL*rdqd`D0K)gG*}TI*fsvb9&06zQD!P*rYp_} ze@^Wy6q5RuE`US};~p0huMUEtpeEliO!VE&?WC|qr#I?RY|rT5f8JRgji$t+D5h^+ zxQgF}{yiWaI4hLCFFk$k%p8QH*8ke|J(V`l)iPgM)G*Q6-<Uvzr25!%r6kd1CCz-r z$sE^NGb;&nU`lW$Vr-G#DiVaDF6u3#W+2`2APq^ci&n4Xy290K{_7R`w#5#eNpO*9 zS%_<xSjjTahXx^~IR_>A=!WT%42+!SVsATpf`NdM-9ov&)2q(0Qa4r=itA$nAi!>4 z0GN0ddHBsvU+YKnp3`=5GY6*^9dqb^B>*;bhE$<mxYTQ1PNQLMWZF~1GYen8KxjPN zva*6(@wf*EDJgkr8Vy?m61>6LcP`pe47dB)F?GyR5HrCF2zeux;?qjD;+asAlLHA* zMfm1e#dGOJTC?aT$?=aD8s1}l^WVt{@cDsG*A%M{>TI2Kh2>8RswRTrNn{am{?FGJ znH7~cL8X4qQaO*UndYwN&W}oKg@?&%4($CHdh*BC8bf9-l7^tp4o1<wMsRufF_G%v zA9Ylqa61$*D?nqxS8kl{f08k&LDikJ01t|_=kf`2AV+!`FwA|RiEn<JL^s-1V%s$k z;50>UPRG7CeF!65IP^$qsBQ<(W6RSr(1XXgq`!!;UG}a!Y|$cJm3e|1P2_Va)m`mr z)dr-E9C-!56e4FQb6Q$(2b;Nsm}=(7z>tQ0Xm5Ql%z+kC;UM5`zy9kn-jJRf*`r={ z-(~s~qfLQsEkgC%=lm}{ZI+hkgUOr*_T4>@=Q>y+btLSeKpY5D*6;ftv`-0~%*YnB z*{m$VFNqPy9s(?JNC{)aQbOVM2%8$=J{YNFe<_bhHWT`Im-D3R3IF_BgU55jIa;R_ z1guyj!e5{oHR~equMbpXdF5!->dyWa^PtJseYXm1nNR-C=~0DIqjL?FU>d}>URI$0 zEcA)3CDln1zwYP~b2G5a+ID6*rmTTJ^f4?yVEh4@xTr4imj_3~JFz90{0K|5mMfrs zvBnk5Hkz}905T%GSQuL|z7{5$&zBL<kL(C)soLKrYe7P?dkn-L_!q4cAxU_@Ea}yi zYD56+U^(w+G);_L;y$z=4|YYN7d3%PT^~)t=;rpx><utupK{Wp@}N0aL_o()(rtE= zpmozx{v3!e!78OAc!&erCxj&ST{hW0yMBv6i!PTSO$$gio6S%zC>kF~W0M!y(hT+s z;|x2RS_7r2Sy9778`w<@(O#6uni?`JFh<UBwhYdDFs_9{r3SFAsQ_)f@0WZSZx9dI zqwK;bTOw`gZVN>x$w4~MJs#DY)aR8$v@Sj*rXtU1^Vw&cU|ZTeR?dxWcmwv?+f*w} zew{Q-1iuyVxFB)_AhS5X#<#SHnc{Mej<btB=_lYmkh$NS#Ad(-$zIf5iKHJ~Y~zDF z$(`Ps>DBmDsQDhm4{mM9sX`>TGwEsLwjhIl`N3u4i3Rnlr&mXmtlzO8xBA<4w5;Yn zbb9c|<wK3wswU^?TUx`v7~H(-W~}pkL8GBWY8_s8MK!1x9@4)1Z&^4iTUyLJB#hP$ zZu`~ea9v%T|93tS;-Q9WqX0gIvuRNF`rbj|fUN3A_DyIRJcQwg{>A?{I{mpfUFaCI z5~pRJ-y$N;nJti%HF9u>Kf=fl00Q=GoT#<FV1xoEc{qF!(E>EjSo$^H(^JYyRk4cg z6ga|}4XLnO694b|gh`22$5dIiDGq4M{mm0zVWET;H(A>=Nn}_989Uv*)ZsfAH1(lX zh@AjDd<$UQoj1y0C4&b?nfg>ku((+OTKMYTbA=RDqllDI&09v8&M1I3b-n;9yLWzk z?6ynq3Kzbtw;@juz%Pwr9_hLrMn@g=&1(c;d45_=WmUIauqPC~@JntN{*;54{GC@B zP2b{z`;aVNZ2r7YHeVb|j<fRXH6Pg(TzL9U$IW3dHY+a!+i()AdJ>E+*{d?K?U6$0 z_DBhp0$<`NPyvH(5U|4IUU(CQYD~J=0#J9X*{7C`br9uWqL(P_qx9XrYn4W#cEB4^ zIgtE#4_u*xc{Eqiz99Lf**L+B`?4#-RThR%J~toynVMEaNiyF4dV*W55`@tPh8G^} znV={o(Q=ROEk6mo(>D!+z-dd<Wr;RCvDd&z&yb2I>HLTX=CF8GHDi!T=D3HQ5oy6g zJtu4Er<cr0xAmzhqDZP=mrf$~N+W4>qVSl>A}6W-c!H~E^dB%qHFY0iztTK`uPkoJ zkhBx4Fu%mv>=Q-I&u1l<M0&)@m$5pR-V8>{$^URc^R+nmscHO*s0bd$m9rK(B29Sw ziOpukGCZl1`xjBAhDP4r{O6Gp61yK86uxVvu0Qpg)+BbQ<os8dyWa3;4tRcge5PpA zLzrBV%QlK0p{E^<${tj7&#u_L!hNC}Ee-YLrsS(i1zImKcz%<h*Vy}gX^~49QvYzv zQl8<H37Edv60W*X&C0kGE%Pr2SrP5Ah%5)H3TAwxw6WTld$d9Mz=(n(LP?Y`R&G2X zBO;c7e#FYUbq|sMI2Zwny@QTogKz&uDHoixAlBvpn2tGoeO;Xh5ptM556I+}J>yXd zfo%CslX9?{n&$;7)IY7ympo0>PY?0G5<bjG9t8JE*RcLlEFzXwpb%Gqpj@m0jsUit z$ot4n3xAUHFuw1I@EuULA!Mp~JOJhJN87*r+SUo{r%qlj$?i`(L`QZ%i{)*DKfF^8 zv?7-sxMUcp3c{n|GzI!#!tC=Pjcm1ii6TU0l9%;uH~$_=e>y7YNoAMRo_|g-g?^O2 z89^lDE`l6{7LGvqp?PF+IeC6A*PAMa)&YohUYmOW^kF@6$LKNK1Af_R+880CZ`D0& zGv?GvsN|?hSaveJGc1T2Cm}QH4@4G1d=Iy=lD9;#p3<fftzu&`KV6>cehJ`+ka|UW zPsWH$1G9nr(wSJpe5H{&VrAu`;!j)jr6DvzYBImAwCJROj53kbwm!w*$#yF2p1t>R zC_M1;2<NNUy(Ws1ws|vVciwUk4Rly}OtB>l#v^3C?o2^CC^bT<gTV-xruli>Wur;% zWC;zAC#FkTyQ_L>{wSibpwvk<N>|K!;SR`9^xa-X5#dPJ7_lVFlI_f`RRn8s1I8<P z=%IzGkf@oP|G9}jrI?dtD^y_Z4s$J@=XT+@FuEd?JI}NNWY7kCXKoXeoX9jk4B9JV zSom`?4`yI_B2^L8=MjN@8Ua`QNah``Ouey)cm*g#(u~`D7r1$PDy52Attom2DUL>t z8Qeb*%uIMi^kitGL?e%FWPwc9=Pvbu1#dF_%+JSB7R5Zn?t`pRzdx`T5r_*--&)+i zy~wEPDAT}v*xja$AUVb8tm{1+ZXIt`>70y$Rer`!vqp#DNlzYGR8*9wrIuSJiOO#* z)isp8OB3?_<|WvZd}+2UoW?mXOHomJE6ibV3|C;pI_hyv(Y7Qb{kVNR&z1dh<;czB z$Uk`qj8n0Fz-UtwLMzU(+OFlJeUZ6GQw{hw^?QOWWzKoidhtU<Tq^uH<F6tS=_fY! zM+_UR?0M&v4FSGoM`#ycYK2u^tSDkmqS>F5t*)102v=N24n^5iX@HQ9aN(GnaLp*U zQtGMzgTwXYc~T*JRbfhmoLz|oS;ZX{baWCu_Hp+>dHb30V8zAm@x5LP*O|0MLuc#H z-JeoQmh<0hDwzuJS6Eqetb^n%%WBJ0ZKJ?MrRmfNHi+F}$E}9bbdm<(<QzfQBl9f- zH3}{dkpDjrcktIq=X%+aG~kuy%aSTS;Wx#TQ+XRcJz$jL7Pj_y`<8OW-VFR|WD;kQ zH<rZdN<5+v|A|D|2v3`MWT^)xypKJYnz7I%pFS_1nWFfyKe&LET(|N9J~(x8{b;j< z^A7|eErTKzEuYp^Q=#jq&VHL7l!ib1{D^6&9Jc|iu(cZSOIjMRaVov^bqKV2p@XJD z<fw-BUGX=*Xb!yV2&Z;C_8IR3lCSKml5a~ujzVJQUtXrgPJ+Wd{OU{VzlM#HkbHbl zybvSC_y?ki_KhF)-r;d~`M;G7uQczLl+z$%WwGNKSL93uB?!q<cmnbSik2Btirid- zw2yb)BAb6|4{x*fi6==7GGm#i0^7L5F(@g@u_K$Y!ZyQM+n)<GuDMdZC5vh?O+2;w z2ea9rYxFLxX<orVO+n?170*mE$xAV94}MxOaQq$?zv8#lhlMdMZ0r~|=OGuCplhIF z8|Prcqwe$y==o@J93yFa^x#DNU&nh_bT0U436Ak-s`yU#d_bNp&})C^E9W=P>c55z z7;<w$iN4!2(gqrCu|Rujr8jc$liK`y_a9h*J^u&j51@D;l$O{vOUYrev=~qkB2GS; zQdAE@iQzjB5&sJIkDU0KOSc3&tCjAkT)aw9_(u79NHsD1AP2ib6Fp(m*wKiCa<igr zhXHF~oJIei8W^#%<s2sm%;Wg82Qw-Hmc<!N>g}?(?TES5Z0J2_sDfcAVQ&JF0z5y< zgbG2aMX`9CP5ImJOPuEchSm>6#(z!$z>uhJn_5XT4t?W+a{l(QkpC&{>|AZTt(k!K z=@1zCwr^p!&wSBt7j2qIlZma5L+B|B4Y9ZuCrOm6txj#L5EQ7*3He?9i22@SJz_C6 zTP<1&OH&{c1@vpy*DRC=4vVqi7sG=)DtO^(ixwQsLI2a)s7GxcArn8OrbA8p5HlV) zez%KD-bKvH6wo*hNlkCggZoN$9HQdr7FtxXP~%GHL4O^Im?vC^W}?3amg&Cn4F<y0 zG_>~K+JBLIjH61*<c+0ZNE$svbT{f8P^C!ip|=;%-C<Zr;2xW#4>W@&Q;^tdlPud? z1JIY(<%6E#$$A^3JX347${wNf0$!1KhIqk$^FR8GNXw|mVw(g7@poY)y7^)RldUX2 z5f!f~&tN0rc6a?AT`rpoPPlvygDw80w{JTA6PS;{2!>Ukyh4<M;c-VPJwpdbSt*zF znX&r|)G;g$=1<bV;QzbgkddJ+$uK!wd0lh~)$XU?CRcsFamAf&2s((e*J=^T>oPQb zITBNA_vU;hB`7ioRAtWcc@G_IXzKkF13Xv6v<G6M;&A{ii-s9zHrV>z#z(Okvk~;) zxa(n@fT-fIgk4O|-Q0$K6mgSK*2_-yrEVC7nw@fm24;PY3V!;$PuPql8q$)w7{+^K zjqvAW`+hq`4jx#LcGWMhDkapu-u(!1M9>}9WCn0tzN^T|j#p8M?xb`kp=T#)Uc(mc zUU|QCEA#j(N8v0<h9MT-3hp#udxmpw$|tZ1g`ru-DL8wZR+K@f6Kp&xiQ}a|vxFJA zf2)G4v@<HssLJ!|_=-SM#y#A?8w`+v^7$@Z18^PR!^Di+*xU9W)t#gEF4fSK7ZqW< zZe(&;CUJ@9HFyoRe|4oOK+pE@s`fD{%^MW?rFi0*0{0240~R&)@KfO0&1olo&f@-W ze!8NGQups5O4XR0qbtNw-(AEM=QT5~{Ujeg=O}wksU0N~#cyNWb}+lT4Vxn!Allnu z{Ph~<$pX&JnC<KA$;uk@s^!o{vH`YKISFgL?!~6m6d#|XtHEdk8Rn}gNhv%%JpT9Z zTNo2hl}8pv&7#d4kk*$wDQD{vm9s@CY_8h}8%|Sy5R>#i#3xj<c<ClvCHNg&_6}@) zc>M=b)Mhg}ir5vA9~!@x5!tV(sY%b{T97HvKp%*vS^%gVXby*1Fb-4{0(j%S`(zq> z%dGL`5$fb|ql+chXhU2NIzdHH`2L66zwLcWb%H(b6C88&&5U<!12w1Lskt-=!FMUW zw41$Wch?}Z8O=&Lj}wWW^hjp;&QNJavy?a(d^v!;?P_EdYoSm_8_QHU6ko#N)F~WZ zjw(elzTa<kp~6*;N_5p48wop&Gw%#UswZ^*q956JQNZ3V_q9qaO?m_IKIwjy<Bw<$ zC`sQHkxuHK9hvnkuF9*8UuCG+DJuqT=oVo#VENoo2wiH)=ofyN+n*2XW%mY5A0}vO zE$qw%qkQup$F_oK!%C9kIm41@?_E2a>O10sW~H4T%#Sn_Wa}dIbGSV6&9U?VC3v{S zAuHKJ(@fyy9YX4H=FzZ5cMy;5@9+=*`GjTNnMO}Mg$fm=8INw8E>Pf`(>mCe;fqUW zEbuO4wOK7mRQ+G<JH$R$s_pxY4ouIO0?}o9(goc=_6lnt^4_S#{7BC3c|hudi6Xa} z`Y~1nwSX84z>3Nhbnhcq024$kG}#{wia08uz5$uM2w&i0dT3^;UcH07X_(%{WrK8p z5F3ry|2^nu3M$0~cr!tMlQ8IvZ<~g2c`(HuZhMviE8$8~5n?v9M~J5YwGunZ*G+4P z$1-IOTGr|DZXV69oF+bG;j$CPpB9ec<OrHF8ggkabbBA4J$=@vDP1ofrHf1=d;1t@ z1BW^CcRMLHhx5WNv6(?jJa03X`n8J_Ux}A#5W+KyMJo<ie*xw5>ql$YnMI}n6W7mP zH=aj93l?gSn}le<pN!4R%YZI8KMc#3VnlNWxFSu9f>vWVs~jd*L<tW$$Sz)})rbX2 zE@-qJLc;<_{ze_}Oa)AklPH$Byh1R5l+QoTo43hl%NM>}#X`0L(lS(9sv;!m`Ujhe z?u-S+y>J8AD6MX)dj9D!Weo$xcw8)zgR~|(K>iTf+o>R7VhzER^Wh`Vl*iJPg2hjy zj^moF=>Fk(fk`Q`9cfuyEIVk8lwO-5HVTX#;}B@Zs`+EF$=wLMGP-)Ko)3m-JpBYy z1&XHRi;9fS2@bwZA{CctdaveCfA%~_WuNirlV4SfO8ZY%r(p3#Lzf5Rq)`KzgmXfv z|J6Onrls0ka*E;lD;lx_9VRu@IXM}S8M|G+MB*r5j|qp~_W2UUqVal(UA)g~6$=(! zLMh$AClrzG=EN=uRxr-wnqv)0AxrjYH58ar=g`8tvW-A(SM$3?oB-3<&dI%n0{6T) z$_?VKwwPWwG|{Goj*La%CX9p60}jv#J$26vA}W~2>f{R?-RyIJt|Pl&UCJ0wVm|sn zVGZsbmh#v7!os%5bGu`hG3bD+kZf(HWdXCh#x>w6?BnhG#tiPbgGX8x{tg~X*t_+O zePp`SN#!1|fauUQVFtQPWz}#9B4A!2+VoM;?DK?X9SGs?$6R04giQ=GuTxT;KrN+h ztk5LBZ8}`5&7+qH>vSR|>&Z;IgsVOop)$nkrdix|bKIv-R_A-*p96C3cQ`G1p0bo& zy(GZ|e{hw-O$&Monq`<X*4~F3&pypGtQ0LBHJVREo4Nmsm#SwbW+AIMrWws;IDwkR z<ateF)pGmGw%N|YWDw`dI`2HzpM*pyTBX;bk=B27d^@Gx8KbTP$G-UYy*|KUbye4B zjQJhB!R8Hm!0I!oi-)U5NnLCZ?gv>@qAb%yyFKfYgiz}k1#^!$VE(5Wt%2E*!-_FH z^v{<r$wk^k5wu{{#Ks8zfv{hfRm!Ai%T=QsN2an$uyE>8cv4Nl02tu;5-m!%j>~6# z^`-Z+A9WKB;Xrux+v9h-UwJQdu-C9>-vx;W2aOctx~9iDuz$g8Zl_vzmSR`?`-UG6 zG{g$TRSWe4w1y>E&IF0`{$w44M+ac=P-n0-MsBZ5ymyZcOzX8jC_<Qcu_a)t=JE2L zxpKW4DAbR_(S|t!r9=7Zo}Ge}8En+@WH)hr82UJ4kclO$O@((&t_MF?^2i?#iMnrB zzewi?Ou&!DPKDTh9Op-=mV{*=H2#Qr@%75(=Q6UlqXa?1Z%pr{e;`RyO#&3<!hMp> zn|^aW78Z!Hyog1R8Wk-}$M|~Io^d*Y*29m4Bg75im#+v|+H57mdw$KmfYpet`hDFD z$#^g45A2Ubc~)!#UH)qGU~=UYC8|_o8f2neu0DTVMwU_5ip>q6lV`)_Dn3*w-f`VJ z0*o8gQ}4+59dWe*A}7=VX-R%`wF)gZ06c#Z7AwwHb5|f6%f5XQ0<Cgj1{YBrim<J_ zo(!_=rD%V|{SpkA!iO{k2~r{eJIRYoUZ3WO_sr;Njb*$j+3o#M?IUI{0xy9yQVYy1 zkp07}H7AT|t}i=L$2aE@4Zz%pK{`^2L97q40l4#M6@NtGu8_`AUr-meIh|0%YjTn1 zYyZ~C)2gcJd2n?0j&s0ZfsO`Eqm)~E<4X_~<Y-p!A#Fm?W7mmtC|FE&QR^`dEs{W5 z^~9~!>j;XH(&P(SIHXmk{%Ctl*jfglew>SCxFixy!4EPjHIOo$ZD|?LpP_iL{)&K! z>TDpzQ->}r<sqy52<je#zc>_ijUohu{HeB1L53RJ4ViQ&L}vCQ1}PNmL(Lw`hWik- zW){^?S)#Aw+LqQfjaexsW@I~3zt#XrS>WbsYUhBxwTs~v;Ub>qr)@KyW_;d;K6}xO zwC4iL1FEQ(LWu(vlU^{ldXo_UuI2dQx>nH5PEY>mm*0;$rANV)NgVTPYO*w?+ICFG z$nTV<p(0LO!tmj7kYt`O@I2dA=g)MEv`A7TT}c}Ol>;OFrk`saUN6r)&kP_F*V&z8 zch*MvVV<GKN4DDf#&C%(MHMwaub1)Tin}BgEgOS)5Qqj(r7!PWvld61a4&QqlMTN& zauTP={LqCYuNbT=Wp@~J#t2HVTiONp(<{QZLz!FdtJ~xE*?Q9WO4i6G=qkn<j-Rxu ziYB>9IDT=b%QwZQ{hFI#vHQ^|F^D38VLy(+X~5ksbYsnYXI{&?s#u&i*08)4m-?lk zL_TwMxtz8nu0l`0DI|opN>Lv*3w6q`g=9qFY{}MX_k6&n?E2~K#)@lNPf!NlJ%de8 z8jYm9Sauu#SxH6n1@aEPxU*c_^kqK6jdW_mdCjS0yXB*E-m3khowSdhiiyFugJkzY zuI!Z%&H)OYraG3_tA5#U969O}Kk3a;&XwX$e^Dq%sYx_-28cLdquCb~<;e?p6E*c5 zXB(A#3nNg6nV_vfdN{Kj)?xXLQk22-*lew!lR5uuLHXAwOGbRVBD+P)K$|2vk{q1b zQX+I|1zn=Y9S(_XLB83G5~l-tjph_TF9|+_)L&z{8a6(^+%+`RRY?7KzB9HY^@xX7 z;Yb!mgvm6mCI;48Ka=;Od^qH;Krda5`W>f_R#3l@E4(TpA@d}iC*81+(bB<Ga0PYG z^v*WKb=N3auh;45PWjoAS?lN-6wEXQFVu81tGP5I!_xFi4N^D(7wZ-R#GAV3GG~3a zo1Cs^Q)>F#F7mmlb9uFELU@9zAe^Z(jb^1JjXf$cxPNAhO^3FQrk4XQG@fem;6c%y zh)>66RdFuYYeFvT;1{n?EQLjey7uB!x;4HzZ%~b{0>m0$OC$diK{dKyXnQLaXT1V4 zKN(4Y*H<2%P0oLy7?(x%zki2pybMU``yIVkj@Jt-SBXq(s;bgBD}oqGCvD2glgy3G zwPF&C2Ma3d2~qNN4GQGTip}y#xhqUW98?I)uVJUl_m>ECQ(^HM)WkFue-_BEHu%uo zQr3NaC_l$STt^Tk8V$9~FsEN^ZSIa|XTBav(m)-Yp>4^7Zus=9OJ*Z#yiF@?zlWep zlIE@qrP49eGIQg6IPy_o4;Ss*`Q^uW5g$_W_51zERGpq?A-U54Mb~=W)$rsGiIz%q zN6dZ!Ohd>JEnrm9DE0@Yc5SSp!-{mjNP2&pKZ&!Z<^v7K$lFt)0zD@)*JZgPSq1FP z_j?=(vQ_SZfKYZF!wH9zAC@5aUyL}2J9?Ps0}{E@r>{oaUx=jz!WxhWKL>;W9nlYe z?L<f9*fQN;a{vR`7g?79rXo0Fs~!ueC>vC_C2&mp?Hyc%_UrDj`IkqAW7h=Pd@C#U zK|S0O9OgQ=)Bh7Qo=k~oO|OWvL<z}&^El#I%nF^YKr(T&+X>Xxy7?!Pou`p;F7K!# z_)bOxnq9ON_#dKh<NiK-8_=*|zS6Pr+Fi!_K5gxU>$nR7NPybiqp*2S*2^oD`}k1- zGeUYcA|`AQnoPzK6xSNvnqF8NptrxB(#3GsCux`pZ};wT6zUPLE~*QuBw=m_k<XEZ zV&`?l^|XO1LNoC_Y2V|Bkl=2?2D?;;p_My{jyfZDIb8n(;h76GOgS@L5XKKYZvwha z3v#4oT`Rg$GG>b_vSyuu;iGix%g+y`^@;Y`<!1<or!W^59|C_ze}Q-T2Qnb%>e8ad zDo^Zdf0X`^R*%Njw4PT%9*%y$*|e+nEFZ1d@*-g>V9G?WFccy$SU44XMXtkn!OOXj z*>#I9zL_f|JH;&Df>NsD{-v;d(5<SA&h~a$HWhK`x&OZ#K8|gJVOV=FI{TKucN|F{ z8Pb*laANKDQAocf>t$07fM3)!Thc)r4Am0tY(0J2f}^oBs}5mO$sP1Xlm5CFnjN7< zcD4t6hNz4s%&fH95AlE@*u_JwaR!hVApmtV1ZfW0YG@oK0JewT(C?(?Y6N+2S547r z4lgnQ(^4~>>O{-h4ua+^oz+%H86ZR!_Y+RGP;?LUto@n}mtVpZrQe7C9)MFe0>K^_ z{4vz(9ytDxa4EMES}U?z$lD}WDzhJ>=%OU0?G`rL973Z#WW8JjwtUb-44>c2nq)p= zq}&wz@`-x4YDlv@afJJNhcP-L#ljNBQkDJn@|f_ss}6sCKgbhRAdb%iN1exBn6yLg zX=B;3{<y-;vFvzff{sNRuDef&)5mai>CasMLz)kD*uWpoZ1$4eXl7q#m;mYsJ~w*B zVAlL%bJ|x*#b#W}3wekE&F#(peNNk6<+J2JP>BfFpW0Qw9w*4EvD05kx2je*K@+(Y z<qI<WuvX?w+e&)-h!va<+7-+VRc_qU^|IdL8W5VqiuwjYgI>p0hqCg|-JL7;0_HSP z74gDj6_b~$8vAF=)|TJrmAHg{XY%PVZ&?ZuEOkG5nl1a!WW?fIFZ#jL8>Cpx@6T#U zB&sc1J6gHQ5AfQnz%b75Fh1nB7nPyHCXTi;<~Wx4C^YLCZ#14638U;?j)~}D9v%y& zfVO8*Y-23#=IFR0VKek%2c@WuEYNUcO!tjS)~3o<(JEN}2yR;YrO#SDesyxp2%B(> zTN#tl&Mjhs5%^yEK8#*k(g=5oTYRh-Vm9Em1eA4aWYeCV#7S0J3v2$Y!k(YgwHCGZ z3~c0d?bLW_<s`X@8h!ddX<2kD{%E?^u0!>lekQXLw3Cn$x#U~tX51?0b|_i-(xO{I z+!k9R;P{hixlox^N+M|d+Rl|1icwY7o#N)0<=HIQ63-1l-WKpxXW0B2@bG>7jc<M- zPfn%v*Ubyoqz5t4+7`1B_LkztI4Mp#IVjDa{+x~7KRwFd=vmiRSJ&c|w!pAyARQh* zI;Pr|B_=W4<t{6Dr=3I~TQk`LI6TSyX%kCy^Tp{2bqj?CQ4dtKTLB15-;KzLA4SbY z%O4xQ+FSnvG#??BXr<)yYTL>pXKR6!s-zyTFb@|56fyO_IC-5?!KT%tf@GEs4^737 z-S6Td3y=OH{8cB5z*pbikoiWpBhO&(^JchV(Th4thO^5bhwnxu>X3z^^hL=9e}}sE z7Ys%pI4(^WLCy?nEHMfR`3Qmh9CPHS<+tBP6(lmTDEO-6?(9<=gs+?a%t>z<7r9Z3 z9~JLMb2U)2^&`$%->?_9X&4RG+sv0*qgzXGk&!-?`*yxfVsTN)Fm*&Uyi+lBZ=usx z*OJ@iY=w+T!%2t67MYPmH=6A5yX(m%acJMu%e<zWkEka=p@3t~cMGOig2usGo9#Pq z?*I@Zx`e|;lMh}l4Sauac61bR3|pn-p>t7+-QgAfzj=Z^fp;XLg{jHLIk|=~s6WIY z?RL7lsE_`qaB9)Kk~L0#aYcV$mu2JMbpwgeWMh|n*H2~xqmvYU^%nWQzTaV(sgu1T z5^7DL<{uIwB&4SX^l)DPC(LdIaatQw)e$BF&=)51A|w%fjHo<J)H;}dAb-$p*Qstj z2*WZr#EcXVE_FLjzV#uF{IBbzy=bhE%B1VjAPHGTnwh0>a1E@)-AS?CGv$Rj2k}0s zpc*43gLrko?Wb-N=>n{Jv5Ar0_ruv|-|)WOscgKw*KkUhvh+MD$zI(|eNPjKJs3hI z;8!>%^WPR&LS5GQ!Fz1ZskDpLW#D??5Tj~xkS4B2BpCar-nTAZ26r@HBWUl^y}7nE z6;46_HeqcI7$mA~EpWCDcP(}7S{Um%H+nXpF54STMl0>AfSvc*TEqrbqaF<;^c?*R z_(Nr_;L}eawS648)Z5Iop<;<VFius+gfH!;P=WL$lz7~mtOqovyj7hDQ7`W^XJ5gc z&Fngy^ko96gfyCK-WOpGKK0-%*AY5{7pLdCYXaR>UMrMdQUEnh?A?*Dq8REJJceip z6HC^~U{3q4XX!zjRM9uIIT>cO^<nBVO;tu+8akrkQ-2iHbzo+iIetw^)%UsAL0Z<n z#V^8G`b#6X&RlWz>wFs42XF5Hhi!A`U*IX@DWpEgaw9L|A0d030Br(Tw^PVJP?yqo zR#IInydc1(xK%4;qZXG`S*ZpZy}Kkw;K)KQa|BdNVgrVvCz?wg;vad#h@3bNe?9w9 z1Rg@1K+jEpwK253xeo3avccPfeH0|V8XMki?jOOy7x8WKGWoNJv&-WaBs($|&0b4e za=SLH=CXH(Jrda(({-t}%T(xN1qZ&-R+p$p2ITVXjyL-2eG9Fp1VsvBSXZ)7Cm<_) zBEAI^?+LH2y+Q(a^z^AKmM-eae$v9_&6Qm9cfL=GfwS-M;2lReuWoPe<7zHK3>jQo z2O$3TrCQ-)GA=&EiCrV!y04p!xPC+528oS)a%qXe{MFu}N5DuikMBSC?>+gLB4_sZ z^TDCgtZkF~x5<y=ESjd?$GT7+#}KRMLxr!|PW?w;A4EfAEv*`AZ|xTT_Q8x5rEa%k zC1E>V#-I-uv^p4Uyg&U>QmvTxJn&U%FBpx-o<Lj`mFBVi1R9rL6QMM7qKvaP&?EFe z1=<Tt!t=|8m@Llnw(nPpBr-MK$}Zc$>HSczpt%CmNLBg#Hp%0+g)L&DGK~Qtah7Oj zz-fcujG%l6UGi$>4hFS$YIoL=Nk7UcavcdlI}ij2r+|JvU%^~ZJ%s`Qd;)H-_&EB) z3^Aj$64b5Sz_#>|5{!(3EI4Q^a}A6AQ+UBKTomUWx?D@mW%pZQ+9s6G{KMtXh9a7^ zq*_A`D+c&<X~0_rn7EWldji`50a`^Y91UM>+}kZuAg2_BN{uEPb0tTu{X5w#nkFgD zi4V{SRTN2%)pzdPoG-3pP!7>(EvfPJd4YewFq4_%f0MsHAXr$JmHVxWa=k1y69R`X zKve>(?%bLv0km9m>HfnjUk%3mSis8uG0t;x{FMVqkP}gE39!J@k-IWzg?oR9c(3fd zOouYAW8(ff<>|>ZX<~E!=bj9u3V`-WkXH^KwAy1Gle!{1^_HhmSCvg`drJVG%GyXI z@QUJhKoPh@gIE8CBdBK(Nr{ZyT($M~4ovN-I+)MZcG*g22=ZXSLO^0Idu%lQo<I(J z)4U(B%yG!W#HoA*P&V!Q(42Ktbw`u0o7-u&B!)@$b@K=bpKZ!-f0XTQPkZTn4PX7p z(3kBd&l6|qB?C~DkSYxEyP`%mWXfJzO~Hfv$qe*-NbrRQ-Z^c^KXheKzdO*_i_rbA zHoRg^HRy~U-x=>^=!0ntoePWsyw<J#oJt$1Qkj3&m~!(VT#Ng>w~x&{u-~-gl(!$m zdd5tV5Ei>@CkQ!<Rci`l?uTzIu4C}L6j~C8%*AVyV)Ua*q6*3mmAJF`2XyzJN5}M& zwSGAcFU(|`ogZ4S94}g>O=Tz1i;D?$j?~7%d_8tdVXCq&71U!gQqoczW&Ty|Z^n+9 zmbUTbQ{!#EC;U$+I|SIFAeH}*s<#Y_qv^VE2PbGCxNCyDOK=Ya4+M92cXubaThQRn z;O_1&!QGvl=6S#Coa_8&dYJ0!>Z-lhx)<q92sEMHA=HUWP}pr-bwzyC%)nHk7jLT< zUPHd;3K(0wbW|}d!6QxYm+EsrL6<>y754G?{g-SyQI{ofeNDz4I6_gNg+^RKjjb}l zE&y|2;hgU@s^v+T&D09d(`xpnv!an!7iy&i=#0MF@yK|o?;My+wYWa9!*3X$%HGWV zz;m}bpiZVOJ#QTC9e8?t$TCSnI?vYCSVJ0Nbx>qikxNwp0-giS9RKq9eI*#@*sS^y ziB2x;)R=nHndCr1O4sM{USTn#zcq=;%@#l0Ihd`rDboLfcVpa&XGNBlYTx4f0a~qk zYU}X+VKexiLr!IrY(Jh|!n@FMn1-Qe=%Z;9k+%Pv3BIDnMRz|tvPJQF-*~Qvw`)cK z4hhJ}Zj%qw#~DxKfB!jnV5&5KeSU(i(A1tkU+-J4nVx2Jfv+cf`j;5FfbM;CvDQCH z%52rU9?H<Cr8Ona?o~+#;n2qGnQ&iSm!YI0d&><K+=xp69ski;dB(5Y?~8<T<Wdqp z1|}zpTw?N-_rcv^EG6R;CvQ_6_EUAZ>=@|+>UaaxSnBEpVe+wZ`OZ~DF8dMIoqwI4 zS*ub%OQf(;iV-jk6ttI_k-$*c|IJ}!5M8})yELtHFCWdhJSNvcR)y?Es(`MfFvQoS z&-nN?xzD2clboe6O(o7)DE?4SR4gnDnu|Uk;6Nl7pT-R53;}C+yV_&qI)4%5tK2?a zfX?-UeY*{zeGNK}OwCs%|9KzqX~R08@T2tuB&!7=#TU@zS%k8ehTWYTM{K98YD7y; zy%L&%z!WL%E0SSf<BGC)%@LrJa-!`u)D77D@2U9*%0tGvmm)Lgc&O<7^q_Cda3cF> z*9{ezCbp14S@+2HbSH4#JV+>Q64JTU4!J<^uFf}HlAI`rtx9qmZ0i(h=_3WB*cVxV zgMwv?Q@%WZA7yPagEsq7MLmGrA|@F0AYN_p`kk=@ogscRbUc<G50I{RmrcjPuK|G( z_*e%{5nc<szF%U=*qDRcDo!Mr-&P^x9fKlQQMOllo(535q!%^I$65y0z8CUU@4Mme zmDh%4PG(H$f0C7^QCh}g-E?)Cg)1-jy&cdm__#``ueP%NwMmwiFE>#9?p`+rRms=9 zMFmcI3cg1jTMaMftd}u$cWO}KT3W@vF>Z92Ejo+qgE`UEK@@HRj~#Mz)<wtGP8jYD z<Tn#_EHQxCG@!iSjMp9WWF7=L7z}iAKGZ@=?e8&$?k%q+`z2B?d*+&?9kHwS(hsJi z+_UP+wlU#~@~^?;XLA#6ByrzY_i@%5X{;507;f~`(BU)3TCSVF@DsT4al7o7sW%?{ zi+{E%H+k}T;&hitBdfRCxEWKH!@h3fNj0(ern6<RL5Ykei4(Dy3olM`7j^S|aDjCt zWW9aLCg1Fs>WVMTl@*6|bgbCSXgP8^xAa;pJfkKx9-8g4wH9`J*4*i=56kz72jPe^ z0<(Ut9KeK{SD63Vkx3>051EJW^@h`v*}h1rM}8VDS{krcd5GhdeN~NVd~xp?2gR^% zd6D=xa^oh0LxYRNQyaTeZ3IJH6v>cpE%f4TT`h8`T$O9`5OULrUyiochSdeFB-94V zg#IpUOc$Je)yhQM`nu?=avxK3M1PL6ceDKuG)MRXlf>dD!^KC*`FR7aCpoTgF6Wqb z4eJ4bUC|VIXq2_rwq_=PIKd(rGbmo)eV{%+aLOWL;?FG6e`|E%UgKoE`3HjV1zJ28 zy=cAaP8DSjzly!RUE_B#@^ZJ)CXy+2zA5f)pzM#*0wn^iXw+U=sGD8t856i{pMhjP z>6P8pr!rCS;^J|f8^L~E>nofOgbhkClb@Ps2ip4!dW2L_BiQwiqzZ8Fi;-{6oD>YL zj!tYGfpi#NnTM=5a{Qy!BMZj1w#XlxfMKwx#4>+oU6+9qBK$t;k^8^)mkd=Txj%(T z^gKb*INjIe1{&J-wy|E3e;}G?TrUo>SALn1<8x+0@uzzR3{jWn>L_wP%ai6;%7u11 zpMr~~muSeI`lWA6ZzIO(0%9sB)2cI4h;oO;klpj-3!RS<SNq}K3iXK!iVZS#8ecMY z?G-?^^b9%*KL`~Xd*j6e%{cZQCZPsbNLEf)yEKqbEwzJya1ZaK6ZdSl5ZT)^wKWZo zXAJCqaqd^jl}V2YBt84lIc+c2z>^L1VX)hriD;`$<D;XX3PJMM`4CYw@1T+oANlIj zbD&p>W{6DIiKGY$saeW%oJfY~uZEz;y=*L~u8$vgXgGJ9<&la!(lIYR>Rtt;MrNN! z;WxZ@5vzZB@?r>LJG|%?oD&7CyXyZk25zD^mwO3ES@yZBdo^S0Fsu2*_SvL|_-~Bk z6F5=f&D%Xm;#vr-%bNKV@X7d$bSPI~gU+}*y_ZDWCgY%&T~g^r(%;mN?GJYZ(pO)Q zeIhYJWK-BX3U2npP@eB;y7KY27c<Gz8!!Fi&wLJ<@etR1P?bb<G`b=J+?4G|eYVf0 z@LK$(oJR<Ph?3emcSj~Bh(b9AXnyHne_3YtM;v~-lFl>o!LL>u1iA0bb8a;!P49T5 zqsx}#y=52FL>H~=CVQo)LgZ<kooH3aG))|GKcTvXMQ|Ee+4amZo3}THl=Xq1UV2O$ z0Pbr`DNndLuGwL+S(4;1uBZ(yF&aS3Ac7koXhp7cqWjH%lqohzr1|ST9|RMvy=?*u z2|T|zvOFm8U2#c5Y2&gx-E$=y%`C?K8E?4ebH}}XLh?D{YX^ui%5o)L*?4q^=k~s? zQQU~@+ja|<pkFvsq$lJC;QUqf0sS!oXuO-6%J`noxpsZLvy0mU@r;Md+6PA-4<eo` znW`8a!{Y;Rjx3zdV3`u%`V;o+`o1Skr~b0?u1Qi2P9)Ct{X$};%MT<Ww7`XMN+jBm zr$7C%5iw-{WIDU=IIp9$(Nl5XC^{YJb$Al0XyrV9C=}P~?el#E!mOA=IG&~@PYPEa zE_9yZ`<f>{>$ps!F4h}Vr{hzGa;Zy4OG#bOy7dUme8WtplKnY~NynpO`)99H>ztA> z&eR%zc7nn2l8S+%0pGey5t?<5Nf1KAL(Exct}z2$*U))=JKCgv1$c4I$EhQsEn%Ap zuwaAP=7rvLqH!C`TW-aJIOA&mYX5ypDFXWx`PPC%jG{4k1Z$$3%!8Ff0?CbmGrjK~ zZ}&#XNuL>K2^cz|2kYuirH~2{B4dUSL8|)U6?J|9nc=$8(g2cw^JIohGB9R(QVa0$ z?Hqc-6v@w&#Q8%QY8RpQl3FtMl2}*(qWnIm#&mEVJ97I{J~<*4?jJ0nH&r6SZR;x` zo1OIu3~fWCam40-AX<nDUe*0)rnPL&=IUGAJ#E&Kd%HUIps&hvk~Dvdq^Xr>;cfo( zSIA>SNm3y0m{`8e8S;KJDH>uO#(VnHDnaO}d`nG{5YGblfu`g$$8=|q1^!3R%R!%R z)@HAujkBX<%R43Z;WCZ|{nVqJ7`l?6<Lhr#{xnw)DeNN&#_`O*ha4x%&gB@i0vo-m z(sNduMzxcvmj2vZ9~UiuoA*0b*v}3B@pV9Wf^>&DI6d%BO)XPm5yjf_*330CRT(-V z!tvnMtTp4K4y=<@S&NPJB~&aSEVKP7*0@|LHvdRUk_=3#@JDk()R<JRJA$1rj!a!? z(-=^#s!o(KLK6^&W|(mvA;EA??{ON#y~%Vq4m`{2KqJ~tRcZK#m@;K(6=@f|fH&V` zgHP=<d(u$GDVB>+;%-%w62FzS5K*2b!<iuVSAq+oS0f|jF3uUi4T=+8GN(5=e9{lJ zFA0Ey>gHClR2)soUbLM8PCPeS0IA3*6M3A5Lq`^Q_76lw2eCLtA8a1L>`A)`Uvr4u zV@2|AFFdj}pI3w}7uA+%^gUqOS8FD*Q}^VHv+b<#Gopm+=KE{i@ePz8Q;pm7B{=Eg zmP^pT&w9Ro*TVHlcLzm%lGt^iedi=P07)IOSmiT2mKd?+#;q<Js=2;l<&s7;9uN>L zuhD5y!1+>D&1lXJ<blS<9vjCnquMYy_M(m;LNqwzB_%dsn}opfepZqk-4*NFEU7w- zJosHmcrArhB9_R8;$0s3xtsnD&II?Y?CJ9_X(*3I7`In}%YHY7W~$grcsw8k0pX@o zyw0%~XA})4D$Hb(+Z`oEdkjii-E@17Y>`@MYpzPNtYEQPR#mK{7s$!k#Wf@kcRB>u zKT>syD9L^!SC*Ds6+OVMLwpg5e+4v&_%lkS94%@QBX?}?O2VyDGCoWrV-3k*_6}BK z=r?j$17|w+Ox4yXZ$ZaSNW~cp9Y-MPRYUT!(YL3Zo@%~7n(V4R&<Liz2%W|cZ?LZ} z!gl^;=-3amHo^;u>g5MG-EKQ2PG-YL&J4(Sui;@<at@f-G3vHSDv`{mB?GC1^jvh% zjx3p}G-|4mM}M-n!~V7+X3?}GN3Xtk_^&Y6DNw6uh7ND=;bTohob%U^LR@OIIZJB& zIg-DAFuq6P$el*>%XJT;$(Of1fxCLtZI$GJCZtoeZg$;vAdmdg3=qe6vC}~evc)DR z=!pC29ob5jmQ}WU%ttX!9EYH-ivV&7Aphv9Q-q#P22TnDUR2KaqyOnTMERk`W>$O( ztvEI50!g!=|FD2Jrs7c)N`q3b9QsB+fOHSTWeZjyowER#X*Zp4wThTJ_Gt$78<Ml% zg@Q3=UmyDDG^Kv-IwCTb^!hoHeJb5gFh$+79nQuvA%S#_@gWuh2xgLmI{v>6uvDiR z26AqCo!Aom0lJ4Mp47+KchS~HW;K8M&vcGF{^gBMCoY798C<|eL}sV<c>g{+puMc5 zRc!<_AtNhtB|xlBkzXV_byAfStNGdQw}c{-WkDs{tpipR<KtF5)4evi8mjC4OBDnm zJ7>SX5P>FuP5T-!gM3m|7a1Xgo{F6^NteG+(&bkck8ZtwD)kQ}xiwtutUwEVY~k{z zQ;hH9$4X>2L-M>M8USjc33b!{p@e$Sv@MHJqW!h&_t&f@^8_vUiqSuYvWQne2GA`> z?<)J`rersJdtpbfEhP1!Y>~NR6`q8nxr6Ud9xX=fnodNH!ZTzlAmmNOgBolH|G!Fb zJd;RL>_tL6z!KSnFgxVRF!+|{c&NQO3xth!d=pcV5wC{NO8clSN&$_h)Jp%%e4zUx zxOQsjf{_g|yUjiMM=UV{KvstgybGqV-=|REb{%yAWQh~D2cW2AnVLRe#&Z?qFyVoT z)fibouW8<su^>5A^oBXIC7ez|T4lDl-W&6UK<0KJoB6%;CtnimWve~#O-<Y&@{fTM z;J^W7Rd&5jn2MrV#xHTU%lZ`Yqhtyr*}XQt;dx20ax62wL79-n@`zD_>9<YoABqo? zIKoP{DDJbH*m7<NZA;@1%IP90%*d(ti`waZ+I!G#XZy#;SD8oA-M~(rEHg?lJ5n;Z zvyi2x*fy1#kW)%brebX5Z6$;69))cc2_EtMKJsJ%Kle>xUtAGpS&76)ur5T&;j)$8 zw1l$;{iIgg_d>{u_%J<5?KIBm%OfjturpTU*<p+XifAn8@9^>HMtsCJbr<t8ne>N` z_}TBCs^JIdNhRj(aykQfngB_#d-gZ%YDJuR2-y!+U}izbfSE!H(<Q9su*8MT7)oL= z2-5T+J($l85HUga$P|xK=Tl@-u^~1BF!i*bwvIS?H7+R!SV}$+VVD{Ud!m8q=~qG_ zqGCKNs<8|KV=<c0Dr}A~AGP5Fq$u<h5*#4>s*ilUkq-`qabWo9I<fTS)xTykmByM1 zQAAR@k&|Zv%9fBFOMJ2e>t~#Sunta3P`JB6p@<AFg_)qT7NEF=F{5@&FeO98M<2^k z11wI`#j9;w+h*tZS7JTlp%{bXtL)aB*Iz0?UTG=3d<k}dgNF^p^X1hJsqUf_8DlC@ z3R^)1s?V3lT}|J<;wsjV<nSE-g}jhF6E{yadJ9W*y6Dv9zgG)k$>GWP?9{rvV~)_o z>}?N%xo&tKRky@CeStkcEQO&()+5V%Z#uv5qdfT!p1Ri{z<LRy=jWPx9m6$~^~b<! zR9g68MxENL&vnz!Fjipy<k*$R$}Kn$`rWJYB9g57X!>`gt{TXj)o0E(xG*avC{8aN z0L^7~t>XpVx)Y;zpvy=}ehRD-b=5!Fg>#v7>@HJL>x>tl*Jc?-r91~t;SKP4f84_? zhz}OVVgO6)$)rXmoh(HT=r;rim309!;bt`~h)vuQhYCy-fDY3%)5`$`2%K7wcxduc z)tVswgzW=ycOYbXHcOFd;ju5wM1HzHjalSrX)sZuj#ErhSo@NfbPU)<44&1@s@sH$ zvCAF+<_I3>t&kB=o$cZbX0U(Ny4(R`d=R{!Inrd;tu1UCuKd%WG-|=DX(kF#cr}2T zp+-6*lq5aplHjt!g?Dkr4lDrn3{H3Ts9GYdUoK6<IdXV8=NsM}-5<5sg_PQ5k*iR5 z4Lrc+k*6YRUSCvV|6;UuNI^~4Z<SJBlrAOjID#7$<LWoa{UzI%qj@*t?a;6|-AMzN zUH!Am(o6I2j_6uh!t?u0nvF5unt=zlv$B`5k&f9dAGWg*;?0?s%Io(-pi-0pI4W@i z_Vw<Uxl51AGL#tytMO5-=ZZ-UL5xv;ffYuxvmQG(QEu60ap(~F^biTNc;E*~27sk; z3}!x+)B6YdaO%_{b`E=w8!ZdRWb=AXudUh2hZ+ne@G=9Y^9hhU>KI)Gzsg}>e?O^x zL)HL-s95dKZ@J2&M>NFw00=xV_<4^CuWruF>e}1<4cW}NoYu0JsuHooH*OK1ed1<4 zFs6zb2~MB*5}Xtf;YfU~J#DeG_p+BvUho=K-i&uQj%+*9e2lU$%-4QArYHN9^pTUU zqD-HnD1EO>$6xVqZ*KUJMm9UWAf)k2b>=&+Jm$7z{-nI$ooo#2wp2e9(;|QF$lY|d z^Vkd7(iqYFT(P^Qf91_5V<l?E&2r`_BV85sW=8*Cn<!8gKI|wXI-7GX9se7>5ba_9 zq^W=+<FR>K>Lzl7noXg9pxizp?TNJlUGey@s~$=SBy>Nu;)hnLh$xa`Ad;+q)D@Z~ z&+Mt|*l3<LgjcX-Wff-Y+kY@f;=opw_!v7Z1dZl#)c|?_GRsTv6QF(c4>Wr6-|#7% zH1Y9rSl7Oc1GjOz{CiWyG>t^P^TzTaTsEo!hns*FxdAE1-}{p~^l*kHURzc~DCk5D z#@hH9SZE(9bb0cYI9uW2knGPmNDJ3WC*U_^@E_n_)ByLwXRl<*;|0G_<IMyZO}m|w zfks}RMi11ivDV0iFQc`V0T$P5X_%>2qy?C0Mz=MJe`>mVW5vi*QtN`rWk`v*7V*6} zCTA=ere-ap#Q1Pe)MX8J?Pq=UqW=i@W7)c4q84P!Y*PD-X#i)O2hKC_%f$Os{0B<w zFebjRTXT8LPW}ff>CYZ!ZGEs-(&fx<)n0Ed>=|oF#nMTmc&z6bQJ9kD7o$+(v!$2Q zj#kFj$7t3qFmJ{l02|*qc;TCUmr1dHeh{sR%FQ2*><|9w6*pKmog=Jb41aUtFN@U4 ztP@xTyIO_+{qc{pJ`le_4~QYtaDARKNS7>XaV}2w!Kl|Fj6k+)c=%a*1GKaXudX2r zIvt+XqEbA+M`9`S_PDc0{pX3K81_>y@XsI7Nk8{~u5E<tQ*YByq-?NqM9Jis)CcE! zXzDU%kJ;3IdEl|`d6^mk>PC7#?Bk>D0%Hr#0(;RqZ)F&MRhf<T_q@W^M?ikBx<HsB zE%Uy&a6!b+)$={?r=$thyY%JOt6GBwr3UZ4+R=N87UNl5Z!x6Xx-{#8F(fCXsZ3{R zmSX6vq)uy{J@8WY3t^+do9XU9&{0)K+P!hih09v<V?HpVrTxw6&R#8QBNY5a988~Z z&<0+<MN;W`yU=~-_4V}RcH4|T;I&rvr8td>mA{6*aIur&u7Ba3sel5;i2ZF$VDl2p zcrEijE<rDgyzD*!<0t<>V>GC@YV)`0Ij4FFQ{U50zu2gmnwpWDmC|6l;EJ&+h{G(U z?#6Zd@=cJ&h|io6d*6CcYJE0Xaj^oH)X!znh5VVr)Mk@;ze>e^`%|xh_J5nmTQb@W z26w$#@~5@>q>rCG`n>!WdMiVGtab*NNpR)MK534`M^#$s91E6>aZUVw>#!SB(@G{_ ziP&jlCu(W06}mwpYEbjEHirbQ_o05f8p;f>L7hk2$!p`YRSkDN%8v}gC1e#9LMKZr z3bq;=Vs{ml2uy4eGm9!H8P|_KdwollFGP)IZ)TG|rQL6qS^z|=>)1JaFB9(RkFLE{ z*E#3sVcn6EXRUMD0>N+bGGejHA^K8H?A(quew!c`d=0eOv+v%2*Fze#SH&5(zK&S_ z&Av7L1fl=`Udv}M5x5rPUe8k53z3V-o0+^%X&-kZ>9UQ|#k1x99laxJ)e;(z1&lAq zIKKDN>ctr4f-HVv(NJfJqV+<JPt7ocSD1%OV|g|<q-~Co-gmO~kRfE?G~+E1+i9co z|GRFF4{-OeJFZ>U5?=%!DgT=aZC-uOodR&y!--F43tt2paV%GyUW;pJ5<<A%(A@dj z)eg1WB`sV$;`)DPaVk(0U@MX-UY2nJl;#LO-xZ&+fZFd5eAXi`)BiWA|9{gXN<TB( zL%)Oj*~gd#>dJcI^Y^(JO|8u5?~N~<jT}=W3qjSXnmWY<usv@UuW15Z8_qg=Nx;K^ z{IURM{RawYIO!N8=y+A7Zgw$=dQv2lP+0kH^A{d+jfF04Z|z&cxYR9YpMjUghYrHY z6D{YLE4jIJjZ9_hXS#|p^BSw%VU~pvRvxiPzR6ZLCdKNMKO%u=r@xz#Ay#8o1jbxy z1s-^<2masZaeZ`S^B7EgE%83HBa(VltSG(v|0X``FWF7d6q9DP8co$Xj_~FftM%|U z#LD{7*;rh)h488DrcbV)ThO;J4Qt(<diPqso!M(9)*SI?#YZBfMRs#*6=u<-xoxMQ zAeEUYip3UdnCmXTuLg`U*N$r;|9d36-z>aRQDaPG7k%Crpg$^QV1e_B+_1va)K;$9 zhYu{@BL9JwrV5!uYE@qf64R`gJv^rpAyim0+Ti)ltg9cdcCA(U-C)ii|J)gT<<Gd+ zc{4S7fAj}xI*dQ<EDbnq>;>z*72yr=trD%C{6<RcU%5M7X)R(f56y`#EdACVPU$8+ zKp-ylNy;U5NrFs<#`k+<{cE;EWHx*LFh@wE_$`%%16v|MCLg;Rb~_T4{%IVgoso>t zKwm&ep8D4opX5&Eq}|hl^Q`fI>v%_6vQf{@QlnG$p0n0l5ympgD0jP=(D#%{=aG$a zBYI^EK1__IGvz5+e2_|95Cl?z12mCKkI`#t>2<ilkHov-jZ8;Gy4X~+h8S8$bn#t6 zc1q+5K+wq-O7a*9GxAt`2Sg^pw$1$mr7pQVWpMuAR-)|xwi3W=jQ!j3M1A4g#6M8> z)#X#M?agcA^|F$y$ItVl`!DMzsgCUw*^Pqkn{*w(ZfN5F+YO-%y(T56Ia{uo6MvSC z8JP>247Em`AwrOwc(xH1Dmt}j7qNLb-@e(nOI0!;Tv{=`4@$Ngzq%)EjjAqQ!5a%M z8DT}LH8nTeDk?4;aiAjH2{+A^&yXxED$&wkp3R+Zs7A8>>ny^!ruyU((;SslOs;Rr z(i&raWm#UpA`vI0L+Q!R7K?3c6qMyFR~<ovyGjM}b;%TCgMmuX7a`A4nda@0zdZIq z?I1X9@$CP(zVez=azq%eVB|q9g&wet6}1cXQkwj3K2$DGZdcFNG#bwKHOB&+W6lul z^fZN8NY0U~4Stu7+9^&2!OOCIl)L*yKozmTEdwih)1X*;o2_F%q)MnjdN~wUqQm!X z{hf;bYim<n)Oh&@viFgy3r`JmxSo#g>Ut_iji~5;Ge62eiQJ++4~-ERZvs}@5AfTW zMjof$(oA^7b)z2{OsY$u;g?Z#3l9IvrO0;B(aA2$u`DI^nR+1@RVp_(-WO23si`4X zR%PgHbByCtI}aVQ#U#4YPT+QVV>a7%ofEk@%;3=b``icAb~!l=Q;o*hydqrTOq4Cs z;*53HN!d(*1`Sap5qm8b-AFo7BowN}_8soVUThDn3An6yV$jNW4g(G8sjSg1?q#fX zG@+eH)1?ybm!{{R3EwRd$x>S%5iVv@1-N@vkkIil7?7&N)M8k6ZgoEKr8QrSm7h&- z91=hxGm~WU+*}<*EFAj^js`_FnXiVV6Yx|SHM)v(gWZ0Gi1UQ0t!NDb%{D??RI|}u zbNOAj>{x&~1uGu(O~}>s0QC4jy{BO=C4?2oqyPE~g#2=x6b$}P+oaVHSMLtg4hV9) z3Y((PkvHKj`d*<>ZM+B6%&N*&y>%J}Lyvb|1UzpwoY0(&bHm^Kl1_?Gyp6sN+ulOY z7kwe*Mq9--(O%b{T()S5^|n3er+Wj1*l10;qY?@_z~2Lg6i5tQ$!*?#>#qav5?JJB zvEmg${z)4b>n4O?G9pPW*HA<K#yP;F0ZU<`FOxD}gA&x(&9jLf=HyyY)3*1B4H+0T zrz_8C=WVb6{U;4n3qQcgv3ELy6uG?Q&x!G?KqDTd2@a7HGq`?M^<;zUFm!*1jb;i4 zKAuG75#0T*bv4Yj;y=TS0J~Lps&MJH^w3(!;rU(M2X%bX^Nnj79px<)Zriy+NwKI7 zQ>L0k_K#`saVAVv<%oiUA;#B8CrXh#$svRu?jEEc`T-g=QgwuJ4c=YZ#nDw)hZhtB zzcb^cJE`e#3M)LD!MXubeVj_YMu!02(}`1UxC#jDeu(l=OU8Nus({kFb+FSd5>%6J zPn$FZ7s?{|I6c1~b#z>HuG*0^hYWI?0^b2}_nYW{qDr6`eYXWpdLWlYmK=l6NB~RO z)?|Oa47{?#?j->ND{D1;x3HW21KfEhNlje^V)^j>N>NVdEG{0`a7_+6Nt9c}eaP{} z^M%;XEC%^S=iz1gCQShzJqgd!PV*ygch6-5qy*#dNtWAps1Js|P|l&2s0+qx-0YU0 zeDdV-*G{0PXDdBsMO&r;(kj1*4gd{OkV)P$`1XQtZ+f(r#q0yRr;1Ly6$3r#yHx*z z9-;}@VyFpj|BtRCA#aEl@5pj#fX;luX-j{v|HBQ3Hc{JPtq8CPN{*q2%7@NPLfFK# zz8AsAJGp6G16`s3ISbxNb<GixxWx6BobE^-qR&C|atU%NuEV8&qVUah{H(Tt2KxxP z)=7cncenBj28igYvz7tUbNtFe*x$r~L3Ol%L$~CrHo&H&t1Pd{0N+eu73-4UyD7S) zGiE(_eu5|uuIoK!#W!x$&rnMS;PWmN;(lxEpKb|#&o}#!DIL87KhOzuN|b^K7x9lM zfa2WzJ4lRbDjdwq;JaYl(f2m`i7ihhE=~rs=F2yhmKP)Z;PO>@zVAs`B}jp>B8lh3 zvAX0X^W;|26<lGx);>%Z?;&alm)z)O#U=27+bne7peM2)p*W69H{BdCWRU>{01ArO zP4oZ0?Ijq3>=!XhEBoH4_tfj+$LYb>6?2M1Vyfd1mLp|IR$bU2fYF)#4dIuGAUx-N zj15ByY}H<lAKo<pdO?;nhSv<zKg{uL+p_8191Yi!4ErBzCqqJhK6(t-V=zOtF~rr? z3z(45Nqii8E!e#;`zWni(jJB4gj0YP<=dw37;b$zy2f=EEv7KGygh_VV>c6I?i>-X zZ!Y+Be18VUElG?ATZ29k5S_7Em$IAcL)2N=d|EgTZf58kaUi<z+d5!^U`i1wf!C#w zm3U)qWxW6S5Et1Ob#sa9_79|BN2qk9^7+82=!4bPIuOx{B;}D$g`})GIKMXl_~j2! zKWNqcF&ou6C2GQCVNI$z=ByIXb>d<mwL&s5&^w!6|5DPK3(ai1%&xV(fp!Q4utiaD z#43A|j{&Q2=`9TeIkF9fVcZ>%-RE=~u+5aLBnmLT=$nzm6!(LM5G&ER{z$whQ8D4k zG{XF-ah6z5=+E~rBFVy8MRSQ4E^a4zsD)U_ro|_)(X8=Lrx`J0X<?g!AwcUwzY&$s z@dg<P-JM7O%o<FeqW)wNL1xwsaWOy;dg3#r6zvyRh;cG|5JM%bpfy~^-V7<ofqh;5 zL;#y`VkX0((-g`woYy`jQtzQ7%cVLC9aiTSYVC}@$7jh5z8vw0UypWZmQ9;*@o3jt zv^xDdrD*llBdyJN%+lB_V;48x7&lSYenf(wK*=mh^|z8}AB7^FSXX^%W5ehEX>_vH zw-*|#eWH_Vr;b+&THg(|9cgM>d#loMX9>pOLP?i_di8b@s&Fi7jD+TlN+t4^2vYM8 zUqFpvejrW~{cBEZ{*<UxgOlfup}KTJUI_UHf$K$$UW5ME);l`_iI<heCpCZJ%m@TY ztmaxdo|s-;W?ndzx+U15vwtAND}<MI1p3Y0>c6w?V|4y>71Gi}M#b?g9g}qlHuNbP zZIF*EMErGQcQPi<$)?W20X8)ReYK}$5iI3v-c#}`rbowO%7)6jO4G9gJiV)I#nI}d zB_P0XV2W#SqjEQ~wsT5=Z<XR~y0L#q&>k<X_9feR03i#Tw7@8=^g(h!5}8DPS5R>t ztKZDS{iNgp%zr-g75oMJq`313D`DODU5;di(fiao#}x;a#^xwkqgvVwWe={w>FA~@ zten{?F}ceE7K9+>?V+K}!ATxeTjIBT7oUHin|ZB&pr^yAFKKt9YtfUlMo#MUn~k$q zf9LX<@{E^$Xd??o?VuWFx2?tXMGf#SZyIn)t>n8T#uZGR6?yV;W3V(Wrlmr_rI6%W zM8ZjI83>82NI2I}yEQ<0#8P3?J-3djLChuu?yTsnKslva%c^J2pPXHrk>vXoy3yQQ z)qNDE<AzHuez5bmWM_rJZYI$su3^(_^r=rxORq3#&8+_;56=Pj^^ZI^#Fg9X>pYb8 zDT5Y+U2STG5)@{9L%6#kX}PiMaJ08J*EC`9HQhbOs<5&8o(eKr<ucMfn{Q`i)iAAv zVR?dBai*Pwf)d{c5=ui!EU~{k__gNOd?S=go;%z_S0xV8PY4L%X+Lp-)=LeeQpx1` zWS9`XHlZ*N-R-3tH!?4gn;yE9R6QfbotP^&IMr8usQK$OR5G<?gz4CRQBxD+NvC`- z$GD=^y6nDem9_Fj_}4Jq_R)Fh)H2@015_=66faKw0b^_LkK`Imh5FxW=)`BPUT3w9 zx06Plr3Jk^R5O<HZTW?h`5#1D+5*4Ya*AW3+xDE|@jlBk7E9+n`Aeqxa^fsvYPEQ< zO~%vSRhpGZUfx9oPHZ<mDvLn;z7w%3P1kq6%e>D{-d*8`ZbmlZH@T|LG*LI48tGU6 z^)Nz*s3e3@h$)^#Vh}DyDp%x$TKCwm%@UQlGE85#jE6L7y<xsJM3ZiHOdDS)S>&6q zIENi`6X?lrFQ!1@sZJ*O+xsdQU;q0S!b!-7y65>UbUslqdpaqx-ESPff1p5<>Oh}q zn}$U0m5yJ=v`>c@a8mUej9P6O*R(6;TUMA1i_?3M>10cqVD4h%l)q!bfdU7Uu1ca; zxVNfoE)rUNj)<0u4T${1RIE`^i&nlXuc_-)OXlvggEeYb*D`g_BrwpqKGN*`5+4$n zej10Ht9>vdr_2%sYj!+{KVv+eA5-gG7Sl=`hoA@qT2#wu0##TR2Lo$mm5w7@JPX~% z%KAs|zEf+rbgNT-bFtdG)4Eur^x@H3p2!ZaqzbNe>E@%WEu!(#<4j|JvY$9}SzLah z9CR90W7lhSr9;l*T1{g+gNEy$dWa8XH}{%Hop3!2krk`^GQN?NmH7R>_p2-*IzrDe z(677*zhkx+^|;LOz;|J3xqFq@H+=hOJs5u#;DP?l=Z2RzZRj6JHD!}Z!>A6-pK&60 zeR$orXHwD{mwZY|={)+`MnM6F9@>UwT82S$Ij=wtq4Q87kDOW0jdH=jD~4gz*@AxK zYrmq^XRp*Lk(!Uj2_xxyzZUq|RoD{s4G4bKw%Sz(;fNLm2XA2tHSpKHws^3rB2JzL zPtKv#J)>m}3t;ARg;+i7S_{($PFNHbt&|+fX({^3f=_dQ2Rk#f=k1ILlM4f-cseTw z-$rM}lJK&cw}Zma@(#e(!vy=JWlE~5Q>-g=i&NtK$}Up9cil%+LB7kJOJga_E-Ey! zT96IKZXd_zPd!OCDPKHkcS@cRO4;Ql{xvl}Jxl-FKaYniNpjVVrAgOIXdt2<_Vg~_ zV<l)scE!?Tmz;Its^pMVbDYCeYnTwk64zt9g~N>mp>2@$8~InFa+~oFi67K3`~KW` z-Q6cSSvubQYWto64RT#kDFv22&MUJ;<5ULHd>hoi7x|WpcN2>v`hL3y7Hx8CL|-+- zNH_ZRlXW!ibxkRk6KEuEV17G`B9nO02+mAZF4l(;6E%r5da)%Gh^8MoY>a^Il+nsQ z{W=yk*Kp<VWr8%oWDmDp1KMqMJQ1?~80j;!Vw@e060O81UP!<*p8fb{!~zt!o_THb z;QoQwCMPRjGiA1ZH5RZk6uUq)?h4V4XL<@%6IAXo;n2lc-6#K8=Du2TZlns}#}`SP zX_tJqNgY#Bi2I|Mrg3sL#ZSqnwd{t~5!n(pZPc1Ur*g;<A68Ph92w%K{$|loWxc`e zRpjO{9G+?)c`!SPyD2|rj;#vq!RE=XqO6CrP}0DBx>+^`=C?uX_<IQPs;lQCVD9t) zW<3wq`3J%t%KLRY+=SGB<eZk3Ux(t6;6qfj%-6M7dDmp-++X8HMXn0VRaS!#_;I&5 z9F45luU;9S8(LD1=R3il%#NB&3xc&IUZGrv-_n+eyulowyXSrYT3{lzVa2=MrKbox zUM^>U|9>Ek&Tl|unDrt`V!!|Cp$a9VA^qM(JcoH?2{mlfsGsW`npkPinA0jT8N^lB z<X!LLQ)i*<_<4T{C+`rLZf)Rg9IL<a)MEL&Q@Ya9xur8~zDZ-0Ooo-Sf=ZHMLTYr6 zakGK)kCdU1;M*z@j37g_>L|kBx^$tZdcMcQJd&nVo4G~MV&C!laK3aYt9gsyNjTpK zC)eLS8zTv{+?nVXaU6TD^AbM^OiUzkqKvATIDy#{=B?PFmAU)GkkI!qsu~LXf9EUF znOj?9j)1J)kQ|KHY~Z*~4wthzR?3@~_^w$O2@n20GDt{d{7p4{3`|uu5S+8Dn^96K z8y%r4P3)mTmra1J#Y8FW?hh$D?OJMNbRaUT_mD`g`YUGLYf^XjbV=1uBDdZakF#_? zBm!}$kgVDRw5rj3tDUn3sTwL>Qk_TlXz-FbmMzo5b;X`*RK*Kk-8S%esh0`%t?z0L z?(Vsx3;BACEsi<pX(+;Sjmz_gj>q-b^n6LR^97N(IUyu>4WcSvo}NjAkXBxnoS=iw zza3f2hLE*)I8(lPYQ=dz3!RugE%-e%;l-Gga+I+T=C4y4Up9>Hxe=LE-OSn+PR^B+ zN;k1=seUO$w>5X|cIm(+mI5;*8Gp9QT`@P1N~pMPtglOFtQ})mXwXSfvO-qXoKqjg zEgO)KHVI2Cata9R&NngqB}MRM%a<eI?&QReAPV;sszxkPgpmDPcmG{AqP`oENXqW4 z!N?bz^?_<2tLJ(MNI{4%D*g5LM*^Y|uz}PqC7s<FFs*PA5xf;q<)^boZKKu9vC$a8 zz)|vqwLB83)fi;XJP7fUjh5a#FS+&jO2C=aN->~5)C~|d@jBfZ1NAMxQ}3zSn~#=X zy+{RQ*~A}^pQC-&Xjq)PPNB*TVXiX6jp!{f@7yof8hJH2V=`aLBj>O!GDnRmkXrb+ z<~Dl#!1RUj|3H5y2`t`5dAp0(lT9<v&S7H=uj%qB$FF45{i7UUrhcFmnBN$dhHB}i zM*i-l9QmV%+s%3)pYCWo0%xr~8A)oyvg<+10!BGY$}^nvVX%#x$OXo#7Dpt{KTq_p z=YRIE9eGP{`2@lWmqxX<sZ>kr{<-*eU1bwH;-VY!i~g+=o++FXMG86eENvvzZ7WOY z=;>Ta|5O53&$8esb%Re|V<Sd&MgixUpoOXn(vQBVcJi46rWeI7tpwk^1NhxH=1!Cn zhH*g@S>H#SXIqeFyyP^Wr^i4}H*#_P?a#mQ63Lo4_7u>f3o~c4@8aoc!r%I44q9RA zl%`9i7Jgfci3A|QJ@~8cf&4nLXq&3xYFyODA8-_&5=$EQdb%9ioo2l4OEuk7k$KTQ zV=MkmRaEwt`0FfDfJA)eIDGybz)POr*`@&^qF)O4j))rm8RM+mNiovTq1~b|8-i_5 zNDxsJZWoDvfOzwd>Ri3B_mR8<e+gm9q<?z9mgp}~KOg|wqph^~P%c=Un_ljAKaY)0 zU6h<(=%JQqhJp}pkHCSbGQjJbx(KqNw)mC8q`{bqthAEMjCdto+!Z`s+oi?TaoEqa zUy^nRW)ZPo<Vr*VGZ17e!i4-&uXvsV73fFcejEz}H{xBKFf-~zSMQMzZrq2HY{dY= zLRMy5FGf^+`6eP;=+HM7V-{W{S1iukVF5yEi2jRPn&fR2$CL|J<6qmhcp_3A!$7vY zCr3o8jxZt<2nAU=Ogucb;ogImI!M6U2zq7oy<t|B3A#5(u(&4b_{I|f=?CtGBEJEC zt+}-ApWr0)E0^#CJY}b+t@yOapkGTn%Asl;e$M<5hrV%aXuTu{s&!`91pFz(U0I_) z)|sBkb9$+zzR8qM3*(850pEKhk=lLd{*@|LFwFo@#0)Rx1`ebGT_-sx49H!iW$WM7 z31}ndy^+Y7BCG$ol496ZC`lrMZ!Ux5C5I6Fht{!PE=h|DsuFbti`mM|-U9`7DT&~B zJ<HLZZn>m!k|Wu}IOAS<^eOWSr@DTs$+V?J<4gyXw`?J}E1V;tB}Oi3NX`!A@B>&O zEpt&%-#VGuTL7*?O_T&?j%Ov0sRh2_qB|buvw%^Ea)5#sl(hQ_1Us8BTM`cXR1Hlg z`G1rrr^*os?wTC?0>qybuSFjOr-i&#TPuOU6n$2S@45MRYC?J?zCaMpc~3b%Cv_B? zGnDi_Y|+>D6sXAS*-x!fXhkDOw!7jDLSIN2X>V_OWyGXaa_`ifux8g!%)S?5*G}7s z<|QI0OS_0|oFDqSm$8t35!#mM)^K$hV7<L~zNDpszbvyS`0HI%$XBoIXaOH|xJ@yH zYehwuYzueyv@KrryD8CZ5(ZB>=)W<dz)Ke~+qV$S(%B*4xk3s0lN%QI^n@fzRpRPN zY!diu-5|$I=<qnO?#4GYiqDYfC<^lY_NG%(eO^%1KwU$;gR0j77Htjo9SOKo*~$Pn zsRKz>a;9&Z2SWaCh^13hfmfK687oZ!KzpHK1R2;7H_8VXTv27P2!@{*w2vOiwh~BV z1UVud;@%8q(AWtX0zgH9an1%g?<$$?tc=9uB?Ev&#)jCz`03D>t=W2eX^02o)o*rd zP_Pf`Cp!_4PkhrW9Gy_&J0t8EuO6vCj2hLV=fO{!9BxK_&X9-)vvK^k3N`1efD}jz z7z)ZOu*MrY7GitTRN_*qx5|eM?pE#%#uQ|~#Rc7&N~#;oJAyEhp}^CNi6w`;Gahsz zYBZ%Ewa)jvn9zg0kADKd$9MP<n>k(I@@1J;%(#y;S#)?pPNWc4;yJG=h#Ekn)3cKp zrzrMqP|yTod)#(P{}iFpZ@)}#DmsZSLQ}><yN4}6|6Jp#37FJip{Hidw=QyP?lbEU z8D|P%^RhDhNW!^BT4<u6TG>$}0RG-4KQuSRO8bx4t0*6DcvEJ-Ed)=AJ+83g5^38c z_!uOujGWzly_q{bdVXdy8>8qGw$cM^?}8^?3PtsLnESv?g!l9lju?gJ&&-#^+;|UB zriYFROv0ErwH$s%H`*ya#zid27<T4ymZkCzgc_h*XBz0_`DuxZe;^OMcXy%`0{k%J zjm5~^N+I8^a-9XdkQ9FC8as!d(>W^Y!oBWt8ZzCO3{i;$#WWueU~|LNRHKiq;LfJd zWSaaKFivUHHctLiS{5M#=caEgTkx+tO13k)(oFm)HLy~WkP1CCK+03FJou3_vR)y< zi06M~Ms<!(BC>g3BmLMC+<mts3Q5<!An!YT4}n0`B4#@zG;$d-GvOTb^MHx+m#;5y z1;HBe5UC42L)b`ZT<%d1G81zvXm~tUJg#VF;U{A`o?39<!5_?YzsUa%Wb^NGL`CJW zgbpQKiwO)&&!$?q-wKlz4C291$KL0+!<(K)#UY<Ud$>XTHL2G}!880!!Sfq?CP!WD zMe^8Jg=`SBzsQVyzH>!(RSmU$0DVv)zX~hJjfxoHR=FLOlt7!K$A4DKgkl!_-phwt z6pdV>%QH~ZOQc}m0^@(nF9)d%Q^BsbXknA+jzmENhY^s&o-bDf5a-Ng=-MZ6B!dD> zu?=ny{i5U3+smZj%}{%KuoPw^q30c_VLJ8O?jGTULXSR}#`eE2kmmolKt5f39TV$S z{rEX0sjDvPn>&<mDL_dKbR|Qjh|45}Nd^>o9f0LC|1NZiZo~Q>wN*A`kV?OD%wa5b zwD@o{Hn#TL%^5naKm2Sj$eP|`Ri9x3e7@9nbJjz?9O{tK>@X#Q<ROxne^E4CO94S+ zw&yp2j$R7~p_BQ?&Huxqtc<i^9rHn;r;*su0SbG&&r*7A|NJSt_@b5SP6ILb_%+JS zEpD{LcSR!(s4%j@AoUZ_taurSaRj1@rlH5MSO#IOWSDyRMf2xD{DwvYGduq3niy%l z_H~0C@#D9nR3DA)bYdg9k#Ke&j@S8%sb;k5N2k@Bw~(Gsj7IHa%>2J<vreF+889rP zbqtAb)R6u@{{yY^v-in8b0E;V9xqF?zuFu0F`8A3P5uMPE+aYvTe+zE1So(Vu`|SI zygr_A>G!>fa1|zMk~b<b7cL!SW!hR9qYKC&nnEi(SED<7N4aTE=Fktd3#T47`6`zi zYff~go#WTcp9rf)fOXy~l(>GvDB&OIEMg7p6IM5C^Hjh!F4U|w+Fin8{R`mi{Y|sS zlUIB2%qk)Zb&+c6n<Mb3Sz>eMB(*oUAOVQF0}#sIi<wE}m!}X_V{e}w5WVwb_%iD} zs0S`>jtx;C>bE*n8KIoP^-@A1F3()K+>p)6py~sZ44JQ;mIMm${e6Z)X_6xtBYF@F zoro^Bct>)pgz?)C_m_Yg$MM8RacAs{_1mD`i^s##MANX3qJc$2|A{Hyf)R^tTwFmo zPQ@tS*NMbxJ`dK~DUxvd>=CFA_wIOpDxT#<WacjyzRp|`I~(g0sE@z0-;zV|A4I^| z)YThz!r#UG3*L&WTepX6ibGwmmUTZK3Re{y^E28Y$)2!vUSK65R?SKvnSIacH2waD zhSINN;+?AD6Cw0-qm+RBg>)?%g8b36u;~)&%c%9&bCdq3;-UcQ5kQzLe!y;um)*)} z00?u74{uuVOr5x9djPoZ{U#g9+sF2SqOA?c#)oDUV;>a`cprF9L-7ZfN?M<Y+SHPN zptb7uBm`aPy;OQD8n&qKw>|XqT&fXETS#iPF0cuNws^!qod~r?WfpmVF228eg)u!n z9XN+>c`;L+UN6bE6K?Ox-YoI`1@39ex<8&BiI1^}(>t5d%NA2!iGu8N5dJ!;GXhAa z>Y~#OZDpip#go@7y>Z5nHUA%|MR&k@e3bs;wB6Y|9Y6CQ=r)VfFB%^=QW^qJUL)N- zgGH(TM<C``6AQ#IIk%l=u%`=4Q9m@S3f&=e8{a7RvnUo(ABeTp1olUkavrRLCw)@Y z0STS@j&o_B10xb9>>y}w|6Z?2usNoM+uR<G@&*T)`sEQ2?>uPL3GB&v`~%IqVxEpI z<&Mx;c~8cN$UszcpOfoa`ZPVEJ?uCuQ|_RXAUNfSUC{maW~RfHI~Hd<ddMsv@`8nu z^7;C8Ec*@fl=v|w+vhe5|MAM%@*n7;(oA5~5_q=$RD*93>C)VO4z^nZ9TFBO<EXS= ze6SnU0TUkkv$L~dR2;<$VXkUi9ThKHwq|{V#v9y@u51h9R(hk0F~!5(gn&*(?>;b2 z4*j>NCfik{j!W31uU>Wp(}Q7UKN!e9z;i$X!I;wz$QWzwytG9(={^}>%1)e}bG)ST zcSF-31fM?_4YWp%d4tI_QD0~9Uw3T|xuXO_XDUm&h5H=skVCkMfQ+h6hZP@q8$-5- z``>CET8ZOuZ-=2P4`N_~V#<3k&C1?V>mu=ZG9dzGyhICgH3iMa!0eN5L~I{dku)OM zi60g!)8|2g7w3WSMx5_?3B^=Eivt@dMEwKl$6eaY`}y<_*TTHo8szRLX(4|3*gt-N z=EaUm3`A*$;igb4kk&Z3+`hvzi7z7WXp%QK#ua@YyBlBS01)LC<cXg0rR2)lP=Tq2 z=C@f)!+bMZJ6AVCy6)ExM6MfSzh`Cm%$I}W5CVLZLSeN;nDy8(nGvi{CQBM~c73NE zU)w!M=E#OnURXT1pv?<Q<s_!^um&2wu4?@<df?ot?Rhbvd8_MR^!!DhCX*5F7l25X zrp$TESG`-jWR*;XXgM!`R1tnQtKa|zc~4Y8X)4{#o%~k8lfim*R--M}>n)+ObPoo_ zbPyFk>pQE*LV{lxV^PP_MLYg%-!t@D^7>y{s){ZL<trt1OWpFXx+Ob%G%(X}oZp#* z;6TJ2gnPJC;W1%Kf;I1cri!3U@is>?HSJhYQs~^SY5><%zSB*AVwifa@VRvEVH9}f z#jS1enwPQre8M5MHsPc}QOF~qv^tPfX3v|Dl2XbkR*mk<yL;yxRe3nh2Q7aWb8@Nh z3j5~bMENFLl4~=^z(09DVxNe`WD}rI(F`(OMi6iQN`!8Js<L!!YcElu)qi$TTXU$o z<c_sltkcgZfZFj<z}R~13aanq70mfzY^gzlk&_>;xl_xGGYtIn?18doc`Nq9rJjN6 z(^Y*|zU-AYQnPfO(PL^qtl6IGH1UI7(+o*wE+dnMU#h>JKMBk-D#)L~sixivv3Sz7 z==60Tr7h8eA*AVKt)>2Bda6KJv+Z+8bEkrfRvTf)da^}S(}as&*0dEz|J2E6sRZNZ zHn_HY+%|qM&kLm<t}|J8_j_mNBn8Lj4mwA6u{9eq*w(nR8;vFqs<z8O0L7A5=F$<> zl~vl(XeCun6g?&-CWWmC`V$!_=ShQTxy4)<Q!)C><YllG`43<-qOfzX%a6`8*rM!F z4<MjKy}Lpmo3QqH9y9?I_<B}m1RAtK<`4p(XZbO(?Vmjz?ZZ*2Hb&sH+GIi}fjx1{ zu|6QS>TrgKLr+}TFakHmqkaQiDff0K)wq-bAB1#yvNgGW=c82U%QB<L7HDPxht^_V z!7yUJwI|^q`8~`o?M>7Nf{^TN0S0YxKpDdSqA(qKu3O(7XUF;zTuSnnKiHn}K~I<Q z8La5yRV!r3$xV+IS2>6RY2O$0qv?;6#`CmJ?`@xhi)iMmW!G6~zpU6l5P#E$XFEe} zCOxaq;@Ud1IIt?Z>Y{<{=j0o)IQXDpL2H9GAd87L@V7s@r2*<lS>tIJgaFR9mSyY2 zAQPH$UV$^Gj~g*&<*VM-&E<17aE!t^!o~_?9ChF3erSbZ^80NlgUShb8QpZyIq{Wr zq~elOAF)A+Fm++5zASD3Ky(Ns4Y|c@ZPPl}TuyV{N_ss?gPx}$A`FdCl5v&AF9D!F zP;4}-y^j0+OEsag_wEP#5P(J@bpfz#D^I(k#nh-KJK!IIhAR8dy2JRsrJY%c#q$Vn z=T1q*ty#&{puZjuSt-&5r9`*?Ky8%3Zwc0S)%3rZU6L4g-%O6U2-dP}G=9V`1gUVh zq~cJ03BA9(>7EuT4*+Og<u7nb!7_oc!~fHEz?e0S<}N5`fPsiSNSZ`Q76^dxwq1P< z?B$DM*22^!wIo#Y;G-BXfYZu2B~$-YqKf(_;q~QriAQKVg&q|Hgc3R8`==qG<qJOG zP+`YaZoBI$ShBm+W0A3Sgj5j9*iMC41pWO_uR+Oh?1bda@hBnWYmJv|rPvS)5KXuF znJ{Tf+33m10SQ4&f(3vwihaItp^Od06RfiUKu0tYG#{USUP<&?!~tFso1$n)Rk3Lx zcaZs#{f*-=L`C;gYriUCmrtM*m%fIeekpc08!%yWPew|t#nzrs0JtfZ?KCG6^Q;Y! z1oJfn9m=8C=q%z&;W$`U5N?{jbgHOQlUAnJX`6m{Z3ED9zzD|?#-I6%Zhx9km}Rti z9|&9=#Q0TlIO&Z|O)+^2X7SFvpOO#evXvXel|ARZ1yY4#^Ns(dG(jYO3b8-!CPo7Q z-Jzp<eNBPs4*yS2R~;7R6Rj7JkPc}Uq@+6qk&*?Zq`{?2VhQPxl<q}Jkx-;VLRcE4 zQBX=c7wM9a2Ji5@_qqS>e$UK&^Ua)d=FEHE_YBuWQkaZB&71(1i@N(H9jV6oth@g@ zP>_&H=E+tN4HVQs{LH~A!HGckcN(Nf!*g=ZQ0oYl=b9|-L@ov+1uZf!DK!gXLh)}7 zAG3O#M{NPlQF7r2kr=a)k2FA8Od10=Moe0t+0zC)G$*mPJj+Ot{N!E54W1I`6+qgC z#m)CV!<y9P)t<@nvC0@m`8Lnb+z#0wTEg%!N-uIx4v=a1Qe`K%{fVG|K2Q+j*{3Ix z?D38peBc-lP$J~_+%={S@EX?#r~xOnzLQOSwH`p%I9Y%HKQbGOWk$j8pFDiF{4GfJ zgs#+C%muQmzEv89^u>11EvE1@&<4&@nm#e6$lG$e|2XDe)hONGqR?iD6*B#|Ngi}0 zIDWY_`HsGi2dgUM$D-xirQRJf$gcarOL*FFl_s|6dAIJ<rWlIo-m4!UE?NM5qP!$; zI`hdx;#c!kY4pkDjLg~|fInEHyMf(MTZini_9P){ne1hrhxd7sIu=W1ic1ere!QAm zij_>CQ!KBT{yYF9r^Rv{ZGo|IU*%)DID2DLXED8BgitUGmca(^sl3B@G}|I@7KheJ z<QIFxOzqvy4i$nv^VSniuKdXu>a+m{`JfADrU8LLckeW79f8H20Lgxi%LYHP+m3o- zHTa=F;Ig;<zTkE*wjUQV1Mrx*andVde(y41Px|48$LsTJVL5cpTwD^rpeB*os#oQ2 z@&pjyy4rckw=RNJ;8k;~+%JWedd-2Q?pPkj;<y?ZxEwqiBCgNXk0R+5`>*<OE1m91 zMF7@qIbav+p3v_Wm^lfX3I1I7LjfYKsK=K<b66|{j&yB2Pcn|S!<La;`e}6zEeXMd zY$CW$*yu*tBN*1t{=9#X88IME=ZjHn?is<xDH+pw=j=2p321wE_X;a=A`>E3Zw*dt znL)O&QL`%a+jZjY@}#HetQuuCQ@mI|Sz^G{r`dXp$=04!N&9Smyk8FI@YWELAGlh4 z@3vhFQtDvu_D_g+oFDnw=0;NZqr$F{ao6?d)=TKq(!zB1&up(?t>tQQL5#BA?3h8a zv2SSsp3VxGTL=rjwvCn<hp+kew=*m+It;omXE4;k-%g{RXkmJc{o9bPtLokEkZ(jl zAK)=oD+@1I2se)i@(8hk69sOk0~-{{6xpfs(e76vpxqKo9;yf-=&>HW%E#1_hTtcW zTr;<?hu|ak#-2prl1a*evcvzfXUy@G0sWqd?qWBrV`RS^2^=tMX>U*Y%CDX;1_PzF z%&#@!3`pe}88_n6Zf5p6<lY1b1Gn71dTyJsV&8eoc=I^dg#3VNtGsE-G;5Ux?=N>G zgp|IaU1&SREwPdp4=5<Lcgna?KBW>a^HD-dh95PK3!DMCQp(s}W5vpkDDQI^YcV=g zJAbqkNW-=MZ{`!Q%75Z7{8b*ts&>UnNU4CV_!7ELcf*m_Rh3Cit+VQ~dzhH{)P&7N zAMp^D4M>q#kjrJ!s(7d~7+J!T_>TsofF<+n!g5%xWSo*%WBx`vv~fKA{wVG(&<{e% z2`J{LX$F{xg3Qk9Zf>QLI188-B#43@wD(TM7FQ`S@R$KyojV^$7?1UlS6jud>IsB9 zOin`5%)Y5nuo9yem!X=p+KAQcc+19I34~M>cbCr0B!If@#S2sazA!jt5xs7}<>I*K zlSG-3+|EwjtsBPjfTdRm5Ftrjb{Vd|QY}<u{Y>^sfHi0kTeCh<e7t0zBC@6Dvg_|z zAkfA$IeXJ>fe`ou*hB5ByvYQ*T>(dkI~xHD4t(ZNcBfPKLFTN&!bF0s3q+qG<z7|t z8_VDj%RA9RQdyDtpL<=Slu|~yZ0iO<Zqw2+xj(53J~L9J1)!p;o@P8%$WMtA5?~*; zFCtXFy%+z_zyjS6FR65vPdtfWnXa!C2YqI0Ca-VixyMMAAVu78r}%oL{6J;(X9_=^ zs6yr7Zl^(eQn%YixqgPuCP=@wW!efqq*IuC^T9vZXo*zS=G{!Rlh-YNP>;tg3Og&Z zGKAm?Z0>Jo!gzM3P6f&>E=7f`rNrN9lf$hJHsG&h4xFz20AQ3WVGs7vmbJxofVvPD zDOU=Qd}zcJ(?lqpfp@?|K<q9Hq`<@UM+N}k>hm|LC0f!jZKJ451PQwd-rX|806A#S zk#&@*zln$dkx{zq`{S=>L7Y;CZ~;&F5)Ix~>K$!XArChHXj$A_$S7WEDz9-k&w$c- zb%!1`>9m}UF$LUXpS**qt8ecsigE|2-|caL>?fwm{4}h#vg1u~NYIs_{{4_aE24h$ ztoM=}k<Um;|Fghs<W4oEQ4;u%<tHKGnxh-!P^Ez1zMPw(+3+w)_Hf7lhs(-)rptXJ zQx0rAZ55<^J_R$`1QP&x1wF6|D(u2wR<?3kH?3T|O7^^1<_?MN(~mlK2(tOxY2m9e z<m>2{o89h$N2^yxTEQB}c@D!!y*DnF!z^Lf&Q250jRR_^;Y|WViBK=$W)T5GvFSFC zsMDW<QhGvW8|S#7R1;#4qoYQhq}~42o9gO(X^QI^wLzjKU{!6PZ3yEN;<P13Nl17U z0|NFzwxpdBWKRf_jRkpM;mD^bI6?E`GR+;ifMTOCP*!|!Q+?bO_h$#f^)jeNLY<uU zSzQ>dNp3^X4yMiWzz23`C70b`5)=7nWqF)LpQH{CP`(~lZZ_ElcgWCiAV`-<8XXZ< z?a4A%?nOXx(RPKA`e;P;4yKlDc+iz3garkT^1uelxOF?kADKeVu7HSOzVX{evhq-m zLz2Z1?QWw6JJz>oVAOe8_?OEUsA61Kwl~AY>{*+;41VLz%E-9gTn)ksCJf)6<6!CS z_uPAth2bT_G^Q`VzofOXm1CYx^<Ys{NAHDnTcQwS(pVjLQ$!cjNS#eiusSa`%7>ik z_qMHRa{4vy6IQq{$qP;2Y8*N~yRqxPEd!geYrENo-j}?Rapk}D*r#$M0<#}lb?th_ zMh}TvQl~tq5@T$@RNki|%l2UryG2k}zKdqRwPFBI7#(S;Ks!D;#`DG}h&zEbZ$0|Q z%Qt0Z44ug=aj+I!x+HUkJHMPu^cpzlK=`H1`~rku<RV0b`3A@!)>(iV?$ckNCckei z@{W9n&3|_0nZte@JU1f|dXi!H%S${U<BpkjQ5}cK_)&+A{*-aNO}`RQ%2qbPuNqx` zZBM9nD*_(xHdB#dwmkEyScn=qWMkC@Mv;N2m%#zJhCEIuSk63Y<Mx4t@Rh10Y8l|) z!{$=0q$0ma=?LF)!t=P#9|VIf(#y8n*2^0%KK(lc>Bn>&uCVaBHQLep($e>-p|krv z0v5ONwP$hD5d-^vaW|3#1ky%tXwjsed;p27|0WU#5M{bJgJ{(P?wi&Atl#_SMI9Mv z<~>u$z6H+Vse5VVtY59Q7U$S;IaaRjLWhy|tS%WXI>j^2U4D|NRC?xT7v_%hK^D59 z`Nw?mL_&+{+dEnP{~!gMJ%B$5;`6!b&(|LZ;zrn137RjpzK@^&p?X?K7;8gVL(4kM z7YNYu-Lp7@Ey6gJG;2d^yRm5oCq8=B8_ugc`3ow82^WsJYmCr;5CNuU;>+dv`x?$I z*GPzaf~>}v`(K$W>^jqPA1%_v4HTPMgRSkTUgR>)+N(Kq!Bve*pfcgUwe`djE#NZB z%avd3;J=V~j7#QIP;+NtB=5&&xr|mY#>+_#>ZM08vs_5GN3B~%SV9*$`?*Q`e^EdQ z^w1^FSiTjSVWITfb|{a%6+7#a5L@$HLW7%!|Ipi>bi-Qv?GpqR){mjhkfz$YsniDs z(1$F`X=4iW^x=;x4(hpf+hoR#kv<8@WKR9)CSjvvDoMpx&E+-i2S;pnb@|$Qp9D(k zF_#iA-u2HJaC}c86tw?Kyz&Q-?yN{$9cY;zxHPv!xzv0_HCMe`ZG8x;Vbe9H-(n?H zeIKYp%3D#7Pg(GJspALq1hJ|@`!BJKZo~P(2nhZh^Pi;bYW3npoLxzO3dc=0GZtFn z7-B$)8FmhQfAW5u&mHO;;ZC3)9?j0IY#xQ-X5eImgBGNFw}^RRi5$~7M%{%s@f|Se zQ3qT$jCIi~dos*Nu>G#y{9_@TZaNR!ER)HI6G@GbRUS_!iaAWmla0h&FV$rJ4I-r8 zMKGV~Ld-EnEdB44vu+jRdB8`hbUD&yDlCn~ShP&nCtoi*_QlWML)?olsC_zoF`P%M zVTq6R`X7W6%%(_dE>f6mLHvw5uamfmV!l4~4_}-3cC6pR+ShxWA`IPmYlFg$qoz&4 zN>PAkNa;0x`Eb8dDq&(nI5hY}2Yh6<4Z@-ju<IJ`Z{bx~_r>{x@=NFcUM7H~AbEWK zf#9T-FkwfAjO>RlFt{ve_XM%GNks_#!^~`~o7WhKQn%{qUvZ+yZOiXkAQTI%W|i8& zRmAJq<7;D`yw`YIS3P&Xnm=d*O2CAku<^Qm#THNm6u5`*#g2z7bz54<#-3*<Gu`-f zm{2BW5k2pxTUf-~5FBYrJc;Bc0otfJ4aGz|JKo7{Lv;*dYtA)qOC}aC+Q|1`*m{ZJ z6O{>9|HkQG>yrZ&o>kODnrtk)<+p<5jG2ia0L7`r#~6ypqV)eLPS3#9mhHq?;F#8} z2|h$tPd84u{)3>W@UyoO&BXx2ok5lZYT)_@=j`deGK$WfhyLv_C4llnoS&G%ZdqKm zmhM>78@VU&q5aYCeJX0P5si<h-J+r{e-1V8{)3cR^8a-wAxm*aA|u+*ncw+<M5JK{ z{8!8bo`ve8|9D^;UPl*&O%Uv*FFbB2Dm*?3nz+WOhuxoRU&ygtls%>~|5m8o%`5JK zh>z!Wu4#;NGoN6<t|{s4v4aH+Fj2PfE&Lbf)g~~<J3BpRL#@Y}%#MB|bi6;^S~Cpg zyZO6)dA%G=(_~H#-LzHKzTw@CNsAJ>GOFAYxTeBfs+i*z^H}GZJ?vslBBLh@_D(<A zjt$#a<`~XDtEe{-T9S>^Z$0@3$?w$ISVaXO>ZcB9PLmE?Y8zxX{!m>TST$vJEdb@( zkWz^RqF6GvSM01A4*+VNq@7Y=RhDa<uO`6e8S%yq|F6@Z=QQ})>#G&eT$_{rW>v=g zE3;BMpb6FFb>&74b6FAaUtBa>;3#BxNN3X9QvrB)7#oVjj}Aw}W|`|v#D2d%Yu8<n z31VPh@PbCugP#;|3a>G==gl?uFc-=ZTQec!>PfCl>at|vsAcGLXF5O>tI0LcGQ;=; z;WB*>2s`J!*k^2`30@T^vYUn0Kkwg1ZE!W`kELTy>nvN2vcAv;q$Wue{~JAu<RGk^ z4Om1$%?&z3yQLqWgTU&fN8ePGWH=?kbUC=&oLu}6U5il-w=#_iY*!eV2ZHwt<?p49 zzxdul^$W=#j>98o_7s>IGA1c8TKajT&f@By8(xUfiX<q1PNeloMY)O7BfQ=$zI=o7 z^kn!$jj1ODug?nTMG5;`aA)aox%C4V>h#}f`!Q1xH-{hcE@{Hz?pt%baa-KC2aWp{ zjy`EjBx*Ykrc!L;`}?>p0hzMP3Fd~eFCtGo)P2_lF)z5aBU&Aw!7@_O$hjTs;mR$I z=}mwL!?2$`mS6L~GE!?PfP_{x+ZHGJf?|IXPfzF$c8gfrSE3?qv>0%;QIi~0Xkmtm zRCo%Z?i)YtL~D!s{tzu9*(VYrljzPH9Yb9b^y6uhB;Uo4Bm(ja9dJj6KMFnc!gnc* zSuSo%tWe~&Rn0U5$t9!pzsq9vH4pWA!x8*bdF0BSx~Ww-gR≪L<$t2t!!;N^w># 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 diff --git a/docs/_media/favicon.ico b/docs/_media/favicon.ico deleted file mode 100644 index f2d4490af1046ea50678211929e79b8b6e6697b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 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 WoU^CjZ{}KJO|iDX5Lg0JVE+%Aac9;5 diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 2397263..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,13 +0,0 @@ -- 登陆系统 - - - [快速了解](introduce.md) - -- 信息修改 - -- 学生使用 - -- 导师使用 - -- 管理员使用 - -- 其他问题 diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index c9d3c1f..0000000 --- a/docs/index.html +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE html> -<html lang="zh"> -<head> - <meta charset="UTF-8"> - <title>师范生学业指导系统</title> - <link rel="icon" href="_media/favicon.ico" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> - <meta name="description" content="天津师范大学师范生学业指导系统相关文档"> - <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"> - <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css"> -</head> -<body> - <div id="app">正在努力加载中!</div> - <script src="//cdn.jsdelivr.net/npm/docsify-edit-on-github"></script> - <script> - window.$docsify = { - auto2top: true, - loadSidebar: true, - coverpage: true, - name: 'Tutor', - repo: 'https://gitee.com/Suomm/tutor', - search: { - placeholder: '搜索', - noData: '找不到结果' - }, - copyCode: { - buttonText : '点击复制', - errorText : '错误', - successText: '复制' - }, - plugins: [ - EditOnGithubPlugin.create("https://gitee.com/Suomm/tutor/blob/master/docs/", null, "Edit on gitee"), - function (hook) { - hook.afterEach(function (html) { - return html + '<hr/>' + '<a href="https://docsify.js.org" target="_blank" style="color: inherit; font-weight: normal; text-decoration: none;">Powered by docsify.</a>' - }) - } - ] - } - </script> - <!-- Docsify v4 --> - <script src="//cdn.jsdelivr.net/npm/docsify@4"></script> - <script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script> - <script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script> - <script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-java.min.js"></script> -</body> -</html> diff --git a/docs/introduce.md b/docs/introduce.md deleted file mode 100644 index bfd470d..0000000 --- a/docs/introduce.md +++ /dev/null @@ -1 +0,0 @@ -# 介绍 diff --git a/index.html b/index.html index 5b99faf..17f109a 100644 --- a/index.html +++ b/index.html @@ -8,29 +8,28 @@ name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" /> - <title><%= title %></title> <link rel="icon" href="/favicon.ico" /> </head> <body> <script> (() => { - var htmlRoot = document.getElementById('htmlRoot'); - var theme = window.localStorage.getItem('__APP__DARK__MODE__'); + var htmlRoot = document.getElementById("htmlRoot"); + var theme = window.localStorage.getItem("__APP__DARK__MODE__"); if (htmlRoot && theme) { - htmlRoot.setAttribute('data-theme', theme); + htmlRoot.setAttribute("data-theme", theme); theme = htmlRoot = null; } })(); </script> <div id="app"> <style> - html[data-theme='dark'] .app-loading { + html[data-theme="dark"] .app-loading { background-color: #2c344a; } - html[data-theme='dark'] .app-loading .app-loading-title { - color: rgba(255, 255, 255, 0.85); + html[data-theme="dark"] .app-loading .app-loading-title { + color: rgb(255 255 255 / 85%); } .app-loading { @@ -48,7 +47,6 @@ top: 50%; left: 50%; display: flex; - -webkit-transform: translate3d(-50%, -50%, 0); transform: translate3d(-50%, -50%, 0); justify-content: center; align-items: center; @@ -66,7 +64,7 @@ display: flex; margin-top: 30px; font-size: 30px; - color: rgba(0, 0, 0, 0.85); + color: rgb(0 0 0 / 85%); justify-content: center; align-items: center; } @@ -97,7 +95,7 @@ height: 20px; background-color: #0065cc; border-radius: 100%; - opacity: 0.3; + opacity: 30%; transform: scale(0.75); animation: antSpinMove 1s infinite linear alternate; transform-origin: 50% 50%; @@ -111,43 +109,38 @@ .dot i:nth-child(2) { top: 0; right: 0; - -webkit-animation-delay: 0.4s; animation-delay: 0.4s; } .dot i:nth-child(3) { right: 0; bottom: 0; - -webkit-animation-delay: 0.8s; animation-delay: 0.8s; } .dot i:nth-child(4) { bottom: 0; left: 0; - -webkit-animation-delay: 1.2s; animation-delay: 1.2s; } @keyframes antRotate { to { - -webkit-transform: rotate(405deg); transform: rotate(405deg); } } - @-webkit-keyframes antRotate { + @keyframes antRotate { to { - -webkit-transform: rotate(405deg); transform: rotate(405deg); } } @keyframes antSpinMove { to { - opacity: 1; + opacity: 100%; } } - @-webkit-keyframes antSpinMove { + @keyframes antSpinMove { to { - opacity: 1; + opacity: 100%; } } </style> diff --git a/jest.config.mjs b/jest.config.mjs deleted file mode 100644 index 162e72b..0000000 --- a/jest.config.mjs +++ /dev/null @@ -1,36 +0,0 @@ -export default { - preset: 'ts-jest', - roots: ['<rootDir>/tests/'], - clearMocks: true, - moduleDirectories: ['node_modules', 'src'], - moduleFileExtensions: ['js', 'ts', 'vue', 'tsx', 'jsx', 'json', 'node'], - modulePaths: ['<rootDir>/src', '<rootDir>/node_modules'], - testMatch: [ - '**/tests/**/*.[jt]s?(x)', - '**/?(*.)+(spec|test).[tj]s?(x)', - '(/__tests__/.*|(\\.|/)(test|spec))\\.(js|ts)$', - ], - testPathIgnorePatterns: [ - '<rootDir>/tests/server/', - '<rootDir>/tests/__mocks__/', - '/node_modules/', - ], - transform: { - '^.+\\.tsx?$': 'ts-jest', - }, - transformIgnorePatterns: ['<rootDir>/tests/__mocks__/', '/node_modules/'], - // A map from regular expressions to module names that allow to stub out resources with a single module - moduleNameMapper: { - '\\.(vs|fs|vert|frag|glsl|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '<rootDir>/tests/__mocks__/fileMock.ts', - '\\.(sass|s?css|less)$': '<rootDir>/tests/__mocks__/styleMock.ts', - '\\?worker$': '<rootDir>/tests/__mocks__/workerMock.ts', - '^/@/(.*)$': '<rootDir>/src/$1', - }, - testEnvironment: 'jsdom', - verbose: true, - collectCoverage: false, - coverageDirectory: 'coverage', - collectCoverageFrom: ['src/**/*.{js,ts,vue}'], - coveragePathIgnorePatterns: ['^.+\\.d\\.ts$'], -}; diff --git a/mock/_util.ts b/mock/_util.ts index 6bc4a3a..63c940c 100644 --- a/mock/_util.ts +++ b/mock/_util.ts @@ -1,9 +1,10 @@ // Interface data format used to return a unified format +import { ResultEnum } from "/@/enums/httpEnum"; -export function resultSuccess<T = Recordable>(result: T, { message = "ok" } = {}) { +export function resultSuccess<T = Recordable>(data: T, { message = "ok" } = {}) { return { - code: 0, - result, + code: ResultEnum.SUCCESS, + data, message, type: "success", }; @@ -26,10 +27,13 @@ export function resultPageSuccess<T = any>( }; } -export function resultError(message = "Request failed", { code = -1, result = null } = {}) { +export function resultError( + message = "Request failed", + { code = ResultEnum.ERROR, result: data = null } = {}, +) { return { code, - result, + data, message, type: "error", }; @@ -37,11 +41,9 @@ export function resultError(message = "Request failed", { code = -1, result = nu export function pagination<T = any>(pageNo: number, pageSize: number, array: T[]): T[] { const offset = (pageNo - 1) * Number(pageSize); - const ret = - offset + Number(pageSize) >= array.length - ? array.slice(offset, array.length) - : array.slice(offset, offset + Number(pageSize)); - return ret; + return offset + Number(pageSize) >= array.length + ? array.slice(offset, array.length) + : array.slice(offset, offset + Number(pageSize)); } export interface requestParams { diff --git a/mock/demo/api-cascader.ts b/mock/demo/api-cascader.ts new file mode 100644 index 0000000..3bb89b3 --- /dev/null +++ b/mock/demo/api-cascader.ts @@ -0,0 +1,325 @@ +import { MockMethod } from 'vite-plugin-mock'; +import { resultSuccess } from '../_util'; + +const areaList: any[] = [ + { + id: '530825900854620160', + code: '430000', + parentCode: '100000', + levelType: 1, + name: '湖南省', + province: '湖南省', + city: null, + district: null, + town: null, + village: null, + parentPath: '430000', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 16:33:42', + customized: false, + usable: true, + }, + { + id: '530825900883980288', + code: '430100', + parentCode: '430000', + levelType: 2, + name: '长沙市', + province: '湖南省', + city: '长沙市', + district: null, + town: null, + village: null, + parentPath: '430000,430100', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 16:33:42', + customized: false, + usable: true, + }, + { + id: '530825900951089152', + code: '430102', + parentCode: '430100', + levelType: 3, + name: '芙蓉区', + province: '湖南省', + city: '长沙市', + district: '芙蓉区', + town: null, + village: null, + parentPath: '430000,430100,430102', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 16:33:42', + customized: false, + usable: true, + }, + { + id: '530825901014003712', + code: '430104', + parentCode: '430100', + levelType: 3, + name: '岳麓区', + province: '湖南省', + city: '长沙市', + district: '岳麓区', + town: null, + village: null, + parentPath: '430000,430100,430104', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 16:33:42', + customized: false, + usable: true, + }, + { + id: '530825900988837888', + code: '430103', + parentCode: '430100', + levelType: 3, + name: '天心区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: null, + village: null, + parentPath: '430000,430100,430103', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 16:33:42', + customized: false, + usable: true, + }, + { + id: '530826672489115648', + code: '430103002', + parentCode: '430103', + levelType: 4, + name: '坡子街街道', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: null, + parentPath: '430000,430100,430103,430103002', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-12-14 15:26:43', + customized: false, + usable: true, + }, + { + id: '530840241171607552', + code: '430103002001', + parentCode: '430103002', + levelType: 5, + name: '八角亭社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '八角亭社区', + parentPath: '430000,430100,430103,430103002,430103002001', + createTime: '2020-11-30 15:47:31', + updateTime: '2021-01-20 14:07:23', + customized: false, + usable: true, + }, + { + id: '530840241200967680', + code: '430103002002', + parentCode: '430103002', + levelType: 5, + name: '西牌楼社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '西牌楼社区', + parentPath: '430000,430100,430103,430103002,430103002002', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241230327808', + code: '430103002003', + parentCode: '430103002', + levelType: 5, + name: '太平街社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '太平街社区', + parentPath: '430000,430100,430103,430103002,430103002003', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241259687936', + code: '430103002005', + parentCode: '430103002', + levelType: 5, + name: '坡子街社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '坡子街社区', + parentPath: '430000,430100,430103,430103002,430103002005', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241284853760', + code: '430103002006', + parentCode: '430103002', + levelType: 5, + name: '青山祠社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '青山祠社区', + parentPath: '430000,430100,430103,430103002,430103002006', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241310019584', + code: '430103002007', + parentCode: '430103002', + levelType: 5, + name: '沙河社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '沙河社区', + parentPath: '430000,430100,430103,430103002,430103002007', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241381322752', + code: '430103002008', + parentCode: '430103002', + levelType: 5, + name: '碧湘社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '碧湘社区', + parentPath: '430000,430100,430103,430103002,430103002008', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241410682880', + code: '430103002009', + parentCode: '430103002', + levelType: 5, + name: '创远社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '创远社区', + parentPath: '430000,430100,430103,430103002,430103002009', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241431654400', + code: '430103002010', + parentCode: '430103002', + levelType: 5, + name: '楚湘社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '楚湘社区', + parentPath: '430000,430100,430103,430103002,430103002010', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241465208832', + code: '430103002011', + parentCode: '430103002', + levelType: 5, + name: '西湖社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '西湖社区', + parentPath: '430000,430100,430103,430103002,430103002011', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241502957568', + code: '430103002012', + parentCode: '430103002', + levelType: 5, + name: '登仁桥社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '登仁桥社区', + parentPath: '430000,430100,430103,430103002,430103002012', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, + { + id: '530840241553289216', + code: '430103002013', + parentCode: '430103002', + levelType: 5, + name: '文庙坪社区', + province: '湖南省', + city: '长沙市', + district: '天心区', + town: '坡子街街道', + village: '文庙坪社区', + parentPath: '430000,430100,430103,430103002,430103002013', + createTime: '2020-11-30 15:47:31', + updateTime: '2020-11-30 17:30:41', + customized: false, + usable: true, + }, +]; +export default [ + { + url: '/dev-api/cascader/getAreaRecord', + timeout: 1000, + method: 'post', + response: ({ body }) => { + const { parentCode } = body || {}; + if (!parentCode) { + return resultSuccess(areaList.filter((it) => it.code === '430000')); + } + return resultSuccess(areaList.filter((it) => it.parentCode === parentCode)); + }, + }, +] as MockMethod[]; diff --git a/mock/demo/select-demo.ts b/mock/demo/select-demo.ts new file mode 100644 index 0000000..cafb4aa --- /dev/null +++ b/mock/demo/select-demo.ts @@ -0,0 +1,28 @@ +import { MockMethod } from 'vite-plugin-mock'; +import { resultSuccess } from '../_util'; + +const demoList = (keyword, count = 20) => { + const result = { + list: [] as any[], + }; + for (let index = 0; index < count; index++) { + result.list.push({ + name: `${keyword ?? ''}选项${index}`, + id: `${index}`, + }); + } + return result; +}; + +export default [ + { + url: '/dev-api/select/getDemoOptions', + timeout: 1000, + method: 'get', + response: ({ query }) => { + const { keyword, count } = query; + console.log(keyword); + return resultSuccess(demoList(keyword, count)); + }, + }, +] as MockMethod[]; diff --git a/mock/demo/system.ts b/mock/demo/system.ts new file mode 100644 index 0000000..b1f80ba --- /dev/null +++ b/mock/demo/system.ts @@ -0,0 +1,202 @@ +import { MockMethod } from 'vite-plugin-mock'; +import { resultError, resultPageSuccess, resultSuccess } from '../_util'; + +const accountList = (() => { + const result: any[] = []; + for (let index = 0; index < 20; index++) { + result.push({ + id: `${index}`, + account: '@first', + email: '@email', + nickname: '@cname()', + role: '@first', + createTime: '@datetime', + remark: '@cword(10,20)', + 'status|1': ['0', '1'], + }); + } + return result; +})(); + +const roleList = (() => { + const result: any[] = []; + for (let index = 0; index < 4; index++) { + result.push({ + id: index + 1, + orderNo: `${index + 1}`, + roleName: ['超级管理员', '管理员', '文章管理员', '普通用户'][index], + roleValue: '@first', + createTime: '@datetime', + remark: '@cword(10,20)', + menu: [['0', '1', '2'], ['0', '1'], ['0', '2'], ['2']][index], + 'status|1': ['0', '1'], + }); + } + return result; +})(); + +const deptList = (() => { + const result: any[] = []; + for (let index = 0; index < 3; index++) { + result.push({ + id: `${index}`, + deptName: ['华东分部', '华南分部', '西北分部'][index], + orderNo: index + 1, + createTime: '@datetime', + remark: '@cword(10,20)', + 'status|1': ['0', '0', '1'], + children: (() => { + const children: any[] = []; + for (let j = 0; j < 4; j++) { + children.push({ + id: `${index}-${j}`, + deptName: ['研发部', '市场部', '商务部', '财务部'][j], + orderNo: j + 1, + createTime: '@datetime', + remark: '@cword(10,20)', + 'status|1': ['0', '1'], + parentDept: `${index}`, + children: undefined, + }); + } + return children; + })(), + }); + } + return result; +})(); + +const menuList = (() => { + const result: any[] = []; + for (let index = 0; index < 3; index++) { + result.push({ + id: `${index}`, + icon: ['ion:layers-outline', 'ion:git-compare-outline', 'ion:tv-outline'][index], + component: 'LAYOUT', + type: '0', + menuName: ['Dashboard', '权限管理', '功能'][index], + permission: '', + orderNo: index + 1, + createTime: '@datetime', + 'status|1': ['0', '0', '1'], + children: (() => { + const children: any[] = []; + for (let j = 0; j < 4; j++) { + children.push({ + id: `${index}-${j}`, + type: '1', + menuName: ['菜单1', '菜单2', '菜单3', '菜单4'][j], + icon: 'ion:document', + permission: ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index], + component: [ + '/dashboard/welcome/index', + '/dashboard/analysis/index', + '/dashboard/workbench/index', + '/dashboard/test/index', + ][j], + orderNo: j + 1, + createTime: '@datetime', + 'status|1': ['0', '1'], + parentMenu: `${index}`, + children: (() => { + const children: any[] = []; + for (let k = 0; k < 4; k++) { + children.push({ + id: `${index}-${j}-${k}`, + type: '2', + menuName: '按钮' + (j + 1) + '-' + (k + 1), + icon: '', + permission: + ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index] + + ':btn' + + (k + 1), + component: [ + '/dashboard/welcome/index', + '/dashboard/analysis/index', + '/dashboard/workbench/index', + '/dashboard/test/index', + ][j], + orderNo: j + 1, + createTime: '@datetime', + 'status|1': ['0', '1'], + parentMenu: `${index}-${j}`, + children: undefined, + }); + } + return children; + })(), + }); + } + return children; + })(), + }); + } + return result; +})(); + +export default [ + { + url: '/dev-api/system/getAccountList', + timeout: 100, + method: 'get', + response: ({ query }) => { + const { page = 1, pageSize = 20 } = query; + return resultPageSuccess(page, pageSize, accountList); + }, + }, + { + url: '/dev-api/system/getRoleListByPage', + timeout: 100, + method: 'get', + response: ({ query }) => { + const { page = 1, pageSize = 20 } = query; + return resultPageSuccess(page, pageSize, roleList); + }, + }, + { + url: '/dev-api/system/setRoleStatus', + timeout: 500, + method: 'post', + response: ({ query }) => { + const { id, status } = query; + return resultSuccess({ id, status }); + }, + }, + { + url: '/dev-api/system/getAllRoleList', + timeout: 100, + method: 'get', + response: () => { + return resultSuccess(roleList); + }, + }, + { + url: '/dev-api/system/getDeptList', + timeout: 100, + method: 'get', + response: () => { + return resultSuccess(deptList); + }, + }, + { + url: '/dev-api/system/getMenuList', + timeout: 100, + method: 'get', + response: () => { + return resultSuccess(menuList); + }, + }, + { + url: '/dev-api/system/accountExist', + timeout: 500, + method: 'post', + response: ({ body }) => { + const { account } = body || {}; + if (account && account.indexOf('admin') !== -1) { + return resultError('该字段不能包含admin'); + } else { + return resultSuccess(`${account} can use`); + } + }, + }, +] as MockMethod[]; diff --git a/mock/demo/table-demo.ts b/mock/demo/table-demo.ts new file mode 100644 index 0000000..aeb8eb1 --- /dev/null +++ b/mock/demo/table-demo.ts @@ -0,0 +1,52 @@ +import { MockMethod } from 'vite-plugin-mock'; +import { Random } from 'mockjs'; +import { resultPageSuccess } from '../_util'; + +function getRandomPics(count = 10): string[] { + const arr: string[] = []; + for (let i = 0; i < count; i++) { + arr.push(Random.image('800x600', Random.color(), Random.color(), Random.title())); + } + return arr; +} + +const demoList = (() => { + const result: any[] = []; + for (let index = 0; index < 200; index++) { + result.push({ + id: `${index}`, + beginTime: '@datetime', + endTime: '@datetime', + address: '@city()', + name: '@cname()', + name1: '@cname()', + name2: '@cname()', + name3: '@cname()', + name4: '@cname()', + name5: '@cname()', + name6: '@cname()', + name7: '@cname()', + name8: '@cname()', + avatar: Random.image('400x400', Random.color(), Random.color(), Random.first()), + imgArr: getRandomPics(Math.ceil(Math.random() * 3) + 1), + imgs: getRandomPics(Math.ceil(Math.random() * 3) + 1), + date: `@date('yyyy-MM-dd')`, + time: `@time('HH:mm')`, + 'no|100000-10000000': 100000, + 'status|1': ['normal', 'enable', 'disable'], + }); + } + return result; +})(); + +export default [ + { + url: '/dev-api/table/getDemoList', + timeout: 100, + method: 'get', + response: ({ query }) => { + const { page = 1, pageSize = 20 } = query; + return resultPageSuccess(page, pageSize, demoList); + }, + }, +] as MockMethod[]; diff --git a/mock/demo/tree-demo.ts b/mock/demo/tree-demo.ts new file mode 100644 index 0000000..666ca20 --- /dev/null +++ b/mock/demo/tree-demo.ts @@ -0,0 +1,38 @@ +import { MockMethod } from 'vite-plugin-mock'; +import { resultSuccess } from '../_util'; + +const demoTreeList = (keyword) => { + const result = { + list: [] as Recordable[], + }; + for (let index = 0; index < 5; index++) { + const children: Recordable[] = []; + for (let j = 0; j < 3; j++) { + children.push({ + title: `${keyword ?? ''}选项${index}-${j}`, + value: `${index}-${j}`, + key: `${index}-${j}`, + }); + } + result.list.push({ + title: `${keyword ?? ''}选项${index}`, + value: `${index}`, + key: `${index}`, + children, + }); + } + return result; +}; + +export default [ + { + url: '/dev-api/tree/getDemoOptions', + timeout: 1000, + method: 'get', + response: ({ query }) => { + const { keyword } = query; + console.log(keyword); + return resultSuccess(demoTreeList(keyword)); + }, + }, +] as MockMethod[]; diff --git a/mock/student/practice.ts b/mock/student/practice.ts index acac9d4..1a59f3e 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -29,8 +29,8 @@ export default [ timeout: 100, method: "get", response: ({ query }) => { - const { page = 1, pageSize = 10 } = query; - return resultPageSuccess(page, pageSize, getLectureRecordList()); + const { pageNum = 1, pageSize = 10 } = query; + return resultPageSuccess(pageNum, pageSize, getLectureRecordList()); }, }, ] as MockMethod[]; diff --git a/mock/sys/user.ts b/mock/sys/user.ts index 8a81d92..19f0576 100644 --- a/mock/sys/user.ts +++ b/mock/sys/user.ts @@ -111,4 +111,12 @@ export default [ return resultSuccess(undefined, { message: "Token has been destroyed" }); }, }, + { + url: "/dev-api/testRetry", + statusCode: 405, + method: "get", + response: () => { + return resultError("Error!"); + }, + }, ] as MockMethod[]; diff --git a/package.json b/package.json index 7b0eabf..a5a60db 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,13 @@ "url": "https://gitee.com/Suomm" }, "scripts": { - "bootstrap": "yarn install", + "commit": "czg", + "bootstrap": "pnpm install", "serve": "npm run dev", "dev": "vite", "build": "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts", "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", - "build:no-cache": "yarn clean:cache && npm run build", + "build:no-cache": "pnpm clean:cache && npm run build", "report": "cross-env REPORT=true npm run build", "type:check": "vue-tsc --noEmit --skipLibCheck", "preview": "npm run build && vite preview", @@ -23,119 +24,131 @@ "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix", "lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"", "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", - "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js", + "lint:lint-staged": "lint-staged", "test:unit": "jest", - "test:unit-coverage": "jest --coverage", "test:gzip": "npx http-server dist --cors --gzip -c-1", "test:br": "npx http-server dist --cors --brotli -c-1", - "reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", + "reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", "prepare": "husky install", "gen:icon": "esno ./build/generate/icon/index.ts" }, "dependencies": { "@ant-design/colors": "^6.0.0", - "@ant-design/icons-vue": "^6.0.1", - "@iconify/iconify": "^2.0.4", - "@vueuse/core": "^6.7.4", - "@vueuse/shared": "^6.7.4", - "@zxcvbn-ts/core": "^1.0.0-beta.0", - "ant-design-vue": "2.2.8", - "axios": "^0.24.0", + "@ant-design/icons-vue": "^6.1.0", + "@iconify/iconify": "^2.2.1", + "@logicflow/core": "^1.1.13", + "@logicflow/extension": "^1.1.13", + "@vue/runtime-core": "^3.2.33", + "@vue/shared": "^3.2.33", + "@vueuse/core": "^8.3.0", + "@vueuse/shared": "^8.3.0", + "@zxcvbn-ts/core": "^2.0.1", + "ant-design-vue": "^3.2.0", + "axios": "^0.26.1", + "codemirror": "^5.65.3", + "cropperjs": "^1.5.12", "crypto-js": "^4.1.1", - "echarts": "^5.2.2", + "dayjs": "^1.11.1", + "echarts": "^5.3.2", + "intro.js": "^5.1.0", "lodash-es": "^4.17.21", "mockjs": "^1.1.0", - "moment": "^2.29.1", "nprogress": "^0.2.0", "path-to-regexp": "^6.2.0", - "pinia": "2.0.0", - "qrcode": "^1.4.4", - "qs": "^6.10.1", + "pinia": "2.0.12", + "print-js": "^1.6.0", + "qrcode": "^1.5.0", + "qs": "^6.10.3", "resize-observer-polyfill": "^1.5.1", - "sortablejs": "^1.14.0", - "vue": "^3.2.21", + "showdown": "^2.1.0", + "sortablejs": "^1.15.0", + "tinymce": "^5.10.3", + "vditor": "^3.8.13", + "vue": "^3.2.33", "vue-i18n": "^9.1.9", - "vue-router": "^4.0.12", - "vue-types": "^4.1.1" + "vue-json-pretty": "^2.0.6", + "vue-router": "^4.0.14", + "vue-types": "^4.1.1", + "xlsx": "^0.18.5" }, "devDependencies": { - "@commitlint/cli": "^14.1.0", - "@commitlint/config-conventional": "^14.1.0", - "@iconify/json": "^1.1.422", - "@purge-icons/generated": "^0.7.0", + "@commitlint/cli": "^16.2.3", + "@commitlint/config-conventional": "^16.2.1", + "@iconify/json": "^2.1.30", + "@purge-icons/generated": "^0.8.1", "@types/codemirror": "^5.60.5", - "@types/crypto-js": "^4.0.2", + "@types/crypto-js": "^4.1.1", "@types/fs-extra": "^9.0.13", - "@types/inquirer": "^8.1.3", + "@types/inquirer": "^8.2.1", "@types/intro.js": "^3.0.2", - "@types/jest": "^27.0.2", - "@types/lodash-es": "^4.17.5", - "@types/mockjs": "^1.0.4", - "@types/node": "^16.11.6", + "@types/lodash-es": "^4.17.6", + "@types/mockjs": "^1.0.6", + "@types/node": "^17.0.25", "@types/nprogress": "^0.2.0", - "@types/qrcode": "^1.4.1", + "@types/qrcode": "^1.4.2", "@types/qs": "^6.9.7", "@types/showdown": "^1.9.4", "@types/sortablejs": "^1.10.7", - "@typescript-eslint/eslint-plugin": "^5.3.0", - "@typescript-eslint/parser": "^5.3.0", - "@vitejs/plugin-legacy": "^1.6.2", - "@vitejs/plugin-vue": "^1.9.4", - "@vitejs/plugin-vue-jsx": "^1.2.0", - "@vue/compiler-sfc": "3.2.21", - "@vue/test-utils": "^2.0.0-rc.16", - "autoprefixer": "^10.4.0", - "commitizen": "^4.2.4", - "conventional-changelog-cli": "^2.1.1", + "@typescript-eslint/eslint-plugin": "^5.20.0", + "@typescript-eslint/parser": "^5.20.0", + "@vitejs/plugin-legacy": "^1.8.1", + "@vitejs/plugin-vue": "^2.3.1", + "@vitejs/plugin-vue-jsx": "^1.3.10", + "@vue/compiler-sfc": "^3.2.33", + "@vue/test-utils": "^2.0.0-rc.21", + "autoprefixer": "^10.4.4", + "conventional-changelog-cli": "^2.2.2", "cross-env": "^7.0.3", - "dotenv": "^10.0.0", - "eslint": "^8.1.0", - "eslint-config-prettier": "^8.3.0", - "eslint-define-config": "^1.1.2", - "eslint-plugin-jest": "^25.2.2", + "cz-git": "^1.3.9", + "czg": "^1.3.9", + "dotenv": "^16.0.0", + "eslint": "^8.13.0", + "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-vue": "^8.0.3", - "esno": "^0.10.1", - "fs-extra": "^10.0.0", + "eslint-plugin-vue": "^8.6.0", + "esno": "^0.14.1", + "fs-extra": "^10.1.0", "husky": "^7.0.4", - "inquirer": "^8.2.0", - "jest": "^27.3.1", + "inquirer": "^8.2.2", "less": "^4.1.2", - "lint-staged": "11.2.6", + "lint-staged": "12.3.7", "npm-run-all": "^4.1.5", - "postcss": "^8.3.11", - "postcss-html": "^1.2.0", - "postcss-less": "^5.0.0", - "prettier": "^2.4.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.12", + "postcss-html": "^1.4.1", + "postcss-less": "^6.0.0", + "prettier": "^2.6.2", "rimraf": "^3.0.2", - "rollup-plugin-visualizer": "^5.5.2", - "stylelint": "^14.0.1", - "stylelint-config-html": "^1.0.0", + "rollup": "^2.70.2", + "rollup-plugin-visualizer": "^5.6.0", + "stylelint": "^14.7.1", "stylelint-config-prettier": "^9.0.3", - "stylelint-config-standard": "^23.0.0", + "stylelint-config-recommended": "^7.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^25.0.0", "stylelint-order": "^5.0.0", - "ts-jest": "^27.0.7", - "ts-node": "^10.4.0", - "typescript": "^4.4.4", - "vite": "^2.6.13", - "vite-plugin-compression": "^0.3.5", - "vite-plugin-html": "^2.1.1", - "vite-plugin-imagemin": "^0.4.6", + "ts-node": "^10.7.0", + "typescript": "^4.6.3", + "vite": "^2.9.5", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-imagemin": "^0.6.1", + "vite-plugin-mkcert": "^1.6.0", "vite-plugin-mock": "^2.9.6", - "vite-plugin-purge-icons": "^0.7.0", - "vite-plugin-pwa": "^0.11.3", - "vite-plugin-style-import": "^1.3.0", - "vite-plugin-svg-icons": "^1.0.5", - "vite-plugin-theme": "^0.8.1", - "vite-plugin-vue-setup-extend": "^0.1.0", - "vite-plugin-windicss": "^1.4.12", - "vue-eslint-parser": "^8.0.1", - "vue-tsc": "^0.28.10" + "vite-plugin-purge-icons": "^0.8.1", + "vite-plugin-pwa": "^0.11.13", + "vite-plugin-style-import": "^2.0.0", + "vite-plugin-svg-icons": "^2.0.1", + "vite-plugin-theme": "^0.8.6", + "vite-plugin-vue-setup-extend": "^0.4.0", + "vite-plugin-windicss": "^1.8.4", + "vue-eslint-parser": "^8.3.0", + "vue-tsc": "^0.33.9" }, "resolutions": { - "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it", "bin-wrapper": "npm:bin-wrapper-china", - "rollup": "^2.56.3" + "rollup": "^2.56.3", + "gifsicle": "5.2.0" }, "repository": { "type": "git", @@ -148,5 +161,34 @@ "homepage": "https://gitee.com/Suomm/tutor-ui", "engines": { "node": "^12 || >=14" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx}": [ + "eslint --fix", + "prettier --write" + ], + "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": [ + "prettier --write--parser json" + ], + "package.json": [ + "prettier --write" + ], + "*.vue": [ + "eslint --fix", + "prettier --write", + "stylelint --fix" + ], + "*.{scss,less,styl,html}": [ + "stylelint --fix", + "prettier --write" + ], + "*.md": [ + "prettier --write" + ] + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } } } diff --git a/src/App.vue b/src/App.vue index 008ac27..a4028a7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -12,6 +12,7 @@ import { useTitle } from "/@/hooks/web/useTitle"; import { useLocale } from "/@/locales/useLocale"; + import "dayjs/locale/zh-cn"; // support Multi-language const { getAntdLocale } = useLocale(); diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts index 17fadaa..506e40f 100644 --- a/src/api/sys/user.ts +++ b/src/api/sys/user.ts @@ -8,6 +8,7 @@ enum Api { Logout = "/logout", GetUserInfo = "/getUserInfo", GetPermCode = "/getPermCode", + TestRetry = "/testRetry", } /** @@ -39,3 +40,16 @@ export function getPermCode() { export function doLogout() { return defHttp.get({ url: Api.Logout }); } + +export function testRetry() { + return defHttp.get( + { url: Api.TestRetry }, + { + retryRequest: { + isOpenRetry: true, + count: 5, + waitTime: 1000, + }, + }, + ); +} diff --git a/src/components/Application/src/AppLocalePicker.vue b/src/components/Application/src/AppLocalePicker.vue index 49fe8d4..55759d2 100644 --- a/src/components/Application/src/AppLocalePicker.vue +++ b/src/components/Application/src/AppLocalePicker.vue @@ -4,11 +4,11 @@ --> <template> <Dropdown - placement="bottomCenter" + placement="bottom" :trigger="['click']" :dropMenuList="localeList" :selectedKeys="selectedKeys" - @menuEvent="handleMenuEvent" + @menu-event="handleMenuEvent" overlayClassName="app-locale-picker-overlay" > <span class="cursor-pointer flex items-center"> diff --git a/src/components/CardList/src/CardList.vue b/src/components/CardList/src/CardList.vue index 9bf651c..0385a2d 100644 --- a/src/components/CardList/src/CardList.vue +++ b/src/components/CardList/src/CardList.vue @@ -1,3 +1,80 @@ +<template> + <div class="p-2"> + <div class="p-4 mb-2 bg-white"> + <BasicForm @register="registerForm" /> + </div> + <div class="p-2 bg-white"> + <List + :grid="{ gutter: 5, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: grid }" + :data-source="data" + :pagination="paginationProp" + > + <template #header> + <div class="flex justify-end space-x-2" + ><slot name="header"></slot> + <Tooltip> + <template #title> + <div class="w-50">每行显示数量</div + ><Slider + id="slider" + v-bind="sliderProp" + v-model:value="grid" + @change="sliderChange" + /></template> + <Button><TableOutlined /></Button> + </Tooltip> + <Tooltip @click="fetch"> + <template #title>刷新</template> + <Button><RedoOutlined /></Button> + </Tooltip> + </div> + </template> + <template #renderItem="{ item }"> + <ListItem> + <Card> + <template #title></template> + <template #cover> + <div :class="height"> + <Image :src="item.imgs[0]" /> + </div> + </template> + <template #actions> + <!-- <SettingOutlined key="setting" />--> + <EditOutlined key="edit" /> + <Dropdown + :trigger="['hover']" + :dropMenuList="[ + { + text: '删除', + event: '1', + popConfirm: { + title: '是否确认删除', + confirm: handleDelete.bind(null, item.id), + }, + }, + ]" + popconfirm + > + <EllipsisOutlined key="ellipsis" /> + </Dropdown> + </template> + + <CardMeta> + <template #title> + <TypographyText :content="item.name" :ellipsis="{ tooltip: item.address }" /> + </template> + <template #avatar> + <Avatar :src="item.avatar" /> + </template> + <template #description>{{ item.time }}</template> + </CardMeta> + </Card> + </ListItem> + </template> + </List> + </div> + </div> +</template> <script lang="ts" setup> import { computed, onMounted, ref } from "vue"; import { @@ -9,6 +86,7 @@ import { List, Card, Image, Typography, Tooltip, Slider, Avatar } from "ant-design-vue"; import { Dropdown } from "/@/components/Dropdown"; import { BasicForm, useForm } from "/@/components/Form"; + import { propTypes } from "/@/utils/propTypes"; import { Button } from "/@/components/Button"; import { isFunction } from "/@/utils/is"; import { useSlider, grid } from "./data"; @@ -20,15 +98,9 @@ // 组件接收参数 const props = defineProps({ // 请求API的参数 - params: { - type: Object, - default: () => ({}), - }, + params: propTypes.object.def({}), //api - api: { - type: Function, - default: null, - }, + api: propTypes.func, }); //暴露内部方法 const emit = defineEmits(["getMethod", "delete"]); @@ -103,81 +175,3 @@ emit("delete", id); } </script> - -<template> - <div class="p-2"> - <div class="p-4 mb-2 bg-white"> - <BasicForm @register="registerForm" /> - </div> - {{ sliderProp.width }} - <div class="p-2 bg-white"> - <List - :grid="{ gutter: 5, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: grid }" - :data-source="data" - :pagination="paginationProp" - > - <template #header> - <div class="flex justify-end space-x-2" - ><slot name="header"></slot> - <Tooltip> - <template #title> - <div class="w-50">每行显示数量</div - ><Slider - id="slider" - v-bind="sliderProp" - v-model:value="grid" - @change="sliderChange" - /></template> - <Button><TableOutlined /></Button> - </Tooltip> - <Tooltip @click="fetch"> - <template #title>刷新</template> - <Button><RedoOutlined /></Button> - </Tooltip> - </div> - </template> - <template #renderItem="{ item }"> - <ListItem> - <Card> - <template #title></template> - <template #cover> - <div :class="height"> - <Image :src="item.imgs[0]" /> - </div> - </template> - <template #actions> - <EditOutlined key="edit" /> - <Dropdown - :trigger="['hover']" - :dropMenuList="[ - { - text: '删除', - event: '1', - popConfirm: { - title: '是否确认删除', - confirm: handleDelete.bind(null, item.id), - }, - }, - ]" - popconfirm - > - <EllipsisOutlined key="ellipsis" /> - </Dropdown> - </template> - - <CardMeta> - <template #title> - <TypographyText :content="item.name" :ellipsis="{ tooltip: item.address }" /> - </template> - <template #avatar> - <Avatar :src="item.avatar" /> - </template> - <template #description>{{ item.time }}</template> - </CardMeta> - </Card> - </ListItem> - </template> - </List> - </div> - </div> -</template> diff --git a/src/components/CardList/src/data.ts b/src/components/CardList/src/data.ts index 2dd2d24..6d12f2e 100644 --- a/src/components/CardList/src/data.ts +++ b/src/components/CardList/src/data.ts @@ -1,5 +1,5 @@ import { ref } from "vue"; -//每行个数 +// 每行个数 export const grid = ref(12); // slider属性 export const useSlider = (min = 6, max = 12) => { diff --git a/src/components/CodeEditor/src/codemirror/codemirror.css b/src/components/CodeEditor/src/codemirror/codemirror.css index 8e9cbd8..a200180 100644 --- a/src/components/CodeEditor/src/codemirror/codemirror.css +++ b/src/components/CodeEditor/src/codemirror/codemirror.css @@ -53,7 +53,7 @@ color: var(--comment); text-align: right; white-space: nowrap; - opacity: 60%; + opacity: 0.6; } .CodeMirror-guttermarker { @@ -89,8 +89,8 @@ top: -0.1em; display: inline-block; font-size: 0.8em; - content: '>'; - opacity: 80%; + content: ">"; + opacity: 0.8; transform: rotate(90deg); transition: transform 0.2s; } @@ -516,7 +516,7 @@ div.CodeMirror-dragcursors { /* See issue #2901 */ .cm-tab-wrap-hack::after { - content: ''; + content: ""; } /* Help users use markselection to safely style text background */ diff --git a/src/components/Container/src/collapse/CollapseContainer.vue b/src/components/Container/src/collapse/CollapseContainer.vue index dd5afe8..4cfacfd 100644 --- a/src/components/Container/src/collapse/CollapseContainer.vue +++ b/src/components/Container/src/collapse/CollapseContainer.vue @@ -1,6 +1,6 @@ <template> <div :class="prefixCls"> - <CollapseHeader v-bind="$props" :prefixCls="prefixCls" :show="show" @expand="handleExpand"> + <CollapseHeader v-bind="props" :prefixCls="prefixCls" :show="show" @expand="handleExpand"> <template #title> <slot name="title"></slot> </template> @@ -25,6 +25,7 @@ <script lang="ts" setup> import type { PropType } from "vue"; import { ref } from "vue"; + import { isNil } from "lodash-es"; // component import { Skeleton } from "ant-design-vue"; import { CollapseTransition } from "/@/components/Transition"; @@ -66,13 +67,17 @@ /** * @description: Handling development events */ - function handleExpand() { - show.value = !show.value; + function handleExpand(val: boolean) { + show.value = isNil(val) ? !show.value : val; if (props.triggerWindowResize) { // 200 milliseconds here is because the expansion has animation, useTimeoutFn(triggerWindowResize, 200); } } + + defineExpose({ + handleExpand, + }); </script> <style lang="less"> @prefix-cls: ~"@{namespace}-collapse-container"; diff --git a/src/components/ContextMenu/src/ContextMenu.vue b/src/components/ContextMenu/src/ContextMenu.vue index e97a478..16946e5 100644 --- a/src/components/ContextMenu/src/ContextMenu.vue +++ b/src/components/ContextMenu/src/ContextMenu.vue @@ -1,6 +1,6 @@ <script lang="tsx"> import type { ContextMenuItem, ItemContentProps, Axis } from "./typing"; - import type { FunctionalComponent, CSSProperties } from "vue"; + import type { FunctionalComponent, CSSProperties, PropType } from "vue"; import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from "vue"; import Icon from "/@/components/Icon"; import { Menu, Divider } from "ant-design-vue"; @@ -60,9 +60,11 @@ const top = body.clientHeight < y + menuHeight ? y - menuHeight : y; return { ...styles, + position: "absolute", width: `${width}px`, left: `${left + 1}px`, top: `${top + 1}px`, + zIndex: 9999, }; }); @@ -87,7 +89,8 @@ } function renderMenuItem(items: ContextMenuItem[]) { - return items.map((item) => { + const visibleItems = items.filter((item) => !item.hidden); + return visibleItems.map((item) => { const { disabled, label, children, divider = false } = item; const contentProps = { @@ -124,15 +127,11 @@ } const { items } = props; return ( - <Menu - inlineIndent={12} - mode="vertical" - class={prefixCls} - ref={wrapRef} - style={unref(getStyle)} - > - {renderMenuItem(items)} - </Menu> + <div class={prefixCls}> + <Menu inlineIndent={12} mode="vertical" ref={wrapRef} style={unref(getStyle)}> + {renderMenuItem(items)} + </Menu> + </div> ); }; }, @@ -185,6 +184,9 @@ background-clip: padding-box; user-select: none; + &__item { + margin: 0 !important; + } .item-style(); .ant-divider { diff --git a/src/components/ContextMenu/src/typing.ts b/src/components/ContextMenu/src/typing.ts index 899d36b..63d3d37 100644 --- a/src/components/ContextMenu/src/typing.ts +++ b/src/components/ContextMenu/src/typing.ts @@ -6,6 +6,7 @@ export interface Axis { export interface ContextMenuItem { label: string; icon?: string; + hidden?: boolean; disabled?: boolean; handler?: Fn; divider?: boolean; diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue index b7eae14..ad60fd7 100644 --- a/src/components/Cropper/src/CropperAvatar.vue +++ b/src/components/Cropper/src/CropperAvatar.vue @@ -22,7 +22,7 @@ <CopperModal @register="register" - @uploadSuccess="handleUploadSuccess" + @upload-success="handleUploadSuccess" :uploadApi="uploadApi" :src="sourceValue" /> diff --git a/src/components/Description/src/Description.vue b/src/components/Description/src/Description.vue index 06b9afd..c3f17e4 100644 --- a/src/components/Description/src/Description.vue +++ b/src/components/Description/src/Description.vue @@ -3,7 +3,7 @@ import type { DescriptionsProps } from "ant-design-vue/es/descriptions/index"; import type { CSSProperties } from "vue"; import type { CollapseContainerOptions } from "/@/components/Container/index"; - import { defineComponent, computed, ref, unref } from "vue"; + import { defineComponent, computed, ref, unref, toRefs } from "vue"; import { get } from "lodash-es"; import { Descriptions } from "ant-design-vue"; import { CollapseContainer } from "/@/components/Container/index"; @@ -121,6 +121,9 @@ return null; } const getField = get(_data, field); + if (getField && !toRefs(_data).hasOwnProperty(field)) { + return isFunction(render) ? render("", _data) : ""; + } return isFunction(render) ? render(getField, _data) : getField ?? ""; }; diff --git a/src/components/Drawer/src/BasicDrawer.vue b/src/components/Drawer/src/BasicDrawer.vue index 609e64b..39ab3c9 100644 --- a/src/components/Drawer/src/BasicDrawer.vue +++ b/src/components/Drawer/src/BasicDrawer.vue @@ -94,7 +94,7 @@ opt.width = "100%"; } const detailCls = `${prefixCls}__detail`; - opt.wrapClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; + opt.class = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; if (!getContainer) { // TODO type error? diff --git a/src/components/Drawer/src/components/DrawerFooter.vue b/src/components/Drawer/src/components/DrawerFooter.vue index efe525c..a56c67b 100644 --- a/src/components/Drawer/src/components/DrawerFooter.vue +++ b/src/components/Drawer/src/components/DrawerFooter.vue @@ -47,7 +47,7 @@ const heightStr = `${props.height}`; return { height: heightStr, - lineHeight: heightStr, + lineHeight: `calc(${heightStr} - 1px)`, }; }); diff --git a/src/components/Drawer/src/typing.ts b/src/components/Drawer/src/typing.ts index 1b3e700..ee3ed3d 100644 --- a/src/components/Drawer/src/typing.ts +++ b/src/components/Drawer/src/typing.ts @@ -128,13 +128,12 @@ export interface DrawerProps extends DrawerFooterProps { * @type any (string | slot) */ title?: VNodeChild | JSX.Element; - /** * The class name of the container of the Drawer dialog. * @type string */ wrapClassName?: string; - + class?: string; /** * Style of wrapper element which **contains mask** compare to `drawerStyle` * @type object diff --git a/src/components/Excel/src/Export2Excel.ts b/src/components/Excel/src/Export2Excel.ts index 3ac4bb3..d618c4a 100644 --- a/src/components/Excel/src/Export2Excel.ts +++ b/src/components/Excel/src/Export2Excel.ts @@ -1,4 +1,4 @@ -import xlsx from "xlsx"; +import * as xlsx from "xlsx"; import type { WorkBook } from "xlsx"; import type { JsonToSheet, AoAToSheet } from "./typing"; diff --git a/src/components/Excel/src/ImportExcel.vue b/src/components/Excel/src/ImportExcel.vue index 7df38ba..996bfdd 100644 --- a/src/components/Excel/src/ImportExcel.vue +++ b/src/components/Excel/src/ImportExcel.vue @@ -14,7 +14,7 @@ </template> <script lang="ts"> import { defineComponent, ref, unref } from "vue"; - import XLSX from "xlsx"; + import * as XLSX from "xlsx"; import { dateUtil } from "/@/utils/dateUtil"; import type { ExcelData } from "./typing"; @@ -31,6 +31,11 @@ type: Number, default: 8, }, + // 是否直接返回选中文件 + isReturnFile: { + type: Boolean, + default: false, + }, }, emits: ["success", "error"], setup(props, { emit }) { @@ -140,6 +145,10 @@ const files = e && (e.target as HTMLInputElement).files; const rawFile = files && files[0]; // only setting files[0] if (!rawFile) return; + if (props.isReturnFile) { + emit("success", rawFile); + return; + } upload(rawFile); } diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index cba2535..ed5b80a 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -9,7 +9,9 @@ export { useForm } from "./src/hooks/useForm"; export { default as ApiSelect } from "./src/components/ApiSelect.vue"; export { default as RadioButtonGroup } from "./src/components/RadioButtonGroup.vue"; export { default as ApiTreeSelect } from "./src/components/ApiTreeSelect.vue"; +export { default as ApiTree } from "./src/components/ApiTree.vue"; export { default as ApiRadioGroup } from "./src/components/ApiRadioGroup.vue"; export { default as ApiCascader } from "./src/components/ApiCascader.vue"; +export { default as ApiTransfer } from "./src/components/ApiTransfer.vue"; export { BasicForm }; diff --git a/src/components/Form/src/BasicForm.vue b/src/components/Form/src/BasicForm.vue index 8d2542d..d109c5a 100644 --- a/src/components/Form/src/BasicForm.vue +++ b/src/components/Form/src/BasicForm.vue @@ -58,15 +58,17 @@ import { createFormContext } from "./hooks/useFormContext"; import { useAutoFocus } from "./hooks/useAutoFocus"; import { useModalContext } from "/@/components/Modal"; + import { useDebounceFn } from "@vueuse/core"; import { basicProps } from "./props"; import { useDesign } from "/@/hooks/web/useDesign"; + import { cloneDeep } from "lodash-es"; export default defineComponent({ name: "BasicForm", components: { FormItem, Form, Row, FormAction }, props: basicProps, - emits: ["advanced-change", "reset", "submit", "register"], + emits: ["advanced-change", "reset", "submit", "register", "field-value-change"], setup(props, { emit, attrs }) { const formModel = reactive<Recordable>({}); const modalFn = useModalContext(); @@ -122,7 +124,7 @@ if (!Array.isArray(defaultValue)) { schema.defaultValue = dateUtil(defaultValue); } else { - const def: moment.Moment[] = []; + const def: any[] = []; defaultValue.forEach((item) => { def.push(dateUtil(item)); }); @@ -131,9 +133,11 @@ } } if (unref(getProps).showAdvancedButton) { - return schemas.filter((schema) => schema.component !== "Divider") as FormSchema[]; + return cloneDeep( + schemas.filter((schema) => schema.component !== "Divider") as FormSchema[], + ); } else { - return schemas as FormSchema[]; + return cloneDeep(schemas as FormSchema[]); } }); @@ -225,6 +229,14 @@ }, ); + watch( + () => formModel, + useDebounceFn(() => { + unref(getProps).submitOnChange && handleSubmit(); + }, 300), + { deep: true }, + ); + async function setProps(formProps: Partial<FormProps>): Promise<void> { propsRef.value = deepMerge(unref(propsRef) || {}, formProps); } @@ -235,6 +247,7 @@ if (!validateTrigger || validateTrigger === "change") { validateFields([key]).catch((_) => {}); } + emit("field-value-change", key, value); } function handleEnterPress(e: KeyboardEvent) { diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts index 5ec64b6..81d9110 100644 --- a/src/components/Form/src/componentMap.ts +++ b/src/components/Form/src/componentMap.ts @@ -24,8 +24,10 @@ import { import ApiRadioGroup from "./components/ApiRadioGroup.vue"; import RadioButtonGroup from "./components/RadioButtonGroup.vue"; import ApiSelect from "./components/ApiSelect.vue"; +import ApiTree from "./components/ApiTree.vue"; import ApiTreeSelect from "./components/ApiTreeSelect.vue"; import ApiCascader from "./components/ApiCascader.vue"; +import ApiTransfer from "./components/ApiTransfer.vue"; import { BasicUpload } from "/@/components/Upload"; import { StrengthMeter } from "/@/components/StrengthMeter"; import { IconPicker } from "/@/components/Icon"; @@ -43,6 +45,7 @@ componentMap.set("AutoComplete", AutoComplete); componentMap.set("Select", Select); componentMap.set("ApiSelect", ApiSelect); +componentMap.set("ApiTree", ApiTree); componentMap.set("TreeSelect", TreeSelect); componentMap.set("ApiTreeSelect", ApiTreeSelect); componentMap.set("ApiRadioGroup", ApiRadioGroup); @@ -55,6 +58,7 @@ componentMap.set("ApiCascader", ApiCascader); componentMap.set("Cascader", Cascader); componentMap.set("Slider", Slider); componentMap.set("Rate", Rate); +componentMap.set("ApiTransfer", ApiTransfer); componentMap.set("DatePicker", DatePicker); componentMap.set("MonthPicker", DatePicker.MonthPicker); diff --git a/src/components/Form/src/components/ApiCascader.vue b/src/components/Form/src/components/ApiCascader.vue index bc6de8c..0bbecdc 100644 --- a/src/components/Form/src/components/ApiCascader.vue +++ b/src/components/Form/src/components/ApiCascader.vue @@ -26,7 +26,7 @@ import { get, omit } from "lodash-es"; import { useRuleFormItem } from "/@/hooks/component/useFormItem"; import { LoadingOutlined } from "@ant-design/icons-vue"; - + import { useI18n } from "/@/hooks/web/useI18n"; interface Option { value: string; label: string; @@ -76,7 +76,7 @@ const loading = ref<boolean>(false); const emitData = ref<any[]>([]); const isFirstLoad = ref(true); - + const { t } = useI18n(); // Embedded in the form, just use the hook binding to perform form verification const [state] = useRuleFormItem(props, "value", "change", emitData); @@ -188,6 +188,7 @@ state, options, loading, + t, handleChange, loadData, handleRenderDisplay, diff --git a/src/components/Form/src/components/ApiSelect.vue b/src/components/Form/src/components/ApiSelect.vue index 2fb995a..1dea812 100644 --- a/src/components/Form/src/components/ApiSelect.vue +++ b/src/components/Form/src/components/ApiSelect.vue @@ -1,6 +1,6 @@ <template> <Select - @dropdownVisibleChange="handleFetch" + @dropdown-visible-change="handleFetch" v-bind="$attrs" @change="handleChange" :options="getOptions" @@ -57,6 +57,7 @@ labelField: propTypes.string.def("label"), valueField: propTypes.string.def("value"), immediate: propTypes.bool.def(true), + alwaysLoad: propTypes.bool.def(false), }, emits: ["options-change", "change"], setup(props, { emit }) { @@ -87,7 +88,7 @@ }); watchEffect(() => { - props.immediate && fetch(); + props.immediate && !props.alwaysLoad && fetch(); }); watch( @@ -121,10 +122,14 @@ } } - async function handleFetch() { - if (!props.immediate && unref(isFirstLoad)) { - await fetch(); - isFirstLoad.value = false; + async function handleFetch(visible) { + if (visible) { + if (props.alwaysLoad) { + await fetch(); + } else if (!props.immediate && unref(isFirstLoad)) { + await fetch(); + isFirstLoad.value = false; + } } } diff --git a/src/components/Form/src/components/ApiTransfer.vue b/src/components/Form/src/components/ApiTransfer.vue new file mode 100644 index 0000000..75f552e --- /dev/null +++ b/src/components/Form/src/components/ApiTransfer.vue @@ -0,0 +1,135 @@ +<template> + <Transfer + :data-source="getdataSource" + show-search + :filter-option="filterOption" + :render="(item) => item.title" + :showSelectAll="showSelectAll" + :selectedKeys="selectedKeys" + :targetKeys="getTargetKeys" + :showSearch="showSearch" + @change="handleChange" + /> +</template> + +<script lang="ts"> + import { computed, defineComponent, watch, ref, unref, watchEffect } from "vue"; + import { Transfer } from "ant-design-vue"; + import { isFunction } from "/@/utils/is"; + import { get, omit } from "lodash-es"; + import { propTypes } from "/@/utils/propTypes"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { TransferDirection, TransferItem } from "ant-design-vue/lib/transfer"; + export default defineComponent({ + name: "ApiTransfer", + components: { Transfer }, + props: { + value: { type: Array<string> }, + api: { + type: Function as PropType<(arg?: Recordable) => Promise<TransferItem[]>>, + default: null, + }, + params: { type: Object }, + dataSource: { type: Array<TransferItem> }, + immediate: propTypes.bool.def(true), + alwaysLoad: propTypes.bool.def(false), + afterFetch: { type: Function as PropType<Fn> }, + resultField: propTypes.string.def(""), + labelField: propTypes.string.def("title"), + valueField: propTypes.string.def("key"), + showSearch: { type: Boolean, default: false }, + disabled: { type: Boolean, default: false }, + filterOption: { + type: Function as PropType<(inputValue: string, item: TransferItem) => boolean>, + }, + selectedKeys: { type: Array<string> }, + showSelectAll: { type: Boolean, default: false }, + targetKeys: { type: Array<string> }, + }, + emits: ["options-change", "change"], + setup(props, { attrs, emit }) { + const _dataSource = ref<TransferItem[]>([]); + const _targetKeys = ref<string[]>([]); + const { t } = useI18n(); + + const getAttrs = computed(() => { + return { + ...(!props.api ? { dataSource: unref(_dataSource) } : {}), + ...attrs, + }; + }); + const getdataSource = computed(() => { + const { labelField, valueField } = props; + + return unref(_dataSource).reduce((prev, next: Recordable) => { + if (next) { + prev.push({ + ...omit(next, [labelField, valueField]), + title: next[labelField], + key: next[valueField], + }); + } + return prev; + }, [] as TransferItem[]); + }); + const getTargetKeys = computed<string[]>(() => { + if (unref(_targetKeys).length > 0) { + return unref(_targetKeys); + } + if (Array.isArray(props.value)) { + return props.value; + } + return []; + }); + + function handleChange(keys: string[], direction: TransferDirection, moveKeys: string[]) { + _targetKeys.value = keys; + console.log(direction); + console.log(moveKeys); + emit("change", keys); + } + + watchEffect(() => { + props.immediate && !props.alwaysLoad && fetch(); + }); + + watch( + () => props.params, + () => { + fetch(); + }, + { deep: true }, + ); + + async function fetch() { + const api = props.api; + if (!api || !isFunction(api)) { + if (Array.isArray(props.dataSource)) { + _dataSource.value = props.dataSource; + } + return; + } + _dataSource.value = []; + try { + const res = await api(props.params); + if (Array.isArray(res)) { + _dataSource.value = res; + emitChange(); + return; + } + if (props.resultField) { + _dataSource.value = get(res, props.resultField) || []; + } + emitChange(); + } catch (error) { + console.warn(error); + } finally { + } + } + function emitChange() { + emit("options-change", unref(getdataSource)); + } + return { getTargetKeys, getdataSource, t, getAttrs, handleChange }; + }, + }); +</script> diff --git a/src/components/Form/src/components/ApiTree.vue b/src/components/Form/src/components/ApiTree.vue new file mode 100644 index 0000000..0335a68 --- /dev/null +++ b/src/components/Form/src/components/ApiTree.vue @@ -0,0 +1,90 @@ +<template> + <a-tree v-bind="getAttrs" @change="handleChange"> + <template #[item]="data" v-for="item in Object.keys($slots)"> + <slot :name="item" v-bind="data || {}"></slot> + </template> + <template #suffixIcon v-if="loading"> + <LoadingOutlined spin /> + </template> + </a-tree> +</template> + +<script lang="ts"> + import { computed, defineComponent, watch, ref, onMounted, unref } from "vue"; + import { Tree } from "ant-design-vue"; + import { isArray, isFunction } from "/@/utils/is"; + import { get } from "lodash-es"; + import { propTypes } from "/@/utils/propTypes"; + import { LoadingOutlined } from "@ant-design/icons-vue"; + export default defineComponent({ + name: "ApiTree", + components: { ATree: Tree, LoadingOutlined }, + props: { + api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> }, + params: { type: Object }, + immediate: { type: Boolean, default: true }, + resultField: propTypes.string.def(""), + afterFetch: { type: Function as PropType<Fn> }, + }, + emits: ["options-change", "change"], + setup(props, { attrs, emit }) { + const treeData = ref<Recordable[]>([]); + const isFirstLoaded = ref<Boolean>(false); + const loading = ref(false); + const getAttrs = computed(() => { + return { + ...(props.api ? { treeData: unref(treeData) } : {}), + ...attrs, + }; + }); + + function handleChange(...args) { + emit("change", ...args); + } + + watch( + () => props.params, + () => { + !unref(isFirstLoaded) && fetch(); + }, + { deep: true }, + ); + + watch( + () => props.immediate, + (v) => { + v && !isFirstLoaded.value && fetch(); + }, + ); + + onMounted(() => { + props.immediate && fetch(); + }); + + async function fetch() { + const { api, afterFetch } = props; + if (!api || !isFunction(api)) return; + loading.value = true; + treeData.value = []; + let result; + try { + result = await api(props.params); + } catch (e) { + console.error(e); + } + if (afterFetch && isFunction(afterFetch)) { + result = afterFetch(result); + } + loading.value = false; + if (!result) return; + if (!isArray(result)) { + result = get(result, props.resultField); + } + treeData.value = (result as Recordable[]) || []; + isFirstLoaded.value = true; + emit("options-change", treeData.value); + } + return { getAttrs, loading, handleChange }; + }, + }); +</script> diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue index 44c8691..3e7372c 100644 --- a/src/components/Form/src/components/FormItem.vue +++ b/src/components/Form/src/components/FormItem.vue @@ -1,17 +1,16 @@ <script lang="tsx"> import type { PropType, Ref } from "vue"; - import type { FormActionType, FormProps } from "../types/form"; - import type { FormSchema } from "../types/form"; + import { computed, defineComponent, toRefs, unref } from "vue"; + import type { FormActionType, FormProps, FormSchema } from "../types/form"; import type { ValidationRule } from "ant-design-vue/lib/form/Form"; import type { TableActionType } from "/@/components/Table"; - import { defineComponent, computed, unref, toRefs } from "vue"; - import { Form, Col, Divider } from "ant-design-vue"; + import { Col, Divider, Form } from "ant-design-vue"; import { componentMap } from "../componentMap"; import { BasicHelp } from "/@/components/Basic"; import { isBoolean, isFunction, isNull } from "/@/utils/is"; import { getSlot } from "/@/utils/helper/tsxHelper"; import { createPlaceholderMessage, setComponentRuleType } from "../helper"; - import { upperFirst, cloneDeep } from "lodash-es"; + import { cloneDeep, upperFirst } from "lodash-es"; import { useItemLabelWidth } from "../hooks/useLabelWidth"; import { useI18n } from "/@/hooks/web/useI18n"; @@ -178,8 +177,21 @@ const getRequired = isFunction(required) ? required(unref(getValues)) : required; - if ((!rules || rules.length === 0) && getRequired) { - rules = [{ required: getRequired, validator }]; + /* + * 1、若设置了required属性,又没有其他的rules,就创建一个验证规则; + * 2、若设置了required属性,又存在其他的rules,则只rules中不存在required属性时,才添加验证required的规则 + * 也就是说rules中的required,优先级大于required + */ + if (getRequired) { + if (!rules || rules.length === 0) { + rules = [{ required: getRequired, validator }]; + } else { + const requiredIndex: number = rules.findIndex((rule) => Reflect.has(rule, "required")); + + if (requiredIndex === -1) { + rules.push({ required: getRequired, validator }); + } + } } const requiredRuleIndex: number = rules.findIndex( diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts index 7d62dca..8ab0ddc 100644 --- a/src/components/Form/src/helper.ts +++ b/src/components/Form/src/helper.ts @@ -70,3 +70,5 @@ export function handleInputNumberValue(component?: ComponentType, val?: any) { * 时间字段 */ export const dateItemType = genType(); + +export const defaultValueComponents = ["Input", "InputPassword", "InputSearch", "InputTextArea"]; diff --git a/src/components/Form/src/hooks/useAdvanced.ts b/src/components/Form/src/hooks/useAdvanced.ts index 2903363..f8bfa6b 100644 --- a/src/components/Form/src/hooks/useAdvanced.ts +++ b/src/components/Form/src/hooks/useAdvanced.ts @@ -1,6 +1,6 @@ import type { ColEx } from "../types"; import type { AdvanceState } from "../types/hooks"; -import type { ComputedRef, Ref } from "vue"; +import { ComputedRef, getCurrentInstance, Ref } from "vue"; import type { FormProps, FormSchema } from "../types/form"; import { computed, unref, watch } from "vue"; import { isBoolean, isFunction, isNumber, isObject } from "/@/utils/is"; @@ -26,6 +26,8 @@ export default function ({ formModel, defaultValueRef, }: UseAdvancedContext) { + const vm = getCurrentInstance(); + const { realWidthRef, screenEnum, screenRef } = useBreakpoint(); const getEmptySpan = computed((): number => { @@ -150,6 +152,9 @@ export default function ({ } } + // 确保页面发送更新 + vm?.proxy?.$forceUpdate(); + advanceState.actionSpan = (realItemColSum % BASIC_COL_LEN) + unref(getEmptySpan); getAdvanced(unref(getProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true); diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts index d89dfee..0b0da9d 100644 --- a/src/components/Form/src/hooks/useFormEvents.ts +++ b/src/components/Form/src/hooks/useFormEvents.ts @@ -1,10 +1,10 @@ import type { ComputedRef, Ref } from "vue"; import type { FormProps, FormSchema, FormActionType } from "../types/form"; import type { NamePath } from "ant-design-vue/lib/form/interface"; -import { unref, toRaw } from "vue"; -import { isArray, isFunction, isObject, isString } from "/@/utils/is"; +import { unref, toRaw, nextTick } from "vue"; +import { isArray, isFunction, isObject, isString, isDef, isNullOrUnDef } from "/@/utils/is"; import { deepMerge } from "/@/utils"; -import { dateItemType, handleInputNumberValue } from "../helper"; +import { dateItemType, handleInputNumberValue, defaultValueComponents } from "../helper"; import { dateUtil } from "/@/utils/dateUtil"; import { cloneDeep, uniqBy } from "lodash-es"; import { error } from "/@/utils/log"; @@ -37,9 +37,13 @@ export function useFormEvents({ if (!formEl) return; Object.keys(formModel).forEach((key) => { - formModel[key] = defaultValueRef.value[key]; + const schema = unref(getSchema).find((item) => item.field === key); + const isInput = schema?.component && defaultValueComponents.includes(schema.component); + const defaultValue = cloneDeep(defaultValueRef.value[key]); + formModel[key] = isInput ? defaultValue || "" : defaultValue; }); - clearValidate(); + nextTick(() => clearValidate()); + emit("reset", toRaw(formModel)); submitOnReset && handleSubmit(); } @@ -52,6 +56,10 @@ export function useFormEvents({ .map((item) => item.field) .filter(Boolean); + // key 支持 a.b.c 的嵌套写法 + const delimiter = "."; + const nestKeyArray = fields.filter((item) => item.indexOf(delimiter) >= 0); + const validKeys: string[] = []; Object.keys(values).forEach((key) => { const schema = unref(getSchema).find((item) => item.field === key); @@ -82,6 +90,21 @@ export function useFormEvents({ formModel[key] = value; } validKeys.push(key); + } else { + nestKeyArray.forEach((nestKey: string) => { + try { + const value = eval("values" + delimiter + nestKey); + if (isDef(value)) { + formModel[nestKey] = value; + validKeys.push(nestKey); + } + } catch (e) { + // key not exist + if (isDef(defaultValueRef.value[nestKey])) { + formModel[nestKey] = cloneDeep(defaultValueRef.value[nestKey]); + } + } + }); } }); validateFields(validKeys).catch((_) => {}); @@ -125,18 +148,18 @@ export function useFormEvents({ const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); const index = schemaList.findIndex((schema) => schema.field === prefixField); - const hasInList = schemaList.some((item) => item.field === prefixField || schema.field); - - if (!hasInList) return; if (!prefixField || index === -1 || first) { first ? schemaList.unshift(schema) : schemaList.push(schema); schemaRef.value = schemaList; + _setDefaultValue(schema); return; } if (index !== -1) { schemaList.splice(index + 1, 0, schema); } + _setDefaultValue(schema); + schemaRef.value = schemaList; } @@ -192,9 +215,36 @@ export function useFormEvents({ } }); }); + _setDefaultValue(schema); + schemaRef.value = uniqBy(schema, "field"); } + function _setDefaultValue(data: FormSchema | FormSchema[]) { + let schemas: FormSchema[] = []; + if (isObject(data)) { + schemas.push(data as FormSchema); + } + if (isArray(data)) { + schemas = [...data]; + } + + const obj: Recordable = {}; + const currentFieldsValue = getFieldsValue(); + schemas.forEach((item) => { + if ( + item.component != "Divider" && + Reflect.has(item, "field") && + item.field && + !isNullOrUnDef(item.defaultValue) && + !(item.field in currentFieldsValue) + ) { + obj[item.field] = item.defaultValue; + } + }); + setFieldsValue(obj); + } + function getFieldsValue(): Recordable { const formEl = unref(formElRef); if (!formEl) return {}; diff --git a/src/components/Form/src/hooks/useFormValues.ts b/src/components/Form/src/hooks/useFormValues.ts index e7372d5..e4c9420 100644 --- a/src/components/Form/src/hooks/useFormValues.ts +++ b/src/components/Form/src/hooks/useFormValues.ts @@ -3,7 +3,7 @@ import { dateUtil } from "/@/utils/dateUtil"; import { unref } from "vue"; import type { Ref, ComputedRef } from "vue"; import type { FormProps, FormSchema } from "../types/form"; -import { set } from "lodash-es"; +import { cloneDeep, set } from "lodash-es"; interface UseFormValuesContext { defaultValueRef: Ref<any>; @@ -11,6 +11,43 @@ interface UseFormValuesContext { getProps: ComputedRef<FormProps>; formModel: Recordable; } + +/** + * @desription deconstruct array-link key. This method will mutate the target. + */ +function tryDeconstructArray(key: string, value: any, target: Recordable) { + const pattern = /^\[(.+)\]$/; + if (pattern.test(key)) { + const match = key.match(pattern); + if (match && match[1]) { + const keys = match[1].split(","); + value = Array.isArray(value) ? value : [value]; + keys.forEach((k, index) => { + set(target, k.trim(), value[index]); + }); + return true; + } + } +} + +/** + * @desription deconstruct object-link key. This method will mutate the target. + */ +function tryDeconstructObject(key: string, value: any, target: Recordable) { + const pattern = /^\{(.+)\}$/; + if (pattern.test(key)) { + const match = key.match(pattern); + if (match && match[1]) { + const keys = match[1].split(","); + value = isObject(value) ? value : {}; + keys.forEach((k) => { + set(target, k.trim(), value[k.trim()]); + }); + return true; + } + } +} + export function useFormValues({ defaultValueRef, getSchema, @@ -33,14 +70,18 @@ export function useFormValues({ if (isObject(value)) { value = transformDateFunc?.(value); } - if (isArray(value) && value[0]?._isAMomentObject && value[1]?._isAMomentObject) { + + if (isArray(value) && value[0]?.format && value[1]?.format) { value = value.map((item) => transformDateFunc?.(item)); } // Remove spaces if (isString(value)) { value = value.trim(); } - set(res, key, value); + if (!tryDeconstructArray(key, value, res) && !tryDeconstructObject(key, value, res)) { + // 没有解构成功的,按原样赋值 + set(res, key, value); + } } return handleRangeTimeValue(res); } @@ -77,10 +118,13 @@ export function useFormValues({ const { defaultValue } = item; if (!isNullOrUnDef(defaultValue)) { obj[item.field] = defaultValue; - formModel[item.field] = defaultValue; + + if (formModel[item.field] === undefined) { + formModel[item.field] = defaultValue; + } } }); - defaultValueRef.value = obj; + defaultValueRef.value = cloneDeep(obj); } return { handleFormValues, initDefault }; diff --git a/src/components/Form/src/hooks/useLabelWidth.ts b/src/components/Form/src/hooks/useLabelWidth.ts index 425ea8b..89cce99 100644 --- a/src/components/Form/src/hooks/useLabelWidth.ts +++ b/src/components/Form/src/hooks/useLabelWidth.ts @@ -1,7 +1,6 @@ import type { Ref } from "vue"; -import type { FormProps, FormSchema } from "../types/form"; - import { computed, unref } from "vue"; +import type { FormProps, FormSchema } from "../types/form"; import { isNumber } from "/@/utils/is"; export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<FormProps>) { @@ -14,6 +13,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref< labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol, + layout, } = unref(propsRef); // If labelWidth is set globally, all items setting @@ -33,7 +33,10 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref< return { labelCol: { style: { width }, ...col }, - wrapperCol: { style: { width: `calc(100% - ${width})` }, ...wrapCol }, + wrapperCol: { + style: { width: layout === "vertical" ? "100%" : `calc(100% - ${width})` }, + ...wrapCol, + }, }; }); } diff --git a/src/components/Form/src/props.ts b/src/components/Form/src/props.ts index 29d925b..d93c640 100644 --- a/src/components/Form/src/props.ts +++ b/src/components/Form/src/props.ts @@ -40,6 +40,7 @@ export const basicProps = { // 在INPUT组件上单击回车时,是否自动提交 autoSubmitOnEnter: propTypes.bool.def(false), submitOnReset: propTypes.bool, + submitOnChange: propTypes.bool, size: propTypes.oneOf(["default", "small", "large"]).def("default"), // 禁用表单 disabled: propTypes.bool, @@ -53,7 +54,7 @@ export const basicProps = { transformDateFunc: { type: Function as PropType<Fn>, default: (date: any) => { - return date._isAMomentObject ? date?.format("YYYY-MM-DD HH:mm:ss") : date; + return date?.format?.("YYYY-MM-DD HH:mm:ss") ?? date; }, }, rulesMessageJoinLabel: propTypes.bool.def(true), diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts index af1852f..4a77a45 100644 --- a/src/components/Form/src/types/form.ts +++ b/src/components/Form/src/types/form.ts @@ -49,17 +49,20 @@ export type RegisterFn = (formInstance: FormActionType) => void; export type UseFormReturnType = [RegisterFn, FormActionType]; export interface FormProps { + name?: string; layout?: "vertical" | "inline" | "horizontal"; // Form value model?: Recordable; // The width of all items in the entire form labelWidth?: number | string; - //alignment + // alignment labelAlign?: "left" | "right"; - //Row configuration for the entire form + // Row configuration for the entire form rowProps?: RowProps; // Submit form on reset submitOnReset?: boolean; + // Submit form on form changing + submitOnChange?: boolean; // Col configuration for the entire form labelCol?: Partial<ColEx>; // Col configuration for the entire form diff --git a/src/components/Form/src/types/index.ts b/src/components/Form/src/types/index.ts index dc43641..4200ee2 100644 --- a/src/components/Form/src/types/index.ts +++ b/src/components/Form/src/types/index.ts @@ -91,6 +91,7 @@ export type ComponentType = | "Select" | "ApiSelect" | "TreeSelect" + | "ApiTree" | "ApiTreeSelect" | "ApiRadioGroup" | "RadioButtonGroup" @@ -112,4 +113,5 @@ export type ComponentType = | "Render" | "Slider" | "Rate" - | "Divider"; + | "Divider" + | "ApiTransfer"; diff --git a/src/components/Markdown/src/Markdown.vue b/src/components/Markdown/src/Markdown.vue index 50d910e..71ff4ab 100644 --- a/src/components/Markdown/src/Markdown.vue +++ b/src/components/Markdown/src/Markdown.vue @@ -19,6 +19,7 @@ import { useModalContext } from "../../Modal"; import { useRootSetting } from "/@/hooks/setting/useRootSetting"; import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; + import { getTheme } from "./getTheme"; type Lang = "zh_CN" | "en_US" | "ja_JP" | "ko_KR" | undefined; @@ -46,8 +47,9 @@ if (!inited) { return; } - const theme = val === "dark" ? "dark" : "classic"; - instance.getVditor()?.setTheme(theme); + instance + .getVditor() + ?.setTheme(getTheme(val) as any, getTheme(val, "content"), getTheme(val, "code")); }, { immediate: true, @@ -87,13 +89,22 @@ if (!wrapEl) return; const bindValue = { ...attrs, ...props }; const insEditor = new Vditor(wrapEl, { - theme: getDarkMode.value === "dark" ? "dark" : "classic", + // 设置外观主题 + theme: getTheme(getDarkMode.value) as any, lang: unref(getCurrentLang), mode: "sv", fullscreen: { index: 520, }, preview: { + theme: { + // 设置内容主题 + current: getTheme(getDarkMode.value, "content"), + }, + hljs: { + // 设置代码块主题 + style: getTheme(getDarkMode.value, "code"), + }, actions: [], }, input: (v) => { diff --git a/src/components/Markdown/src/MarkdownViewer.vue b/src/components/Markdown/src/MarkdownViewer.vue index 1dc10cc..d62a946 100644 --- a/src/components/Markdown/src/MarkdownViewer.vue +++ b/src/components/Markdown/src/MarkdownViewer.vue @@ -1,23 +1,62 @@ <template> - <!-- eslint-disable vue/no-v-html --> - <div v-html="getHtmlData" :class="$props.class" class="markdown-viewer"></div> + <div ref="viewerRef" id="markdownViewer" :class="$props.class"></div> </template> <script lang="ts" setup> - import { computed } from "vue"; - import showdown from "showdown"; - - const converter = new showdown.Converter(); - converter.setOption("tables", true); + import { defineProps, onBeforeUnmount, onDeactivated, Ref, ref, unref, watch } from "vue"; + import VditorPreview from "vditor/dist/method.min"; + import { onMountedOrActivated } from "/@/hooks/core/onMountedOrActivated"; + import { useRootSetting } from "/@/hooks/setting/useRootSetting"; + import { getTheme } from "./getTheme"; const props = defineProps({ value: { type: String }, class: { type: String }, }); - const getHtmlData = computed(() => converter.makeHtml(props.value || "")); -</script> + const viewerRef = ref<ElRef>(null); + const vditorPreviewRef = ref(null) as Ref<Nullable<VditorPreview>>; + const { getDarkMode } = useRootSetting(); + + function init() { + const viewerEl = unref(viewerRef) as HTMLElement; + vditorPreviewRef.value = VditorPreview.preview(viewerEl, props.value, { + mode: getTheme(getDarkMode.value, "content"), + theme: { + // 设置内容主题 + current: getTheme(getDarkMode.value, "content"), + }, + hljs: { + // 设置代码块主题 + style: getTheme(getDarkMode.value, "code"), + }, + }); + } + watch( + () => getDarkMode.value, + (val) => { + VditorPreview.setContentTheme(getTheme(val, "content")); + VditorPreview.setCodeTheme(getTheme(val, "code")); + init(); + }, + ); -<style scoped> - .markdown-viewer { - width: 100%; + watch( + () => props.value, + (v, oldValue) => { + v !== oldValue && init(); + }, + ); + + function destroy() { + const vditorInstance = unref(vditorPreviewRef); + if (!vditorInstance) return; + try { + vditorInstance?.destroy?.(); + } catch (error) {} + vditorPreviewRef.value = null; } -</style> + + onMountedOrActivated(init); + + onBeforeUnmount(destroy); + onDeactivated(destroy); +</script> diff --git a/src/components/Markdown/src/getTheme.ts b/src/components/Markdown/src/getTheme.ts new file mode 100644 index 0000000..fcfe9d3 --- /dev/null +++ b/src/components/Markdown/src/getTheme.ts @@ -0,0 +1,19 @@ +/** + * 获取主题类型 深色浅色模式 对应的值 + * @param darkModeVal 深色模式值 + * @param themeMode 主题类型——外观(默认), 内容, 代码块 + */ +export const getTheme = ( + darkModeVal: 'light' | 'dark' | string, + themeMode: 'default' | 'content' | 'code' = 'default', +) => { + const isDark = darkModeVal === 'dark'; + switch (themeMode) { + case 'default': + return isDark ? 'dark' : 'classic'; + case 'content': + return isDark ? 'dark' : 'light'; + case 'code': + return isDark ? 'dracula' : 'github'; + } +}; diff --git a/src/components/Menu/src/BasicMenu.vue b/src/components/Menu/src/BasicMenu.vue index 946e626..10c18d6 100644 --- a/src/components/Menu/src/BasicMenu.vue +++ b/src/components/Menu/src/BasicMenu.vue @@ -6,7 +6,7 @@ :openKeys="getOpenKeys" :inlineIndent="inlineIndent" :theme="theme" - @openChange="handleOpenChange" + @open-change="handleOpenChange" :class="getMenuClass" @click="handleMenuClick" :subMenuOpenDelay="0.2" diff --git a/src/components/Menu/src/index.less b/src/components/Menu/src/index.less index 8bfbb0d..6907bff 100644 --- a/src/components/Menu/src/index.less +++ b/src/components/Menu/src/index.less @@ -1,4 +1,4 @@ -@basic-menu-prefix-cls: ~'@{namespace}-basic-menu'; +@basic-menu-prefix-cls: ~"@{namespace}-basic-menu"; .app-top-menu-popup { min-width: 150px; diff --git a/src/components/Modal/src/components/Modal.tsx b/src/components/Modal/src/components/Modal.tsx index 7f8d4f6..3251c33 100644 --- a/src/components/Modal/src/components/Modal.tsx +++ b/src/components/Modal/src/components/Modal.tsx @@ -10,7 +10,7 @@ export default defineComponent({ inheritAttrs: false, props: basicProps, emits: ["cancel"], - setup(props, { slots }) { + setup(props, { slots, emit }) { const { visible, draggable, destroyOnClose } = toRefs(props); const attrs = useAttrs(); useModalDragMove({ @@ -19,8 +19,12 @@ export default defineComponent({ draggable, }); + const onCancel = (e: Event) => { + emit("cancel", e); + }; + return () => { - const propsData = { ...unref(attrs), ...props } as Recordable; + const propsData = { ...unref(attrs), ...props, onCancel } as Recordable; return <Modal {...propsData}>{extendSlots(slots)}</Modal>; }; }, diff --git a/src/components/Modal/src/index.less b/src/components/Modal/src/index.less index 5bd86a2..88df410 100644 --- a/src/components/Modal/src/index.less +++ b/src/components/Modal/src/index.less @@ -26,7 +26,6 @@ &-title { font-size: 16px; font-weight: bold; - line-height: 16px; .base-title { cursor: move !important; @@ -111,16 +110,19 @@ .ant-modal-confirm .ant-modal-body { padding: 24px !important; } + @media screen and (max-height: 600px) { .ant-modal { top: 60px; } } + @media screen and (max-height: 540px) { .ant-modal { top: 30px; } } + @media screen and (max-height: 480px) { .ant-modal { top: 10px; diff --git a/src/components/Page/src/PageWrapper.vue b/src/components/Page/src/PageWrapper.vue index bdb15b3..ce94b2d 100644 --- a/src/components/Page/src/PageWrapper.vue +++ b/src/components/Page/src/PageWrapper.vue @@ -5,7 +5,7 @@ :title="title" v-bind="omit($attrs, 'class')" ref="headerRef" - v-if="content || $slots.headerContent || title || getHeaderSlots.length" + v-if="getShowHeader" > <template #default> <template v-if="content"> @@ -99,6 +99,10 @@ ]; }); + const getShowHeader = computed( + () => props.content || slots?.headerContent || props.title || getHeaderSlots.value.length, + ); + const getShowFooter = computed(() => slots?.leftFooter || slots?.rightFooter); const getHeaderSlots = computed(() => { @@ -150,6 +154,7 @@ getClass, getHeaderSlots, prefixCls, + getShowHeader, getShowFooter, omit, getContentClass, diff --git a/src/components/SimpleMenu/src/SimpleSubMenu.vue b/src/components/SimpleMenu/src/SimpleSubMenu.vue index 4ed31b0..11ac1ff 100644 --- a/src/components/SimpleMenu/src/SimpleSubMenu.vue +++ b/src/components/SimpleMenu/src/SimpleSubMenu.vue @@ -34,7 +34,10 @@ </span> <SimpleMenuTag :item="item" :collapseParent="!!collapse && !!parent" /> </template> - <template v-for="childrenItem in item.children || []" :key="childrenItem.path"> + <template + v-for="childrenItem in item.children || []" + :key="childrenItem.paramPath || childrenItem.path" + > <SimpleSubMenu v-bind="$props" :item="childrenItem" :parent="false" /> </template> </SubMenu> diff --git a/src/components/SimpleMenu/src/components/SubMenuItem.vue b/src/components/SimpleMenu/src/components/SubMenuItem.vue index 0a0955b..4216ca6 100644 --- a/src/components/SimpleMenu/src/components/SubMenuItem.vue +++ b/src/components/SimpleMenu/src/components/SubMenuItem.vue @@ -21,7 +21,7 @@ :overlayClassName="`${prefixCls}-menu-popover`" v-else :visible="getIsOpend" - @visibleChange="handleVisibleChange" + @visible-change="handleVisibleChange" :overlayStyle="getOverlayStyle" :align="{ offset: [0, 0] }" > diff --git a/src/components/SimpleMenu/src/components/menu.less b/src/components/SimpleMenu/src/components/menu.less index b9ef388..0600ade 100644 --- a/src/components/SimpleMenu/src/components/menu.less +++ b/src/components/SimpleMenu/src/components/menu.less @@ -1,6 +1,6 @@ -@menu-prefix-cls: ~'@{namespace}-menu'; -@menu-popup-prefix-cls: ~'@{namespace}-menu-popup'; -@submenu-popup-prefix-cls: ~'@{namespace}-menu-submenu-popup'; +@menu-prefix-cls: ~"@{namespace}-menu"; +@menu-popup-prefix-cls: ~"@{namespace}-menu-popup"; +@submenu-popup-prefix-cls: ~"@{namespace}-menu-submenu-popup"; @transition-time: 0.2s; @menu-dark-subsidiary-color: rgba(255, 255, 255, 0.7); @@ -13,8 +13,8 @@ bottom: 0; display: block; width: 2px; + content: ""; background-color: @primary-color; - content: ''; } } @@ -45,8 +45,8 @@ position: absolute; top: 50%; right: 18px; - transform: translateY(-50%) rotate(-90deg); transition: transform @transition-time @ease-in-out; + transform: translateY(-50%) rotate(-90deg); } } @@ -128,12 +128,12 @@ position: relative; z-index: 1; display: flex; + align-items: center; font-size: @font-size-base; color: inherit; list-style: none; cursor: pointer; outline: none; - align-items: center; &:hover, &:active { @@ -178,8 +178,8 @@ &-vertical &-submenu-collapse { .@{submenu-popup-prefix-cls} { display: flex; - justify-content: center; align-items: center; + justify-content: center; } .@{menu-prefix-cls}-submenu-collapsed-show-tit { flex-direction: column; @@ -244,8 +244,8 @@ left: 0; width: 3px; height: 100%; + content: ""; background-color: @primary-color; - content: ''; } } } @@ -276,8 +276,8 @@ left: 0; width: 3px; height: 100%; + content: ""; background-color: @primary-color; - content: ''; } .@{menu-prefix-cls}-submenu-collapse { diff --git a/src/components/SimpleMenu/src/index.less b/src/components/SimpleMenu/src/index.less index 4f9c9ce..efb17a0 100644 --- a/src/components/SimpleMenu/src/index.less +++ b/src/components/SimpleMenu/src/index.less @@ -1,5 +1,5 @@ -@simple-prefix-cls: ~'@{namespace}-simple-menu'; -@prefix-cls: ~'@{namespace}-menu'; +@simple-prefix-cls: ~"@{namespace}-simple-menu"; +@prefix-cls: ~"@{namespace}-menu"; .@{prefix-cls} { &-dark&-vertical .@{simple-prefix-cls}__parent { diff --git a/src/components/Table/index.ts b/src/components/Table/index.ts index 393067e..6971405 100644 --- a/src/components/Table/index.ts +++ b/src/components/Table/index.ts @@ -2,6 +2,7 @@ export { default as BasicTable } from "./src/BasicTable.vue"; export { default as TableAction } from "./src/components/TableAction.vue"; export { default as EditTableHeaderIcon } from "./src/components/EditTableHeaderIcon.vue"; export { default as TableImg } from "./src/components/TableImg.vue"; + export * from "./src/types/table"; export * from "./src/types/pagination"; export * from "./src/types/tableAction"; diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue index a8b3cff..8e0d0c0 100644 --- a/src/components/Table/src/BasicTable.vue +++ b/src/components/Table/src/BasicTable.vue @@ -1,6 +1,7 @@ <template> <div ref="wrapRef" :class="getWrapperClass"> <BasicForm + ref="formRef" submitOnReset v-bind="getFormProps" v-if="getBindValues.useSearchForm" @@ -24,10 +25,16 @@ <template #[item]="data" v-for="item in Object.keys($slots)" :key="item"> <slot :name="item" v-bind="data || {}"></slot> </template> - - <template #[`header-${column.dataIndex}`] v-for="column in columns" :key="column.dataIndex"> + <template #headerCell="{ column }"> <HeaderCell :column="column" /> </template> + <!-- 增加对antdv3.x兼容 --> + <template #bodyCell="data"> + <slot name="bodyCell" v-bind="data || {}"></slot> + </template> + <!-- <template #[`header-${column.dataIndex}`] v-for="(column, index) in columns" :key="index">--> + <!-- <HeaderCell :column="column" />--> + <!-- </template>--> </Table> </div> </template> @@ -43,7 +50,6 @@ import { Table } from "ant-design-vue"; import { BasicForm, useForm } from "/@/components/Form/index"; import { PageWrapperFixedHeightKey } from "/@/components/Page"; - import expandIcon from "./components/ExpandIcon"; import HeaderCell from "./components/HeaderCell.vue"; import { InnerHandlers } from "./types/table"; @@ -53,6 +59,7 @@ import { useLoading } from "./hooks/useLoading"; import { useRowSelection } from "./hooks/useRowSelection"; import { useTableScroll } from "./hooks/useTableScroll"; + import { useTableScrollTo } from "./hooks/useScrollTo"; import { useCustomRow } from "./hooks/useCustomRow"; import { useTableStyle } from "./hooks/useTableStyle"; import { useTableHeader } from "./hooks/useTableHeader"; @@ -97,6 +104,7 @@ const tableData = ref<Recordable[]>([]); const wrapRef = ref(null); + const formRef = ref(null); const innerPropsRef = ref<Partial<BasicTableProps>>(); const { prefixCls } = useDesign("basic-table"); @@ -185,8 +193,12 @@ getColumnsRef, getRowSelectionRef, getDataSourceRef, + wrapRef, + formRef, ); + const { scrollTo } = useTableScrollTo(tableElRef, getDataSourceRef); + const { customRow } = useCustomRow(getProps, { setSelectedRowKeys, getSelectRowKeys, @@ -197,7 +209,11 @@ const { getRowClassName } = useTableStyle(getProps, prefixCls); - const { getExpandOption, expandAll, collapseAll } = useTableExpand(getProps, tableData, emit); + const { getExpandOption, expandAll, expandRows, collapseAll } = useTableExpand( + getProps, + tableData, + emit, + ); const handlers: InnerHandlers = { onColumnsChange: (data: ColumnChangeParam[]) => { @@ -222,10 +238,8 @@ const getBindValues = computed(() => { const dataSource = unref(getDataSourceRef); let propsData: Recordable = { - // ...(dataSource.length === 0 ? { getPopupContainer: () => document.body } : {}), ...attrs, customRow, - expandIcon: slots.expandIcon ? null : expandIcon(), ...unref(getProps), ...unref(getHeaderProps), scroll: unref(getScrollRef), @@ -239,9 +253,9 @@ footer: unref(getFooterProps), ...unref(getExpandOption), }; - if (slots.expandedRowRender) { - propsData = omit(propsData, "scroll"); - } + // if (slots.expandedRowRender) { + // propsData = omit(propsData, 'scroll'); + // } propsData = omit(propsData, ["class", "onChange"]); return propsData; @@ -300,7 +314,9 @@ getShowPagination, setCacheColumnsByField, expandAll, + expandRows, collapseAll, + scrollTo, getSize: () => { return unref(getBindValues).size as SizeType; }, @@ -312,6 +328,7 @@ emit("register", tableAction, formActions); return { + formRef, tableElRef, getBindValues, getLoading, @@ -346,6 +363,7 @@ .@{prefix-cls} { max-width: 100%; + height: 100%; &-row__striped { td { diff --git a/src/components/Table/src/componentMap.ts b/src/components/Table/src/componentMap.ts index fe9a411..25f20cd 100644 --- a/src/components/Table/src/componentMap.ts +++ b/src/components/Table/src/componentMap.ts @@ -7,6 +7,7 @@ import { Switch, DatePicker, TimePicker, + AutoComplete, } from "ant-design-vue"; import type { ComponentType } from "./types/componentType"; import { ApiSelect, ApiTreeSelect } from "/@/components/Form"; @@ -17,6 +18,7 @@ componentMap.set("Input", Input); componentMap.set("InputNumber", InputNumber); componentMap.set("Select", Select); componentMap.set("ApiSelect", ApiSelect); +componentMap.set("AutoComplete", AutoComplete); componentMap.set("ApiTreeSelect", ApiTreeSelect); componentMap.set("Switch", Switch); componentMap.set("Checkbox", Checkbox); diff --git a/src/components/Table/src/components/ExpandIcon.tsx b/src/components/Table/src/components/ExpandIcon.tsx deleted file mode 100644 index 8897d76..0000000 --- a/src/components/Table/src/components/ExpandIcon.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { BasicArrow } from "/@/components/Basic"; - -export default () => { - return (props: Recordable) => { - if (!props.expandable) { - if (props.needIndentSpaced) { - return <span class="ant-table-row-expand-icon ant-table-row-spaced" />; - } else { - return <span />; - } - } - return ( - <BasicArrow - style="margin-right: 8px" - iconStyle="margin-top: -2px;" - onClick={(e: Event) => { - props.onExpand(props.record, e); - }} - expand={props.expanded} - /> - ); - }; -}; diff --git a/src/components/Table/src/components/HeaderCell.vue b/src/components/Table/src/components/HeaderCell.vue index 66a8f28..198e4be 100644 --- a/src/components/Table/src/components/HeaderCell.vue +++ b/src/components/Table/src/components/HeaderCell.vue @@ -29,7 +29,7 @@ const { prefixCls } = useDesign("basic-table-header-cell"); const getIsEdit = computed(() => !!props.column?.edit); - const getTitle = computed(() => props.column?.customTitle); + const getTitle = computed(() => props.column?.customTitle || props.column?.title); const getHelpMessage = computed(() => props.column?.helpMessage); return { prefixCls, getIsEdit, getTitle, getHelpMessage }; diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue index c5eea63..d5af878 100644 --- a/src/components/Table/src/components/TableAction.vue +++ b/src/components/Table/src/components/TableAction.vue @@ -104,21 +104,20 @@ }); const getDropdownList = computed((): any[] => { - return (toRaw(props.dropDownActions) || []) - .filter((action) => { - return hasPermission(action.auth) && isIfShow(action); - }) - .map((action, index) => { - const { label, popConfirm } = action; - return { - ...action, - ...popConfirm, - onConfirm: popConfirm?.confirm, - onCancel: popConfirm?.cancel, - text: label, - divider: index < props.dropDownActions.length - 1 ? props.divider : false, - }; - }); + const list = (toRaw(props.dropDownActions) || []).filter((action) => { + return hasPermission(action.auth) && isIfShow(action); + }); + return list.map((action, index) => { + const { label, popConfirm } = action; + return { + ...action, + ...popConfirm, + onConfirm: popConfirm?.confirm, + onCancel: popConfirm?.cancel, + text: label, + divider: index < list.length - 1 ? props.divider : false, + }; + }); }); const getAlign = computed(() => { diff --git a/src/components/Table/src/components/editable/EditableCell.vue b/src/components/Table/src/components/editable/EditableCell.vue index 7736807..050b8ba 100644 --- a/src/components/Table/src/components/editable/EditableCell.vue +++ b/src/components/Table/src/components/editable/EditableCell.vue @@ -1,40 +1,4 @@ -<template> - <div :class="prefixCls"> - <div - v-show="!isEdit" - :class="{ [`${prefixCls}__normal`]: true, 'ellipsis-cell': column.ellipsis }" - @click="handleEdit" - > - <div class="cell-content" :title="column.ellipsis ? getValues ?? '' : ''"> - {{ getValues ? getValues : " " }} - </div> - <FormOutlined :class="`${prefixCls}__normal-icon`" v-if="!column.editRow" /> - </div> - - <a-spin v-if="isEdit" :spinning="spinning"> - <div :class="`${prefixCls}__wrapper`" v-click-outside="onClickOutside"> - <CellComponent - v-bind="getComponentProps" - :component="getComponent" - :style="getWrapperStyle" - :popoverVisible="getRuleVisible" - :rule="getRule" - :ruleMessage="ruleMessage" - :class="getWrapperClass" - ref="elRef" - @change="handleChange" - @options-change="handleOptionsChange" - @pressEnter="handleEnter" - /> - <div :class="`${prefixCls}__action`" v-if="!getRowEditable"> - <CheckOutlined :class="[`${prefixCls}__icon`, 'mx-2']" @click="handleSubmitClick" /> - <CloseOutlined :class="`${prefixCls}__icon `" @click="handleCancel" /> - </div> - </div> - </a-spin> - </div> -</template> -<script lang="ts"> +<script lang="tsx"> import type { CSSProperties, PropType } from "vue"; import { computed, defineComponent, nextTick, ref, toRaw, unref, watchEffect } from "vue"; import type { BasicColumn } from "../../types/table"; @@ -56,7 +20,7 @@ export default defineComponent({ name: "EditableCell", - components: { FormOutlined, CloseOutlined, CheckOutlined, CellComponent, ASpin: Spin }, + components: { FormOutlined, CloseOutlined, CheckOutlined, CellComponent, Spin }, directives: { clickOutside, }, @@ -100,13 +64,6 @@ }); const getComponentProps = computed(() => { - const compProps = props.column?.editComponentProps ?? {}; - const component = unref(getComponent); - const apiSelectProps: Recordable = {}; - if (component === "ApiSelect") { - apiSelectProps.cache = true; - } - const isCheckValue = unref(getIsCheckComp); const valueField = isCheckValue ? "checked" : "value"; @@ -114,19 +71,49 @@ const value = isCheckValue ? (isNumber(val) && isBoolean(val) ? val : !!val) : val; + let compProps = props.column?.editComponentProps ?? {}; + const { record, column, index } = props; + + if (isFunction(compProps)) { + compProps = compProps({ text: val, record, column, index }) ?? {}; + } + const component = unref(getComponent); + const apiSelectProps: Recordable = {}; + if (component === "ApiSelect") { + apiSelectProps.cache = true; + } + upEditDynamicDisabled(record, column, value); return { size: "small", getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body, - getCalendarContainer: () => unref(table?.wrapRef.value) ?? document.body, placeholder: createPlaceholderMessage(unref(getComponent)), ...apiSelectProps, - ...omit(compProps, "onChange"), + ...compProps, [valueField]: value, - }; + disabled: unref(getDisable), + } as any; + }); + function upEditDynamicDisabled(record, column, value) { + if (!record) return false; + const { key, dataIndex } = column; + if (!key && !dataIndex) return; + const dataKey = (dataIndex || key) as string; + set(record, dataKey, value); + } + const getDisable = computed(() => { + const { editDynamicDisabled } = props.column; + let disabled = false; + if (isBoolean(editDynamicDisabled)) { + disabled = editDynamicDisabled; + } + if (isFunction(editDynamicDisabled)) { + const { record } = props; + disabled = editDynamicDisabled({ record }); + } + return disabled; }); - const getValues = computed(() => { - const { editComponentProps, editValueMap } = props.column; + const { editValueMap } = props.column; const value = unref(currentValueRef); @@ -139,7 +126,8 @@ return value; } - const options: LabelValueOptions = editComponentProps?.options ?? (unref(optionsRef) || []); + const options: LabelValueOptions = + unref(getComponentProps)?.options ?? (unref(optionsRef) || []); const option = options.find((item) => `${item.value}` === `${value}`); return option?.label ?? value; @@ -190,14 +178,16 @@ const component = unref(getComponent); if (!e) { currentValueRef.value = e; - } else if (e?.target && Reflect.has(e.target, "value")) { - currentValueRef.value = (e as ChangeEvent).target.value; } else if (component === "Checkbox") { currentValueRef.value = (e as ChangeEvent).target.checked; - } else if (isString(e) || isBoolean(e) || isNumber(e)) { + } else if (component === "Switch") { + currentValueRef.value = e; + } else if (e?.target && Reflect.has(e.target, "value")) { + currentValueRef.value = (e as ChangeEvent).target.value; + } else if (isString(e) || isBoolean(e) || isNumber(e) || isArray(e)) { currentValueRef.value = e; } - const onChange = props.column?.editComponentProps?.onChange; + const onChange = unref(getComponentProps)?.onChange; if (onChange && isFunction(onChange)) onChange(...arguments); table.emit?.("edit-change", { @@ -265,7 +255,7 @@ result = await beforeEditSubmit({ record: pick(record, keys), index, - key: key as string, + key: dataKey as string, value, }); } catch (e) { @@ -281,7 +271,7 @@ set(record, dataKey, value); //const record = await table.updateTableData(index, dataKey, value); - needEmit && table.emit?.("edit-end", { record, index, key, value }); + needEmit && table.emit?.("edit-end", { record, index, key: dataKey, value }); isEdit.value = false; } @@ -322,7 +312,7 @@ // only ApiSelect or TreeSelect function handleOptionsChange(options: LabelValueOptions) { - const { replaceFields } = props.column?.editComponentProps ?? {}; + const { replaceFields } = unref(getComponentProps); const component = unref(getComponent); if (component === "ApiTreeSelect") { const { title = "title", value = "value", children = "children" } = replaceFields || {}; @@ -349,13 +339,13 @@ } if (props.record) { - initCbs('submitCbs', handleSubmit); - initCbs('validCbs', handleSubmiRule); - initCbs('cancelCbs', handleCancel); + initCbs("submitCbs", handleSubmit); + initCbs("validCbs", handleSubmiRule); + initCbs("cancelCbs", handleCancel); if (props.column.dataIndex) { if (!props.record.editValueRefs) props.record.editValueRefs = {}; - props.record.editValueRefs[props.column.dataIndex] = currentValueRef; + props.record.editValueRefs[props.column.dataIndex as any] = currentValueRef; } /* eslint-disable */ props.record.onCancelEdit = () => { @@ -367,7 +357,7 @@ if (!props.record?.onValid?.()) return; const submitFns = props.record?.submitCbs || []; submitFns.forEach((fn) => fn(false, false)); - table.emit?.('edit-row-end'); + table.emit?.("edit-row-end"); return true; } }; @@ -398,10 +388,63 @@ spinning, }; }, + render() { + return ( + <div class={this.prefixCls}> + <div + v-show={!this.isEdit} + class={{ [`${this.prefixCls}__normal`]: true, "ellipsis-cell": this.column.ellipsis }} + onClick={this.handleEdit} + > + <div class="cell-content" title={this.column.ellipsis ? this.getValues ?? "" : ""}> + {this.column.editRender + ? this.column.editRender({ + text: this.value, + record: this.record as Recordable, + column: this.column, + index: this.index, + }) + : this.getValues + ? this.getValues + : "\u00A0"} + </div> + {!this.column.editRow && <FormOutlined class={`${this.prefixCls}__normal-icon`} />} + </div> + {this.isEdit && ( + <Spin spinning={this.spinning}> + <div class={`${this.prefixCls}__wrapper`} v-click-outside={this.onClickOutside}> + <CellComponent + {...this.getComponentProps} + component={this.getComponent} + style={this.getWrapperStyle} + popoverVisible={this.getRuleVisible} + rule={this.getRule} + ruleMessage={this.ruleMessage} + class={this.getWrapperClass} + ref="elRef" + onChange={this.handleChange} + onOptionsChange={this.handleOptionsChange} + onPressEnter={this.handleEnter} + /> + {!this.getRowEditable && ( + <div class={`${this.prefixCls}__action`}> + <CheckOutlined + class={[`${this.prefixCls}__icon`, "mx-2"]} + onClick={this.handleSubmitClick} + /> + <CloseOutlined class={`${this.prefixCls}__icon `} onClick={this.handleCancel} /> + </div> + )} + </div> + </Spin> + )} + </div> + ); + }, }); </script> <style lang="less"> - @prefix-cls: ~'@{namespace}-editable-cell'; + @prefix-cls: ~"@{namespace}-editable-cell"; .edit-cell-align-left { text-align: left; diff --git a/src/components/Table/src/components/editable/helper.ts b/src/components/Table/src/components/editable/helper.ts index e36775a..29dd79b 100644 --- a/src/components/Table/src/components/editable/helper.ts +++ b/src/components/Table/src/components/editable/helper.ts @@ -7,7 +7,7 @@ const { t } = useI18n(); * @description: 生成placeholder */ export function createPlaceholderMessage(component: ComponentType) { - if (component.includes("Input")) { + if (component.includes("Input") || component.includes("AutoComplete")) { return t("common.inputText"); } if (component.includes("Picker")) { diff --git a/src/components/Table/src/components/settings/ColumnSetting.vue b/src/components/Table/src/components/settings/ColumnSetting.vue index e2ac173..5b36cf1 100644 --- a/src/components/Table/src/components/settings/ColumnSetting.vue +++ b/src/components/Table/src/components/settings/ColumnSetting.vue @@ -6,7 +6,7 @@ <Popover placement="bottomLeft" trigger="click" - @visibleChange="handleVisibleChange" + @visible-change="handleVisibleChange" :overlayClassName="`${prefixCls}__cloumn-list`" :getPopupContainer="getPopupContainer" > @@ -43,7 +43,7 @@ <CheckboxGroup v-model:value="checkedList" @change="onChange" ref="columnListRef"> <template v-for="item in plainOptions" :key="item.value"> <div :class="`${prefixCls}__check-item`" v-if="!('ifShow' in item && !item.ifShow)"> - <DragOutlined class="table-coulmn-drag-icon" /> + <DragOutlined class="table-column-drag-icon" /> <Checkbox :value="item.value"> {{ item.label }} </Checkbox> @@ -111,19 +111,23 @@ computed, } from "vue"; import { Tooltip, Popover, Checkbox, Divider } from "ant-design-vue"; + import type { CheckboxChangeEvent } from "ant-design-vue/lib/checkbox/interface"; import { SettingOutlined, DragOutlined } from "@ant-design/icons-vue"; import { Icon } from "/@/components/Icon"; import { ScrollContainer } from "/@/components/Container"; import { useI18n } from "/@/hooks/web/useI18n"; import { useTableContext } from "../../hooks/useTableContext"; import { useDesign } from "/@/hooks/web/useDesign"; - import { useSortable } from "/@/hooks/web/useSortable"; + // import { useSortable } from '/@/hooks/web/useSortable'; import { isFunction, isNullAndUnDef } from "/@/utils/is"; import { getPopupContainer as getParentContainer } from "/@/utils"; - import { omit } from "lodash-es"; + import { cloneDeep, omit } from "lodash-es"; + import Sortablejs from "sortablejs"; + import type Sortable from "sortablejs"; interface State { checkAll: boolean; + isInit?: boolean; checkedList: string[]; defaultCheckList: string[]; } @@ -157,7 +161,7 @@ let inited = false; const cachePlainOptions = ref<Options[]>([]); - const plainOptions = ref<Options[]>([]); + const plainOptions = ref<Options[] | any>([]); const plainSortOptions = ref<Options[]>([]); @@ -179,10 +183,12 @@ }); watchEffect(() => { - const columns = table.getColumns(); - if (columns.length) { - init(); - } + setTimeout(() => { + const columns = table.getColumns(); + if (columns.length && !state.isInit) { + init(); + } + }, 0); }); watchEffect(() => { @@ -233,11 +239,12 @@ } }); } + state.isInit = true; state.checkedList = checkList; } // checkAll change - function onCheckAllChange(e: ChangeEvent) { + function onCheckAllChange(e: CheckboxChangeEvent) { const checkList = plainOptions.value.map((item) => item.value); if (e.target.checked) { state.checkedList = checkList; @@ -250,16 +257,15 @@ const indeterminate = computed(() => { const len = plainOptions.value.length; - let checkdedLen = state.checkedList.length; - unref(checkIndex) && checkdedLen--; - return checkdedLen > 0 && checkdedLen < len; + let checkedLen = state.checkedList.length; + unref(checkIndex) && checkedLen--; + return checkedLen > 0 && checkedLen < len; }); // Trigger when check/uncheck a column function onChange(checkedList: string[]) { - const len = plainOptions.value.length; + const len = plainSortOptions.value.length; state.checkAll = checkedList.length === len; - const sortList = unref(plainSortOptions).map((item) => item.value); checkedList.sort((prev, next) => { return sortList.indexOf(prev) - sortList.indexOf(next); @@ -267,6 +273,8 @@ setColumns(checkedList); } + let sortable: Sortable; + let sortableOrder: string[] = []; // reset columns function reset() { state.checkedList = [...state.defaultCheckList]; @@ -274,6 +282,7 @@ plainOptions.value = unref(cachePlainOptions); plainSortOptions.value = unref(cachePlainOptions); setColumns(table.getCacheColumns()); + sortable.sort(sortableOrder); } // Open the pop-up window for drag and drop initialization @@ -285,15 +294,18 @@ const el = columnListEl.$el as any; if (!el) return; // Drag and drop sort - const { initSortable } = useSortable(el, { - handle: ".table-coulmn-drag-icon ", + sortable = Sortablejs.create(unref(el), { + animation: 500, + delay: 400, + delayOnTouchOnly: true, + handle: ".table-column-drag-icon ", onEnd: (evt) => { const { oldIndex, newIndex } = evt; if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) { return; } // Sort column - const columns = getColumns(); + const columns = cloneDeep(plainSortOptions.value); if (oldIndex > newIndex) { columns.splice(newIndex, 0, columns[oldIndex]); @@ -304,24 +316,29 @@ } plainSortOptions.value = columns; - plainOptions.value = columns; - setColumns(columns); + + setColumns( + columns + .map((col: Options) => col.value) + .filter((value: string) => state.checkedList.includes(value)), + ); }, }); - initSortable(); + // 记录原始order 序列 + sortableOrder = sortable.toArray(); inited = true; }); } // Control whether the serial number column is displayed - function handleIndexCheckChange(e: ChangeEvent) { + function handleIndexCheckChange(e: CheckboxChangeEvent) { table.setProps({ showIndexColumn: e.target.checked, }); } // Control whether the check box is displayed - function handleSelectCheckChange(e: ChangeEvent) { + function handleSelectCheckChange(e: CheckboxChangeEvent) { table.setProps({ rowSelection: e.target.checked ? defaultRowSelection : undefined, }); @@ -341,13 +358,13 @@ if (isFixed && !item.width) { item.width = 100; } - table.setCacheColumnsByField?.(item.dataIndex, { fixed: isFixed }); + table.setCacheColumnsByField?.(item.dataIndex as string, { fixed: isFixed }); setColumns(columns); } function setColumns(columns: BasicColumn[] | string[]) { table.setColumns(columns); - const data: ColumnChangeParam[] = unref(plainOptions).map((col) => { + const data: ColumnChangeParam[] = unref(plainSortOptions).map((col) => { const visible = columns.findIndex( (c: BasicColumn | string) => @@ -390,7 +407,7 @@ <style lang="less"> @prefix-cls: ~"@{namespace}-basic-column-setting"; - .table-coulmn-drag-icon { + .table-column-drag-icon { margin: 0 5px; cursor: move; } diff --git a/src/components/Table/src/components/settings/SizeSetting.vue b/src/components/Table/src/components/settings/SizeSetting.vue index 29c62de..6c50359 100644 --- a/src/components/Table/src/components/settings/SizeSetting.vue +++ b/src/components/Table/src/components/settings/SizeSetting.vue @@ -4,7 +4,7 @@ <span>{{ t("component.table.settingDens") }}</span> </template> - <Dropdown placement="bottomCenter" :trigger="['click']" :getPopupContainer="getPopupContainer"> + <Dropdown placement="bottom" :trigger="['click']" :getPopupContainer="getPopupContainer"> <ColumnHeightOutlined /> <template #overlay> <Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef"> diff --git a/src/components/Table/src/hooks/useColumns.ts b/src/components/Table/src/hooks/useColumns.ts index d61933c..2a36cbb 100644 --- a/src/components/Table/src/hooks/useColumns.ts +++ b/src/components/Table/src/hooks/useColumns.ts @@ -1,7 +1,7 @@ import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from "../types/table"; import type { PaginationProps } from "../types/pagination"; import type { ComputedRef } from "vue"; -import { computed, Ref, ref, toRaw, unref, watch } from "vue"; +import { computed, Ref, ref, reactive, toRaw, unref, watch } from "vue"; import { renderEditCell } from "../components/editable"; import { usePermission } from "/@/hooks/web/usePermission"; import { useI18n } from "/@/hooks/web/useI18n"; @@ -152,10 +152,10 @@ export function useColumns( return hasPermission(column.auth) && isIfShow(column); }) .map((column) => { - const { slots, dataIndex, customRender, format, edit, editRow, flag } = column; + const { slots, customRender, format, edit, editRow, flag } = column; if (!slots || !slots?.title) { - column.slots = { title: `header-${dataIndex}`, ...(slots || {}) }; + // column.slots = { title: `header-${dataIndex}`, ...(slots || {}) }; column.customTitle = column.title; Reflect.deleteProperty(column, "title"); } @@ -170,7 +170,7 @@ export function useColumns( if ((edit || editRow) && !isDefaultAction) { column.customRender = renderEditCell(column); } - return column; + return reactive(column); }); }); @@ -197,7 +197,7 @@ export function useColumns( * set columns * @param columnList key|column */ - function setColumns(columnList: Partial<BasicColumn>[] | string[]) { + function setColumns(columnList: Partial<BasicColumn>[] | (string | string[])[]) { const columns = cloneDeep(columnList); if (!isArray(columns)) return; @@ -210,31 +210,23 @@ export function useColumns( const cacheKeys = cacheColumns.map((item) => item.dataIndex); - if (!isString(firstColumn)) { + if (!isString(firstColumn) && !isArray(firstColumn)) { columnsRef.value = columns as BasicColumn[]; } else { - const columnKeys = columns as string[]; + const columnKeys = (columns as (string | string[])[]).map((m) => m.toString()); const newColumns: BasicColumn[] = []; cacheColumns.forEach((item) => { - if (columnKeys.includes(item.dataIndex! || (item.key as string))) { - newColumns.push({ - ...item, - defaultHidden: false, - }); - } else { - newColumns.push({ - ...item, - defaultHidden: true, - }); - } + newColumns.push({ + ...item, + defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || (item.key as string)), + }); }); - // Sort according to another array if (!isEqual(cacheKeys, columns)) { newColumns.sort((prev, next) => { return ( - cacheKeys.indexOf(prev.dataIndex as string) - - cacheKeys.indexOf(next.dataIndex as string) + columnKeys.indexOf(prev.dataIndex?.toString() as string) - + columnKeys.indexOf(next.dataIndex?.toString() as string) ); }); } @@ -306,7 +298,7 @@ export function formatCell(text: string, format: CellFormat, record: Recordable, try { // date type const DATE_FORMAT_PREFIX = "date|"; - if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX)) { + if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX) && text) { const dateFormat = format.replace(DATE_FORMAT_PREFIX, ""); if (!dateFormat) { diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts index 889b3eb..2a99612 100644 --- a/src/components/Table/src/hooks/useDataSource.ts +++ b/src/components/Table/src/hooks/useDataSource.ts @@ -14,7 +14,7 @@ import { import { useTimeoutFn } from "/@/hooks/core/useTimeout"; import { buildUUID } from "/@/utils/uuid"; import { isFunction, isBoolean } from "/@/utils/is"; -import { get, cloneDeep } from "lodash-es"; +import { get, cloneDeep, merge } from "lodash-es"; import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from "../const"; interface ActionType { @@ -196,11 +196,10 @@ export function useDataSource( } function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined { - if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; + // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; index = index ?? dataSourceRef.value?.length; unref(dataSourceRef).splice(index, 0, record); - unref(propsRef).dataSource?.splice(index, 0, record); - return unref(propsRef).dataSource; + return unref(dataSourceRef); } function findTableDataRecord(rowKey: string | number) { @@ -272,17 +271,17 @@ export function useDataSource( const { sortInfo = {}, filterInfo } = searchState; - let params: Recordable = { - ...pageParams, - ...(useSearchForm ? getFieldsValue() : {}), - ...searchInfo, - ...(opt?.searchInfo ?? {}), - ...defSort, - ...sortInfo, - ...filterInfo, - ...(opt?.sortInfo ?? {}), - ...(opt?.filterInfo ?? {}), - }; + let params: Recordable = merge( + pageParams, + useSearchForm ? getFieldsValue() : {}, + searchInfo, + opt?.searchInfo ?? {}, + defSort, + sortInfo, + filterInfo, + opt?.sortInfo ?? {}, + opt?.filterInfo ?? {}, + ); if (beforeFetch && isFunction(beforeFetch)) { params = (await beforeFetch(params)) || params; } @@ -293,7 +292,7 @@ export function useDataSource( const isArrayResult = Array.isArray(res); let resultItems: Recordable[] = isArrayResult ? res : get(res, listField); - const resultTotal: number = isArrayResult ? 0 : get(res, totalField); + const resultTotal: number = isArrayResult ? res.length : get(res, totalField); // 假如数据变少,导致总页数变少并小于当前选中页码,通过getPaginationRef获取到的页码是不正确的,需获取正确的页码再次执行 if (resultTotal) { diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index eb4d024..3fbbee5 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/src/components/Table/src/hooks/useRowSelection.ts @@ -21,11 +21,8 @@ export function useRowSelection( return { selectedRowKeys: unref(selectedRowKeysRef), - hideDefaultSelections: false, onChange: (selectedRowKeys: string[]) => { setSelectedRowKeys(selectedRowKeys); - // selectedRowKeysRef.value = selectedRowKeys; - // selectedRowRef.value = selectedRows; }, ...omit(rowSelection, ["onChange"]), }; diff --git a/src/components/Table/src/hooks/useScrollTo.ts b/src/components/Table/src/hooks/useScrollTo.ts new file mode 100644 index 0000000..b368f81 --- /dev/null +++ b/src/components/Table/src/hooks/useScrollTo.ts @@ -0,0 +1,55 @@ +import type { ComputedRef, Ref } from 'vue'; +import { nextTick, unref } from 'vue'; +import { warn } from '/@/utils/log'; + +export function useTableScrollTo( + tableElRef: Ref<ComponentRef>, + getDataSourceRef: ComputedRef<Recordable[]>, +) { + let bodyEl: HTMLElement | null; + + async function findTargetRowToScroll(targetRowData: Recordable) { + const { id } = targetRowData; + const targetRowEl: HTMLElement | null | undefined = bodyEl?.querySelector( + `[data-row-key="${id}"]`, + ); + //Add a delay to get new dataSource + await nextTick(); + bodyEl?.scrollTo({ + top: targetRowEl?.offsetTop ?? 0, + behavior: 'smooth', + }); + } + + function scrollTo(pos: string): void { + const table = unref(tableElRef); + if (!table) return; + + const tableEl: Element = table.$el; + if (!tableEl) return; + + if (!bodyEl) { + bodyEl = tableEl.querySelector('.ant-table-body'); + if (!bodyEl) return; + } + + const dataSource = unref(getDataSourceRef); + if (!dataSource) return; + + // judge pos type + if (pos === 'top') { + findTargetRowToScroll(dataSource[0]); + } else if (pos === 'bottom') { + findTargetRowToScroll(dataSource[dataSource.length - 1]); + } else { + const targetRowData = dataSource.find((data) => data.id === pos); + if (targetRowData) { + findTargetRowToScroll(targetRowData); + } else { + warn(`id: ${pos} doesn't exist`); + } + } + } + + return { scrollTo }; +} diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts index 9d31a18..8952150 100644 --- a/src/components/Table/src/hooks/useTable.ts +++ b/src/components/Table/src/hooks/useTable.ts @@ -152,9 +152,15 @@ export function useTable(tableProps?: Props): [ expandAll: () => { getTableInstance().expandAll(); }, + expandRows: (keys: string[]) => { + getTableInstance().expandRows(keys); + }, collapseAll: () => { getTableInstance().collapseAll(); }, + scrollTo: (pos: string) => { + getTableInstance().scrollTo(pos); + }, }; return [register, methods]; diff --git a/src/components/Table/src/hooks/useTableExpand.ts b/src/components/Table/src/hooks/useTableExpand.ts index 192c4cd..77e6578 100644 --- a/src/components/Table/src/hooks/useTableExpand.ts +++ b/src/components/Table/src/hooks/useTableExpand.ts @@ -37,6 +37,13 @@ export function useTableExpand( expandedRowKeys.value = keys; } + function expandRows(keys: string[]) { + // use row ID expands the specified table row + const { isTreeTable } = unref(propsRef); + if (!isTreeTable) return; + expandedRowKeys.value = [...expandedRowKeys.value, ...keys]; + } + function getAllKeys(data?: Recordable[]) { const keys: string[] = []; const { childrenColumnName } = unref(propsRef); @@ -54,5 +61,5 @@ export function useTableExpand( expandedRowKeys.value = []; } - return { getExpandOption, expandAll, collapseAll }; + return { getExpandOption, expandAll, expandRows, collapseAll }; } diff --git a/src/components/Table/src/hooks/useTableFooter.ts b/src/components/Table/src/hooks/useTableFooter.ts index e087f74..2754072 100644 --- a/src/components/Table/src/hooks/useTableFooter.ts +++ b/src/components/Table/src/hooks/useTableFooter.ts @@ -8,7 +8,7 @@ export function useTableFooter( propsRef: ComputedRef<BasicTableProps>, scrollRef: ComputedRef<{ x: string | number | true; - y: Nullable<number>; + y: string | number | null; scrollToFirstRowOnChange: boolean; }>, tableElRef: Ref<ComponentRef>, @@ -36,14 +36,13 @@ export function useTableFooter( nextTick(() => { const tableEl = unref(tableElRef); if (!tableEl) return; - const bodyDomList = tableEl.$el.querySelectorAll(".ant-table-body"); - const bodyDom = bodyDomList[0]; + const bodyDom = tableEl.$el.querySelector(".ant-table-content"); useEventListener({ el: bodyDom, name: "scroll", listener: () => { const footerBodyDom = tableEl.$el.querySelector( - ".ant-table-footer .ant-table-body", + ".ant-table-footer .ant-table-content", ) as HTMLDivElement; if (!footerBodyDom || !bodyDom) return; footerBodyDom.scrollLeft = bodyDom.scrollLeft; diff --git a/src/components/Table/src/hooks/useTableScroll.ts b/src/components/Table/src/hooks/useTableScroll.ts index c21b00f..2958a0d 100644 --- a/src/components/Table/src/hooks/useTableScroll.ts +++ b/src/components/Table/src/hooks/useTableScroll.ts @@ -1,6 +1,6 @@ import type { BasicTableProps, TableRowSelection, BasicColumn } from "../types/table"; -import type { Ref, ComputedRef } from "vue"; -import { computed, unref, ref, nextTick, watch } from "vue"; +import { Ref, ComputedRef, ref } from "vue"; +import { computed, unref, nextTick, watch } from "vue"; import { getViewportOffset } from "/@/utils/domUtils"; import { isBoolean } from "/@/utils/is"; import { useWindowSizeFn } from "/@/hooks/event/useWindowSizeFn"; @@ -12,11 +12,12 @@ export function useTableScroll( propsRef: ComputedRef<BasicTableProps>, tableElRef: Ref<ComponentRef>, columnsRef: ComputedRef<BasicColumn[]>, - rowSelectionRef: ComputedRef<TableRowSelection<any> | null>, + rowSelectionRef: ComputedRef<TableRowSelection | null>, getDataSourceRef: ComputedRef<Recordable[]>, + wrapRef: Ref<HTMLElement | null>, + formRef: Ref<ComponentRef>, ) { - const tableHeightRef: Ref<Nullable<number>> = ref(null); - + const tableHeightRef: Ref<Nullable<number | string>> = ref(167); const modalFn = useModalContext(); // Greater than animation time 280 @@ -43,8 +44,8 @@ export function useTableScroll( }); } - function setHeight(heigh: number) { - tableHeightRef.value = heigh; + function setHeight(height: number) { + tableHeightRef.value = height; // Solve the problem of modal adaptive height calculation when the form is placed in the modal modalFn?.redoModalHeight?.(); } @@ -55,7 +56,8 @@ export function useTableScroll( let bodyEl: HTMLElement | null; async function calcTableHeight() { - const { resizeHeightOffset, pagination, maxHeight } = unref(propsRef); + const { resizeHeightOffset, pagination, maxHeight, isCanResizeParent, useSearchForm } = + unref(propsRef); const tableData = unref(getDataSourceRef); const table = unref(tableElRef); @@ -88,20 +90,17 @@ export function useTableScroll( bodyEl!.style.height = "unset"; - if (!unref(getCanResize) || tableData.length === 0) return; + if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0) return; await nextTick(); - //Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight + // Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight const headEl = tableEl.querySelector(".ant-table-thead "); if (!headEl) return; - // Table height from bottom - const { bottomIncludeBody } = getViewportOffset(headEl); // Table height from bottom height-custom offset - - const paddingHeight = 32; + let paddingHeight = 32; // Pager height let paginationHeight = 2; if (!isBoolean(pagination)) { @@ -132,6 +131,35 @@ export function useTableScroll( headerHeight = (headEl as HTMLElement).offsetHeight; } + let bottomIncludeBody = 0; + if (unref(wrapRef) && isCanResizeParent) { + const tablePadding = 12; + const formMargin = 16; + let paginationMargin = 10; + const wrapHeight = unref(wrapRef)?.offsetHeight ?? 0; + + let formHeight = unref(formRef)?.$el.offsetHeight ?? 0; + if (formHeight) { + formHeight += formMargin; + } + if (isBoolean(pagination) && !pagination) { + paginationMargin = 0; + } + if (isBoolean(useSearchForm) && !useSearchForm) { + paddingHeight = 0; + } + + const headerCellHeight = + (tableEl.querySelector(".ant-table-title") as HTMLElement)?.offsetHeight ?? 0; + + console.log(wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin); + bottomIncludeBody = + wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin; + } else { + // Table height from bottom + bottomIncludeBody = getViewportOffset(headEl).bottomIncludeBody; + } + let height = bottomIncludeBody - (resizeHeightOffset || 0) - @@ -139,7 +167,6 @@ export function useTableScroll( paginationHeight - footerHeight - headerHeight; - height = (height > maxHeight! ? (maxHeight as number) : height) ?? height; setHeight(height); @@ -164,7 +191,7 @@ export function useTableScroll( const columns = unref(columnsRef).filter((item) => !item.defaultHidden); columns.forEach((item) => { - width += Number.parseInt(item.width as string) || 0; + width += Number.parseFloat(item.width as string) || 0; }); const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, "width")); diff --git a/src/components/Table/src/props.ts b/src/components/Table/src/props.ts index cc604a2..77f0e69 100644 --- a/src/components/Table/src/props.ts +++ b/src/components/Table/src/props.ts @@ -10,14 +10,15 @@ import type { SizeType, } from "./types/table"; import type { FormProps } from "/@/components/Form"; + import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from "./const"; import { propTypes } from "/@/utils/propTypes"; export const basicProps = { - clickToRowSelect: propTypes.bool.def(true), - isTreeTable: propTypes.bool.def(false), + clickToRowSelect: { type: Boolean, default: true }, + isTreeTable: Boolean, tableSetting: propTypes.shape<TableSetting>({}), - inset: propTypes.bool, + inset: Boolean, sortFn: { type: Function as PropType<(sortInfo: SorterResult) => any>, default: DEFAULT_SORT_FN, @@ -26,10 +27,10 @@ export const basicProps = { type: Function as PropType<(data: Partial<Recordable<string[]>>) => any>, default: DEFAULT_FILTER_FN, }, - showTableSetting: propTypes.bool, - autoCreateKey: propTypes.bool.def(true), - striped: propTypes.bool.def(true), - showSummary: propTypes.bool, + showTableSetting: Boolean, + autoCreateKey: { type: Boolean, default: true }, + striped: { type: Boolean, default: true }, + showSummary: Boolean, summaryFunc: { type: [Function, Array] as PropType<(...arg: any[]) => any[]>, default: null, @@ -39,7 +40,7 @@ export const basicProps = { default: null, }, indentSize: propTypes.number.def(24), - canColDrag: propTypes.bool.def(true), + canColDrag: { type: Boolean, default: true }, api: { type: Function as PropType<(...arg: any[]) => Promise<any>>, default: null, @@ -63,8 +64,8 @@ export const basicProps = { }, }, // 立即请求接口 - immediate: propTypes.bool.def(true), - emptyDataIsShowTable: propTypes.bool.def(true), + immediate: { type: Boolean, default: true }, + emptyDataIsShowTable: { type: Boolean, default: true }, // 额外的请求参数 searchInfo: { type: Object as PropType<Recordable>, @@ -86,7 +87,7 @@ export const basicProps = { type: [Array] as PropType<BasicColumn[]>, default: () => [], }, - showIndexColumn: propTypes.bool.def(true), + showIndexColumn: { type: Boolean, default: true }, indexColumnProps: { type: Object as PropType<BasicColumn>, default: null, @@ -95,8 +96,9 @@ export const basicProps = { type: Object as PropType<BasicColumn>, default: null, }, - ellipsis: propTypes.bool.def(true), - canResize: propTypes.bool.def(true), + ellipsis: { type: Boolean, default: true }, + isCanResizeParent: { type: Boolean, default: false }, + canResize: { type: Boolean, default: true }, clearSelectOnPageChange: propTypes.bool, resizeHeightOffset: propTypes.number.def(0), rowSelection: { diff --git a/src/components/Table/src/types/componentType.ts b/src/components/Table/src/types/componentType.ts index 0bbed62..fb6f7ad 100644 --- a/src/components/Table/src/types/componentType.ts +++ b/src/components/Table/src/types/componentType.ts @@ -3,6 +3,7 @@ export type ComponentType = | "InputNumber" | "Select" | "ApiSelect" + | "AutoComplete" | "ApiTreeSelect" | "Checkbox" | "Switch" diff --git a/src/components/Table/src/types/pagination.ts b/src/components/Table/src/types/pagination.ts index 81f0a1f..c30660f 100644 --- a/src/components/Table/src/types/pagination.ts +++ b/src/components/Table/src/types/pagination.ts @@ -7,9 +7,18 @@ interface PaginationRenderProps { originalElement: any; } +type PaginationPositon = + | "topLeft" + | "topCenter" + | "topRight" + | "bottomLeft" + | "bottomCenter" + | "bottomRight"; + export declare class PaginationConfig extends Pagination { - position?: "top" | "bottom" | "both"; + position?: PaginationPositon[]; } + export interface PaginationProps { /** * total number of data items @@ -96,4 +105,11 @@ export interface PaginationProps { * @type Function */ itemRender?: (props: PaginationRenderProps) => VNodeChild | JSX.Element; + + /** + * specify the position of Pagination + * @default ['bottomRight'] + * @type string[] + */ + position?: PaginationPositon[]; } diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts index fffa338..fcedef5 100644 --- a/src/components/Table/src/types/table.ts +++ b/src/components/Table/src/types/table.ts @@ -1,10 +1,8 @@ import type { VNodeChild } from "vue"; import type { PaginationProps } from "./pagination"; import type { FormProps } from "/@/components/Form"; -import type { - ColumnProps, - TableRowSelection as ITableRowSelection, -} from "ant-design-vue/lib/table/interface"; +import type { TableRowSelection as ITableRowSelection } from "ant-design-vue/lib/table/interface"; +import type { ColumnProps } from "ant-design-vue/lib/table"; import { ComponentType } from "./componentType"; import { VueNode } from "/@/utils/propTypes"; @@ -89,7 +87,9 @@ export interface TableActionType { getSelectRows: <T = Recordable>() => T[]; clearSelectedRowKeys: () => void; expandAll: () => void; + expandRows: (keys: string[]) => void; collapseAll: () => void; + scrollTo: (pos: string) => void; // pos: id | "top" | "bottom" getSelectRowKeys: () => string[]; deleteSelectRowByKey: (key: string) => void; setPagination: (info: Partial<PaginationProps>) => void; @@ -191,6 +191,8 @@ export interface BasicTableProps<T = any> { actionColumn?: BasicColumn; // 文本超过宽度是否显示。。。 ellipsis?: boolean; + // 是否继承父级高度(父级高度-表单高度-padding高度) + isCanResizeParent?: boolean; // 是否可以自适应高度 canResize?: boolean; // 自适应高度偏移, 计算结果-偏移量 @@ -410,7 +412,7 @@ export type CellFormat = | Map<string | number, any>; // @ts-ignore -export interface BasicColumn extends ColumnProps { +export interface BasicColumn extends ColumnProps<Recordable> { children?: BasicColumn[]; filters?: { text: string; @@ -439,7 +441,14 @@ export interface BasicColumn extends ColumnProps { editRow?: boolean; editable?: boolean; editComponent?: ComponentType; - editComponentProps?: Recordable; + editComponentProps?: + | ((opt: { + text: string | number | boolean | Recordable; + record: Recordable; + column: BasicColumn; + index: number; + }) => Recordable) + | Recordable; editRule?: boolean | ((text: string, record: Recordable) => Promise<string>); editValueMap?: (value: any) => string; onEditRow?: () => void; @@ -447,6 +456,15 @@ export interface BasicColumn extends ColumnProps { auth?: RoleEnum | RoleEnum[] | string | string[]; // 业务控制是否显示 ifShow?: boolean | ((column: BasicColumn) => boolean); + // 自定义修改后显示的内容 + editRender?: (opt: { + text: string | number | boolean | Recordable; + record: Recordable; + column: BasicColumn; + index: number; + }) => VNodeChild | JSX.Element; + // 动态 Disabled + editDynamicDisabled?: boolean | ((record: Recordable) => boolean); } export type ColumnChangeParam = { diff --git a/src/components/Table/src/types/tableAction.ts b/src/components/Table/src/types/tableAction.ts index 9a6522a..a3f0ca5 100644 --- a/src/components/Table/src/types/tableAction.ts +++ b/src/components/Table/src/types/tableAction.ts @@ -23,4 +23,17 @@ export interface PopConfirm { confirm: Fn; cancel?: Fn; icon?: string; + placement?: + | "top" + | "left" + | "right" + | "bottom" + | "topLeft" + | "topRight" + | "leftTop" + | "leftBottom" + | "rightTop" + | "rightBottom" + | "bottomLeft" + | "bottomRight"; } diff --git a/src/components/Tree/index.ts b/src/components/Tree/index.ts index fe53b98..14cb947 100644 --- a/src/components/Tree/index.ts +++ b/src/components/Tree/index.ts @@ -1,5 +1,6 @@ -import BasicTree from "./src/Tree.vue"; +import BasicTree from "./src/BasicTree.vue"; +import "./style"; export { BasicTree }; export type { ContextMenuItem } from "/@/hooks/web/useContextMenu"; -export * from "./src/typing"; +export * from "./src/types/tree"; diff --git a/src/components/Tree/src/Tree.vue b/src/components/Tree/src/BasicTree.vue similarity index 68% rename from src/components/Tree/src/Tree.vue rename to src/components/Tree/src/BasicTree.vue index 073dcf4..9a60d49 100644 --- a/src/components/Tree/src/Tree.vue +++ b/src/components/Tree/src/BasicTree.vue @@ -1,5 +1,13 @@ <script lang="tsx"> - import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from "./typing"; + import type { CSSProperties } from "vue"; + import type { + FieldNames, + TreeState, + TreeItem, + KeyType, + CheckKeys, + TreeActionType, + } from "./types/tree"; import { defineComponent, @@ -10,48 +18,31 @@ watchEffect, toRaw, watch, - CSSProperties, onMounted, } from "vue"; - import { Tree, Empty } from "ant-design-vue"; + import TreeHeader from "./components/TreeHeader.vue"; + import { Tree, Spin, Empty } from "ant-design-vue"; import { TreeIcon } from "./TreeIcon"; - import TreeHeader from "./TreeHeader.vue"; import { ScrollContainer } from "/@/components/Container"; - - import { omit, get, difference } from "lodash-es"; + import { omit, get, difference, cloneDeep } from "lodash-es"; import { isArray, isBoolean, isEmpty, isFunction } from "/@/utils/is"; import { extendSlots, getSlot } from "/@/utils/helper/tsxHelper"; - import { filter, treeToList } from "/@/utils/helper/treeHelper"; - - import { useTree } from "./useTree"; + import { filter, treeToList, eachTree } from "/@/utils/helper/treeHelper"; + import { useTree } from "./hooks/useTree"; import { useContextMenu } from "/@/hooks/web/useContextMenu"; - import { useDesign } from "/@/hooks/web/useDesign"; - - import { basicProps } from "./props"; import { CreateContextOptions } from "/@/components/ContextMenu"; + import { treeEmits, treeProps } from "./types/tree"; + import { createBEM } from "/@/utils/bem"; - import { CheckEvent } from "./typing"; - - interface State { - expandedKeys: Keys; - selectedKeys: Keys; - checkedKeys: CheckKeys; - checkStrictly: boolean; - } export default defineComponent({ name: "BasicTree", inheritAttrs: false, - props: basicProps, - emits: [ - "update:expandedKeys", - "update:selectedKeys", - "update:value", - "change", - "check", - "update:searchValue", - ], + props: treeProps, + emits: treeEmits, setup(props, { attrs, slots, emit, expose }) { - const state = reactive<State>({ + const [bem] = createBEM("tree"); + + const state = reactive<TreeState>({ checkStrictly: props.checkStrictly, expandedKeys: props.expandedKeys || [], selectedKeys: props.selectedKeys || [], @@ -67,15 +58,14 @@ const treeDataRef = ref<TreeItem[]>([]); const [createContextMenu] = useContextMenu(); - const { prefixCls } = useDesign("basic-tree"); - const getReplaceFields = computed((): Required<ReplaceFields> => { - const { replaceFields } = props; + const getFieldNames = computed((): Required<FieldNames> => { + const { fieldNames } = props; return { children: "children", title: "title", key: "key", - ...replaceFields, + ...fieldNames, }; }); @@ -88,19 +78,19 @@ selectedKeys: state.selectedKeys, checkedKeys: state.checkedKeys, checkStrictly: state.checkStrictly, - replaceFields: unref(getReplaceFields), - "onUpdate:expandedKeys": (v: Keys) => { + fieldNames: unref(getFieldNames), + "onUpdate:expandedKeys": (v: KeyType[]) => { state.expandedKeys = v; emit("update:expandedKeys", v); }, - "onUpdate:selectedKeys": (v: Keys) => { + "onUpdate:selectedKeys": (v: KeyType[]) => { state.selectedKeys = v; emit("update:selectedKeys", v); }, - onCheck: (v: CheckKeys, e: CheckEvent) => { - let currentValue = toRaw(state.checkedKeys) as Keys; + onCheck: (v: CheckKeys, e) => { + let currentValue = toRaw(state.checkedKeys) as KeyType[]; if (isArray(currentValue) && searchState.startSearch) { - const { key } = unref(getReplaceFields); + const { key } = unref(getFieldNames); currentValue = difference(currentValue, getChildrenKeys(e.node.$attrs.node[key])); if (e.checked) { currentValue.push(e.node.$attrs.node[key]); @@ -136,7 +126,8 @@ getAllKeys, getChildrenKeys, getEnabledKeys, - } = useTree(treeDataRef, getReplaceFields); + getSelectedNode, + } = useTree(treeDataRef, getFieldNames); function getIcon(params: Recordable, icon?: string) { if (!icon) { @@ -162,17 +153,18 @@ contextMenuOptions.items = menuList; } if (!contextMenuOptions.items?.length) return; + contextMenuOptions.items = contextMenuOptions.items.filter((item) => !item.hidden); createContextMenu(contextMenuOptions); } - function setExpandedKeys(keys: Keys) { + function setExpandedKeys(keys: KeyType[]) { state.expandedKeys = keys; } function getExpandedKeys() { return state.expandedKeys; } - function setSelectedKeys(keys: Keys) { + function setSelectedKeys(keys: KeyType[]) { state.selectedKeys = keys; } @@ -189,11 +181,11 @@ } function checkAll(checkAll: boolean) { - state.checkedKeys = checkAll ? getEnabledKeys() : ([] as Keys); + state.checkedKeys = checkAll ? getEnabledKeys() : ([] as KeyType[]); } function expandAll(expandAll: boolean) { - state.expandedKeys = expandAll ? getAllKeys() : ([] as Keys); + state.expandedKeys = expandAll ? getAllKeys() : ([] as KeyType[]); } function onStrictlyChange(strictly: boolean) { @@ -231,21 +223,21 @@ const { filterFn, checkable, expandOnSearch, checkOnSearch, selectedOnSearch } = unref(props); searchState.startSearch = true; - const { title: titleField, key: keyField } = unref(getReplaceFields); + const { title: titleField, key: keyField } = unref(getFieldNames); const matchedKeys: string[] = []; searchState.searchData = filter( unref(treeDataRef), (node) => { const result = filterFn - ? filterFn(searchValue, node, unref(getReplaceFields)) + ? filterFn(searchValue, node, unref(getFieldNames)) : node[titleField]?.includes(searchValue) ?? false; if (result) { matchedKeys.push(node[keyField]); } return result; }, - unref(getReplaceFields), + unref(getFieldNames), ); if (expandOnSearch) { @@ -310,6 +302,7 @@ () => { state.checkedKeys = toRaw(props.value || []); }, + { immediate: true }, ); watch( @@ -321,15 +314,6 @@ }, ); - // watchEffect(() => { - // console.log('======================'); - // console.log(props.value); - // console.log('======================'); - // if (props.value) { - // state.checkedKeys = props.value; - // } - // }); - watchEffect(() => { state.checkStrictly = props.checkStrictly; }); @@ -345,6 +329,7 @@ insertNodesByKey, deleteNodeByKey, updateNodeByKey, + getSelectedNode, checkAll, expandAll, filterByLevel: (level: number) => { @@ -358,8 +343,6 @@ }, }; - expose(instance); - function renderAction(node: TreeItem) { const { actionList } = props; if (!actionList || actionList.length === 0) return; @@ -374,29 +357,25 @@ if (!nodeShow) return null; return ( - <span key={index} class={`${prefixCls}__action`}> + <span key={index} class={bem("action")}> {item.render(node)} </span> ); }); } - function renderTreeNode({ data, level }: { data: TreeItem[] | undefined; level: number }) { - if (!data) { - return null; - } - const searchText = searchState.searchText; - const { highlight } = unref(props); - return data.map((item) => { + const treeData = computed(() => { + const data = cloneDeep(getTreeData.value); + eachTree(data, (item, _parent) => { + const searchText = searchState.searchText; + const { highlight } = unref(props); const { title: titleField, key: keyField, children: childrenField, - } = unref(getReplaceFields); + } = unref(getFieldNames); - const propsData = omit(item, "title"); - const icon = getIcon({ ...item, level }, item.icon); - const children = get(item, childrenField) || []; + const icon = getIcon(item, item.icon); const title = get(item, titleField); const searchIdx = searchText ? title.indexOf(searchText) : -1; @@ -405,7 +384,7 @@ const highlightStyle = `color: ${isBoolean(highlight) ? "#f50" : highlight}`; const titleDom = isHighlight ? ( - <span class={unref(getBindValues)?.blockNode ? `${prefixCls}__content` : ""}> + <span class={unref(getBindValues)?.blockNode ? `${bem("content")}` : ""}> <span>{title.substr(0, searchIdx)}</span> <span style={highlightStyle}>{searchText}</span> <span>{title.substr(searchIdx + (searchText as string).length)}</span> @@ -413,41 +392,35 @@ ) : ( title ); - - return ( - <Tree.TreeNode {...propsData} node={toRaw(item)} key={get(item, keyField)}> - {{ - title: () => ( - <span - class={`${prefixCls}-title pl-2`} - onClick={handleClickNode.bind(null, item[keyField], item[childrenField])} - > - {item.slots?.title ? ( - getSlot(slots, item.slots?.title, item) - ) : ( - <> - {icon && <TreeIcon icon={icon} />} - {titleDom} - {/*{get(item, titleField)}*/} - <span class={`${prefixCls}__actions`}> - {renderAction({ ...item, level })} - </span> - </> - )} - </span> - ), - default: () => renderTreeNode({ data: children, level: level + 1 }), - }} - </Tree.TreeNode> + item[titleField] = ( + <span + class={`${bem("title")} pl-2`} + onClick={handleClickNode.bind(null, item[keyField], item[childrenField])} + > + {slots?.title ? ( + getSlot(slots, "title", item) + ) : ( + <> + {icon && <TreeIcon icon={icon} />} + {titleDom} + <span class={bem("actions")}>{renderAction(item)}</span> + </> + )} + </span> ); + return item; }); - } + return data; + }); + + expose(instance); + return () => { const { title, helpMessage, toolbar, search, checkable } = props; const showTitle = title || toolbar || search || slots.headerTitle; const scrollStyle: CSSProperties = { height: "calc(100% - 38px)" }; return ( - <div class={[prefixCls, "h-full", attrs.class]}> + <div class={[bem(), "h-full", attrs.class]}> {showTitle && ( <TreeHeader checkable={checkable} @@ -464,67 +437,19 @@ {extendSlots(slots)} </TreeHeader> )} - <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}> - <Tree {...unref(getBindValues)} showIcon={false}> - {{ - // switcherIcon: () => <DownOutlined />, - default: () => renderTreeNode({ data: unref(getTreeData), level: 1 }), - ...extendSlots(slots), - }} - </Tree> - </ScrollContainer> - - <Empty v-show={unref(getNotFound)} image={Empty.PRESENTED_IMAGE_SIMPLE} class="!mt-4" /> + <Spin spinning={unref(props.loading)} tip="加载中..."> + <ScrollContainer style={scrollStyle} v-show={!unref(getNotFound)}> + <Tree {...unref(getBindValues)} showIcon={false} treeData={treeData.value} /> + </ScrollContainer> + <Empty + v-show={unref(getNotFound)} + image={Empty.PRESENTED_IMAGE_SIMPLE} + class="!mt-4" + /> + </Spin> </div> ); }; }, }); </script> -<style lang="less"> - @prefix-cls: ~"@{namespace}-basic-tree"; - - .@{prefix-cls} { - background-color: @component-background; - - .ant-tree-node-content-wrapper { - position: relative; - - .ant-tree-title { - position: absolute; - left: 0; - width: 100%; - } - } - - &-title { - position: relative; - display: flex; - align-items: center; - width: 100%; - padding-right: 10px; - - &:hover { - .@{prefix-cls}__action { - visibility: visible; - } - } - } - - &__content { - overflow: hidden; - } - - &__actions { - position: absolute; - top: 2px; - right: 3px; - display: flex; - } - - &__action { - margin-left: 4px; - visibility: hidden; - } - } -</style> diff --git a/src/components/Tree/src/TreeHeader.vue b/src/components/Tree/src/TreeHeader.vue deleted file mode 100644 index e12c556..0000000 --- a/src/components/Tree/src/TreeHeader.vue +++ /dev/null @@ -1,183 +0,0 @@ -<template> - <div class="flex px-2 py-1.5 items-center basic-tree-header"> - <slot name="headerTitle" v-if="$slots.headerTitle"></slot> - <BasicTitle :helpMessage="helpMessage" v-if="!$slots.headerTitle && title"> - {{ title }} - </BasicTitle> - - <div - class="flex flex-1 justify-self-stretch items-center cursor-pointer" - v-if="search || toolbar" - > - <div :class="getInputSearchCls" v-if="search"> - <InputSearch - :placeholder="t('common.searchText')" - size="small" - allowClear - v-model:value="searchValue" - /> - </div> - <Dropdown @click.prevent v-if="toolbar"> - <Icon icon="ion:ellipsis-vertical" /> - <template #overlay> - <Menu @click="handleMenuClick"> - <template v-for="item in toolbarList" :key="item.value"> - <MenuItem v-bind="{ key: item.value }"> - {{ item.label }} - </MenuItem> - <MenuDivider v-if="item.divider" /> - </template> - </Menu> - </template> - </Dropdown> - </div> - </div> -</template> -<script lang="ts"> - import { PropType } from "vue"; - import { defineComponent, computed, ref, watch } from "vue"; - - import { Dropdown, Menu, Input } from "ant-design-vue"; - import { Icon } from "/@/components/Icon"; - import { BasicTitle } from "/@/components/Basic"; - - import { propTypes } from "/@/utils/propTypes"; - - import { useI18n } from "/@/hooks/web/useI18n"; - import { useDebounceFn } from "@vueuse/core"; - - enum ToolbarEnum { - SELECT_ALL, - UN_SELECT_ALL, - EXPAND_ALL, - UN_EXPAND_ALL, - CHECK_STRICTLY, - CHECK_UN_STRICTLY, - } - - interface MenuInfo { - key: ToolbarEnum; - } - export default defineComponent({ - name: "BasicTreeHeader", - components: { - BasicTitle, - Icon, - Dropdown, - Menu, - MenuItem: Menu.Item, - MenuDivider: Menu.Divider, - InputSearch: Input.Search, - }, - props: { - helpMessage: { - type: [String, Array] as PropType<string | string[]>, - default: "", - }, - title: propTypes.string, - toolbar: propTypes.bool, - checkable: propTypes.bool, - search: propTypes.bool, - checkAll: propTypes.func, - expandAll: propTypes.func, - searchText: propTypes.string, - }, - emits: ["strictly-change", "search"], - setup(props, { emit, slots }) { - const { t } = useI18n(); - const searchValue = ref(""); - - const getInputSearchCls = computed(() => { - const titleExists = slots.headerTitle || props.title; - return [ - "mr-1", - "w-full", - // titleExists ? 'w-2/3' : 'w-full', - { - ["ml-5"]: titleExists, - }, - ]; - }); - - const toolbarList = computed(() => { - const { checkable } = props; - const defaultToolbarList = [ - { label: t("component.tree.expandAll"), value: ToolbarEnum.EXPAND_ALL }, - { - label: t("component.tree.unExpandAll"), - value: ToolbarEnum.UN_EXPAND_ALL, - divider: checkable, - }, - ]; - - return checkable - ? [ - { label: t("component.tree.selectAll"), value: ToolbarEnum.SELECT_ALL }, - { - label: t("component.tree.unSelectAll"), - value: ToolbarEnum.UN_SELECT_ALL, - divider: checkable, - }, - ...defaultToolbarList, - { label: t("component.tree.checkStrictly"), value: ToolbarEnum.CHECK_STRICTLY }, - { label: t("component.tree.checkUnStrictly"), value: ToolbarEnum.CHECK_UN_STRICTLY }, - ] - : defaultToolbarList; - }); - - function handleMenuClick(e: MenuInfo) { - const { key } = e; - switch (key) { - case ToolbarEnum.SELECT_ALL: - props.checkAll?.(true); - break; - case ToolbarEnum.UN_SELECT_ALL: - props.checkAll?.(false); - break; - case ToolbarEnum.EXPAND_ALL: - props.expandAll?.(true); - break; - case ToolbarEnum.UN_EXPAND_ALL: - props.expandAll?.(false); - break; - case ToolbarEnum.CHECK_STRICTLY: - emit("strictly-change", false); - break; - case ToolbarEnum.CHECK_UN_STRICTLY: - emit("strictly-change", true); - break; - } - } - - function emitChange(value?: string): void { - emit("search", value); - } - const debounceEmitChange = useDebounceFn(emitChange, 200); - - watch( - () => searchValue.value, - (v) => { - debounceEmitChange(v); - }, - ); - watch( - () => props.searchText, - (v) => { - if (v !== searchValue.value) { - searchValue.value = v; - } - }, - ); - // function handleSearch(e: ChangeEvent): void { - // debounceEmitChange(e.target.value); - // } - - return { t, toolbarList, handleMenuClick, searchValue, getInputSearchCls }; - }, - }); -</script> -<style lang="less" scoped> - .basic-tree-header { - border-bottom: 1px solid @border-color-base; - } -</style> diff --git a/src/components/Tree/src/TreeIcon.ts b/src/components/Tree/src/TreeIcon.ts index cd5a81e..8b0ee07 100644 --- a/src/components/Tree/src/TreeIcon.ts +++ b/src/components/Tree/src/TreeIcon.ts @@ -1,14 +1,10 @@ import type { VNode, FunctionalComponent } from "vue"; import { h } from "vue"; -import { isString } from "/@/utils/is"; +import { isString } from "@vue/shared"; import { Icon } from "/@/components/Icon"; -export interface ComponentProps { - icon: VNode | string; -} - -export const TreeIcon: FunctionalComponent = ({ icon }: ComponentProps) => { +export const TreeIcon: FunctionalComponent = ({ icon }: { icon: VNode | string }) => { if (!icon) return null; if (isString(icon)) { return h(Icon, { icon, class: "mr-1" }); diff --git a/src/components/Tree/src/components/TreeHeader.vue b/src/components/Tree/src/components/TreeHeader.vue new file mode 100644 index 0000000..a308af0 --- /dev/null +++ b/src/components/Tree/src/components/TreeHeader.vue @@ -0,0 +1,170 @@ +<template> + <div :class="bem()" class="flex px-2 py-1.5 items-center"> + <slot name="headerTitle" v-if="slots.headerTitle"></slot> + <BasicTitle :helpMessage="helpMessage" v-if="!slots.headerTitle && title"> + {{ title }} + </BasicTitle> + <div + class="flex items-center flex-1 cursor-pointer justify-self-stretch" + v-if="search || toolbar" + > + <div :class="getInputSearchCls" v-if="search"> + <InputSearch + :placeholder="t('common.searchText')" + size="small" + allowClear + v-model:value="searchValue" + /> + </div> + <Dropdown @click.prevent v-if="toolbar"> + <Icon icon="ion:ellipsis-vertical" /> + <template #overlay> + <Menu @click="handleMenuClick"> + <template v-for="item in toolbarList" :key="item.value"> + <MenuItem v-bind="{ key: item.value }"> + {{ item.label }} + </MenuItem> + <MenuDivider v-if="item.divider" /> + </template> + </Menu> + </template> + </Dropdown> + </div> + </div> +</template> +<script lang="ts" setup> + import { computed, ref, watch, useSlots } from "vue"; + import { Dropdown, Menu, MenuItem, MenuDivider, InputSearch } from "ant-design-vue"; + import { Icon } from "/@/components/Icon"; + import { BasicTitle } from "/@/components/Basic"; + import { useI18n } from "/@/hooks/web/useI18n"; + import { useDebounceFn } from "@vueuse/core"; + import { createBEM } from "/@/utils/bem"; + import { ToolbarEnum } from "../types/tree"; + + const searchValue = ref(""); + + const [bem] = createBEM("tree-header"); + + const props = defineProps({ + helpMessage: { + type: [String, Array] as PropType<string | string[]>, + default: "", + }, + title: { + type: String, + default: "", + }, + toolbar: { + type: Boolean, + default: false, + }, + checkable: { + type: Boolean, + default: false, + }, + search: { + type: Boolean, + default: false, + }, + searchText: { + type: String, + default: "", + }, + checkAll: { + type: Function, + default: undefined, + }, + expandAll: { + type: Function, + default: undefined, + }, + } as const); + const emit = defineEmits(["strictly-change", "search"]); + + const slots = useSlots(); + const { t } = useI18n(); + + const getInputSearchCls = computed(() => { + const titleExists = slots.headerTitle || props.title; + return [ + "mr-1", + "w-full", + { + ["ml-5"]: titleExists, + }, + ]; + }); + + const toolbarList = computed(() => { + const { checkable } = props; + const defaultToolbarList = [ + { label: t("component.tree.expandAll"), value: ToolbarEnum.EXPAND_ALL }, + { + label: t("component.tree.unExpandAll"), + value: ToolbarEnum.UN_EXPAND_ALL, + divider: checkable, + }, + ]; + + return checkable + ? [ + { label: t("component.tree.selectAll"), value: ToolbarEnum.SELECT_ALL }, + { + label: t("component.tree.unSelectAll"), + value: ToolbarEnum.UN_SELECT_ALL, + divider: checkable, + }, + ...defaultToolbarList, + { label: t("component.tree.checkStrictly"), value: ToolbarEnum.CHECK_STRICTLY }, + { label: t("component.tree.checkUnStrictly"), value: ToolbarEnum.CHECK_UN_STRICTLY }, + ] + : defaultToolbarList; + }); + + function handleMenuClick(e: { key: ToolbarEnum }) { + const { key } = e; + switch (key) { + case ToolbarEnum.SELECT_ALL: + props.checkAll?.(true); + break; + case ToolbarEnum.UN_SELECT_ALL: + props.checkAll?.(false); + break; + case ToolbarEnum.EXPAND_ALL: + props.expandAll?.(true); + break; + case ToolbarEnum.UN_EXPAND_ALL: + props.expandAll?.(false); + break; + case ToolbarEnum.CHECK_STRICTLY: + emit("strictly-change", false); + break; + case ToolbarEnum.CHECK_UN_STRICTLY: + emit("strictly-change", true); + break; + } + } + + function emitChange(value?: string): void { + emit("search", value); + } + + const debounceEmitChange = useDebounceFn(emitChange, 200); + + watch( + () => searchValue.value, + (v) => { + debounceEmitChange(v); + }, + ); + + watch( + () => props.searchText, + (v) => { + if (v !== searchValue.value) { + searchValue.value = v; + } + }, + ); +</script> diff --git a/src/components/Tree/src/useTree.ts b/src/components/Tree/src/hooks/useTree.ts similarity index 78% rename from src/components/Tree/src/useTree.ts rename to src/components/Tree/src/hooks/useTree.ts index 92e966e..17345a2 100644 --- a/src/components/Tree/src/useTree.ts +++ b/src/components/Tree/src/hooks/useTree.ts @@ -1,19 +1,16 @@ -import type { InsertNodeParams, Keys, ReplaceFields } from "./typing"; -import type { Ref, ComputedRef } from "vue"; -import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; - -import { cloneDeep } from "lodash-es"; -import { unref } from "vue"; -import { forEach } from "/@/utils/helper/treeHelper"; - -export function useTree( - treeDataRef: Ref<TreeDataItem[]>, - getReplaceFields: ComputedRef<ReplaceFields>, -) { +import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from '../types/tree'; +import type { Ref, ComputedRef } from 'vue'; +import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; + +import { cloneDeep } from 'lodash-es'; +import { unref } from 'vue'; +import { forEach } from '/@/utils/helper/treeHelper'; + +export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: ComputedRef<FieldNames>) { function getAllKeys(list?: TreeDataItem[]) { const keys: string[] = []; const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return keys; for (let index = 0; index < treeData.length; index++) { @@ -24,13 +21,14 @@ export function useTree( keys.push(...(getAllKeys(children) as string[])); } } - return keys as Keys; + return keys as KeyType[]; } + // get keys that can be checked and selected function getEnabledKeys(list?: TreeDataItem[]) { const keys: string[] = []; const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return keys; for (let index = 0; index < treeData.length; index++) { @@ -41,13 +39,13 @@ export function useTree( keys.push(...(getEnabledKeys(children) as string[])); } } - return keys as Keys; + return keys as KeyType[]; } - function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys { - const keys: Keys = []; + function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) { + const keys: KeyType[] = []; const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return keys; for (let index = 0; index < treeData.length; index++) { const node = treeData[index]; @@ -63,14 +61,14 @@ export function useTree( } } } - return keys as Keys; + return keys as KeyType[]; } // Update node function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) { if (!key) return; const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return; @@ -97,8 +95,8 @@ export function useTree( for (let index = 0; index < data.length; index++) { const item = data[index]; - const { key: keyField, children: childrenField } = unref(getReplaceFields); - const key = keyField ? item[keyField] : ""; + const { key: keyField, children: childrenField } = unref(getFieldNames); + const key = keyField ? item[keyField] : ''; const children = childrenField ? item[childrenField] : []; res.push(key); if (children && children.length && currentLevel < level) { @@ -112,14 +110,14 @@ export function useTree( /** * 添加节点 */ - function insertNodeByKey({ parentKey = null, node, push = "push" }: InsertNodeParams) { + function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!parentKey) { treeData[push](node); treeDataRef.value = treeData; return; } - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return; forEach(treeData, (treeItem) => { @@ -134,7 +132,7 @@ export function useTree( /** * 批量添加节点 */ - function insertNodesByKey({ parentKey = null, list, push = "push" }: InsertNodeParams) { + function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!list || list.length < 1) { return; @@ -144,7 +142,7 @@ export function useTree( treeData[push](list[i]); } } else { - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return; forEach(treeData, (treeItem) => { @@ -163,7 +161,7 @@ export function useTree( function deleteNodeByKey(key: string, list?: TreeDataItem[]) { if (!key) return; const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getReplaceFields); + const { key: keyField, children: childrenField } = unref(getFieldNames); if (!childrenField || !keyField) return; for (let index = 0; index < treeData.length; index++) { @@ -178,6 +176,23 @@ export function useTree( } } } + + // Get selected node + function getSelectedNode(key: KeyType, list?: TreeItem[], selectedNode?: TreeItem | null) { + if (!key && key !== 0) return null; + const treeData = list || unref(treeDataRef); + treeData.forEach((item) => { + if (selectedNode?.key || selectedNode?.key === 0) return selectedNode; + if (item.key === key) { + selectedNode = item; + return; + } + if (item.children && item.children.length) { + selectedNode = getSelectedNode(key, item.children, selectedNode); + } + }); + return selectedNode || null; + } return { deleteNodeByKey, insertNodeByKey, @@ -187,5 +202,6 @@ export function useTree( getAllKeys, getChildrenKeys, getEnabledKeys, + getSelectedNode, }; } diff --git a/src/components/Tree/src/props.ts b/src/components/Tree/src/types/tree.ts similarity index 30% rename from src/components/Tree/src/props.ts rename to src/components/Tree/src/types/tree.ts index 7dabf2d..03fe57f 100644 --- a/src/components/Tree/src/props.ts +++ b/src/components/Tree/src/types/tree.ts @@ -1,44 +1,83 @@ -import type { PropType } from "vue"; -import type { - ReplaceFields, - ActionItem, - Keys, - CheckKeys, - ContextMenuOptions, - TreeItem, -} from "./typing"; -import type { ContextMenuItem } from "/@/hooks/web/useContextMenu"; -import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; -import { propTypes } from "/@/utils/propTypes"; - -export const basicProps = { +import type { ExtractPropTypes } from 'vue'; +import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; + +import { buildProps } from '/@/utils/props'; + +export enum ToolbarEnum { + SELECT_ALL, + UN_SELECT_ALL, + EXPAND_ALL, + UN_EXPAND_ALL, + CHECK_STRICTLY, + CHECK_UN_STRICTLY, +} + +export const treeEmits = [ + 'update:expandedKeys', + 'update:selectedKeys', + 'update:value', + 'change', + 'check', + 'update:searchValue', +]; + +export interface TreeState { + expandedKeys: KeyType[]; + selectedKeys: KeyType[]; + checkedKeys: CheckKeys; + checkStrictly: boolean; +} + +export interface FieldNames { + children?: string; + title?: string; + key?: string; +} + +export type KeyType = string | number; + +export type CheckKeys = + | KeyType[] + | { checked: string[] | number[]; halfChecked: string[] | number[] }; + +export const treeProps = buildProps({ value: { - type: [Object, Array] as PropType<Keys | CheckKeys>, + type: [Object, Array] as PropType<KeyType[] | CheckKeys>, }, + renderIcon: { type: Function as PropType<(params: Recordable) => string>, }, helpMessage: { type: [String, Array] as PropType<string | string[]>, - default: "", + default: '', }, - title: propTypes.string, - toolbar: propTypes.bool, - search: propTypes.bool, - searchValue: propTypes.string, - checkStrictly: propTypes.bool, - clickRowToExpand: propTypes.bool.def(true), - checkable: propTypes.bool.def(false), + title: { + type: String, + default: '', + }, + toolbar: Boolean, + search: Boolean, + searchValue: { + type: String, + default: '', + }, + checkStrictly: Boolean, + clickRowToExpand: { + type: Boolean, + default: false, + }, + checkable: Boolean, defaultExpandLevel: { type: [String, Number] as PropType<string | number>, - default: "", + default: '', }, - defaultExpandAll: propTypes.bool.def(false), + defaultExpandAll: Boolean, - replaceFields: { - type: Object as PropType<ReplaceFields>, + fieldNames: { + type: Object as PropType<FieldNames>, }, treeData: { @@ -46,17 +85,17 @@ export const basicProps = { }, actionList: { - type: Array as PropType<ActionItem[]>, + type: Array as PropType<TreeActionItem[]>, default: () => [], }, expandedKeys: { - type: Array as PropType<Keys>, + type: Array as PropType<KeyType[]>, default: () => [], }, selectedKeys: { - type: Array as PropType<Keys>, + type: Array as PropType<KeyType[]>, default: () => [], }, @@ -67,7 +106,7 @@ export const basicProps = { beforeRightClick: { type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>, - default: null, + default: undefined, }, rightMenuList: { @@ -76,9 +115,9 @@ export const basicProps = { // 自定义数据过滤判断方法(注: 不是整个过滤方法,而是内置过滤的判断方法,用于增强原本仅能通过title进行过滤的方式) filterFn: { type: Function as PropType< - (searchValue: any, node: TreeItem, replaceFields: ReplaceFields) => boolean + (searchValue: any, node: TreeItem, fieldNames: FieldNames) => boolean >, - default: null, + default: undefined, }, // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启 highlight: { @@ -86,23 +125,70 @@ export const basicProps = { default: false, }, // 搜索完成时自动展开结果 - expandOnSearch: propTypes.bool.def(false), + expandOnSearch: Boolean, // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效 - checkOnSearch: propTypes.bool.def(false), + checkOnSearch: Boolean, // 搜索完成自动select所有结果 - selectedOnSearch: propTypes.bool.def(false), -}; - -export const treeNodeProps = { - actionList: { - type: Array as PropType<ActionItem[]>, - default: () => [], - }, - replaceFields: { - type: Object as PropType<ReplaceFields>, - }, - treeData: { - type: Array as PropType<TreeDataItem[]>, - default: () => [], + selectedOnSearch: Boolean, + loading: { + type: Boolean, + default: false, }, -}; +}); + +export type TreeProps = ExtractPropTypes<typeof treeProps>; + +export interface ContextMenuItem { + label: string; + icon?: string; + hidden?: boolean; + disabled?: boolean; + handler?: Fn; + divider?: boolean; + children?: ContextMenuItem[]; +} + +export interface ContextMenuOptions { + icon?: string; + styles?: any; + items?: ContextMenuItem[]; +} + +export interface TreeItem extends TreeDataItem { + icon?: any; +} + +export interface TreeActionItem { + render: (record: Recordable) => any; + show?: boolean | ((record: Recordable) => boolean); +} + +export interface InsertNodeParams { + parentKey: string | null; + node: TreeDataItem; + list?: TreeDataItem[]; + push?: 'push' | 'unshift'; +} + +export interface TreeActionType { + checkAll: (checkAll: boolean) => void; + expandAll: (expandAll: boolean) => void; + setExpandedKeys: (keys: KeyType[]) => void; + getExpandedKeys: () => KeyType[]; + setSelectedKeys: (keys: KeyType[]) => void; + getSelectedKeys: () => KeyType[]; + setCheckedKeys: (keys: CheckKeys) => void; + getCheckedKeys: () => CheckKeys; + filterByLevel: (level: number) => void; + insertNodeByKey: (opt: InsertNodeParams) => void; + insertNodesByKey: (opt: InsertNodeParams) => void; + deleteNodeByKey: (key: string) => void; + updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void; + setSearchValue: (value: string) => void; + getSearchValue: () => string; + getSelectedNode: ( + key: KeyType, + treeList?: TreeItem[], + selectNode?: TreeItem | null, + ) => TreeItem | null; +} diff --git a/src/components/Tree/src/typing.ts b/src/components/Tree/src/typing.ts deleted file mode 100644 index 828fab0..0000000 --- a/src/components/Tree/src/typing.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { TreeDataItem, CheckEvent as CheckEventOrigin } from "ant-design-vue/es/tree/Tree"; -import { ContextMenuItem } from "/@/hooks/web/useContextMenu"; -export interface ActionItem { - render: (record: Recordable) => any; - show?: boolean | ((record: Recordable) => boolean); -} - -export interface TreeItem extends TreeDataItem { - icon?: any; -} - -export interface ReplaceFields { - children?: string; - title?: string; - key?: string; -} - -export type Keys = (string | number)[]; -export type CheckKeys = - | (string | number)[] - | { checked: (string | number)[]; halfChecked: (string | number)[] }; - -export interface TreeActionType { - checkAll: (checkAll: boolean) => void; - expandAll: (expandAll: boolean) => void; - setExpandedKeys: (keys: Keys) => void; - getExpandedKeys: () => Keys; - setSelectedKeys: (keys: Keys) => void; - getSelectedKeys: () => Keys; - setCheckedKeys: (keys: CheckKeys) => void; - getCheckedKeys: () => CheckKeys; - filterByLevel: (level: number) => void; - insertNodeByKey: (opt: InsertNodeParams) => void; - insertNodesByKey: (opt: InsertNodeParams) => void; - deleteNodeByKey: (key: string) => void; - updateNodeByKey: (key: string, node: Omit<TreeDataItem, "key">) => void; - setSearchValue: (value: string) => void; - getSearchValue: () => string; -} - -export interface InsertNodeParams { - parentKey: string | null; - node: TreeDataItem; - list?: TreeDataItem[]; - push?: "push" | "unshift"; -} - -export interface ContextMenuOptions { - icon?: string; - styles?: any; - items?: ContextMenuItem[]; -} - -export type CheckEvent = CheckEventOrigin; diff --git a/src/components/Tree/style/index.less b/src/components/Tree/style/index.less new file mode 100644 index 0000000..6f0a36f --- /dev/null +++ b/src/components/Tree/style/index.less @@ -0,0 +1,52 @@ +@tree-prefix-cls: ~"@{namespace}-tree"; + +.@{tree-prefix-cls} { + background-color: @component-background; + + .ant-tree-node-content-wrapper { + position: relative; + + .ant-tree-title { + position: absolute; + left: 0; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + + &__title { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding-right: 10px; + + &:hover { + .@{tree-prefix-cls}__action { + visibility: visible; + } + } + } + + &__content { + overflow: hidden; + } + + &__actions { + position: absolute; + //top: 2px; + right: 3px; + display: flex; + } + + &__action { + margin-left: 4px; + visibility: hidden; + } + + &-header { + border-bottom: 1px solid @border-color-base; + } +} diff --git a/src/components/Tree/style/index.ts b/src/components/Tree/style/index.ts new file mode 100644 index 0000000..d74e52e --- /dev/null +++ b/src/components/Tree/style/index.ts @@ -0,0 +1 @@ +import './index.less'; diff --git a/src/components/Upload/src/BasicUpload.vue b/src/components/Upload/src/BasicUpload.vue index 0fcb356..a38e4f1 100644 --- a/src/components/Upload/src/BasicUpload.vue +++ b/src/components/Upload/src/BasicUpload.vue @@ -1,6 +1,6 @@ <template> <div> - <a-button-group> + <Space> <a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload"> {{ t("component.upload.upload") }} </a-button> @@ -18,8 +18,7 @@ </template> </a-button> </Tooltip> - </a-button-group> - + </Space> <UploadModal v-bind="bindValue" :previewFileList="fileList" @@ -38,19 +37,19 @@ </template> <script lang="ts"> import { defineComponent, ref, watch, unref, computed } from "vue"; - import UploadModal from "./UploadModal.vue"; - import UploadPreviewModal from "./UploadPreviewModal.vue"; import { Icon } from "/@/components/Icon"; - import { Tooltip } from "ant-design-vue"; + import { Tooltip, Space } from "ant-design-vue"; import { useModal } from "/@/components/Modal"; import { uploadContainerProps } from "./props"; import { omit } from "lodash-es"; import { useI18n } from "/@/hooks/web/useI18n"; import { isArray } from "/@/utils/is"; + import UploadModal from "./UploadModal.vue"; + import UploadPreviewModal from "./UploadPreviewModal.vue"; export default defineComponent({ name: "BasicUpload", - components: { UploadModal, UploadPreviewModal, Icon, Tooltip }, + components: { UploadModal, Space, UploadPreviewModal, Icon, Tooltip }, props: uploadContainerProps, emits: ["change", "delete", "preview-delete", "update:value"], diff --git a/src/components/Upload/src/UploadModal.vue b/src/components/Upload/src/UploadModal.vue index 7b21aa0..fdc4985 100644 --- a/src/components/Upload/src/UploadModal.vue +++ b/src/components/Upload/src/UploadModal.vue @@ -9,7 +9,7 @@ :closeFunc="handleCloseFunc" :maskClosable="false" :keyboard="false" - wrapClassName="upload-modal" + class="upload-modal" :okButtonProps="getOkButtonProps" :cancelButtonProps="{ disabled: isUploadingRef }" > @@ -31,6 +31,7 @@ :accept="getStringAccept" :multiple="multiple" :before-upload="beforeUpload" + :show-upload-list="false" class="upload-modal-toolbar__btn" > <a-button type="primary"> @@ -54,7 +55,7 @@ import { basicProps } from "./props"; import { createTableColumns, createActionColumn } from "./data"; // utils - import { checkFileType, checkImgType, getBase64WithFile } from "./helper"; + import { checkImgType, getBase64WithFile } from "./helper"; import { buildUUID } from "/@/utils/uuid"; import { isFunction } from "/@/utils/is"; import { warn } from "/@/utils/log"; @@ -84,7 +85,7 @@ const { t } = useI18n(); const [register, { closeModal }] = useModalInner(); - const { getAccept, getStringAccept, getHelpText } = useUploadType({ + const { getStringAccept, getHelpText } = useUploadType({ acceptRef: accept, helpTextRef: helpText, maxNumberRef: maxNumber, @@ -124,18 +125,12 @@ function beforeUpload(file: File) { const { size, name } = file; const { maxSize } = props; - const accept = unref(getAccept); // 设置最大值,则判断 if (maxSize && file.size / 1024 / 1024 >= maxSize) { createMessage.error(t("component.upload.maxSizeMultiple", [maxSize])); return false; } - // 设置类型,则判断 - if (accept.length > 0 && !checkFileType(file, accept)) { - createMessage.error!(t("component.upload.acceptUpload", [accept.join(",")])); - return false; - } const commonItem = { uuid: buildUUID(), file, diff --git a/src/components/Upload/src/UploadPreviewModal.vue b/src/components/Upload/src/UploadPreviewModal.vue index ba523de..de80322 100644 --- a/src/components/Upload/src/UploadPreviewModal.vue +++ b/src/components/Upload/src/UploadPreviewModal.vue @@ -2,7 +2,7 @@ <BasicModal width="800px" :title="t('component.upload.preview')" - wrapClassName="upload-preview-modal" + class="upload-preview-modal" v-bind="$attrs" @register="register" :showOkBtn="false" diff --git a/src/components/registerGlobComp.ts b/src/components/registerGlobComp.ts index 6f4bb29..5661469 100644 --- a/src/components/registerGlobComp.ts +++ b/src/components/registerGlobComp.ts @@ -1,18 +1,7 @@ import type { App } from "vue"; import { Button } from "./Button"; -import { - // Need - Button as AntButton, - Input, - Layout, -} from "ant-design-vue"; - -const compList = [AntButton.Group]; +import { Input, Layout } from "ant-design-vue"; export function registerGlobComp(app: App) { - compList.forEach((comp) => { - app.component(comp.name || comp.displayName, comp); - }); - app.use(Input).use(Button).use(Layout); } diff --git a/src/design/ant/btn.less b/src/design/ant/btn.less index ab194f1..69da595 100644 --- a/src/design/ant/btn.less +++ b/src/design/ant/btn.less @@ -1,19 +1,5 @@ // button reset .ant-btn { - // display: inline-flex; - // justify-content: center; - // align-items: center; - // &.ant-btn-success:not(.ant-btn-link), - // &.ant-btn-error:not(.ant-btn-link), - // &.ant-btn-warning:not(.ant-btn-link), - // &.ant-btn-primary:not(.ant-btn-link) { - // box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important; - // } - // &-group { - // .ant-btn:not(:first-child) { - // bottom: 1px; - // } - // } &-link:hover, &-link:focus, &-link:active { @@ -29,23 +15,12 @@ color: @white; background-color: @button-primary-hover-color; } - // - //&[disabled], - //&[disabled]:hover { - // color: fade(@button-cancel-color, 40%) !important; - // background-color: fade(@button-cancel-bg-color, 40%) !important; - // border-color: fade(@button-cancel-border-color, 40%) !important; - //} } &-primary:not(&-background-ghost):not([disabled]) { color: @white; } - //&-primary:not(&-background-ghost) { - // border-width: 0; - //} - &-default { color: @button-cancel-color; background-color: @button-cancel-bg-color; @@ -66,7 +41,7 @@ //} } - [data-theme='light'] &.ant-btn-link.is-disabled { + [data-theme="light"] &.ant-btn-link.is-disabled { color: rgb(0 0 0 / 25%); text-shadow: none; cursor: not-allowed !important; @@ -75,7 +50,7 @@ box-shadow: none; } - [data-theme='dark'] &.ant-btn-link.is-disabled { + [data-theme="dark"] &.ant-btn-link.is-disabled { color: rgb(255 255 255 / 25%) !important; text-shadow: none; cursor: not-allowed !important; @@ -86,7 +61,7 @@ // color: @white; - &-success.ant-btn-link:not([disabled='disabled']) { + &-success.ant-btn-link:not([disabled="disabled"]) { color: @button-success-color; &:hover, @@ -127,16 +102,9 @@ background-color: @button-success-active-color; border-color: @button-success-active-color; } - - //&[disabled], - //&[disabled]:hover { - // color: @white; - // background-color: fade(@button-success-color, 40%); - // border-color: fade(@button-success-color, 40%); - //} } - &-warning.ant-btn-link:not([disabled='disabled']) { + &-warning.ant-btn-link:not([disabled="disabled"]) { color: @button-warn-color; &:hover, @@ -176,7 +144,7 @@ //} } - &-error.ant-btn-link:not([disabled='disabled']) { + &-error.ant-btn-link:not([disabled="disabled"]) { color: @button-error-color; &:hover, @@ -305,7 +273,7 @@ } } - &-ghost.ant-btn-link:not([disabled='disabled']) { + &-ghost.ant-btn-link:not([disabled="disabled"]) { color: @button-ghost-color; &:hover, diff --git a/src/design/ant/index.less b/src/design/ant/index.less index fc9349c..77ec98f 100644 --- a/src/design/ant/index.less +++ b/src/design/ant/index.less @@ -1,12 +1,6 @@ -@import './pagination.less'; -@import './input.less'; -@import './btn.less'; -// @import './table.less'; - -// TODO beta.11 fix -.ant-col { - width: 100%; -} +@import "./pagination.less"; +@import "./input.less"; +@import "./btn.less"; .ant-image-preview-root { img { diff --git a/src/design/ant/input.less b/src/design/ant/input.less index 57f85e5..c6c1317 100644 --- a/src/design/ant/input.less +++ b/src/design/ant/input.less @@ -1,4 +1,4 @@ -@import (reference) '../color.less'; +@import (reference) "../color.less"; // input .ant-input { @@ -22,3 +22,8 @@ padding: 4px; } } + +.ant-input-number { + width: 100% !important; + max-width: 100%; +} diff --git a/src/design/ant/pagination.less b/src/design/ant/pagination.less index b3580f9..7c05a74 100644 --- a/src/design/ant/pagination.less +++ b/src/design/ant/pagination.less @@ -1,4 +1,4 @@ -html[data-theme='dark'] { +html[data-theme="dark"] { .ant-pagination { &.mini { .ant-pagination-prev, diff --git a/src/design/ant/table.less b/src/design/ant/table.less index ee62b99..2e3a819 100644 --- a/src/design/ant/table.less +++ b/src/design/ant/table.less @@ -1,4 +1,4 @@ -@prefix-cls: ~'@{namespace}-basic-table'; +@prefix-cls: ~"@{namespace}-basic-table"; // fix table unnecessary scrollbar .@{prefix-cls} { diff --git a/src/design/config.less b/src/design/config.less index 64c33f6..f7ba9a3 100644 --- a/src/design/config.less +++ b/src/design/config.less @@ -1,2 +1,2 @@ -@import (reference) 'color.less'; -@import (reference) 'var/index.less'; +@import (reference) "color.less"; +@import (reference) "var/index.less"; diff --git a/src/design/index.less b/src/design/index.less index 1d52f05..e5a65ec 100644 --- a/src/design/index.less +++ b/src/design/index.less @@ -1,8 +1,8 @@ -@import 'transition/index.less'; -@import 'var/index.less'; -@import 'public.less'; -@import 'ant/index.less'; -@import './theme.less'; +@import "transition/index.less"; +@import "var/index.less"; +@import "public.less"; +@import "ant/index.less"; +@import "./theme.less"; input:-webkit-autofill { box-shadow: 0 0 0 1000px white inset !important; @@ -21,8 +21,8 @@ html, body { width: 100%; height: 100%; - overflow: visible !important; - overflow-x: hidden !important; + overflow: visible; + overflow-x: hidden; &.color-weak { filter: invert(80%); @@ -40,5 +40,5 @@ button, div, svg, span { - outline: none !important; + outline: none; } diff --git a/src/design/public.less b/src/design/public.less index 798fe02..644bfab 100644 --- a/src/design/public.less +++ b/src/design/public.less @@ -46,6 +46,6 @@ width: 100%; height: 2px; background-color: @primary-color; - opacity: 75%; + opacity: 0.75; } } diff --git a/src/design/theme.less b/src/design/theme.less index aa05033..a9aade5 100644 --- a/src/design/theme.less +++ b/src/design/theme.less @@ -2,7 +2,7 @@ background-color: @component-background !important; } -html[data-theme='light'] { +html[data-theme="light"] { .text-secondary { color: rgb(0 0 0 / 45%); } @@ -27,7 +27,7 @@ html[data-theme='light'] { } } -[data-theme='dark'] { +[data-theme="dark"] { .text-secondary { color: #8b949e; } diff --git a/src/design/transition/fade.less b/src/design/transition/fade.less index 420f144..6ed1771 100644 --- a/src/design/transition/fade.less +++ b/src/design/transition/fade.less @@ -1,3 +1,15 @@ +.fade-transition { + &-enter-active, + &-leave-active { + transition: opacity 0.2s ease-in-out; + } + + &-enter-from, + &-leave-to { + opacity: 0; + } +} + .fade-enter-active, .fade-leave-active { transition: opacity 0.2s ease-in-out; @@ -5,7 +17,7 @@ .fade-enter-from, .fade-leave-to { - opacity: 0%; + opacity: 0; } /* fade-slide */ @@ -15,12 +27,12 @@ } .fade-slide-enter-from { - opacity: 0%; + opacity: 0; transform: translateX(-30px); } .fade-slide-leave-to { - opacity: 0%; + opacity: 0; transform: translateX(30px); } @@ -35,12 +47,12 @@ } .fade-bottom-enter-from { - opacity: 0%; + opacity: 0; transform: translateY(-10%); } .fade-bottom-leave-to { - opacity: 0%; + opacity: 0; transform: translateY(10%); } @@ -51,12 +63,12 @@ } .fade-scale-enter-from { - opacity: 0%; + opacity: 0; transform: scale(1.2); } .fade-scale-leave-to { - opacity: 0%; + opacity: 0; transform: scale(0.8); } @@ -71,11 +83,11 @@ } .fade-top-enter-from { - opacity: 0%; + opacity: 0; transform: translateY(8%); } .fade-top-leave-to { - opacity: 0%; + opacity: 0; transform: translateY(-8%); } diff --git a/src/design/transition/index.less b/src/design/transition/index.less index e372b25..51db0d7 100644 --- a/src/design/transition/index.less +++ b/src/design/transition/index.less @@ -1,9 +1,9 @@ -@import './base.less'; -@import './fade.less'; -@import './scale.less'; -@import './slide.less'; -@import './scroll.less'; -@import './zoom.less'; +@import "./base.less"; +@import "./fade.less"; +@import "./scale.less"; +@import "./slide.less"; +@import "./scroll.less"; +@import "./zoom.less"; .collapse-transition { transition: 0.2s height ease-in-out, 0.2s padding-top ease-in-out, 0.2s padding-bottom ease-in-out; diff --git a/src/design/transition/scale.less b/src/design/transition/scale.less index d5c30b6..c965493 100644 --- a/src/design/transition/scale.less +++ b/src/design/transition/scale.less @@ -4,7 +4,7 @@ &-enter-from, &-leave, &-leave-to { - opacity: 0%; + opacity: 0; transform: scale(0); } } @@ -15,7 +15,7 @@ &-enter-from, &-leave, &-leave-to { - opacity: 0%; + opacity: 0; transform: scale(0) rotate(-45deg); } } diff --git a/src/design/transition/scroll.less b/src/design/transition/scroll.less index 10d0567..a5f45e4 100644 --- a/src/design/transition/scroll.less +++ b/src/design/transition/scroll.less @@ -3,7 +3,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; } &-enter-from { @@ -20,7 +20,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; } &-enter-from { @@ -37,7 +37,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; } &-enter-from { @@ -54,7 +54,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; } &-enter-from { diff --git a/src/design/transition/slide.less b/src/design/transition/slide.less index 6c3166d..79b00df 100644 --- a/src/design/transition/slide.less +++ b/src/design/transition/slide.less @@ -3,7 +3,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; transform: translateY(-15px); } } @@ -13,7 +13,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; transform: translateY(15px); } } @@ -23,7 +23,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; transform: translateX(-15px); } } @@ -33,7 +33,7 @@ &-enter-from, &-leave-to { - opacity: 0%; + opacity: 0; transform: translateX(15px); } } diff --git a/src/design/transition/zoom.less b/src/design/transition/zoom.less index f9b14dd..2ea378c 100644 --- a/src/design/transition/zoom.less +++ b/src/design/transition/zoom.less @@ -6,7 +6,7 @@ .zoom-out-enter-from, .zoom-out-leave-to { - opacity: 0%; + opacity: 0; transform: scale(0); } @@ -17,11 +17,11 @@ } .zoom-fade-enter-from { - opacity: 0%; + opacity: 0; transform: scale(0.92); } .zoom-fade-leave-to { - opacity: 0%; + opacity: 0; transform: scale(1.06); } diff --git a/src/design/var/index.less b/src/design/var/index.less index 1689f76..6d0a656 100644 --- a/src/design/var/index.less +++ b/src/design/var/index.less @@ -1,6 +1,6 @@ -@import (reference) '../color.less'; -@import 'easing'; -@import 'breakpoint'; +@import (reference) "../color.less"; +@import "easing"; +@import "breakpoint"; @namespace: vben; diff --git a/src/directives/loading.ts b/src/directives/loading.ts index 78a8e3e..192a2b5 100644 --- a/src/directives/loading.ts +++ b/src/directives/loading.ts @@ -24,9 +24,7 @@ const loadingDirective: Directive = { if (!instance) return; instance.setTip(el.getAttribute("loading-tip")); if (binding.oldValue !== binding.value) { - if (binding.oldValue !== binding.value) { - instance.setLoading?.(binding.value && !instance.loading); - } + instance.setLoading?.(binding.value && !instance.loading); } }, unmounted(el) { diff --git a/src/enums/appEnum.ts b/src/enums/appEnum.ts index 894c3a0..0112af0 100644 --- a/src/enums/appEnum.ts +++ b/src/enums/appEnum.ts @@ -30,14 +30,18 @@ export enum SessionTimeoutProcessingEnum { */ export enum PermissionModeEnum { // role + // 角色权限 ROLE = "ROLE", // black + // 后端 BACK = "BACK", // route mapping + // 路由映射 ROUTE_MAPPING = "ROUTE_MAPPING", } -// Route switching animation +// Route switching animation +// 路由切换动画 export enum RouterTransitionEnum { ZOOM_FADE = "zoom-fade", ZOOM_OUT = "zoom-out", diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts index 7d43acc..695b38a 100644 --- a/src/enums/httpEnum.ts +++ b/src/enums/httpEnum.ts @@ -2,8 +2,8 @@ * @description: Request result set */ export enum ResultEnum { - SUCCESS = 0, - ERROR = 1, + SUCCESS = 200, + ERROR = -1, TIMEOUT = 401, TYPE = "success", } @@ -19,7 +19,7 @@ export enum RequestEnum { } /** - * @description: contentTyp + * @description: contentType */ export enum ContentTypeEnum { // json diff --git a/src/hooks/core/useContext.ts b/src/hooks/core/useContext.ts index c8c55f9..6cdcfc3 100644 --- a/src/hooks/core/useContext.ts +++ b/src/hooks/core/useContext.ts @@ -35,7 +35,6 @@ export function createContext<T>( } export function useContext<T>(key: InjectionKey<T>, native?: boolean): T; -export function useContext<T>(key: InjectionKey<T>, defaultValue?: any, native?: boolean): T; export function useContext<T>( key: InjectionKey<T> = Symbol(), diff --git a/src/hooks/event/useWindowSizeFn.ts b/src/hooks/event/useWindowSizeFn.ts index e1f531e..e7988e1 100644 --- a/src/hooks/event/useWindowSizeFn.ts +++ b/src/hooks/event/useWindowSizeFn.ts @@ -1,5 +1,4 @@ -import { tryOnMounted, tryOnUnmounted } from "@vueuse/core"; -import { useDebounceFn } from "@vueuse/core"; +import { tryOnMounted, tryOnUnmounted, useDebounceFn } from "@vueuse/core"; interface WindowSizeOptions { once?: boolean; diff --git a/src/hooks/setting/useMenuSetting.ts b/src/hooks/setting/useMenuSetting.ts index eb6e61d..6290dc6 100644 --- a/src/hooks/setting/useMenuSetting.ts +++ b/src/hooks/setting/useMenuSetting.ts @@ -101,8 +101,12 @@ export function useMenuSetting() { }); const getMiniWidthNumber = computed(() => { - const { collapsedShowTitle } = appStore.getMenuSetting; - return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH; + const { collapsedShowTitle, siderHidden } = appStore.getMenuSetting; + return siderHidden + ? 0 + : collapsedShowTitle + ? SIDE_BAR_SHOW_TIT_MINI_WIDTH + : SIDE_BAR_MINI_WIDTH; }); const getCalcContentWidth = computed(() => { diff --git a/src/hooks/web/useECharts.ts b/src/hooks/web/useECharts.ts index c7ab2d7..4b5af57 100644 --- a/src/hooks/web/useECharts.ts +++ b/src/hooks/web/useECharts.ts @@ -79,7 +79,12 @@ export function useECharts( } function resize() { - chartInstance?.resize(); + chartInstance?.resize({ + animation: { + duration: 300, + easing: "quadraticIn", + }, + }); } watch( diff --git a/src/hooks/web/usePage.ts b/src/hooks/web/usePage.ts index 4c9b475..ce4b8e5 100644 --- a/src/hooks/web/usePage.ts +++ b/src/hooks/web/usePage.ts @@ -1,35 +1,28 @@ import type { RouteLocationRaw, Router } from "vue-router"; import { PageEnum } from "/@/enums/pageEnum"; -import { isString } from "/@/utils/is"; import { unref } from "vue"; import { useRouter } from "vue-router"; import { REDIRECT_NAME } from "/@/router/constant"; -export type RouteLocationRawEx = Omit<RouteLocationRaw, "path"> & { path: PageEnum }; +export type PathAsPageEnum<T> = T extends { path: string } ? T & { path: PageEnum } : T; +export type RouteLocationRawEx = PathAsPageEnum<RouteLocationRaw>; function handleError(e: Error) { console.error(e); } -// page switch +/** + * page switch + */ export function useGo(_router?: Router) { - let router; - if (!_router) { - router = useRouter(); - } - const { push, replace } = _router || router; - function go(opt: PageEnum | RouteLocationRawEx | string = PageEnum.BASE_HOME, isReplace = false) { + const { push, replace } = _router || useRouter(); + function go(opt: RouteLocationRawEx = PageEnum.BASE_HOME, isReplace = false) { if (!opt) { return; } - if (isString(opt)) { - isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError); - } else { - const o = opt as RouteLocationRaw; - isReplace ? replace(o).catch(handleError) : push(o).catch(handleError); - } + isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError); } return go; } @@ -38,7 +31,7 @@ export function useGo(_router?: Router) { * @description: redo current page */ export const useRedo = (_router?: Router) => { - const { push, currentRoute } = _router || useRouter(); + const { replace, currentRoute } = _router || useRouter(); const { query, params = {}, name, fullPath } = unref(currentRoute.value); function redo(): Promise<boolean> { return new Promise((resolve) => { @@ -53,7 +46,7 @@ export const useRedo = (_router?: Router) => { params["_redirect_type"] = "path"; params["path"] = fullPath; } - push({ name: REDIRECT_NAME, params, query }).then(() => resolve(true)); + replace({ name: REDIRECT_NAME, params, query }).then(() => resolve(true)); }); } return redo; diff --git a/src/hooks/web/usePermission.ts b/src/hooks/web/usePermission.ts index daf2421..e762fb7 100644 --- a/src/hooks/web/usePermission.ts +++ b/src/hooks/web/usePermission.ts @@ -39,6 +39,7 @@ export function usePermission() { /** * Reset and regain authority resource information + * 重置和重新获得权限资源信息 * @param id */ async function resume() { diff --git a/src/hooks/web/useTabs.ts b/src/hooks/web/useTabs.ts index a9b8d0a..5032de8 100644 --- a/src/hooks/web/useTabs.ts +++ b/src/hooks/web/useTabs.ts @@ -34,7 +34,7 @@ export function useTabs(_router?: Router) { function getCurrentTab() { const route = unref(currentRoute); - return tabStore.getTabList.find((item) => item.path === route.path)!; + return tabStore.getTabList.find((item) => item.fullPath === route.fullPath)!; } async function updateTabTitle(title: string, tab?: RouteLocationNormalized) { diff --git a/src/layouts/default/feature/index.vue b/src/layouts/default/feature/index.vue index 5ebc30c..855cd54 100644 --- a/src/layouts/default/feature/index.vue +++ b/src/layouts/default/feature/index.vue @@ -23,7 +23,7 @@ const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } = useRootSetting(); const userStore = useUserStoreWithOut(); - const { prefixCls } = useDesign("setting-drawer-fearure"); + const { prefixCls } = useDesign("setting-drawer-feature"); const { getShowHeader } = useHeaderSetting(); const getIsSessionTimeout = computed(() => userStore.getSessionTimeout); @@ -59,7 +59,7 @@ </template> <style lang="less"> - @prefix-cls: ~"@{namespace}-setting-drawer-fearure"; + @prefix-cls: ~"@{namespace}-setting-drawer-feature"; .@{prefix-cls} { position: absolute; diff --git a/src/layouts/default/header/components/Breadcrumb.vue b/src/layouts/default/header/components/Breadcrumb.vue index ce28948..8ca6250 100644 --- a/src/layouts/default/header/components/Breadcrumb.vue +++ b/src/layouts/default/header/components/Breadcrumb.vue @@ -101,8 +101,8 @@ if (!meta) { return !!name; } - const { title, hideBreadcrumb } = meta; - if (!title || hideBreadcrumb) { + const { title, hideBreadcrumb, hideMenu } = meta; + if (!title || hideBreadcrumb || hideMenu) { return false; } return true; diff --git a/src/layouts/default/header/components/lock/LockModal.vue b/src/layouts/default/header/components/lock/LockModal.vue index eae1ff4..f8b34a3 100644 --- a/src/layouts/default/header/components/lock/LockModal.vue +++ b/src/layouts/default/header/components/lock/LockModal.vue @@ -53,6 +53,9 @@ { field: "password", label: t("layout.header.lockScreenPassword"), + colProps: { + span: 24, + }, component: "InputPassword", required: true, }, diff --git a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue b/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue index d09994c..6aee298 100644 --- a/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue +++ b/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue @@ -18,6 +18,7 @@ name: "DropdownMenuItem", components: { MenuItem: Menu.Item, Icon }, props: { + // eslint-disable-next-line key: propTypes.string, text: propTypes.string, icon: propTypes.string, diff --git a/src/layouts/default/header/components/user-dropdown/index.vue b/src/layouts/default/header/components/user-dropdown/index.vue index 7f3efe5..01cb8f4 100644 --- a/src/layouts/default/header/components/user-dropdown/index.vue +++ b/src/layouts/default/header/components/user-dropdown/index.vue @@ -37,6 +37,7 @@ <script lang="ts"> // components import { Dropdown, Menu } from "ant-design-vue"; + import type { MenuInfo } from "ant-design-vue/lib/menu/src/interface"; import { defineComponent, computed } from "vue"; @@ -95,8 +96,8 @@ openWindow(DOC_URL); } - function handleMenuClick(e: { key: MenuEvent }) { - switch (e.key) { + function handleMenuClick(e: MenuInfo) { + switch (e.key as MenuEvent) { case "logout": handleLoginOut(); break; diff --git a/src/layouts/default/header/index.less b/src/layouts/default/header/index.less index b16007e..adef6b3 100644 --- a/src/layouts/default/header/index.less +++ b/src/layouts/default/header/index.less @@ -1,7 +1,7 @@ -@header-trigger-prefix-cls: ~'@{namespace}-layout-header-trigger'; -@header-prefix-cls: ~'@{namespace}-layout-header'; -@breadcrumb-prefix-cls: ~'@{namespace}-layout-breadcrumb'; -@logo-prefix-cls: ~'@{namespace}-app-logo'; +@header-trigger-prefix-cls: ~"@{namespace}-layout-header-trigger"; +@header-prefix-cls: ~"@{namespace}-layout-header"; +@breadcrumb-prefix-cls: ~"@{namespace}-layout-breadcrumb"; +@logo-prefix-cls: ~"@{namespace}-app-logo"; .@{header-prefix-cls} { display: flex; @@ -125,7 +125,7 @@ } } - span[role='img'] { + span[role="img"] { padding: 0 8px; } } @@ -158,7 +158,7 @@ } &-icon, - span[role='img'] { + span[role="img"] { color: @text-color-base; } } diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx index 991cdda..2cb5425 100644 --- a/src/layouts/default/setting/SettingDrawer.tsx +++ b/src/layouts/default/setting/SettingDrawer.tsx @@ -401,7 +401,7 @@ export default defineComponent({ {...attrs} title={t("layout.setting.drawerTitle")} width={330} - wrapClassName="setting-drawer" + class="setting-drawer" > {unref(getShowDarkModeToggle) && <Divider>{() => t("layout.setting.darkMode")}</Divider>} {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />} diff --git a/src/layouts/default/sider/MixSider.vue b/src/layouts/default/sider/MixSider.vue index e0d2c7f..0edc277 100644 --- a/src/layouts/default/sider/MixSider.vue +++ b/src/layouts/default/sider/MixSider.vue @@ -66,7 +66,7 @@ :items="childrenMenus" :theme="getMenuTheme" mixSider - @menuClick="handleMenuClick" + @menu-click="handleMenuClick" /> </ScrollContainer> <div diff --git a/src/layouts/default/sider/useLayoutSider.ts b/src/layouts/default/sider/useLayoutSider.ts index aeedef7..3fc5f8f 100644 --- a/src/layouts/default/sider/useLayoutSider.ts +++ b/src/layouts/default/sider/useLayoutSider.ts @@ -1,26 +1,30 @@ import type { Ref } from "vue"; -import { computed, unref, onMounted, nextTick, ref } from "vue"; +import { computed, unref, onMounted, nextTick } from "vue"; import { TriggerEnum } from "/@/enums/menuEnum"; import { useMenuSetting } from "/@/hooks/setting/useMenuSetting"; import { useDebounceFn } from "@vueuse/core"; +import { useAppStore } from "/@/store/modules/app"; /** * Handle related operations of menu events */ export function useSiderEvent() { - const brokenRef = ref(false); - + const appStore = useAppStore(); const { getMiniWidthNumber } = useMenuSetting(); const getCollapsedWidth = computed(() => { - return unref(brokenRef) ? 0 : unref(getMiniWidthNumber); + return unref(getMiniWidthNumber); }); function onBreakpointChange(broken: boolean) { - brokenRef.value = broken; + appStore.setProjectConfig({ + menuSetting: { + siderHidden: broken, + }, + }); } return { getCollapsedWidth, onBreakpointChange }; diff --git a/src/layouts/default/tabs/components/TabContent.vue b/src/layouts/default/tabs/components/TabContent.vue index dad7438..a2afa81 100644 --- a/src/layouts/default/tabs/components/TabContent.vue +++ b/src/layouts/default/tabs/components/TabContent.vue @@ -1,5 +1,11 @@ <template> - <Dropdown :dropMenuList="getDropMenuList" :trigger="getTrigger" @menuEvent="handleMenuEvent"> + <Dropdown + :dropMenuList="getDropMenuList" + :trigger="getTrigger" + placement="bottom" + overlayClassName="multiple-tabs__dropdown" + @menu-event="handleMenuEvent" + > <div :class="`${prefixCls}__info`" @contextmenu="handleContext" v-if="getIsTabs"> <span class="ml-1">{{ getTitle }}</span> </div> diff --git a/src/layouts/default/tabs/index.less b/src/layouts/default/tabs/index.less index 6cc4878..dbb9814 100644 --- a/src/layouts/default/tabs/index.less +++ b/src/layouts/default/tabs/index.less @@ -1,6 +1,6 @@ -@prefix-cls: ~'@{namespace}-multiple-tabs'; +@prefix-cls: ~"@{namespace}-multiple-tabs"; -html[data-theme='dark'] { +html[data-theme="dark"] { .@{prefix-cls} { .ant-tabs-tab { border-bottom: 1px solid @border-color-base; @@ -8,7 +8,7 @@ html[data-theme='dark'] { } } -html[data-theme='light'] { +html[data-theme="light"] { .@{prefix-cls} { .ant-tabs-tab:not(.ant-tabs-tab-active) { border: 1px solid #d9d9d9 !important; @@ -28,7 +28,8 @@ html[data-theme='light'] { } .ant-tabs.ant-tabs-card { - .ant-tabs-card-bar { + .ant-tabs-nav { + padding-top: 2px; height: @multiple-height; margin: 0; background-color: @component-background; @@ -49,18 +50,20 @@ html[data-theme='light'] { transition: none; &:hover { - .ant-tabs-close-x { - opacity: 100%; + .ant-tabs-tab-remove { + opacity: 1; } } - .ant-tabs-close-x { + .ant-tabs-tab-remove { width: 8px; - height: 12px; + height: 28px; font-size: 12px; color: inherit; - opacity: 0%; + opacity: 0; transition: none; + margin-left: 2px; + margin-right: -4px; &:hover { svg { @@ -69,11 +72,11 @@ html[data-theme='light'] { } } - > div { - display: flex; - justify-content: center; - align-items: center; - } + // > div { + // display: flex; + // justify-content: center; + // align-items: center; + // } svg { fill: @text-color-base; @@ -89,13 +92,16 @@ html[data-theme='light'] { .ant-tabs-tab-active { position: relative; padding-left: 18px; - color: @white !important; background: @primary-color; border: 0; transition: none; - .ant-tabs-close-x { - opacity: 100%; + span { + color: @white !important; + } + + .ant-tabs-tab-remove { + opacity: 1; } svg { @@ -124,18 +130,13 @@ html[data-theme='light'] { } } - .ant-tabs-extra-content { - margin-top: 2px; - line-height: @multiple-height !important; - } - .ant-dropdown-trigger { display: inline-flex; } &--hide-close { - .ant-tabs-close-x { - opacity: 0% !important; + .ant-tabs-tab-remove { + opacity: 0 !important; } } @@ -156,13 +157,13 @@ html[data-theme='light'] { color: @text-color-base; } - span[role='img'] { + span[role="img"] { transform: rotate(90deg); } } &__extra-redo { - span[role='img'] { + span[role="img"] { transform: rotate(0deg); } } @@ -179,3 +180,28 @@ html[data-theme='light'] { } } } + +.ant-tabs-dropdown-menu { + &-title-content { + display: flex; + align-items: center; + + .@{prefix-cls} { + &-content__info { + width: auto; + margin-left: 0; + line-height: 28px; + } + } + } + + &-item-remove { + margin-left: auto; + } +} + +.multiple-tabs__dropdown { + .ant-dropdown-content { + width: 172px; + } +} diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue index eba5f6c..a9b2774 100644 --- a/src/layouts/default/tabs/index.vue +++ b/src/layouts/default/tabs/index.vue @@ -18,7 +18,7 @@ </TabPane> </template> - <template #tabBarExtraContent v-if="getShowRedo || getShowQuick"> + <template #rightExtra v-if="getShowRedo || getShowQuick"> <TabRedo v-if="getShowRedo" /> <TabContent isExtra :tabItem="$route" v-if="getShowQuick" /> <FoldButton v-if="getShowFold" /> @@ -127,8 +127,6 @@ tabStore.closeTabByKey(targetKey, router); } return { - prefixCls, - unClose, getWrapClass, handleEdit, handleChange, diff --git a/src/layouts/default/tabs/useMultipleTabs.ts b/src/layouts/default/tabs/useMultipleTabs.ts index 77478a9..259eedb 100644 --- a/src/layouts/default/tabs/useMultipleTabs.ts +++ b/src/layouts/default/tabs/useMultipleTabs.ts @@ -56,7 +56,9 @@ export function useTabsDrag(affixTextList: string[]) { const { prefixCls } = useDesign("multiple-tabs"); nextTick(() => { if (!multiTabsSetting.canDrag) return; - const el = document.querySelectorAll(`.${prefixCls} .ant-tabs-nav > div`)?.[0] as HTMLElement; + const el = document.querySelectorAll( + `.${prefixCls} .ant-tabs-nav-wrap > div`, + )?.[0] as HTMLElement; const { initSortable } = useSortable(el, { filter: (e: ChangeEvent) => { const text = e?.target?.innerText; diff --git a/src/layouts/page/index.vue b/src/layouts/page/index.vue index 2d76697..7424927 100644 --- a/src/layouts/page/index.vue +++ b/src/layouts/page/index.vue @@ -17,7 +17,9 @@ <keep-alive v-if="openCache" :include="getCaches"> <component :is="Component" :key="route.fullPath" /> </keep-alive> - <component v-else :is="Component" :key="route.fullPath" /> + <div v-else :key="route.name"> + <component :is="Component" :key="route.fullPath" /> + </div> </transition> </template> </RouterView> diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts index ecfcf65..972b9e3 100644 --- a/src/locales/lang/en.ts +++ b/src/locales/lang/en.ts @@ -1,6 +1,5 @@ import { genMessage } from "../helper"; import antdLocale from "ant-design-vue/es/locale/en_US"; -// import momentLocale from 'moment/dist/locale/en-us'; const modules = import.meta.globEager("./en/**/*.ts"); export default { @@ -8,6 +7,6 @@ export default { ...genMessage(modules, "en"), antdLocale, }, - momentLocale: null, - momentLocaleName: "en", + dateLocale: null, + dateLocaleName: "en", }; diff --git a/src/locales/lang/en/routes/demo.ts b/src/locales/lang/en/routes/demo.ts index b3977da..cac807b 100644 --- a/src/locales/lang/en/routes/demo.ts +++ b/src/locales/lang/en/routes/demo.ts @@ -92,6 +92,7 @@ export default { breadcrumb: "Breadcrumbs", breadcrumbFlat: "Flat Mode", breadcrumbFlatDetail: "Flat mode details", + requestDemo: "Retry request demo", breadcrumbChildren: "Level mode", breadcrumbChildrenDetail: "Level mode detail", @@ -110,6 +111,7 @@ export default { dynamicForm: "Dynamic", customerForm: "Custom", appendForm: "Append", + tabsForm: "TabsForm", }, iframe: { frame: "External", @@ -195,5 +197,6 @@ export default { editCellTable: "Editable cell", editRowTable: "Editable row", authColumn: "Auth column", + resizeParentHeightTable: "resizeParentHeightTable", }, }; diff --git a/src/locales/lang/zh-CN/antdLocale/DatePicker.ts b/src/locales/lang/zh-CN/antdLocale/DatePicker.ts new file mode 100644 index 0000000..452dff0 --- /dev/null +++ b/src/locales/lang/zh-CN/antdLocale/DatePicker.ts @@ -0,0 +1,19 @@ +export default { + lang: { + shortWeekDays: ['一', '二', '三', '四', '五', '六', '日'], + shortMonths: [ + '1月', + '2月', + '3月', + '4月', + '5月', + '6月', + '7月', + '8月', + '9月', + '10月', + '11月', + '12月', + ], + }, +}; diff --git a/src/locales/lang/zh-CN/routes/demo.ts b/src/locales/lang/zh-CN/routes/demo.ts index 05bc90c..19f6d01 100644 --- a/src/locales/lang/zh-CN/routes/demo.ts +++ b/src/locales/lang/zh-CN/routes/demo.ts @@ -88,6 +88,7 @@ export default { ws: "websocket测试", breadcrumb: "面包屑导航", breadcrumbFlat: "平级模式", + requestDemo: "测试请求重试", breadcrumbFlatDetail: "平级详情", breadcrumbChildren: "层级模式", breadcrumbChildrenDetail: "层级详情", @@ -106,6 +107,7 @@ export default { dynamicForm: "动态表单", customerForm: "自定义组件", appendForm: "表单增删示例", + tabsForm: "标签页+多级field", }, iframe: { frame: "外部页面", @@ -186,5 +188,6 @@ export default { editCellTable: "可编辑单元格", editRowTable: "可编辑行", authColumn: "权限列", + resizeParentHeightTable: "继承父元素高度", }, }; diff --git a/src/locales/lang/zh-CN/routes/model.ts b/src/locales/lang/zh-CN/routes/model.ts new file mode 100644 index 0000000..8c3666e --- /dev/null +++ b/src/locales/lang/zh-CN/routes/model.ts @@ -0,0 +1,3 @@ +export default { + model: '模型', +}; diff --git a/src/locales/lang/zh_CN.ts b/src/locales/lang/zh_CN.ts index daa9b25..9050bac 100644 --- a/src/locales/lang/zh_CN.ts +++ b/src/locales/lang/zh_CN.ts @@ -1,6 +1,5 @@ import { genMessage } from "../helper"; import antdLocale from "ant-design-vue/es/locale/zh_CN"; -import momentLocale from "moment/dist/locale/zh-cn"; const modules = import.meta.globEager("./zh-CN/**/*.ts"); export default { @@ -8,6 +7,4 @@ export default { ...genMessage(modules, "zh-CN"), antdLocale, }, - momentLocale, - momentLocaleName: "zh-cn", }; diff --git a/src/locales/useLocale.ts b/src/locales/useLocale.ts index 71e6b0c..c29aec5 100644 --- a/src/locales/useLocale.ts +++ b/src/locales/useLocale.ts @@ -3,8 +3,6 @@ */ import type { LocaleType } from "/#/config"; -import moment from "moment"; - import { i18n } from "./setupI18n"; import { useLocaleStoreWithOut } from "/@/store/modules/locale"; import { unref, computed } from "vue"; @@ -12,8 +10,8 @@ import { loadLocalePool, setHtmlPageLang } from "./helper"; interface LangModule { message: Recordable; - momentLocale: Recordable; - momentLocaleName: string; + dateLocale: Recordable; + dateLocaleName: string; } function setI18nLanguage(locale: LocaleType) { @@ -53,10 +51,9 @@ export function useLocale() { const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule; if (!langModule) return; - const { message, momentLocale, momentLocaleName } = langModule; + const { message } = langModule; globalI18n.setLocaleMessage(locale, message); - moment.updateLocale(momentLocaleName, momentLocale); loadLocalePool.push(locale); setI18nLanguage(locale); diff --git a/src/main.ts b/src/main.ts index cec3454..6aa3e39 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,6 @@ -import "/@/design/index.less"; import "virtual:windi-base.css"; import "virtual:windi-components.css"; +import "/@/design/index.less"; import "virtual:windi-utilities.css"; // Register icon sprite import "virtual:svg-icons-register"; @@ -15,39 +15,41 @@ import { setupGlobDirectives } from "/@/directives"; import { setupI18n } from "/@/locales/setupI18n"; import { registerGlobComp } from "/@/components/registerGlobComp"; -// Importing on demand in local development will increase the number of browser requests by around 20%. -// This may slow down the browser refresh speed. -// Therefore, only enable on-demand importing in production environments . -if (import.meta.env.DEV) { - import("ant-design-vue/dist/antd.less"); -} - async function bootstrap() { const app = createApp(App); // Configure store + // 配置 store setupStore(app); // Initialize internal system configuration + // 初始化内部系统配置 initAppConfigStore(); // Register global components + // 注册全局组件 registerGlobComp(app); // Multilingual configuration + // 多语言配置 // Asynchronous case: language files may be obtained from the server side + // 异步案例:语言文件可能从服务器端获取 await setupI18n(app); // Configure routing + // 配置路由 setupRouter(app); // router-guard + // 路由守卫 setupRouterGuard(router); // Register global directive + // 注册全局指令 setupGlobDirectives(app); // Configure global error handling + // 配置全局错误处理 setupErrorHandle(app); // https://next.router.vuejs.org/api/#isready diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts index 78cf7c9..7db7619 100644 --- a/src/router/helper/menuHelper.ts +++ b/src/router/helper/menuHelper.ts @@ -11,14 +11,18 @@ export function getAllParentPath<T = Recordable>(treeData: T[], path: string) { return (menuList || []).map((item) => item.path); } +// 路径处理 function joinParentPath(menus: Menu[], parentPath = "") { for (let index = 0; index < menus.length; index++) { const menu = menus[index]; // https://next.router.vuejs.org/guide/essentials/nested-routes.html // Note that nested paths that start with / will be treated as a root path. + // 请注意,以 / 开头的嵌套路径将被视为根路径。 // This allows you to leverage the component nesting without having to use a nested URL. + // 这允许你利用组件嵌套,而无需使用嵌套 URL。 if (!(menu.path.startsWith("/") || isUrl(menu.path))) { // path doesn't start with /, nor is it a url, join parent path + // 路径不以 / 开头,也不是 url,加入父路径 menu.path = `${parentPath}/${menu.path}`; } if (menu?.children?.length) { @@ -37,14 +41,18 @@ export function transformMenuModule(menuModule: MenuModule): Menu { return menuList[0]; } +// 将路由转换成菜单 export function transformRouteToMenu(routeModList: AppRouteModule[], routerMapping = false) { + // 借助 lodash 深拷贝 const cloneRouteModList = cloneDeep(routeModList); const routeList: AppRouteRecordRaw[] = []; + // 对路由项进行修改 cloneRouteModList.forEach((item) => { if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === "string") { item.path = item.redirect; } + if (item.meta?.single) { const realItem = item?.children?.[0]; realItem && routeList.push(realItem); @@ -52,6 +60,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi routeList.push(item); } }); + // 提取树指定结构 const list = treeMap(routeList, { conversion: (node: AppRouteRecordRaw) => { const { meta: { title, hideMenu = false } = {} } = node; @@ -66,6 +75,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi }; }, }); + // 路径处理 joinParentPath(list); return cloneDeep(list); } @@ -74,6 +84,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi * config menu with given params */ const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g; + export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) { const { path, paramPath } = toRaw(menu); let realPath = paramPath ? paramPath : path; diff --git a/src/router/helper/routeHelper.ts b/src/router/helper/routeHelper.ts index 9d892eb..5f4efdd 100644 --- a/src/router/helper/routeHelper.ts +++ b/src/router/helper/routeHelper.ts @@ -68,6 +68,7 @@ function dynamicImport( } // Turn background objects into routing objects +// 将背景对象变成路由对象 export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] { routeList.forEach((route) => { const component = route.component as string; @@ -94,35 +95,46 @@ export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModul /** * Convert multi-level routing to level 2 routing + * 将多级路由转换为 2 级路由 */ export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) { const modules: AppRouteModule[] = cloneDeep(routeModules); + for (let index = 0; index < modules.length; index++) { const routeModule = modules[index]; + // 判断级别是否 多级 路由 if (!isMultipleRoute(routeModule)) { + // 声明终止当前循环, 即跳过此次循环,进行下一轮 continue; } + // 路由等级提升 promoteRouteLevel(routeModule); } return modules; } // Routing level upgrade +// 路由等级提升 function promoteRouteLevel(routeModule: AppRouteModule) { // Use vue-router to splice menus + // 使用vue-router拼接菜单 + // createRouter 创建一个可以被 Vue 应用程序使用的路由实例 let router: Router | null = createRouter({ routes: [routeModule as unknown as RouteRecordNormalized], history: createWebHashHistory(), }); - + // getRoutes: 获取所有 路由记录的完整列表。 const routes = router.getRoutes(); + // 将所有子路由添加到二级路由 addToChildren(routes, routeModule.children || [], routeModule); router = null; + // omit lodash的函数 对传入的item对象的children进行删除 routeModule.children = routeModule.children?.map((item) => omit(item, "children")); } // Add all sub-routes to the secondary route +// 将所有子路由添加到二级路由 function addToChildren( routes: RouteRecordNormalized[], children: AppRouteRecordRaw[], @@ -145,7 +157,9 @@ function addToChildren( } // Determine whether the level exceeds 2 levels +// 判断级别是否超过2级 function isMultipleRoute(routeModule: AppRouteModule) { + // Reflect.has 与 in 操作符 相同, 用于检查一个对象(包括它原型链上)是否拥有某个属性 if (!routeModule || !Reflect.has(routeModule, "children") || !routeModule.children?.length) { return false; } diff --git a/src/router/index.ts b/src/router/index.ts index c3dbd70..893cb02 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -14,9 +14,13 @@ const getRouteNames = (array: any[]) => getRouteNames(basicRoutes); // app router +// 创建一个可以被 Vue 应用程序使用的路由实例 export const router = createRouter({ + // 创建一个 hash 历史记录。 history: createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH), + // 应该添加到路由的初始路由列表。 routes: basicRoutes as unknown as RouteRecordRaw[], + // 是否应该禁止尾部斜杠。默认为假 strict: true, scrollBehavior: () => ({ left: 0, top: 0 }), }); @@ -32,6 +36,7 @@ export function resetRouter() { } // config router +// 配置路由器 export function setupRouter(app: App<Element>) { app.use(router); } diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 460485c..7e68704 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -2,14 +2,14 @@ import type { AppRouteRecordRaw, AppRouteModule } from "/@/router/types"; import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from "/@/router/routes/basic"; -import { mainOutRoutes } from "./mainOut"; import { PageEnum } from "/@/enums/pageEnum"; import { t } from "/@/hooks/web/useI18n"; +// import.meta.globEager() 直接引入所有的模块 Vite 独有的功能 const modules = import.meta.globEager("./modules/**/*.ts"); - const routeModuleList: AppRouteModule[] = []; +// 加入到路由集合中 Object.keys(modules).forEach((key) => { const mod = modules[key].default || {}; const modList = Array.isArray(mod) ? [...mod] : [mod]; @@ -18,6 +18,7 @@ Object.keys(modules).forEach((key) => { export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]; +// 根路由 export const RootRoute: AppRouteRecordRaw = { path: "/", name: "Root", @@ -37,10 +38,5 @@ export const LoginRoute: AppRouteRecordRaw = { }; // Basic routing without permission -export const basicRoutes = [ - LoginRoute, - RootRoute, - ...mainOutRoutes, - REDIRECT_ROUTE, - PAGE_NOT_FOUND_ROUTE, -]; +// 未经许可的基本路由 +export const basicRoutes = [LoginRoute, RootRoute, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE]; diff --git a/src/router/routes/mainOut.ts b/src/router/routes/mainOut.ts deleted file mode 100644 index a9fd70e..0000000 --- a/src/router/routes/mainOut.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** -The routing of this file will not show the layout. -It is an independent new page. -the contents of the file still need to log in to access - */ -import type { AppRouteModule } from "/@/router/types"; - -// test -// http:ip:port/main-out -export const mainOutRoutes: AppRouteModule[] = []; - -export const mainOutRouteNames = mainOutRoutes.map((item) => item.name); diff --git a/src/router/routes/modules/about.ts b/src/router/routes/modules/about.ts index c3b162f..3bf5000 100644 --- a/src/router/routes/modules/about.ts +++ b/src/router/routes/modules/about.ts @@ -3,7 +3,7 @@ import type { AppRouteModule } from "/@/router/types"; import { LAYOUT } from "/@/router/constant"; import { t } from "/@/hooks/web/useI18n"; -const dashboard: AppRouteModule = { +const about: AppRouteModule = { path: "/about", name: "About", component: LAYOUT, @@ -28,4 +28,4 @@ const dashboard: AppRouteModule = { ], }; -export default dashboard; +export default about; diff --git a/src/router/routes/modules/practice.ts b/src/router/routes/modules/student/practice.ts similarity index 55% rename from src/router/routes/modules/practice.ts rename to src/router/routes/modules/student/practice.ts index cb00b1e..a28757c 100644 --- a/src/router/routes/modules/practice.ts +++ b/src/router/routes/modules/student/practice.ts @@ -3,7 +3,7 @@ import type { AppRouteModule } from "/@/router/types"; import { LAYOUT } from "/@/router/constant"; import { t } from "/@/hooks/web/useI18n"; -const dashboard: AppRouteModule = { +const practice: AppRouteModule = { path: "/practice", name: "practice", component: LAYOUT, @@ -19,9 +19,24 @@ const dashboard: AppRouteModule = { meta: { title: t("routes.practice.record"), icon: "simple-icons:about-dot-me", + hideChildrenInMenu: true, }, + children: [ + { + path: "description", + name: "LectureRecordDescription", + component: () => + import( + "/@/views/student/practice/practice-record/practice-lecture-record/description.vue" + ), + meta: { + title: "详情", + hideMenu: true, + }, + }, + ], }, ], }; -export default dashboard; +export default practice; diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index b5ad1a1..9df9299 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -83,6 +83,8 @@ const setting: ProjectConfig = { fixed: true, // Menu collapse collapsed: false, + // When sider hide because of the responsive layout + siderHidden: false, // Whether to display the menu name when folding the menu collapsedShowTitle: false, // Whether it can be dragged @@ -134,7 +136,7 @@ const setting: ProjectConfig = { // Transition Setting transitionSetting: { // Whether to open the page switching animation - // The disabled state will also disable pageLoadinng + // The disabled state will also disable pageLoading enable: true, // Route basic switching animation diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 61d11f9..942b2ae 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -26,26 +26,37 @@ import { PageEnum } from "/@/enums/pageEnum"; interface PermissionState { // Permission code list + // 权限代码列表 permCodeList: string[] | number[]; // Whether the route has been dynamically added + // 路由是否动态添加 isDynamicAddedRoute: boolean; // To trigger a menu update + // 触发菜单更新 lastBuildMenuTime: number; // Backstage menu list + // 后台菜单列表 backMenuList: Menu[]; + // 菜单列表 frontMenuList: Menu[]; } + export const usePermissionStore = defineStore({ id: "app-permission", state: (): PermissionState => ({ + // 权限代码列表 permCodeList: [], // Whether the route has been dynamically added + // 路由是否动态添加 isDynamicAddedRoute: false, // To trigger a menu update + // 触发菜单更新 lastBuildMenuTime: 0, // Backstage menu list + // 后台菜单列表 backMenuList: [], // menu List + // 菜单列表 frontMenuList: [], }), getters: { @@ -96,6 +107,8 @@ export const usePermissionStore = defineStore({ const codeList = await getPermCode(); this.setPermCodeList(codeList); }, + + // 构建路由 async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { const { t } = useI18n(); const userStore = useUserStore(); @@ -105,16 +118,21 @@ export const usePermissionStore = defineStore({ const roleList = toRaw(userStore.getRoleList) || []; const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; + // 路由过滤器 在 函数filter 作为回调传入遍历使用 const routeFilter = (route: AppRouteRecordRaw) => { const { meta } = route; + // 抽出角色 const { roles } = meta || {}; if (!roles) return true; + // 进行角色权限判断 return roleList.some((role) => roles.includes(role)); }; const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { const { meta } = route; + // ignoreRoute 为true 则路由仅用于菜单生成,不会在实际的路由表中出现 const { ignoreRoute } = meta || {}; + // arr.filter 返回 true 表示该元素通过测试 return !ignoreRoute; }; @@ -124,6 +142,7 @@ export const usePermissionStore = defineStore({ const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { if (!routes || routes.length === 0) return; let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; + function patcher(routes: AppRouteRecordRaw[], parentPath = "") { if (parentPath) parentPath = parentPath + "/"; routes.forEach((route: AppRouteRecordRaw) => { @@ -140,6 +159,7 @@ export const usePermissionStore = defineStore({ children && children.length > 0 && patcher(children, currentPath); }); } + try { patcher(routes); } catch (e) { @@ -149,29 +169,44 @@ export const usePermissionStore = defineStore({ }; switch (permissionMode) { + // 角色权限 case PermissionModeEnum.ROLE: + // 对非一级路由进行过滤 routes = filter(asyncRoutes, routeFilter); + // 对一级路由根据角色权限过滤 routes = routes.filter(routeFilter); // Convert multi-level routing to level 2 routing + // 将多级路由转换为 2 级路由 routes = flatMultiLevelRoutes(routes); break; + // 路由映射, 默认进入该case case PermissionModeEnum.ROUTE_MAPPING: + // 对非一级路由进行过滤 routes = filter(asyncRoutes, routeFilter); + // 对一级路由再次根据角色权限过滤 routes = routes.filter(routeFilter); + // 将路由转换成菜单 const menuList = transformRouteToMenu(routes, true); + // 移除掉 ignoreRoute: true 的路由 非一级路由 routes = filter(routes, routeRemoveIgnoreFilter); + // 移除掉 ignoreRoute: true 的路由 一级路由; routes = routes.filter(routeRemoveIgnoreFilter); + // 对菜单进行排序 menuList.sort((a, b) => { return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0); }); + // 设置菜单列表 this.setFrontMenuList(menuList); + // Convert multi-level routing to level 2 routing + // 将多级路由转换为 2 级路由 routes = flatMultiLevelRoutes(routes); break; // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below + // 如果确定不需要做后台动态权限,请在下方评论整个判断 case PermissionModeEnum.BACK: const { createMessage } = useMessage(); @@ -181,23 +216,28 @@ export const usePermissionStore = defineStore({ }); // !Simulate to obtain permission codes from the background, + // 模拟从后台获取权限码, // this function may only need to be executed once, and the actual project can be put at the right time by itself + // 这个功能可能只需要执行一次,实际项目可以自己放在合适的时间 let routeList: AppRouteRecordRaw[] = []; try { - this.changePermissionCode(); + await this.changePermissionCode(); routeList = (await getMenuList()) as AppRouteRecordRaw[]; } catch (error) { console.error(error); } // Dynamically introduce components + // 动态引入组件 routeList = transformObjToRoute(routeList); // Background routing to menu structure + // 后台路由到菜单结构 const backMenuList = transformRouteToMenu(routeList); this.setBackMenuList(backMenuList); // remove meta.ignoreRoute item + // 删除 meta.ignoreRoute 项 routeList = filter(routeList, routeRemoveIgnoreFilter); routeList = routeList.filter(routeRemoveIgnoreFilter); @@ -214,6 +254,7 @@ export const usePermissionStore = defineStore({ }); // Need to be used outside the setup +// 需要在设置之外使用 export function usePermissionStoreWithOut() { return usePermissionStore(store); } diff --git a/src/utils/bem.ts b/src/utils/bem.ts new file mode 100644 index 0000000..7dcadbc --- /dev/null +++ b/src/utils/bem.ts @@ -0,0 +1,52 @@ +import { prefixCls } from '/@/settings/designSetting'; + +type Mod = string | { [key: string]: any }; +type Mods = Mod | Mod[]; + +export type BEM = ReturnType<typeof createBEM>; + +function genBem(name: string, mods?: Mods): string { + if (!mods) { + return ''; + } + + if (typeof mods === 'string') { + return ` ${name}--${mods}`; + } + + if (Array.isArray(mods)) { + return mods.reduce<string>((ret, item) => ret + genBem(name, item), ''); + } + + return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), ''); +} + +/** + * bem helper + * b() // 'button' + * b('text') // 'button__text' + * b({ disabled }) // 'button button--disabled' + * b('text', { disabled }) // 'button__text button__text--disabled' + * b(['disabled', 'primary']) // 'button button--disabled button--primary' + */ +export function buildBEM(name: string) { + return (el?: Mods, mods?: Mods): Mods => { + if (el && typeof el !== 'string') { + mods = el; + el = ''; + } + + el = el ? `${name}__${el}` : name; + + return `${el}${genBem(el, mods)}`; + }; +} + +export function createBEM(name: string) { + return [buildBEM(`${prefixCls}-${name}`)]; +} + +export function createNamespace(name: string) { + const prefixedName = `${prefixCls}-${name}`; + return [prefixedName, buildBEM(prefixedName)] as const; +} diff --git a/src/utils/cache/memory.ts b/src/utils/cache/memory.ts index 76e30a9..08a0a64 100644 --- a/src/utils/cache/memory.ts +++ b/src/utils/cache/memory.ts @@ -58,7 +58,12 @@ export class Memory<T = any, V = any> { return value; } const now = new Date().getTime(); - item.time = now + this.alive; + /** + * Prevent overflow of the setTimeout Maximum delay value + * Maximum delay value 2,147,483,647 ms + * https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value + */ + item.time = expires > now ? expires : now + expires; item.timeoutId = setTimeout( () => { this.remove(key); diff --git a/src/utils/cache/storageCache.ts b/src/utils/cache/storageCache.ts index b15a379..b3cdc6f 100644 --- a/src/utils/cache/storageCache.ts +++ b/src/utils/cache/storageCache.ts @@ -1,9 +1,6 @@ import { cacheCipher } from "/@/settings/encryptionSetting"; - import type { EncryptionParams } from "/@/utils/cipher"; - import { AesEncryption } from "/@/utils/cipher"; - import { isNullOrUnDef } from "/@/utils/is"; export interface CreateStorageParams extends EncryptionParams { @@ -27,8 +24,8 @@ export const createStorage = ({ const encryption = new AesEncryption({ key, iv }); /** - *Cache class - *Construction parameters can be passed into sessionStorage, localStorage, + * Cache class + * Construction parameters can be passed into sessionStorage, localStorage, * @class Cache * @example */ @@ -53,11 +50,10 @@ export const createStorage = ({ } /** - * - * Set cache + * Set cache * @param {string} key * @param {*} value - * @expire Expiration time in seconds + * @param {*} expire Expiration time in seconds * @memberof Cache */ set(key: string, value: any, expire: number | null = timeout) { @@ -73,8 +69,9 @@ export const createStorage = ({ } /** - *Read cache + * Read cache * @param {string} key + * @param {*} def * @memberof Cache */ get(key: string, def: any = null): any { diff --git a/src/utils/dateUtil.ts b/src/utils/dateUtil.ts index cce7810..33a185e 100644 --- a/src/utils/dateUtil.ts +++ b/src/utils/dateUtil.ts @@ -1,20 +1,23 @@ /** * Independent time operation tool to facilitate subsequent switch to dayjs */ -import moment from "moment"; +import dayjs from "dayjs"; const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; -const DATE_FORMAT = "YYYY-MM-DD "; +const DATE_FORMAT = "YYYY-MM-DD"; export function formatToDateTime( - date: moment.MomentInput = undefined, + date: dayjs.Dayjs | undefined = undefined, format = DATE_TIME_FORMAT, ): string { - return moment(date).format(format); + return dayjs(date).format(format); } -export function formatToDate(date: moment.MomentInput = undefined, format = DATE_FORMAT): string { - return moment(date).format(format); +export function formatToDate( + date: dayjs.Dayjs | undefined = undefined, + format = DATE_FORMAT, +): string { + return dayjs(date).format(format); } -export const dateUtil = moment; +export const dateUtil = dayjs; diff --git a/src/utils/factory/createAsyncComponent.tsx b/src/utils/factory/createAsyncComponent.tsx index 88d0fce..fba03db 100644 --- a/src/utils/factory/createAsyncComponent.tsx +++ b/src/utils/factory/createAsyncComponent.tsx @@ -3,7 +3,7 @@ import { // FunctionalComponent, CSSProperties } from "vue"; import { Spin } from "ant-design-vue"; -import { noop } from "/@/utils/index"; +import { noop } from "/@/utils"; // const Loading: FunctionalComponent<{ size: 'small' | 'default' | 'large' }> = (props) => { // const style: CSSProperties = { diff --git a/src/utils/file/base64Conver.ts b/src/utils/file/base64Conver.ts index ab6d0a4..94433d6 100644 --- a/src/utils/file/base64Conver.ts +++ b/src/utils/file/base64Conver.ts @@ -5,7 +5,7 @@ export function dataURLtoBlob(base64Buf: string): Blob { const arr = base64Buf.split(","); const typeItem = arr[0]; const mime = typeItem.match(/:(.*?);/)![1]; - const bstr = atob(arr[1]); + const bstr = window.atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n); while (n--) { diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts index ee2cda7..562c653 100644 --- a/src/utils/helper/treeHelper.ts +++ b/src/utils/helper/treeHelper.ts @@ -3,15 +3,19 @@ interface TreeHelperConfig { children: string; pid: string; } + +// 默认配置 const DEFAULT_CONFIG: TreeHelperConfig = { id: "id", children: "children", pid: "pid", }; +// 获取配置。 Object.assign 从一个或多个源对象复制到目标对象 const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config); // tree from list +// 列表中的树 export function listToTree<T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] { const conf = getConfig(config) as TreeHelperConfig; const nodeMap = new Map(); @@ -24,7 +28,7 @@ export function listToTree<T = any>(list: any[], config: Partial<TreeHelperConfi } for (const node of list) { const parent = nodeMap.get(node[pid]); - (parent ? parent.children : result).push(node); + (parent ? parent[children] : result).push(node); } return result; } @@ -123,18 +127,24 @@ export function findPathAll(tree: any, func: Fn, config: Partial<TreeHelperConfi export function filter<T = any>( tree: T[], func: (n: T) => boolean, + // Partial 将 T 中的所有属性设为可选 config: Partial<TreeHelperConfig> = {}, ): T[] { + // 获取配置 config = getConfig(config); const children = config.children as string; + function listFilter(list: T[]) { return list .map((node: any) => ({ ...node })) .filter((node) => { + // 递归调用 对含有children项 进行再次调用自身函数 listFilter node[children] = node[children] && listFilter(node[children]); + // 执行传入的回调 func 进行过滤 return func(node) || (node[children] && node[children].length); }); } + return listFilter(tree); } @@ -157,6 +167,7 @@ export function forEach<T = any>( /** * @description: Extract tree specified structure + * @description: 提取树指定结构 */ export function treeMap<T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] { return treeData.map((item) => treeMapEach(item, opt)); @@ -164,6 +175,7 @@ export function treeMap<T = any>(treeData: T[], opt: { children?: string; conver /** * @description: Extract tree specified structure + * @description: 提取树指定结构 */ export function treeMapEach( data: any, @@ -187,3 +199,18 @@ export function treeMapEach( }; } } + +/** + * 递归遍历树结构 + * @param treeDatas 树 + * @param callBack 回调 + * @param parentNode 父节点 + */ +export function eachTree(treeDatas: any[], callBack: Fn, parentNode = {}) { + treeDatas.forEach((element) => { + const newNode = callBack(element, parentNode) || element; + if (element.children) { + eachTree(element.children, callBack, newNode); + } + }); +} diff --git a/src/utils/helper/tsxHelper.tsx b/src/utils/helper/tsxHelper.tsx index f2b43b4..66f371f 100644 --- a/src/utils/helper/tsxHelper.tsx +++ b/src/utils/helper/tsxHelper.tsx @@ -29,7 +29,7 @@ export function extendSlots(slots: Slots, excludeKeys: string[] = []) { if (excludeKeys.includes(key)) { return null; } - ret[key] = () => getSlot(slots, key); + ret[key] = (data?: any) => getSlot(slots, key, data); }); return ret; } diff --git a/src/utils/http/axios/Axios.ts b/src/utils/http/axios/Axios.ts index c7a9f90..d2f0c27 100644 --- a/src/utils/http/axios/Axios.ts +++ b/src/utils/http/axios/Axios.ts @@ -61,7 +61,7 @@ export class VAxios { } /** - * @description: Interceptor configuration + * @description: Interceptor configuration 拦截器配置 */ private setupInterceptors() { const transform = this.getTransform(); @@ -80,11 +80,8 @@ export class VAxios { // Request interceptor configuration processing this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => { // If cancel repeat request is turned on, then cancel repeat request is prohibited - const { - // @ts-ignore - headers: { ignoreCancelToken }, - } = config; - + // @ts-ignore + const { ignoreCancelToken } = config.requestOptions; const ignoreCancel = ignoreCancelToken !== undefined ? ignoreCancelToken @@ -114,7 +111,10 @@ export class VAxios { // Response result interceptor error capture responseInterceptorsCatch && isFunction(responseInterceptorsCatch) && - this.axiosInstance.interceptors.response.use(undefined, responseInterceptorsCatch); + this.axiosInstance.interceptors.response.use(undefined, (error) => { + // @ts-ignore + return responseInterceptorsCatch(this.axiosInstance, error); + }); } /** @@ -199,7 +199,7 @@ export class VAxios { const opt: RequestOptions = Object.assign({}, requestOptions, options); - const { beforeRequestHook, requestCatchHook, transformRequestHook } = transform || {}; + const { beforeRequestHook, requestCatchHook, transformResponseHook } = transform || {}; if (beforeRequestHook && isFunction(beforeRequestHook)) { conf = beforeRequestHook(conf, opt); } @@ -211,9 +211,9 @@ export class VAxios { this.axiosInstance .request<any, AxiosResponse<Result>>(conf) .then((res: AxiosResponse<Result>) => { - if (transformRequestHook && isFunction(transformRequestHook)) { + if (transformResponseHook && isFunction(transformResponseHook)) { try { - const ret = transformRequestHook(res, opt); + const ret = transformResponseHook(res, opt); resolve(ret); } catch (err) { reject(err || new Error("request error!")); diff --git a/src/utils/http/axios/axiosRetry.ts b/src/utils/http/axios/axiosRetry.ts new file mode 100644 index 0000000..d081b96 --- /dev/null +++ b/src/utils/http/axios/axiosRetry.ts @@ -0,0 +1,28 @@ +import { AxiosError, AxiosInstance } from 'axios'; +/** + * 请求重试机制 + */ + +export class AxiosRetry { + /** + * 重试 + */ + retry(AxiosInstance: AxiosInstance, error: AxiosError) { + // @ts-ignore + const { config } = error.response; + const { waitTime, count } = config?.requestOptions?.retryRequest; + config.__retryCount = config.__retryCount || 0; + if (config.__retryCount >= count) { + return Promise.reject(error); + } + config.__retryCount += 1; + return this.delay(waitTime).then(() => AxiosInstance(config)); + } + + /** + * 延迟 + */ + private delay(waitTime: number) { + return new Promise((resolve) => setTimeout(resolve, waitTime)); + } +} diff --git a/src/utils/http/axios/axiosTransform.ts b/src/utils/http/axios/axiosTransform.ts index c756ffd..6fc6227 100644 --- a/src/utils/http/axios/axiosTransform.ts +++ b/src/utils/http/axios/axiosTransform.ts @@ -18,9 +18,9 @@ export abstract class AxiosTransform { beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig; /** - * @description: Request successfully processed + * @description: 处理响应数据 */ - transformRequestHook?: (res: AxiosResponse<Result>, options: RequestOptions) => any; + transformResponseHook?: (res: AxiosResponse<Result>, options: RequestOptions) => any; /** * @description: 请求失败处理 @@ -48,5 +48,5 @@ export abstract class AxiosTransform { /** * @description: 请求之后的拦截器错误处理 */ - responseInterceptorsCatch?: (error: Error) => void; + responseInterceptorsCatch?: (axiosInstance: AxiosResponse, error: Error) => void; } diff --git a/src/utils/http/axios/helper.ts b/src/utils/http/axios/helper.ts index 3157556..d79227f 100644 --- a/src/utils/http/axios/helper.ts +++ b/src/utils/http/axios/helper.ts @@ -27,7 +27,8 @@ export function formatRequestDate(params: Recordable) { } for (const key in params) { - if (params[key] && params[key]._isAMomentObject) { + const format = params[key]?.format ?? null; + if (format && typeof format === "function") { params[key] = params[key].format(DATE_TIME_FORMAT); } if (isString(key)) { diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index 4987b32..a3271ac 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -2,6 +2,7 @@ // The axios configuration can be changed according to the project, just change the file, other files can be left unchanged import type { AxiosResponse } from "axios"; +import { clone } from "lodash-es"; import type { RequestOptions, Result } from "/#/axios"; import type { AxiosTransform, CreateAxiosOptions } from "./axiosTransform"; import { VAxios } from "./Axios"; @@ -16,6 +17,7 @@ import { useErrorLogStoreWithOut } from "/@/store/modules/errorLog"; import { useI18n } from "/@/hooks/web/useI18n"; import { joinTimestamp, formatRequestDate } from "./helper"; import { useUserStoreWithOut } from "/@/store/modules/user"; +import { AxiosRetry } from "/@/utils/http/axios/axiosRetry"; const globSetting = useGlobSetting(); const urlPrefix = globSetting.urlPrefix; @@ -26,9 +28,9 @@ const { createMessage, createErrorModal } = useMessage(); */ const transform: AxiosTransform = { /** - * @description: 处理请求数据。如果数据不是预期格式,可直接抛出错误 + * @description: 处理响应数据。如果数据不是预期格式,可直接抛出错误 */ - transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => { + transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) => { const { t } = useI18n(); const { isTransformResponse, isReturnNativeResponse } = options; // 是否返回原生响应头 比如:需要获取响应头时使用该属性 @@ -42,18 +44,18 @@ const transform: AxiosTransform = { } // 错误的时候返回 - const { data } = res; - if (!data) { + const { data: axiosData } = res; + if (!axiosData) { // return '[HTTP] Request has no return value'; throw new Error(t("sys.api.apiRequestFailed")); } // 这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式 - const { code, result, message } = data; + const { code, data, message } = axiosData; // 这里逻辑可以根据项目进行修改 - const hasSuccess = data && Reflect.has(data, "code") && code === ResultEnum.SUCCESS; + const hasSuccess = Reflect.has(axiosData, "code") && code === ResultEnum.SUCCESS; if (hasSuccess) { - return result; + return data; } // 在此处根据自己项目的实际情况对不同的code执行不同的操作 @@ -109,7 +111,11 @@ const transform: AxiosTransform = { } else { if (!isString(params)) { formatDate && formatRequestDate(params); - if (Reflect.has(config, "data") && config.data && Object.keys(config.data).length > 0) { + if ( + Reflect.has(config, "data") && + config.data && + (Object.keys(config.data).length > 0 || config.data instanceof FormData) + ) { config.data = data; config.params = params; } else { @@ -157,7 +163,7 @@ const transform: AxiosTransform = { /** * @description: 响应错误处理 */ - responseInterceptorsCatch: (error: any) => { + responseInterceptorsCatch: (axiosInstance: AxiosResponse, error: any) => { const { t } = useI18n(); const errorLogStore = useErrorLogStoreWithOut(); errorLogStore.addAjaxErrorInfo(error); @@ -188,12 +194,21 @@ const transform: AxiosTransform = { } checkStatus(error?.response?.status, msg, errorMessageMode); + + // 添加自动重试机制 保险起见 只针对GET请求 + const retryRequest = new AxiosRetry(); + const { isOpenRetry } = config.requestOptions.retryRequest; + config.method?.toUpperCase() === RequestEnum.GET && + isOpenRetry && + // @ts-ignore + retryRequest.retry(axiosInstance, error); return Promise.reject(error); }, }; function createAxios(opt?: Partial<CreateAxiosOptions>) { return new VAxios( + // 深度合并 deepMerge( { // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes @@ -208,7 +223,7 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) { // 如果是form-data格式 // headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }, // 数据处理方式 - transform, + transform: clone(transform), // 配置项,下面的选项都可以在独立的接口请求中覆盖 requestOptions: { // 默认将prefix 添加到url @@ -233,6 +248,11 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) { ignoreCancelToken: true, // 是否携带token withToken: true, + retryRequest: { + isOpenRetry: true, + count: 5, + waitTime: 100, + }, }, }, opt || {}, diff --git a/src/utils/index.ts b/src/utils/index.ts index 6d1f431..d303989 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -32,6 +32,7 @@ export function setObjToUrlParams(baseUrl: string, obj: any): string { return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, "?") + parameters; } +// 深度合并 export function deepMerge<T = any>(src: any = {}, target: any = {}): T { let key: string; for (key in target) { diff --git a/src/utils/is.ts b/src/utils/is.ts index d703d54..3ad717b 100644 --- a/src/utils/is.ts +++ b/src/utils/is.ts @@ -94,6 +94,6 @@ export const isClient = !isServer; export function isUrl(path: string): boolean { const reg = - /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/; + /^(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?(\/#\/)?(?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/; return reg.test(path); } diff --git a/src/utils/lib/echarts.ts b/src/utils/lib/echarts.ts index 00eeb73..878021d 100644 --- a/src/utils/lib/echarts.ts +++ b/src/utils/lib/echarts.ts @@ -7,6 +7,7 @@ import { MapChart, PictorialBarChart, RadarChart, + ScatterChart, } from "echarts/charts"; import { @@ -50,6 +51,7 @@ echarts.use([ TimelineComponent, CalendarComponent, GraphicComponent, + ScatterChart, ]); export default echarts; diff --git a/src/utils/props.ts b/src/utils/props.ts new file mode 100644 index 0000000..729c9ef --- /dev/null +++ b/src/utils/props.ts @@ -0,0 +1,185 @@ +// copy from element-plus + +import { warn } from 'vue'; +import { isObject } from '@vue/shared'; +import { fromPairs } from 'lodash-es'; +import type { ExtractPropTypes, PropType } from '@vue/runtime-core'; +import type { Mutable } from './types'; + +const wrapperKey = Symbol(); +export type PropWrapper<T> = { [wrapperKey]: T }; + +export const propKey = Symbol(); + +type ResolveProp<T> = ExtractPropTypes<{ + key: { type: T; required: true }; +}>['key']; +type ResolvePropType<T> = ResolveProp<T> extends { type: infer V } ? V : ResolveProp<T>; +type ResolvePropTypeWithReadonly<T> = Readonly<T> extends Readonly<Array<infer A>> + ? ResolvePropType<A[]> + : ResolvePropType<T>; + +type IfUnknown<T, V> = [unknown] extends [T] ? V : T; + +export type BuildPropOption<T, D extends BuildPropType<T, V, C>, R, V, C> = { + type?: T; + values?: readonly V[]; + required?: R; + default?: R extends true + ? never + : D extends Record<string, unknown> | Array<any> + ? () => D + : (() => D) | D; + validator?: ((val: any) => val is C) | ((val: any) => boolean); +}; + +type _BuildPropType<T, V, C> = + | (T extends PropWrapper<unknown> + ? T[typeof wrapperKey] + : [V] extends [never] + ? ResolvePropTypeWithReadonly<T> + : never) + | V + | C; +export type BuildPropType<T, V, C> = _BuildPropType< + IfUnknown<T, never>, + IfUnknown<V, never>, + IfUnknown<C, never> +>; + +type _BuildPropDefault<T, D> = [T] extends [ + // eslint-disable-next-line @typescript-eslint/ban-types + Record<string, unknown> | Array<any> | Function, +] + ? D + : D extends () => T + ? ReturnType<D> + : D; + +export type BuildPropDefault<T, D, R> = R extends true + ? { readonly default?: undefined } + : { + readonly default: Exclude<D, undefined> extends never + ? undefined + : Exclude<_BuildPropDefault<T, D>, undefined>; + }; +export type BuildPropReturn<T, D, R, V, C> = { + readonly type: PropType<BuildPropType<T, V, C>>; + readonly required: IfUnknown<R, false>; + readonly validator: ((val: unknown) => boolean) | undefined; + [propKey]: true; +} & BuildPropDefault<BuildPropType<T, V, C>, IfUnknown<D, never>, IfUnknown<R, false>>; + +/** + * @description Build prop. It can better optimize prop types + * @description 生成 prop,能更好地优化类型 + * @example + // limited options + // the type will be PropType<'light' | 'dark'> + buildProp({ + type: String, + values: ['light', 'dark'], + } as const) + * @example + // limited options and other types + // the type will be PropType<'small' | 'medium' | number> + buildProp({ + type: [String, Number], + values: ['small', 'medium'], + validator: (val: unknown): val is number => typeof val === 'number', + } as const) + @link see more: https://github.com/element-plus/element-plus/pull/3341 + */ +export function buildProp< + T = never, + D extends BuildPropType<T, V, C> = never, + R extends boolean = false, + V = never, + C = never, +>(option: BuildPropOption<T, D, R, V, C>, key?: string): BuildPropReturn<T, D, R, V, C> { + // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`) + if (!isObject(option) || !!option[propKey]) return option as any; + + const { values, required, default: defaultValue, type, validator } = option; + + const _validator = + values || validator + ? (val: unknown) => { + let valid = false; + let allowedValues: unknown[] = []; + + if (values) { + allowedValues = [...values, defaultValue]; + valid ||= allowedValues.includes(val); + } + if (validator) valid ||= validator(val); + + if (!valid && allowedValues.length > 0) { + const allowValuesText = [...new Set(allowedValues)] + .map((value) => JSON.stringify(value)) + .join(', '); + warn( + `Invalid prop: validation failed${ + key ? ` for prop "${key}"` : '' + }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`, + ); + } + return valid; + } + : undefined; + + return { + type: + typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey) + ? type[wrapperKey] + : type, + required: !!required, + default: defaultValue, + validator: _validator, + [propKey]: true, + } as unknown as BuildPropReturn<T, D, R, V, C>; +} + +type NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null]; + +export const buildProps = < + O extends { + [K in keyof O]: O[K] extends BuildPropReturn<any, any, any, any, any> + ? O[K] + : [O[K]] extends NativePropType + ? O[K] + : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C> + ? D extends BuildPropType<T, V, C> + ? BuildPropOption<T, D, R, V, C> + : never + : never; + }, +>( + props: O, +) => + fromPairs( + Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)]), + ) as unknown as { + [K in keyof O]: O[K] extends { [propKey]: boolean } + ? O[K] + : [O[K]] extends NativePropType + ? O[K] + : O[K] extends BuildPropOption< + infer T, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + infer _D, + infer R, + infer V, + infer C + > + ? BuildPropReturn<T, O[K]['default'], R, V, C> + : never; + }; + +export const definePropType = <T>(val: any) => ({ [wrapperKey]: val } as PropWrapper<T>); + +export const keyOf = <T>(arr: T) => Object.keys(arr) as Array<keyof T>; +export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) => + val as Mutable<typeof val>; + +export const componentSize = ['large', 'medium', 'small', 'mini'] as const; diff --git a/src/utils/types.ts b/src/utils/types.ts new file mode 100644 index 0000000..4453ec4 --- /dev/null +++ b/src/utils/types.ts @@ -0,0 +1,42 @@ +// copy from element-plus + +import type { CSSProperties, Plugin } from 'vue'; + +type OptionalKeys<T extends Record<string, unknown>> = { + [K in keyof T]: T extends Record<K, T[K]> ? never : K; +}[keyof T]; + +type RequiredKeys<T extends Record<string, unknown>> = Exclude<keyof T, OptionalKeys<T>>; + +type MonoArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg?: T[K]) => void; + +type BiArgEmitter<T, Keys extends keyof T> = <K extends Keys>(evt: K, arg: T[K]) => void; + +export type EventEmitter<T extends Record<string, unknown>> = MonoArgEmitter<T, OptionalKeys<T>> & + BiArgEmitter<T, RequiredKeys<T>>; + +export type AnyFunction<T> = (...args: any[]) => T; + +export type PartialReturnType<T extends (...args: unknown[]) => unknown> = Partial<ReturnType<T>>; + +export type SFCWithInstall<T> = T & Plugin; + +export type Nullable<T> = T | null; + +export type RefElement = Nullable<HTMLElement>; + +export type CustomizedHTMLElement<T> = HTMLElement & T; + +export type Indexable<T> = { + [key: string]: T; +}; + +export type Hash<T> = Indexable<T>; + +export type TimeoutHandle = ReturnType<typeof global.setTimeout>; + +export type ComponentSize = 'large' | 'medium' | 'small' | 'mini'; + +export type StyleValue = string | CSSProperties | Array<StyleValue>; + +export type Mutable<T> = { -readonly [P in keyof T]: T[P] }; diff --git a/src/views/dashboard/analysis/components/GrowCard.vue b/src/views/dashboard/analysis/components/GrowCard.vue index 0fc3899..bef4408 100644 --- a/src/views/dashboard/analysis/components/GrowCard.vue +++ b/src/views/dashboard/analysis/components/GrowCard.vue @@ -5,15 +5,14 @@ size="small" :loading="loading" :title="item.title" - class="md:w-1/4 w-full !md:mt-0 !mt-4" - :class="[index + 1 < 4 && '!md:mr-4']" - :canExpan="false" + class="md:w-1/4 w-full !md:mt-0" + :class="{ '!md:mr-4': index + 1 < 4, '!mt-4': index > 0 }" > <template #extra> <Tag :color="item.color">{{ item.action }}</Tag> </template> - <div class="py-4 px-4 flex justify-between"> + <div class="py-4 px-4 flex justify-between items-center"> <CountTo prefix="$" :startVal="1" :endVal="item.value" class="text-2xl" /> <Icon :icon="item.icon" :size="40" /> </div> diff --git a/src/views/dashboard/analysis/components/SalesProductPie.vue b/src/views/dashboard/analysis/components/SalesProductPie.vue index c9d4641..7014bc3 100644 --- a/src/views/dashboard/analysis/components/SalesProductPie.vue +++ b/src/views/dashboard/analysis/components/SalesProductPie.vue @@ -22,6 +22,7 @@ const chartRef = ref<HTMLDivElement | null>(null); const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>); + watch( () => props.loading, () => { diff --git a/src/views/dashboard/analysis/components/SiteAnalysis.vue b/src/views/dashboard/analysis/components/SiteAnalysis.vue index ab0ef74..2b20ad9 100644 --- a/src/views/dashboard/analysis/components/SiteAnalysis.vue +++ b/src/views/dashboard/analysis/components/SiteAnalysis.vue @@ -3,7 +3,7 @@ :tab-list="tabListTitle" v-bind="$attrs" :active-tab-key="activeKey" - @tabChange="onTabChange" + @tab-change="onTabChange" > <p v-if="activeKey === 'tab1'"> <VisitAnalysis /> diff --git a/src/views/dashboard/analysis/components/VisitAnalysis.vue b/src/views/dashboard/analysis/components/VisitAnalysis.vue index ce21cab..97eae8a 100644 --- a/src/views/dashboard/analysis/components/VisitAnalysis.vue +++ b/src/views/dashboard/analysis/components/VisitAnalysis.vue @@ -1,10 +1,12 @@ <template> <div ref="chartRef" :style="{ height, width }"></div> </template> +<script lang="ts"> + import { basicProps } from "./props"; +</script> <script lang="ts" setup> import { onMounted, ref, Ref } from "vue"; import { useECharts } from "/@/hooks/web/useECharts"; - import { basicProps } from "./props"; defineProps({ ...basicProps, @@ -26,26 +28,7 @@ xAxis: { type: "category", boundaryGap: false, - data: [ - "6:00", - "7:00", - "8:00", - "9:00", - "10:00", - "11:00", - "12:00", - "13:00", - "14:00", - "15:00", - "16:00", - "17:00", - "18:00", - "19:00", - "20:00", - "21:00", - "22:00", - "23:00", - ], + data: [...new Array(18)].map((_item, index) => `${index + 6}:00`), splitLine: { show: true, lineStyle: { diff --git a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue index 400cca9..5c350f4 100644 --- a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue +++ b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue @@ -1,10 +1,12 @@ <template> <div ref="chartRef" :style="{ height, width }"></div> </template> +<script lang="ts"> + import { basicProps } from "./props"; +</script> <script lang="ts" setup> import { onMounted, ref, Ref } from "vue"; import { useECharts } from "/@/hooks/web/useECharts"; - import { basicProps } from "./props"; defineProps({ ...basicProps, @@ -26,20 +28,7 @@ grid: { left: "1%", right: "1%", top: "2 %", bottom: 0, containLabel: true }, xAxis: { type: "category", - data: [ - "1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月", - ], + data: [...new Array(12)].map((_item, index) => `${index + 1}月`), }, yAxis: { type: "value", diff --git a/src/views/dashboard/analysis/components/VisitRadar.vue b/src/views/dashboard/analysis/components/VisitRadar.vue index 9d25fd4..94d5ec9 100644 --- a/src/views/dashboard/analysis/components/VisitRadar.vue +++ b/src/views/dashboard/analysis/components/VisitRadar.vue @@ -19,9 +19,9 @@ default: "300px", }, }); - const chartRef = ref<HTMLDivElement | null>(null); const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>); + watch( () => props.loading, () => { @@ -39,28 +39,22 @@ splitNumber: 8, indicator: [ { - text: "电脑", - max: 100, + name: "电脑", }, { - text: "充电器", - max: 100, + name: "充电器", }, { - text: "耳机", - max: 100, + name: "耳机", }, { - text: "手机", - max: 100, + name: "手机", }, { - text: "Ipad", - max: 100, + name: "Ipad", }, { - text: "耳机", - max: 100, + name: "耳机", }, ], }, diff --git a/src/views/dashboard/analysis/components/VisitSource.vue b/src/views/dashboard/analysis/components/VisitSource.vue index db9e094..8191e2b 100644 --- a/src/views/dashboard/analysis/components/VisitSource.vue +++ b/src/views/dashboard/analysis/components/VisitSource.vue @@ -20,6 +20,7 @@ }); const chartRef = ref<HTMLDivElement | null>(null); const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>); + watch( () => props.loading, () => { diff --git a/src/views/dashboard/workbench/components/ProjectCard.vue b/src/views/dashboard/workbench/components/ProjectCard.vue index e97fa6c..04ebc98 100644 --- a/src/views/dashboard/workbench/components/ProjectCard.vue +++ b/src/views/dashboard/workbench/components/ProjectCard.vue @@ -4,19 +4,17 @@ <a-button type="link" size="small">更多</a-button> </template> - <template v-for="item in items" :key="item"> - <CardGrid class="!md:w-1/3 !w-full"> - <span class="flex"> - <Icon :icon="item.icon" :color="item.color" size="30" /> - <span class="text-lg ml-4">{{ item.title }}</span> - </span> - <div class="flex mt-2 h-10 text-secondary">{{ item.desc }}</div> - <div class="flex justify-between text-secondary"> - <span>{{ item.group }}</span> - <span>{{ item.date }}</span> - </div> - </CardGrid> - </template> + <CardGrid v-for="item in items" :key="item" class="!md:w-1/3 !w-full"> + <span class="flex"> + <Icon :icon="item.icon" :color="item.color" size="30" /> + <span class="text-lg ml-4">{{ item.title }}</span> + </span> + <div class="flex mt-2 h-10 text-secondary">{{ item.desc }}</div> + <div class="flex justify-between text-secondary"> + <span>{{ item.group }}</span> + <span>{{ item.date }}</span> + </div> + </CardGrid> </Card> </template> <script lang="ts"> diff --git a/src/views/dashboard/workbench/components/QuickNav.vue b/src/views/dashboard/workbench/components/QuickNav.vue index 3ee18d8..65d3b67 100644 --- a/src/views/dashboard/workbench/components/QuickNav.vue +++ b/src/views/dashboard/workbench/components/QuickNav.vue @@ -1,13 +1,11 @@ <template> <Card title="快捷导航" v-bind="$attrs"> - <template v-for="item in navItems" :key="item"> - <CardGrid> - <span class="flex flex-col items-center"> - <Icon :icon="item.icon" :color="item.color" size="20" /> - <span class="text-md mt-2">{{ item.title }}</span> - </span> - </CardGrid> - </template> + <CardGrid v-for="item in navItems" :key="item"> + <span class="flex flex-col items-center"> + <Icon :icon="item.icon" :color="item.color" size="20" /> + <span class="text-md mt-2">{{ item.title }}</span> + </span> + </CardGrid> </Card> </template> <script lang="ts" setup> diff --git a/src/views/dashboard/workbench/components/SaleRadar.vue b/src/views/dashboard/workbench/components/SaleRadar.vue index f3f8f8e..e01dcf7 100644 --- a/src/views/dashboard/workbench/components/SaleRadar.vue +++ b/src/views/dashboard/workbench/components/SaleRadar.vue @@ -39,28 +39,22 @@ splitNumber: 8, indicator: [ { - text: "2017", - max: 100, + name: "2017", }, { - text: "2017", - max: 100, + name: "2017", }, { - text: "2018", - max: 100, + name: "2018", }, { - text: "2019", - max: 100, + name: "2019", }, { - text: "2020", - max: 100, + name: "2020", }, { - text: "2021", - max: 100, + name: "2021", }, ], }, diff --git a/src/views/student/practice/practice-record/index.vue b/src/views/student/practice/practice-record/index.vue index 30744d9..3adc38e 100644 --- a/src/views/student/practice/practice-record/index.vue +++ b/src/views/student/practice/practice-record/index.vue @@ -1,4 +1,6 @@ <template> +<div class="b-6"> + <Tabs type="card" :centered="true"> <TabPane key="1" tab="实习听课记录"> <PracticeLectureRecord /> @@ -10,6 +12,7 @@ <TeachingResearchSummary /> </TabPane> </Tabs> +</div> </template> <script lang="ts"> import { Tabs, TabPane } from "ant-design-vue"; diff --git a/src/views/student/practice/practice-record/practice-lecture-record/description.vue b/src/views/student/practice/practice-record/practice-lecture-record/description.vue new file mode 100644 index 0000000..3700440 --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lecture-record/description.vue @@ -0,0 +1,36 @@ +<template> + <div class="p-4 mx-auto flex flex-col space-y-3"> + <Description @register="register" /> + <a-button class="rounded-full" @click="router.back()">返回</a-button> + </div> +</template> +<script lang="ts"> + import { defineComponent } from "vue"; + import { useRoute, useRouter } from "vue-router"; + import { DescItem, Description, useDescription } from "/@/components/Description"; + export default defineComponent({ + name: "LectureRecordDescription", + components: { + Description, + }, + setup() { + const schema: DescItem[] = [ + { + field: "lectureContent", + label: "听课内容", + }, + ]; + const route = useRoute(); + const router = useRouter(); + const [register] = useDescription({ + title: "详情", + schema, + data: route.params, + }); + return { + register, + router, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lecture-record/index.vue b/src/views/student/practice/practice-record/practice-lecture-record/index.vue index d7036d3..bce2696 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/index.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/index.vue @@ -13,6 +13,15 @@ icon: 'ic:outline-delete-outline', onClick: handleMoreInfo.bind(null, record), }, + { + label: '编辑', + onClick: handleEdit.bind(null, record), + }, + { + label: '删除', + icon: 'ic:outline-delete-outline', + onClick: handleDelete.bind(null, record), + }, ]" /> </template> @@ -21,6 +30,8 @@ </template> <script lang="ts"> import { defineComponent } from "vue"; + import { useRouter } from "vue-router"; + import { PracticeLectureRecordItem } from "/@/api/student/model/practice-model"; import { getLectureRecordPageById } from "/@/api/student/practice"; import { BasicColumn, TableAction, useTable } from "/@/components/Table"; import { BasicTable } from "/@/components/Table"; @@ -51,6 +62,10 @@ dataIndex: "teacherName", width: 150, }, + { + title: "课程类型", + dataIndex: "lectureType", + }, ]; const [registerTable, { reload }] = useTable({ title: "实习听课记录", @@ -59,16 +74,30 @@ rowKey: "recordId", pagination: { pageSize: 10 }, actionColumn: { - title: "Action", + title: "操作", dataIndex: "action", + width: 240, + fixed: "right", }, }); - + const router = useRouter(); function handleReloadCurrent() { reload(); } - function handleMoreInfo(record: Recordable) { + function handleMoreInfo(record: PracticeLectureRecordItem) { + console.log(record); + router.push({ + name: "LectureRecordDescription", + params: record, + }); + } + + function handleDelete(record: PracticeLectureRecordItem) { + console.log(record); + } + + function handleEdit(record: PracticeLectureRecordItem) { console.log(record); } @@ -76,6 +105,8 @@ registerTable, handleReloadCurrent, handleMoreInfo, + handleDelete, + handleEdit, }; }, }); diff --git a/src/views/sys/error-log/index.vue b/src/views/sys/error-log/index.vue index e078813..fe912c7 100644 --- a/src/views/sys/error-log/index.vue +++ b/src/views/sys/error-log/index.vue @@ -1,7 +1,7 @@ <template> <div class="p-4"> <template v-for="src in imgList" :key="src"> - <img :src="src" v-show="false" /> + <img :src="src" v-show="false" alt="" /> </template> <DetailModal :info="rowInfo" @register="registerModal" /> <BasicTable @register="register" class="error-handle-table"> @@ -16,12 +16,17 @@ {{ t("sys.errorLog.fireAjaxError") }} </a-button> </template> - <template #action="{ record }"> - <TableAction - :actions="[ - { label: t('sys.errorLog.tableActionDesc'), onClick: handleDetail.bind(null, record) }, - ]" - /> + <template #bodyCell="{ column, record }"> + <template v-if="column.key === 'action'"> + <TableAction + :actions="[ + { + label: t('sys.errorLog.tableActionDesc'), + onClick: handleDetail.bind(null, record), + }, + ]" + /> + </template> </template> </BasicTable> </div> @@ -52,7 +57,7 @@ width: 80, title: "Action", dataIndex: "action", - slots: { customRender: "action" }, + // slots: { customRender: 'action' }, }, }); const [registerModal, { openModal }] = useModal(); diff --git a/src/views/sys/lock/useNow.ts b/src/views/sys/lock/useNow.ts index 6c102d3..708494f 100644 --- a/src/views/sys/lock/useNow.ts +++ b/src/views/sys/lock/useNow.ts @@ -1,11 +1,8 @@ import { dateUtil } from "/@/utils/dateUtil"; import { reactive, toRefs } from "vue"; -import { useLocaleStore } from "/@/store/modules/locale"; import { tryOnMounted, tryOnUnmounted } from "@vueuse/core"; export function useNow(immediate = true) { - const localeStore = useLocaleStore(); - const localData = dateUtil.localeData(localeStore.getLocale); let timer: IntervalHandle; const state = reactive({ @@ -28,13 +25,13 @@ export function useNow(immediate = true) { state.year = now.get("y"); state.month = now.get("M") + 1; - state.week = localData.weekdays()[now.day()]; - state.day = now.get("D"); + state.week = "星期" + ["日", "一", "二", "三", "四", "五", "六"][now.day()]; + state.day = now.get("date"); state.hour = h; state.minute = m; state.second = s; - state.meridiem = localData.meridiem(Number(h), Number(h), true); + state.meridiem = now.format("A"); }; function start() { diff --git a/src/views/sys/login/Login.vue b/src/views/sys/login/Login.vue index e11a128..27f2fa3 100644 --- a/src/views/sys/login/Login.vue +++ b/src/views/sys/login/Login.vue @@ -1,11 +1,13 @@ <template> <div :class="prefixCls" class="relative w-full h-full px-4"> - <AppLocalePicker - class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" - :showText="false" - v-if="!sessionTimeout && showLocale" - /> - <AppDarkModeToggle class="absolute top-3 right-7 enter-x" v-if="!sessionTimeout" /> + <div class="flex items-center absolute right-4 top-4"> + <AppDarkModeToggle class="enter-x mr-2" v-if="!sessionTimeout" /> + <AppLocalePicker + class="text-white enter-x xl:text-gray-600" + :show-text="false" + v-if="!sessionTimeout && showLocale" + /> + </div> <span class="-enter-x xl:hidden"> <AppLogo :alwaysShowTitle="true" /> @@ -24,7 +26,7 @@ <div class="mt-10 font-medium text-white -enter-x"> <span class="inline-block mt-4 text-3xl"> {{ t("sys.login.signInTitle") }}</span> </div> - <div class="mt-5 font-normal text-white text-md dark:text-gray-500 -enter-x"> + <div class="mt-5 font-normal text-white dark:text-gray-500 -enter-x"> {{ t("sys.login.signInDesc") }} </div> </div> diff --git a/src/views/sys/login/LoginForm.vue b/src/views/sys/login/LoginForm.vue index 6ba6f54..5a4de1d 100644 --- a/src/views/sys/login/LoginForm.vue +++ b/src/views/sys/login/LoginForm.vue @@ -63,7 +63,7 @@ {{ t("sys.login.qrSignInFormTitle") }} </Button> </ACol> - <ACol :md="7" :xs="24"> + <ACol :md="6" :xs="24"> <Button block @click="setLoginState(LoginStateEnum.REGISTER)"> {{ t("sys.login.registerButton") }} </Button> diff --git a/stylelint.config.js b/stylelint.config.js index 26bc40c..af3e907 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -1,92 +1,100 @@ module.exports = { root: true, - plugins: ['stylelint-order'], - customSyntax: 'postcss-less', - extends: ['stylelint-config-standard', 'stylelint-config-prettier'], + plugins: ["stylelint-order"], + extends: ["stylelint-config-standard", "stylelint-config-prettier"], + customSyntax: "postcss-html", rules: { - 'selector-class-pattern': null, - 'selector-pseudo-class-no-unknown': [ + "function-no-unknown": null, + "selector-class-pattern": null, + "selector-pseudo-class-no-unknown": [ true, { - ignorePseudoClasses: ['global'], + ignorePseudoClasses: ["global"], }, ], - 'selector-pseudo-element-no-unknown': [ + "selector-pseudo-element-no-unknown": [ true, { - ignorePseudoElements: ['v-deep'], + ignorePseudoElements: ["v-deep"], }, ], - 'at-rule-no-unknown': [ + "at-rule-no-unknown": [ true, { ignoreAtRules: [ - 'tailwind', - 'apply', - 'variants', - 'responsive', - 'screen', - 'function', - 'if', - 'each', - 'include', - 'mixin', + "tailwind", + "apply", + "variants", + "responsive", + "screen", + "function", + "if", + "each", + "include", + "mixin", ], }, ], - 'no-empty-source': null, - 'named-grid-areas-no-invalid': null, - 'unicode-bom': 'never', - 'no-descending-specificity': null, - 'font-family-no-missing-generic-family-keyword': null, - 'declaration-colon-space-after': 'always-single-line', - 'declaration-colon-space-before': 'never', + "no-empty-source": null, + "string-quotes": null, + "named-grid-areas-no-invalid": null, + "unicode-bom": "never", + "no-descending-specificity": null, + "font-family-no-missing-generic-family-keyword": null, + "declaration-colon-space-after": "always-single-line", + "declaration-colon-space-before": "never", // 'declaration-block-trailing-semicolon': 'always', - 'rule-empty-line-before': [ - 'always', + "rule-empty-line-before": [ + "always", { - ignore: ['after-comment', 'first-nested'], + ignore: ["after-comment", "first-nested"], }, ], - 'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }], - 'order/order': [ + "unit-no-unknown": [true, { ignoreUnits: ["rpx"] }], + "order/order": [ [ - 'dollar-variables', - 'custom-properties', - 'at-rules', - 'declarations', + "dollar-variables", + "custom-properties", + "at-rules", + "declarations", { - type: 'at-rule', - name: 'supports', + type: "at-rule", + name: "supports", }, { - type: 'at-rule', - name: 'media', + type: "at-rule", + name: "media", }, - 'rules', + "rules", ], - { severity: 'warning' }, + { severity: "warning" }, ], }, - ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts'], + ignoreFiles: ["**/*.js", "**/*.jsx", "**/*.tsx", "**/*.ts"], overrides: [ { - files: ['*.vue', '**/*.vue'], - extends: ['stylelint-config-recommended', 'stylelint-config-html'], + files: ["*.vue", "**/*.vue", "*.html", "**/*.html"], + extends: ["stylelint-config-recommended"], rules: { - 'selector-pseudo-class-no-unknown': [ + "keyframes-name-pattern": null, + "selector-pseudo-class-no-unknown": [ true, { - ignorePseudoClasses: ['deep', 'global'], + ignorePseudoClasses: ["deep", "global"], }, ], - 'selector-pseudo-element-no-unknown': [ + "selector-pseudo-element-no-unknown": [ true, { - ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'], + ignorePseudoElements: ["v-deep", "v-global", "v-slotted"], }, ], }, }, + { + files: ["*.less", "**/*.less"], + customSyntax: "postcss-less", + extends: ["stylelint-config-standard", "stylelint-config-recommended-vue"], + }, ], }; diff --git a/tests/__mocks__/fileMock.ts b/tests/__mocks__/fileMock.ts deleted file mode 100644 index 08d725c..0000000 --- a/tests/__mocks__/fileMock.ts +++ /dev/null @@ -1 +0,0 @@ -export default ''; diff --git a/tests/__mocks__/styleMock.ts b/tests/__mocks__/styleMock.ts deleted file mode 100644 index ff8b4c5..0000000 --- a/tests/__mocks__/styleMock.ts +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/tests/__mocks__/workerMock.ts b/tests/__mocks__/workerMock.ts deleted file mode 100644 index 0b8b671..0000000 --- a/tests/__mocks__/workerMock.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default jest.fn().mockImplementation(() => ({ - postMessage: jest.fn(), - onmessage: jest.fn(), - onerror: jest.fn(), -})); diff --git a/tests/server/README.md b/tests/server/README.md index 33db6bf..14298df 100644 --- a/tests/server/README.md +++ b/tests/server/README.md @@ -8,8 +8,8 @@ It is used to start the test interface service, which can test the upload, webso cd ./test/server -yarn +pnpm install -yarn start +pnpm run start ``` diff --git a/tests/server/package.json b/tests/server/package.json index 7a26349..cce2442 100644 --- a/tests/server/package.json +++ b/tests/server/package.json @@ -10,7 +10,7 @@ "stop": "npx pm2 stop ecosystem.config.js" }, "dependencies": { - "fs-extra": "^10.0.0", + "fs-extra": "^10.0.1", "koa": "^2.13.4", "koa-body": "^4.2.0", "koa-bodyparser": "^4.3.0", @@ -24,13 +24,13 @@ "@types/koa": "^2.13.4", "@types/koa-bodyparser": "^5.0.2", "@types/koa-router": "^7.4.4", - "@types/node": "^16.11.6", - "nodemon": "^2.0.14", - "pm2": "^5.1.2", + "@types/node": "^17.0.21", + "nodemon": "^2.0.15", + "pm2": "^5.2.0", "rimraf": "^3.0.2", - "ts-node": "^10.4.0", - "tsconfig-paths": "^3.11.0", - "tsup": "^5.5.0", - "typescript": "^4.4.4" + "ts-node": "^10.7.0", + "tsconfig-paths": "^3.14.0", + "tsup": "^5.12.1", + "typescript": "^4.6.2" } } diff --git a/tests/server/yarn.lock b/tests/server/yarn.lock index 9c6df7f..27b8dbd 100644 --- a/tests/server/yarn.lock +++ b/tests/server/yarn.lock @@ -23,6 +23,36 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -74,23 +104,24 @@ "@opencensus/core" "^0.0.8" uuid "^3.2.1" -"@pm2/agent@~1.0.8": - version "1.0.8" - resolved "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.8.tgz#cd15d84dbfc95427e6fccce72bc165b79f1d8579" - integrity sha512-r8mud8BhBz+a2yjlgtk+PBXUR5EQ9UKSJCs232OxfCmuBr1MZw0Mo+Kfog6WJ8OmVk99r1so9yTUK4IyrgGcMQ== +"@pm2/agent@~2.0.0": + version "2.0.1" + resolved "https://registry.npmmirror.com/@pm2/agent/-/agent-2.0.1.tgz#0edffc54cd8ee2b12f90136264e7880f3f78c79d" + integrity sha512-QKHMm6yexcvdDfcNE7PL9D6uEjoQPGRi+8dh+rc4Hwtbpsbh5IAvZbz3BVGjcd4HaX6pt2xGpOohG7/Y2L4QLw== dependencies: async "~3.2.0" chalk "~3.0.0" dayjs "~1.8.24" debug "~4.3.1" eventemitter2 "~5.0.1" + fast-json-patch "^3.0.0-1" fclone "~1.0.11" nssocket "0.6.0" pm2-axon "~4.0.1" pm2-axon-rpc "~0.7.0" - proxy-agent "~4.0.1" + proxy-agent "~5.0.0" semver "~7.2.0" - ws "~7.2.0" + ws "~7.4.0" "@pm2/io@~5.0.0": version "5.0.0" @@ -126,18 +157,6 @@ dependencies: debug "^4.3.1" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -158,10 +177,10 @@ resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e" integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ== -"@tsconfig/node16@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" - integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/accepts@*": version "1.3.5" @@ -246,10 +265,10 @@ resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== -"@types/koa-bodyparser@^4.2.2": - version "4.3.1" - resolved "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.1.tgz#ec2e06f6f50cfddba035d33a3cfe75a8f0cd7fa4" - integrity sha512-N1cw6UpYYW01rGanfC0guqkyqKKavXygGBeSgsJOe7EkkSlRH7BNRjzyqv1TzJ3Au69aNeagpzzqAzTo6I08ow== +"@types/koa-bodyparser@^5.0.2": + version "5.0.2" + resolved "https://registry.npmmirror.com/@types/koa-bodyparser/-/koa-bodyparser-5.0.2.tgz#bb9236a8f82576c2f9be7bed7914bcf95632fa18" + integrity sha512-prJC/gtxnurTTOpYkSwMwzbkiZ6BCW7arIvjmNVbEziauhcndQeCewzsSphmtlI6wnwFnGGAAOznQR1OYrhhgw== dependencies: "@types/koa" "*" @@ -260,14 +279,14 @@ dependencies: "@types/koa" "*" -"@types/koa-router@^7.0.40": - version "7.4.2" - resolved "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.2.tgz#b12d7095e844f4d0081b32742691a4d2e5a8046a" - integrity sha512-A9fTLdSHeLQpmtAPUKvvmG+xHHH5Yclqhlmz1bd5BTfdvNo37H8hzNaNpO2mgUri8Wk8fRH9NLpFRHW0wqraAw== +"@types/koa-router@^7.4.4": + version "7.4.4" + resolved "https://registry.npmmirror.com/@types/koa-router/-/koa-router-7.4.4.tgz#db72bde3616365d74f00178d5f243c4fce7da572" + integrity sha512-3dHlZ6CkhgcWeF6wafEUvyyqjWYfKmev3vy1PtOmr0mBc3wpXPU5E8fBBd4YQo5bRpHPfmwC5yDaX7s4jhIN6A== dependencies: "@types/koa" "*" -"@types/koa@*", "@types/koa@^2.0.48": +"@types/koa@*": version "2.13.3" resolved "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz#5b44c0956d7f7bf41f74ccfb530fec60fbed45ca" integrity sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw== @@ -281,16 +300,35 @@ "@types/koa-compose" "*" "@types/node" "*" +"@types/koa@^2.13.4": + version "2.13.5" + resolved "https://registry.npmmirror.com/@types/koa/-/koa-2.13.5.tgz#64b3ca4d54e08c0062e89ec666c9f45443b21a61" + integrity sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + "@types/mime@^1": version "1.3.2" resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/node@*", "@types/node@^15.12.1": +"@types/node@*": version "15.12.1" resolved "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== +"@types/node@^17.0.21": + version "17.0.45" + resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -327,6 +365,16 @@ accepts@^1.3.5: mime-types "~2.1.24" negotiator "0.6.2" +acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.7.0: + version "8.8.0" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + agent-base@6, agent-base@^6.0.0: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -346,28 +394,11 @@ amp@0.3.1, amp@~0.3.1: resolved "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -382,14 +413,14 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -any-promise@^1.0.0, any-promise@^1.1.0: +any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@~3.1.1: +anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" @@ -434,6 +465,11 @@ async@^2.6.3, async@~2.6.1: dependencies: lodash "^4.17.14" +async@^3.2.0: + version "3.2.4" + resolved "https://registry.npmmirror.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + async@~3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" @@ -466,20 +502,6 @@ bodec@^0.1.0: resolved "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc" integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw= -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -500,15 +522,22 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +bundle-require@^3.0.2: + version "3.0.4" + resolved "https://registry.npmmirror.com/bundle-require/-/bundle-require-3.0.4.tgz#2b52ba77d99c0a586b5854cd21d36954e63cc110" + integrity sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A== + dependencies: + load-tsconfig "^0.2.0" + bytes@3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cac@^6.7.2: - version "6.7.3" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768" - integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg== +cac@^6.7.12: + version "6.7.12" + resolved "https://registry.npmmirror.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" + integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== cache-content-type@^1.0.0: version "1.0.1" @@ -518,19 +547,6 @@ cache-content-type@^1.0.0: mime-types "^2.1.18" ylru "^1.2.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -544,12 +560,7 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: +chalk@3.0.0, chalk@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== @@ -566,20 +577,12 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - charm@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= -chokidar@^3.2.2, chokidar@^3.5.1: +chokidar@^3.5.1: version "3.5.1" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -594,15 +597,20 @@ chokidar@^3.2.2, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.1" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" cli-tableau@^2.0.0: version "2.0.1" @@ -611,13 +619,6 @@ cli-tableau@^2.0.0: dependencies: chalk "3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - co-body@^5.1.1: version "5.2.0" resolved "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz#5a0a658c46029131e0e3a306f67647302f71c124" @@ -682,18 +683,6 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - content-disposition@~0.5.2: version "0.5.3" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -748,12 +737,10 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron@1.8.2: - version "1.8.2" - resolved "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" - integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== - dependencies: - moment-timezone "^0.5.x" +croner@~4.1.92: + version "4.1.97" + resolved "https://registry.npmmirror.com/croner/-/croner-4.1.97.tgz#6e373dc7bb3026fab2deb0d82685feef20796766" + integrity sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ== cross-spawn@^7.0.3: version "7.0.3" @@ -764,11 +751,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - culvert@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f" @@ -791,62 +773,39 @@ debug@*, debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: dependencies: ms "2.1.2" -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "2.0.0" - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" + ms "2.1.2" deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== +degenerator@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" + integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== dependencies: ast-types "^0.13.2" escodegen "^1.8.1" esprima "^4.0.0" + vm2 "^3.9.8" delegates@^1.0.0: version "1.0.0" @@ -880,18 +839,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -904,28 +851,11 @@ emitter-listener@^1.1.1: dependencies: shimmer "^1.2.0" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - enquirer@2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -940,15 +870,132 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -esbuild@^0.11.12: - version "0.11.23" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" - integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.25: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" escape-html@^1.0.3: version "1.0.3" @@ -1034,6 +1081,11 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-patch@^3.0.0-1: + version "3.1.1" + resolved "https://registry.npmmirror.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== + fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -1078,10 +1130,10 @@ fresh@~0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== +fs-extra@^10.0.1: + version "10.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -1101,9 +1153,9 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.3.1: +fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== ftp@^0.3.10: @@ -1128,20 +1180,6 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -1169,9 +1207,9 @@ git-sha1@^0.1.2: resolved "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745" integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U= -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -1200,13 +1238,6 @@ glob@^7.0.5, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - globby@^11.0.3: version "11.0.3" resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" @@ -1219,24 +1250,7 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.6" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -1256,11 +1270,6 @@ has-symbols@^1.0.1: resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1276,11 +1285,6 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.7.2" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-errors@1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -1374,16 +1378,6 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - inflation@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" @@ -1407,12 +1401,7 @@ inherits@2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.7: - version "1.3.7" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@^1.3.5, ini@~1.3.0: +ini@^1.3.5: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -1434,13 +1423,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" @@ -1453,16 +1435,6 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-generator-function@^1.0.7: version "1.0.9" resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" @@ -1475,49 +1447,16 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -1548,16 +1487,16 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -1588,13 +1527,6 @@ keygrip@~1.1.0: dependencies: tsscmp "1.0.6" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - koa-body@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/koa-body/-/koa-body-4.2.0.tgz#37229208b820761aca5822d14c5fc55cee31b26f" @@ -1604,33 +1536,26 @@ koa-body@^4.2.0: co-body "^5.1.1" formidable "^1.1.1" -koa-bodyparser@^4.2.1: +koa-bodyparser@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" + resolved "https://registry.npmmirror.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== dependencies: co-body "^6.0.0" copy-to "^2.0.1" -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - koa-compose@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== dependencies: co "^4.6.0" - koa-compose "^3.0.0" + koa-compose "^4.1.0" koa-route@^3.2.0: version "3.2.0" @@ -1641,10 +1566,10 @@ koa-route@^3.2.0: methods "~1.1.0" path-to-regexp "^1.2.0" -koa-router@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/koa-router/-/koa-router-10.0.0.tgz#7bc76a031085731e61fc92c1683687b2f44de6a4" - integrity sha512-gAE5J1gBQTvfR8rMMtMUkE26+1MbO3DGpGmvfmM2pR9Z7w2VIb2Ecqeal98yVO7+4ltffby7gWOzpCmdNOQe0w== +koa-router@^10.1.1: + version "10.1.1" + resolved "https://registry.npmmirror.com/koa-router/-/koa-router-10.1.1.tgz#20809f82648518b84726cd445037813cd99f17ff" + integrity sha512-z/OzxVjf5NyuNO3t9nJpx7e1oR3FSBAauiwXtMQu4ppcnuNZzTaQ4p21P8A6r2Es8uJJM339oc4oVW+qX7SqnQ== dependencies: debug "^4.1.1" http-errors "^1.7.3" @@ -1684,17 +1609,17 @@ koa2-cors@^2.0.6: resolved "https://registry.npmjs.org/koa2-cors/-/koa2-cors-2.0.6.tgz#9ad23df3a0b9bb84530b46f5944f3fb576086554" integrity sha512-JRCcSM4lamM+8kvKGDKlesYk2ASrmSTczDtGUnIadqMgnHU4Ct5Gw7Bxt3w3m6d6dy3WN0PU4oMP43HbddDEWg== -koa@^2.7.0: - version "2.13.1" - resolved "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" - integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== +koa@^2.13.4: + version "2.13.4" + resolved "https://registry.npmmirror.com/koa/-/koa-2.13.4.tgz#ee5b0cb39e0b8069c38d115139c774833d32462e" + integrity sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g== dependencies: accepts "^1.3.5" cache-content-type "^1.0.0" content-disposition "~0.5.2" content-type "^1.0.4" cookies "~0.8.0" - debug "~3.1.0" + debug "^4.3.2" delegates "^1.0.0" depd "^2.0.0" destroy "^1.0.4" @@ -1705,7 +1630,7 @@ koa@^2.7.0: http-errors "^1.6.3" is-generator-function "^1.0.7" koa-compose "^4.1.0" - koa-convert "^1.2.0" + koa-convert "^2.0.0" on-finished "^2.3.0" only "~0.0.2" parseurl "^1.3.2" @@ -1713,13 +1638,6 @@ koa@^2.7.0: type-is "^1.6.16" vary "^1.1.2" -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazy@~1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" @@ -1738,6 +1656,16 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +load-tsconfig@^0.2.0: + version "0.2.3" + resolved "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" + integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + lodash@^4.17.14: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -1748,16 +1676,6 @@ log-driver@^1.2.7: resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -1772,13 +1690,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -1829,11 +1740,6 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1846,6 +1752,11 @@ minimist@^1.2.0: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + mkdirp@1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -1856,23 +1767,6 @@ module-details-from-path@^1.0.3: resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= -moment-timezone@^0.5.x: - version "0.5.33" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0": - version "2.29.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1911,9 +1805,9 @@ negotiator@0.6.2: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -netmask@^2.0.1: +netmask@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + resolved "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== node-modules-regexp@^1.0.0: @@ -1921,21 +1815,21 @@ node-modules-regexp@^1.0.0: resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -nodemon@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" - integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== +nodemon@^2.0.15: + version "2.0.19" + resolved "https://registry.npmmirror.com/nodemon/-/nodemon-2.0.19.tgz#cac175f74b9cb8b57e770d47841995eebe4488bd" + integrity sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A== dependencies: - chokidar "^3.2.2" - debug "^3.2.6" + chokidar "^3.5.2" + debug "^3.2.7" ignore-by-default "^1.0.1" minimatch "^3.0.4" - pstree.remy "^1.1.7" + pstree.remy "^1.1.8" semver "^5.7.1" + simple-update-notifier "^1.0.7" supports-color "^5.5.0" touch "^3.1.0" - undefsafe "^2.0.3" - update-notifier "^4.1.0" + undefsafe "^2.0.5" nopt@~1.0.10: version "1.0.10" @@ -1949,11 +1843,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -1986,7 +1875,7 @@ on-finished@^2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -2017,15 +1906,10 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== +pac-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" + integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== dependencies: "@tootallnate/once" "1" agent-base "6" @@ -2033,28 +1917,18 @@ pac-proxy-agent@^4.1.0: get-uri "3" http-proxy-agent "^4.0.1" https-proxy-agent "5" - pac-resolver "^4.1.0" + pac-resolver "^5.0.0" raw-body "^2.2.0" socks-proxy-agent "5" -pac-resolver@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" - integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== +pac-resolver@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" + integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== dependencies: - degenerator "^2.2.0" + degenerator "^3.0.2" ip "^1.1.5" - netmask "^2.0.1" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + netmask "^2.0.2" pako@^0.2.5: version "0.2.9" @@ -2120,13 +1994,20 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pidusage@2.0.21: +pidusage@^2.0.21: version "2.0.21" - resolved "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" + resolved "https://registry.npmmirror.com/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA== dependencies: safe-buffer "^5.2.1" +pidusage@~3.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pidusage/-/pidusage-3.0.0.tgz#69108079724c9afdd958644b920bc40bac964044" + integrity sha512-8VJLToXhj+RYZGNVw8oxc7dS54iCQXUJ+MDFHezQ/fwF5B8W4OWodAMboc1wb08S/4LiHwAmkT4ohf/d3YPPsw== + dependencies: + safe-buffer "^5.2.1" + pirates@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -2134,9 +2015,9 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pm2-axon-rpc@~0.7.0: +pm2-axon-rpc@~0.7.0, pm2-axon-rpc@~0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a" + resolved "https://registry.npmmirror.com/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a" integrity sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw== dependencies: debug "^4.3.1" @@ -2166,12 +2047,23 @@ pm2-multimeter@^0.1.2: dependencies: charm "~0.1.1" -pm2@^4.5.6: - version "4.5.6" - resolved "https://registry.npmjs.org/pm2/-/pm2-4.5.6.tgz#2f477a158957860e440f1e71e88dc82627fcff99" - integrity sha512-4J5q704Xl6VmpmQhXFGMJL4kXyyQw3AZM1FE9vRxhS3LiDI/+WVBtOM6pqJ4g/RKW+AUjEkc23i/DCC4BVenDA== +pm2-sysmonit@^1.2.8: + version "1.2.8" + resolved "https://registry.npmmirror.com/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz#eddea34a53fd8c8d7c3efb73b97a3c548686e24d" + integrity sha512-ACOhlONEXdCTVwKieBIQLSi2tQZ8eKinhcr9JpZSUAL8Qy0ajIgRtsLxG/lwPOW3JEKqPyw/UaHmTWhUzpP4kA== + dependencies: + async "^3.2.0" + debug "^4.3.1" + pidusage "^2.0.21" + systeminformation "^5.7" + tx2 "~1.0.4" + +pm2@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/pm2/-/pm2-5.2.0.tgz#fda71fab4b8fcfa5b7f546ca55a6e59e9ec5a68d" + integrity sha512-PO5hMVhQ85cTszFM++6v07Me9hPJMkFbHjkFigtMMk+La8ty2wCi2dlBTeZYJDhPUSjK8Ccltpq2buNRcyMOTw== dependencies: - "@pm2/agent" "~1.0.8" + "@pm2/agent" "~2.0.0" "@pm2/io" "~5.0.0" "@pm2/js-api" "~0.6.7" "@pm2/pm2-version-check" latest @@ -2181,7 +2073,7 @@ pm2@^4.5.6: chokidar "^3.5.1" cli-tableau "^2.0.0" commander "2.15.1" - cron "1.8.2" + croner "~4.1.92" dayjs "~1.8.25" debug "^4.3.1" enquirer "2.3.6" @@ -2189,18 +2081,19 @@ pm2@^4.5.6: fclone "1.0.11" mkdirp "1.0.4" needle "2.4.0" - pidusage "2.0.21" + pidusage "~3.0" pm2-axon "~4.0.1" - pm2-axon-rpc "~0.7.0" + pm2-axon-rpc "~0.7.1" pm2-deploy "~1.0.2" pm2-multimeter "^0.1.2" promptly "^2" - ps-list "6.3.0" semver "^7.2" source-map-support "0.5.19" sprintf-js "1.1.2" - vizion "2.2.1" + vizion "~2.2.1" yamljs "0.3.0" + optionalDependencies: + pm2-sysmonit "^1.2.8" postcss-load-config@^3.0.1: version "3.0.1" @@ -2215,11 +2108,6 @@ prelude-ls@~1.1.2: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - promptly@^2: version "2.2.0" resolved "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" @@ -2227,17 +2115,17 @@ promptly@^2: dependencies: read "^1.0.4" -proxy-agent@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" - integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== +proxy-agent@~5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" + integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== dependencies: agent-base "^6.0.0" debug "4" http-proxy-agent "^4.0.0" https-proxy-agent "^5.0.0" lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" + pac-proxy-agent "^5.0.0" proxy-from-env "^1.0.0" socks-proxy-agent "^5.0.0" @@ -2246,30 +2134,15 @@ proxy-from-env@^1.0.0: resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -ps-list@6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" - integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== - -pstree.remy@^1.1.7: +pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmmirror.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pupa@^2.0.1: +punycode@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@^6.4.0, qs@^6.5.2: version "6.10.1" @@ -2293,16 +2166,6 @@ raw-body@^2.2.0, raw-body@^2.3.3: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read@^1.0.4: version "1.0.7" resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -2327,19 +2190,12 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" + picomatch "^2.2.1" require-in-the-middle@^5.0.0: version "5.1.0" @@ -2376,13 +2232,6 @@ resolve@^1.12.0: is-core-module "^2.2.0" path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -2395,12 +2244,12 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^2.45.2: - version "2.50.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2" - integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg== +rollup@^2.74.1: + version "2.78.0" + resolved "https://registry.npmmirror.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e" + integrity sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg== optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" @@ -2434,14 +2283,7 @@ sax@^1.2.4: resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -2458,6 +2300,11 @@ semver@^7.2: dependencies: lru-cache "^6.0.0" +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@~7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" @@ -2504,11 +2351,18 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-update-notifier@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" + integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== + dependencies: + semver "~7.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -2536,7 +2390,7 @@ socks@^2.3.3: ip "^1.1.5" smart-buffer "^4.1.0" -source-map-support@0.5.19, source-map-support@^0.5.17: +source-map-support@0.5.19: version "0.5.19" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -2544,6 +2398,13 @@ source-map-support@0.5.19, source-map-support@^0.5.17: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -2564,43 +2425,11 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -2611,15 +2440,10 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -sucrase@^3.18.1: - version "3.18.1" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.18.1.tgz#7c699d5148734b1105542ca4ea2aa69bcab7f728" - integrity sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA== +sucrase@^3.20.3: + version "3.25.0" + resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.25.0.tgz#6dffa34e614b3347877507a4380cc4f022b7b7aa" + integrity sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ== dependencies: commander "^4.0.0" glob "7.1.6" @@ -2642,10 +2466,10 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== +systeminformation@^5.7: + version "5.12.5" + resolved "https://registry.npmmirror.com/systeminformation/-/systeminformation-5.12.5.tgz#ba223aca6d99453136986fb6a4c96518d13d27b5" + integrity sha512-lWhWMZTQzwHaB2aacQ9wbhSncgXo8bYv7M9K5Qrz9tJuvqPepiCvb5Uauq2xwH+JhbjPO9YJD2qLXQEXFAjwwA== thenify-all@^1.0.0: version "1.6.0" @@ -2661,11 +2485,6 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2685,6 +2504,13 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -2695,30 +2521,33 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-node@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" - integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== +ts-node@^10.7.0: + version "10.9.1" + resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.1" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.17" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.8.0: - version "3.9.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== +tsconfig-paths@^3.14.0: + version "3.14.1" + resolved "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" tslib@1.9.3: @@ -2736,23 +2565,24 @@ tsscmp@1.0.6: resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsup@^4.11.2: - version "4.11.2" - resolved "https://registry.npmjs.org/tsup/-/tsup-4.11.2.tgz#135c69ff1b0ef9357d5e0076d1d6c29118904b43" - integrity sha512-cp+gy0TGzFm/3PkPNeiZ2Fvi4MKI8jj6Xq6gVpSQ+Og+6GPqfws2K4zYo11OJoccuk2LnlJIJt8xwnoYCVGpSA== +tsup@^5.12.1: + version "5.12.9" + resolved "https://registry.npmmirror.com/tsup/-/tsup-5.12.9.tgz#8cdd9b4bc6493317cb92edf5f3476920dddcdb18" + integrity sha512-dUpuouWZYe40lLufo64qEhDpIDsWhRbr2expv5dHEMjwqeKJS2aXA/FPqs1dxO4T6mBojo7rvo3jP9NNzaKyDg== dependencies: - cac "^6.7.2" - chalk "^4.1.0" + bundle-require "^3.0.2" + cac "^6.7.12" chokidar "^3.5.1" debug "^4.3.1" - esbuild "^0.11.12" + esbuild "^0.14.25" execa "^5.0.0" globby "^11.0.3" joycon "^3.0.1" postcss-load-config "^3.0.1" resolve-from "^5.0.0" - rollup "^2.45.2" - sucrase "^3.18.1" + rollup "^2.74.1" + source-map "0.8.0-beta.0" + sucrase "^3.20.3" tree-kill "^1.2.2" tv4@^1.3.0: @@ -2760,6 +2590,13 @@ tv4@^1.3.0: resolved "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= +tx2@~1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/tx2/-/tx2-1.0.5.tgz#ee0b0e5e2c351f8d23e54bdf46dd60afa3bbc73d" + integrity sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg== + dependencies: + json-stringify-safe "^5.0.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -2767,11 +2604,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@^1.6.14, type-is@^1.6.16: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2780,31 +2612,15 @@ type-is@^1.6.14, type-is@^1.6.16: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.2.5: - version "4.3.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" - integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== +typescript@^4.6.2: + version "4.7.4" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -undefsafe@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== universalify@^0.1.0: version "0.1.2" @@ -2821,45 +2637,24 @@ unpipe@1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -update-notifier@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - uuid@^3.2.1: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + vary@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vizion@2.2.1: +vizion@~2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2" + resolved "https://registry.npmmirror.com/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2" integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww== dependencies: async "^2.6.3" @@ -2867,6 +2662,28 @@ vizion@2.2.1: ini "^1.3.5" js-git "^0.7.8" +vm2@^3.9.8: + version "3.9.10" + resolved "https://registry.npmmirror.com/vm2/-/vm2-3.9.10.tgz#c66543096b5c44c8861a6465805c23c7cc996a44" + integrity sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ== + dependencies: + acorn "^8.7.0" + acorn-walk "^8.2.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2874,13 +2691,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -2891,31 +2701,11 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.0.0, ws@^7.0.1: +ws@^7.0.0, ws@^7.0.1, ws@~7.4.0: version "7.4.6" resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@~7.2.0: - version "7.2.5" - resolved "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" - integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xregexp@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" diff --git a/tests/test.spec.ts b/tests/test.spec.ts deleted file mode 100644 index a8b4454..0000000 --- a/tests/test.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -// import { mount } from '@vue/test-utils'; -// import { Button } from '/@/components/Button'; - -test('if jest is normal.', async () => { - expect('jest').toEqual('jest'); -}); - -// TODO Vue component testing is not supported temporarily -// test('is a Vue instance.', async () => { -// const wrapper = mount(Button, { -// slots: { -// default: 'Button text', -// }, -// }); -// expect(wrapper.html()).toContain('Button text'); -// }); diff --git a/tsconfig.json b/tsconfig.json index 1fd7e3e..76e91f2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "module": "esnext", "moduleResolution": "node", "strict": true, + "noLib": false, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "strictFunctionTypes": false, @@ -17,10 +18,10 @@ "noUnusedParameters": true, "experimentalDecorators": true, "lib": ["dom", "esnext"], - "types": ["vite/client", "jest"], - "typeRoots": ["./node_modules/@types/", "./types"], "noImplicitAny": false, "skipLibCheck": true, + "types": ["vite/client"], + "removeComments": true, "paths": { "/@/*": ["src/*"], "/#/*": ["types/*"] diff --git a/types/axios.d.ts b/types/axios.d.ts index e60187f..a9f26f8 100644 --- a/types/axios.d.ts +++ b/types/axios.d.ts @@ -1,4 +1,4 @@ -export type ErrorMessageMode = 'none' | 'modal' | 'message' | undefined; +export type ErrorMessageMode = "none" | "modal" | "message" | undefined; export interface RequestOptions { // Splicing request parameters to url @@ -23,13 +23,20 @@ export interface RequestOptions { ignoreCancelToken?: boolean; // Whether to send token in header withToken?: boolean; + // 请求重试机制 + retryRequest?: RetryRequest; } +export interface RetryRequest { + isOpenRetry: boolean; + count: number; + waitTime: number; +} export interface Result<T = any> { code: number; - type: 'success' | 'error' | 'warning'; + type: "success" | "error" | "warning"; message: string; - result: T; + data: T; } // multipart/form-data: upload file diff --git a/types/config.d.ts b/types/config.d.ts index cb5a5a9..3752aad 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -1,4 +1,4 @@ -import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum'; +import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from "/@/enums/menuEnum"; import { ContentEnum, PermissionModeEnum, @@ -6,16 +6,17 @@ import { RouterTransitionEnum, SettingButtonPositionEnum, SessionTimeoutProcessingEnum, -} from '/@/enums/appEnum'; +} from "/@/enums/appEnum"; -import { CacheTypeEnum } from '/@/enums/cacheEnum'; +import { CacheTypeEnum } from "/@/enums/cacheEnum"; -export type LocaleType = 'zh_CN' | 'en' | 'ru' | 'ja' | 'ko'; +export type LocaleType = "zh_CN" | "en" | "ru" | "ja" | "ko"; export interface MenuSetting { bgColor: string; fixed: boolean; collapsed: boolean; + siderHidden: boolean; canDrag: boolean; show: boolean; hidden: boolean; @@ -24,7 +25,7 @@ export interface MenuSetting { mode: MenuModeEnum; type: MenuTypeEnum; theme: ThemeEnum; - topMenuAlign: 'start' | 'center' | 'end'; + topMenuAlign: "start" | "center" | "end"; trigger: TriggerEnum; accordion: boolean; closeMixSidebarOnChange: boolean; diff --git a/types/module.d.ts b/types/module.d.ts index 8db5156..287ad38 100644 --- a/types/module.d.ts +++ b/types/module.d.ts @@ -1,22 +1,16 @@ -declare module '*.vue' { - import { DefineComponent } from 'vue'; +declare module "*.vue" { + import { DefineComponent } from "vue"; const Component: DefineComponent<{}, {}, any>; export default Component; } -declare module 'ant-design-vue/es/locale/*' { - import { Locale } from 'ant-design-vue/types/locale-provider'; +declare module "ant-design-vue/es/locale/*" { + import { Locale } from "ant-design-vue/types/locale-provider"; const locale: Locale & ReadonlyRecordable; export default locale as Locale & ReadonlyRecordable; } -declare module 'moment/dist/locale/*' { - import { LocaleSpecification } from 'moment'; - const locale: LocaleSpecification & ReadonlyRecordable; - export default locale; -} - -declare module 'virtual:*' { +declare module "virtual:*" { const result: any; export default result; } diff --git a/vite.config.ts b/vite.config.ts index e6305e2..50f1a25 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,22 +1,22 @@ -import type { UserConfig, ConfigEnv } from 'vite'; -import pkg from './package.json'; -import moment from 'moment'; -import { loadEnv } from 'vite'; -import { resolve } from 'path'; -import { generateModifyVars } from './build/generate/generateModifyVars'; -import { createProxy } from './build/vite/proxy'; -import { wrapperEnv } from './build/utils'; -import { createVitePlugins } from './build/vite/plugin'; -import { OUTPUT_DIR } from './build/constant'; +import type { UserConfig, ConfigEnv } from "vite"; +import pkg from "./package.json"; +import dayjs from "dayjs"; +import { loadEnv } from "vite"; +import { resolve } from "path"; +import { generateModifyVars } from "./build/generate/generateModifyVars"; +import { createProxy } from "./build/vite/proxy"; +import { wrapperEnv } from "./build/utils"; +import { createVitePlugins } from "./build/vite/plugin"; +import { OUTPUT_DIR } from "./build/constant"; function pathResolve(dir: string) { - return resolve(process.cwd(), '.', dir); + return resolve(process.cwd(), ".", dir); } const { dependencies, devDependencies, name, version } = pkg; const __APP_INFO__ = { pkg: { dependencies, devDependencies, name, version }, - lastBuildTime: moment().format('YYYY-MM-DD HH:mm:ss'), + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), }; export default ({ command, mode }: ConfigEnv): UserConfig => { @@ -29,7 +29,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv; - const isBuild = command === 'build'; + const isBuild = command === "build"; return { base: VITE_PUBLIC_PATH, @@ -37,38 +37,47 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { resolve: { alias: [ { - find: 'vue-i18n', - replacement: 'vue-i18n/dist/vue-i18n.cjs.js', + find: "vue-i18n", + replacement: "vue-i18n/dist/vue-i18n.cjs.js", }, // /@/xxxx => src/xxxx { find: /\/@\//, - replacement: pathResolve('src') + '/', + replacement: pathResolve("src") + "/", }, // /#/xxxx => types/xxxx { find: /\/#\//, - replacement: pathResolve('types') + '/', + replacement: pathResolve("types") + "/", }, ], }, server: { + https: true, // Listening on all local IPs host: true, port: VITE_PORT, // Load proxy configuration from .env proxy: createProxy(VITE_PROXY), }, + esbuild: { + pure: VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [], + }, build: { - target: 'es2015', + target: "es2015", + cssTarget: "chrome80", outDir: OUTPUT_DIR, - terserOptions: { - compress: { - keep_infinity: true, - // Used to delete console in production environment - drop_console: VITE_DROP_CONSOLE, - }, - }, + // minify: 'terser', + /** + * 当 minify=“minify:'terser'” 解开注释 + * Uncomment when minify="minify:'terser'" + */ + // terserOptions: { + // compress: { + // keep_infinity: true, + // drop_console: VITE_DROP_CONSOLE, + // }, + // }, // Turning off brotliSize display can slightly reduce packaging time brotliSize: false, chunkSizeWarningLimit: 2000, @@ -95,13 +104,12 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { optimizeDeps: { // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly include: [ - '@iconify/iconify', - 'ant-design-vue/es/locale/zh_CN', - 'moment/dist/locale/zh-cn', - 'ant-design-vue/es/locale/en_US', - 'moment/dist/locale/eu', + "@vue/runtime-core", + "@vue/shared", + "@iconify/iconify", + "ant-design-vue/es/locale/zh_CN", + "ant-design-vue/es/locale/en_US", ], - exclude: ['vue-demi', 'consolidate'], }, }; }; diff --git a/windi.config.ts b/windi.config.ts index ff1aba2..fcd35dd 100644 --- a/windi.config.ts +++ b/windi.config.ts @@ -1,34 +1,34 @@ -import { defineConfig } from 'vite-plugin-windicss'; -import { primaryColor } from './build/config/themeConfig'; +import { defineConfig } from "vite-plugin-windicss"; +import { primaryColor } from "./build/config/themeConfig"; export default defineConfig({ - darkMode: 'class', + darkMode: "class", plugins: [createEnterPlugin()], theme: { extend: { zIndex: { - '-1': '-1', + "-1": "-1", }, colors: { primary: primaryColor, }, screens: { - sm: '576px', - md: '768px', - lg: '992px', - xl: '1200px', - '2xl': '1600px', + sm: "576px", + md: "768px", + lg: "992px", + xl: "1200px", + "2xl": "1600px", }, }, }, }); /** - * Used for animation when the element is displayed - * @param maxOutput The larger the maxOutput output, the larger the generated css volume + * Used for animation when the element is displayed. + * @param maxOutput The larger the maxOutput output, the larger the generated css volume. */ -function createEnterPlugin(maxOutput = 7) { - const createCss = (index: number, d = 'x') => { +function createEnterPlugin(maxOutput = 6) { + const createCss = (index: number, d = "x") => { const upd = d.toUpperCase(); return { [`*> .enter-${d}:nth-child(${index})`]: { @@ -38,11 +38,11 @@ function createEnterPlugin(maxOutput = 7) { transform: `translate${upd}(-50px)`, }, [`* > .enter-${d}:nth-child(${index}),* > .-enter-${d}:nth-child(${index})`]: { - 'z-index': `${10 - index}`, - opacity: '0', + "z-index": `${10 - index}`, + opacity: "0", animation: `enter-${d}-animation 0.4s ease-in-out 0.3s`, - 'animation-fill-mode': 'forwards', - 'animation-delay': `${(index * 1) / 10}s`, + "animation-fill-mode": "forwards", + "animation-delay": `${(index * 1) / 10}s`, }, }; }; @@ -50,22 +50,22 @@ function createEnterPlugin(maxOutput = 7) { const addRawCss = {}; for (let index = 1; index < maxOutput; index++) { Object.assign(addRawCss, { - ...createCss(index, 'x'), - ...createCss(index, 'y'), + ...createCss(index, "x"), + ...createCss(index, "y"), }); } addBase({ ...addRawCss, [`@keyframes enter-x-animation`]: { to: { - opacity: '1', - transform: 'translateX(0)', + opacity: "1", + transform: "translateX(0)", }, }, [`@keyframes enter-y-animation`]: { to: { - opacity: '1', - transform: 'translateY(0)', + opacity: "1", + transform: "translateY(0)", }, }, }); diff --git a/yarn.lock b/yarn.lock index adee45f..3d5b92e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,7 +22,7 @@ resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== -"@ant-design/icons-vue@^6.0.0", "@ant-design/icons-vue@^6.0.1": +"@ant-design/icons-vue@^6.1.0": version "6.1.0" resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074" integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA== @@ -44,7 +44,7 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -56,7 +56,7 @@ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.17.9", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.11.1", "@babel/core@^7.17.9": version "7.18.10" resolved "https://registry.npmmirror.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== @@ -77,7 +77,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": +"@babel/generator@^7.18.10": version "7.18.12" resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== @@ -296,7 +296,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": +"@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": version "7.18.11" resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== @@ -453,14 +453,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -495,7 +488,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -516,7 +509,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -530,7 +523,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -565,14 +558,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.18.6": version "7.18.6" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== @@ -944,7 +937,7 @@ resolved "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.18.12.tgz#4c0abdf1b5213394e73a0ba5500dcc287194a20d" integrity sha512-wDh3K5IUJiSMAY0MLYBFoCaj2RCZwvDz5BHn2uHat9KOsGWEVDFgFQFIOO+81Js2phFKNppLC45iOCsZVfJniw== -"@babel/template@^7.0.0", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": +"@babel/template@^7.0.0", "@babel/template@^7.18.10", "@babel/template@^7.18.6": version "7.18.10" resolved "https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== @@ -953,7 +946,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.9": version "7.18.11" resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== @@ -969,7 +962,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": version "7.18.10" resolved "https://registry.npmmirror.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== @@ -978,200 +971,158 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@commitlint/cli@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/cli/-/cli-14.1.0.tgz#7b657a955ed22f3df348ba9afa6ce5a5121ff7eb" - integrity sha512-Orq62jkl9qAGvjFqhehtAqjGY/duJ8hIRPPIHmGR2jIB96D4VTmazS3ZvqJz2Q9kKr61mLAk/171zm0FVzQCYA== - dependencies: - "@commitlint/format" "^14.1.0" - "@commitlint/lint" "^14.1.0" - "@commitlint/load" "^14.1.0" - "@commitlint/read" "^14.0.0" - "@commitlint/types" "^14.0.0" +"@commitlint/cli@^16.2.3": + version "16.3.0" + resolved "https://registry.npmmirror.com/@commitlint/cli/-/cli-16.3.0.tgz#5689f5c2abbb7880d5ff13329251e5648a784b16" + integrity sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA== + dependencies: + "@commitlint/format" "^16.2.1" + "@commitlint/lint" "^16.2.4" + "@commitlint/load" "^16.3.0" + "@commitlint/read" "^16.2.1" + "@commitlint/types" "^16.2.1" lodash "^4.17.19" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" -"@commitlint/config-conventional@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-14.1.0.tgz#29e386ef200fa72d43418153ab1c490c89024dee" - integrity sha512-JuhCqkEv8jyqmd54EpXPsQFpYc/8k7sfP1UziRdEvZSJUCLxz+8Pk4cNS0oF1BtjaWO7ITgXPlIZg47PyApGmg== +"@commitlint/config-conventional@^16.2.1": + version "16.2.4" + resolved "https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-16.2.4.tgz#56647108c89ed06fc5271242787550331988c0fb" + integrity sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA== dependencies: conventional-changelog-conventionalcommits "^4.3.1" -"@commitlint/config-validator@^17.0.3": - version "17.0.3" - resolved "https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-17.0.3.tgz#5d1ec17eece1f85a0d06c05d168a039b313eb5d7" - integrity sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ== +"@commitlint/config-validator@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-16.2.1.tgz#794e769afd4756e4cf1bfd823b6612932e39c56d" + integrity sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw== dependencies: - "@commitlint/types" "^17.0.0" - ajv "^8.11.0" + "@commitlint/types" "^16.2.1" + ajv "^6.12.6" -"@commitlint/ensure@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/ensure/-/ensure-14.1.0.tgz#b58b2ffe2bc95be143ed8f188721b97df1043ba5" - integrity sha512-xrYvFdqVepT3XA1BmSh88eKbvYKtLuQu98QLfgxVmwS99Kj3yW0sT3D7jGvNsynbIx2dhbXofDyubf/DKkpFrQ== +"@commitlint/ensure@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/ensure/-/ensure-16.2.1.tgz#0fc538173f95c1eb2694eeedb79cab478347f16f" + integrity sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A== dependencies: - "@commitlint/types" "^14.0.0" + "@commitlint/types" "^16.2.1" lodash "^4.17.19" -"@commitlint/execute-rule@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-14.0.0.tgz#3ba45fc255286e3180f89ed4e9ac1ef237160734" - integrity sha512-Hh/HLpCBDlrD3Rx2x2pDBx6CU+OtVqGXh7mbFpNihAVx6B0zyZqm/vv0cdwdhfGW5OEn1BhCqHf1ZOvL/DwdWA== - -"@commitlint/execute-rule@^17.0.0": - version "17.0.0" - resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz#186e9261fd36733922ae617497888c4bdb6e5c92" - integrity sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ== +"@commitlint/execute-rule@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-16.2.1.tgz#60be73be4b9af97a41546e7ce59fdd33787c65f8" + integrity sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g== -"@commitlint/format@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/format/-/format-14.1.0.tgz#09b4081bdcb02163496bfcece98f9d4606238bc5" - integrity sha512-sF6engqqHjvxGctWRKjFs/HQeNowlpbVmmoP481b2UMQnVQnjjfXJvQsoLpaqFUvgc2sHM4L85F8BmAw+iHG1w== +"@commitlint/format@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/format/-/format-16.2.1.tgz#6e673f710c799be78e68b2682323e04f75080d07" + integrity sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q== dependencies: - "@commitlint/types" "^14.0.0" + "@commitlint/types" "^16.2.1" chalk "^4.0.0" -"@commitlint/is-ignored@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-14.0.0.tgz#8c88e05211519bc187558aad07eee02581292ec4" - integrity sha512-nJltYjXTa+mk+6SPe35nOZCCvt3Gh5mbDz008KQ4OPcn1GX1NG+pEgz1Kx3agDp/pc+JGnsrr5GV00gygIoloA== - dependencies: - "@commitlint/types" "^14.0.0" - semver "7.3.5" - -"@commitlint/lint@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/lint/-/lint-14.1.0.tgz#1673b216803d65cc4bbe631f656125be54fd2f69" - integrity sha512-CApGJEOtWU/CcuPD8HkOR1jdUYpjKutGPaeby9nSFzJhwl/UQOjxc4Nd+2g2ygsMi5l3N4j2sWQYEgccpFC3lA== - dependencies: - "@commitlint/is-ignored" "^14.0.0" - "@commitlint/parse" "^14.0.0" - "@commitlint/rules" "^14.1.0" - "@commitlint/types" "^14.0.0" - -"@commitlint/load@>6.1.1": - version "17.0.3" - resolved "https://registry.npmmirror.com/@commitlint/load/-/load-17.0.3.tgz#683aa484a5515714512e442f2f4b11f75e66097a" - integrity sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw== - dependencies: - "@commitlint/config-validator" "^17.0.3" - "@commitlint/execute-rule" "^17.0.0" - "@commitlint/resolve-extends" "^17.0.3" - "@commitlint/types" "^17.0.0" +"@commitlint/is-ignored@^16.2.4": + version "16.2.4" + resolved "https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-16.2.4.tgz#369e40a240ad5451bf2b57a80829253129d7f19b" + integrity sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ== + dependencies: + "@commitlint/types" "^16.2.1" + semver "7.3.7" + +"@commitlint/lint@^16.2.4": + version "16.2.4" + resolved "https://registry.npmmirror.com/@commitlint/lint/-/lint-16.2.4.tgz#575f5a9d227dddfca8386253d9aff27be5b94788" + integrity sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ== + dependencies: + "@commitlint/is-ignored" "^16.2.4" + "@commitlint/parse" "^16.2.1" + "@commitlint/rules" "^16.2.4" + "@commitlint/types" "^16.2.1" + +"@commitlint/load@^16.3.0": + version "16.3.0" + resolved "https://registry.npmmirror.com/@commitlint/load/-/load-16.3.0.tgz#e674ccc9edefd64a2d8b82d175de81ec3bb70eca" + integrity sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A== + dependencies: + "@commitlint/config-validator" "^16.2.1" + "@commitlint/execute-rule" "^16.2.1" + "@commitlint/resolve-extends" "^16.2.1" + "@commitlint/types" "^16.2.1" "@types/node" ">=12" - chalk "^4.1.0" - cosmiconfig "^7.0.0" - cosmiconfig-typescript-loader "^2.0.0" - lodash "^4.17.19" - resolve-from "^5.0.0" - typescript "^4.6.4" - -"@commitlint/load@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/load/-/load-14.1.0.tgz#911e8625cfa1a80df2914b835834c6068fdfdab4" - integrity sha512-p+HbgjhkqLsnxyjOUdEYHztHCp8n2oLVUJTmRPuP5FXLNevh6Gwmxf+NYC2J0sgD084aV2CFi3qu1W4yHWIknA== - dependencies: - "@commitlint/execute-rule" "^14.0.0" - "@commitlint/resolve-extends" "^14.1.0" - "@commitlint/types" "^14.0.0" - "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" chalk "^4.0.0" cosmiconfig "^7.0.0" + cosmiconfig-typescript-loader "^2.0.0" lodash "^4.17.19" resolve-from "^5.0.0" typescript "^4.4.3" -"@commitlint/message@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/message/-/message-14.0.0.tgz#4db852fcd76352be547811d57709667588a39ba9" - integrity sha512-316Pum+bwDcZamOQw0DXSY17Dq9EjvL1zKdYIZqneu4lnXN6uFfi53Y/sP5crW6zlLdnuTHe1MnuewXPLHfH1Q== +"@commitlint/message@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/message/-/message-16.2.1.tgz#bc6a0fa446a746ac2ca78cf372e4cec48daf620d" + integrity sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw== -"@commitlint/parse@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/parse/-/parse-14.0.0.tgz#cb6f66323a27617744f9b479cf09941ff9c3f93d" - integrity sha512-49qkk0TcwdxJPZUX8MElEzMlRFIL/cg64P4pk8HotFEm2HYdbxxZp6v3cbVw5WOsnRA0frrs+NNoOcIT83ccMQ== +"@commitlint/parse@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/parse/-/parse-16.2.1.tgz#50b359cb711ec566d2ee236a8e4c6baca07b77c0" + integrity sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g== dependencies: - "@commitlint/types" "^14.0.0" + "@commitlint/types" "^16.2.1" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.2.2" -"@commitlint/read@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/read/-/read-14.0.0.tgz#f871600ce815b541c7f1a4fdabe2c66d8840c2ab" - integrity sha512-WXXcSLBqwXTqnEmB0lbU2TrayDJ2G3qI/lxy1ianVmpQol8p9BjodAA6bYxtYYHdQFVXUrIsclzFP/naWG+hlQ== +"@commitlint/read@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/read/-/read-16.2.1.tgz#e0539205d77cdb6879b560f95e5fb251e0c6f562" + integrity sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw== dependencies: - "@commitlint/top-level" "^14.0.0" - "@commitlint/types" "^14.0.0" + "@commitlint/top-level" "^16.2.1" + "@commitlint/types" "^16.2.1" fs-extra "^10.0.0" git-raw-commits "^2.0.0" -"@commitlint/resolve-extends@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-14.1.0.tgz#f23b40d95c95901fcb7b53edebc8fe86f54fe99d" - integrity sha512-ko80k6QB6E6/OvGNWy4u7gzzWyluDT3VDNL2kfZaDywsnrYntUKyT4Do97gQ7orttITzj2GRtk3KWClVz4rUUQ== +"@commitlint/resolve-extends@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-16.2.1.tgz#2f7833a5a3a7aa79f508e59fcb0f1d33c45ed360" + integrity sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg== dependencies: + "@commitlint/config-validator" "^16.2.1" + "@commitlint/types" "^16.2.1" import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/resolve-extends@^17.0.3": - version "17.0.3" - resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-17.0.3.tgz#43b237899e2abd59d16af091521b888c8a071412" - integrity sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA== +"@commitlint/rules@^16.2.4": + version "16.2.4" + resolved "https://registry.npmmirror.com/@commitlint/rules/-/rules-16.2.4.tgz#c2fbbf20d9d0e8fcf25690c88a27750d4a3e867b" + integrity sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg== dependencies: - "@commitlint/config-validator" "^17.0.3" - "@commitlint/types" "^17.0.0" - import-fresh "^3.0.0" - lodash "^4.17.19" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - -"@commitlint/rules@^14.1.0": - version "14.1.0" - resolved "https://registry.npmmirror.com/@commitlint/rules/-/rules-14.1.0.tgz#caec339b05c45e7536cac5d9f1db11fcc9e3dfcd" - integrity sha512-6jmv414/1JzGzDI/DS+snAMhcL6roQKPdg0WB3kWTWN52EvWXBFm0HIMGt2H/FlRKxozwVXlQN60/1fNIl98xA== - dependencies: - "@commitlint/ensure" "^14.1.0" - "@commitlint/message" "^14.0.0" - "@commitlint/to-lines" "^14.0.0" - "@commitlint/types" "^14.0.0" + "@commitlint/ensure" "^16.2.1" + "@commitlint/message" "^16.2.1" + "@commitlint/to-lines" "^16.2.1" + "@commitlint/types" "^16.2.1" execa "^5.0.0" -"@commitlint/to-lines@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-14.0.0.tgz#d90c7453bc678e7e2d8a4cae125783b1d4df7aa4" - integrity sha512-uIXk54oJDuYyLpI208s3+cGmJ323yvSJ9LB7yUDMWUeJi2LgRxE2EBZL995kLQdnoAsBBXcLq+VDyppg5bV/cg== +"@commitlint/to-lines@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-16.2.1.tgz#42d000f34dc0406f514991e86237fdab5e8affd0" + integrity sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ== -"@commitlint/top-level@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/top-level/-/top-level-14.0.0.tgz#5fed6ac7ae2f5cff02ea1f41bddbfa24487ef3c8" - integrity sha512-MZDKZfWfl9g4KozgWBGTCrI2cXkMHnBFlhwvEfrAu5G8wd5aL1f2uWEUMnBMjUikmhVj99i1pzge4XFWHQ29wQ== +"@commitlint/top-level@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/top-level/-/top-level-16.2.1.tgz#bdaa53ab3d8970e0288879f1a342a8c2dfe01583" + integrity sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw== dependencies: find-up "^5.0.0" -"@commitlint/types@^14.0.0": - version "14.0.0" - resolved "https://registry.npmmirror.com/@commitlint/types/-/types-14.0.0.tgz#17bf4d1ab1178c67990ce01b36017d6e6792b751" - integrity sha512-sIls1nP2uSbGL466edYlh8mn7O/WP4i3bcvP+2DMhkscRCSgaPhNRWDilhYVsHt2Vu1HTQ27uT0Bj5/Lt2+EcQ== +"@commitlint/types@^16.2.1": + version "16.2.1" + resolved "https://registry.npmmirror.com/@commitlint/types/-/types-16.2.1.tgz#f25d373b88b01e51fc3fa44488101361945a61bd" + integrity sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA== dependencies: chalk "^4.0.0" -"@commitlint/types@^17.0.0": - version "17.0.0" - resolved "https://registry.npmmirror.com/@commitlint/types/-/types-17.0.0.tgz#3b4604c1a0f06c340ce976e6c6903d4f56e3e690" - integrity sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ== - dependencies: - chalk "^4.1.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -1189,40 +1140,16 @@ resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== -"@emmetio/abbreviation@^2.2.3": - version "2.2.3" - resolved "https://registry.npmmirror.com/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz#2b3c0383c1a4652f677d5b56fb3f1616fe16ef10" - integrity sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA== - dependencies: - "@emmetio/scanner" "^1.0.0" - -"@emmetio/css-abbreviation@^2.1.4": - version "2.1.4" - resolved "https://registry.npmmirror.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54" - integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw== - dependencies: - "@emmetio/scanner" "^1.0.0" - -"@emmetio/scanner@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f" - integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA== - -"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2": - version "3.0.2" - resolved "https://registry.npmmirror.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" - integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA== - dependencies: - lodash.get "^4" - make-error "^1" - ts-node "^9" - tslib "^2" - "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== +"@esbuild/linux-loong64@0.15.5": + version "0.15.5" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" + integrity sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A== + "@eslint/eslintrc@^1.3.0": version "1.3.0" resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" @@ -1262,22 +1189,30 @@ resolved "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@iconify/iconify@2.0.0-rc.6": - version "2.0.0-rc.6" - resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.0.0-rc.6.tgz#e3f5376b63b441dcb3696317784b98e2e678cf46" - integrity sha512-pXvLXqLPQsjpDY4qbbyh5cPEtakTfWfQCAo6SdYNhYQzat+/0fbeEhScryqaketNAG0bT4/+deKezkJZTvbuSg== +"@iconify/iconify@2.1.2": + version "2.1.2" + resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.1.2.tgz#978e8f08c3b834816c82ae2933b3a70f143f7685" + integrity sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ== dependencies: - cross-fetch "^3.0.6" + cross-fetch "^3.1.5" -"@iconify/iconify@>=2.0.0-rc.6", "@iconify/iconify@^2.0.4": +"@iconify/iconify@>=2.0.0-rc.6", "@iconify/iconify@^2.2.1": version "2.2.1" resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.2.1.tgz#03ad4d8554c6f2d7741d3b9440115efa0c707b37" integrity sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ== -"@iconify/json@^1.1.422": - version "1.1.461" - resolved "https://registry.npmmirror.com/@iconify/json/-/json-1.1.461.tgz#9e76f2339292e1a89855f93e497439afeb642f11" - integrity sha512-9Y41Tk9s3LDt4WI20XySNhNX6qTJ/WOBeE3O2iyoV9LJ6gFEDjp0uTPzfRU9NUx7D6VkvQ/htJEuRe9LmyMqUA== +"@iconify/json@^2.1.30": + version "2.1.95" + resolved "https://registry.npmmirror.com/@iconify/json/-/json-2.1.95.tgz#23d9a0ee495e28d62116f89dc02eef6a74a2fe4d" + integrity sha512-ZlcUDRO0UBVw50Eya08vZx7fjZ2YcckncF3oqKP3YDvLHheO2YdulrXQJMvahPQ8+E87ybkDqudPLrXg+12Ihw== + dependencies: + "@iconify/types" "*" + pathe "^0.3.0" + +"@iconify/types@*": + version "1.1.0" + resolved "https://registry.npmmirror.com/@iconify/types/-/types-1.1.0.tgz#dc15fc988b1b3fd558dd140a24ede7e0aac11280" + integrity sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw== "@intlify/core-base@9.2.2": version "9.2.2" @@ -1317,191 +1252,6 @@ "@intlify/core-base" "9.2.2" "@intlify/shared" "9.2.2" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== - dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== - dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" - -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" - -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== - dependencies: - "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" - -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -1558,6 +1308,24 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@logicflow/core@^1.1.13", "@logicflow/core@^1.1.25": + version "1.1.25" + resolved "https://registry.npmmirror.com/@logicflow/core/-/core-1.1.25.tgz#e9140e9e871cb728126870f6d0e8ff176d265599" + integrity sha512-qlsNKaKTLqJ94srwalmn/jpQ+l6vg/qNg9HH0rmobVSO7rpLa9aV6GsC0X1fN5y7VQpbnG2Zcs9QnYn5HtS6AA== + dependencies: + "@types/mousetrap" "^1.6.4" + mousetrap "^1.6.5" + preact "^10.4.8" + +"@logicflow/extension@^1.1.13": + version "1.1.25" + resolved "https://registry.npmmirror.com/@logicflow/extension/-/extension-1.1.25.tgz#4102d1d79ea050266bf621adf2ef05b4d0d4c0d9" + integrity sha512-IE/AhcCJKMYtSTEdH7YHWqArNfLJH0vnoRJ4q7HjbdAjQD6m8XgyG25ArF4lh/d4NUqCzts/AgqB9Fdp83OHcQ== + dependencies: + "@logicflow/core" "^1.1.25" + ids "^1.0.0" + preact "^10.4.8" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1579,21 +1347,122 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@purge-icons/core@^0.7.0": - version "0.7.0" - resolved "https://registry.npmmirror.com/@purge-icons/core/-/core-0.7.0.tgz#097ba8d4d8b7e8d662df687bd2391eb8b83caba0" - integrity sha512-PaCeTFjkQUX+MzBsNg3L8x5aCZqXwaUSNw1FY3Jn7wlLqNqxRNoShw5P//a1DQAy7hLlUHvEL6IGeDoN/xf98A== +"@octokit/auth-token@^3.0.0": + version "3.0.1" + resolved "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" + integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== dependencies: - "@iconify/iconify" "2.0.0-rc.6" - axios "^0.21.1" - debug "^4.3.2" - fast-glob "^3.2.5" - fs-extra "^9.1.0" + "@octokit/types" "^7.0.0" -"@purge-icons/generated@^0.7.0": - version "0.7.0" - resolved "https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.7.0.tgz#d87dbb3145e8b9a64e2e12ff660aa3cb13cbeb56" - integrity sha512-4SHVpZnKaW5ekRTjhPY9b1pALVlF0pDuGIDRAlxAm0V+gQVOL0+Ghav6U9XqXFj2kiG1+eQ8swpvB+kd0a+tqg== +"@octokit/core@^4.0.0": + version "4.0.5" + resolved "https://registry.npmmirror.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" + integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.1" + resolved "https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-7.0.1.tgz#cb0d03e62e8762f3c80e52b025179de81899a823" + integrity sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg== + dependencies: + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.1" + resolved "https://registry.npmmirror.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" + integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^7.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^13.4.0": + version "13.4.0" + resolved "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-13.4.0.tgz#06fe8fda93bf21bdd397fe7ef8805249efda6c06" + integrity sha512-2mVzW0X1+HDO3jF80/+QFZNzJiTefELKbhMu6yaBYbp/1gSMkVDm4rT472gJljTokWUlXaaE63m7WrWENhMDLw== + +"@octokit/plugin-paginate-rest@^4.0.0": + version "4.1.0" + resolved "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.1.0.tgz#670ac9ac369448c69a2371bfcd7e2b37d95534f2" + integrity sha512-2O5K5fpajYG5g62wjzHR7/cWYaCA88CextAW3vFP+yoIHD0KEdlVMHfM5/i5LyV+JMmqiYW7w5qfg46FR+McNw== + dependencies: + "@octokit/types" "^7.1.1" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^6.0.0": + version "6.3.0" + resolved "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz#81549334ce020169b84bd4a7fa2577e9d725d829" + integrity sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g== + dependencies: + "@octokit/types" "^7.0.0" + deprecation "^2.3.1" + +"@octokit/request-error@^3.0.0": + version "3.0.1" + resolved "https://registry.npmmirror.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" + integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + dependencies: + "@octokit/types" "^7.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.1" + resolved "https://registry.npmmirror.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" + integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^19.0.3": + version "19.0.4" + resolved "https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" + integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== + dependencies: + "@octokit/core" "^4.0.0" + "@octokit/plugin-paginate-rest" "^4.0.0" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + +"@octokit/types@^7.0.0", "@octokit/types@^7.1.1": + version "7.1.1" + resolved "https://registry.npmmirror.com/@octokit/types/-/types-7.1.1.tgz#a30fd6ca3279d59d532fa75583d65d93b7588e6d" + integrity sha512-Dx6cNTORyVaKY0Yeb9MbHksk79L8GXsihbG6PtWqTpkyA2TY1qBWE26EQXVG3dHwY9Femdd/WEeRUEiD0+H3TQ== + dependencies: + "@octokit/openapi-types" "^13.4.0" + +"@purge-icons/core@^0.8.0": + version "0.8.0" + resolved "https://registry.npmmirror.com/@purge-icons/core/-/core-0.8.0.tgz#4b7394cad2bc63404095254a22551a928df8e3f6" + integrity sha512-8L6hP1U9XQO5B7kvquVJ5N7jzFvO0LZLXhBCjUQzzJzi42i6MAUanVKROApqbBuh21o9tmPwvNUg0xPe/uftRA== + dependencies: + "@iconify/iconify" "2.1.2" + axios "^0.26.0" + debug "^4.3.3" + fast-glob "^3.2.11" + fs-extra "^10.0.1" + +"@purge-icons/generated@^0.8.1": + version "0.8.1" + resolved "https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.8.1.tgz#15544a9c9b2436e436d884828077f9d88df660e7" + integrity sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q== dependencies: "@iconify/iconify" ">=2.0.0-rc.6" @@ -1667,20 +1536,6 @@ resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" resolved "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" @@ -1691,11 +1546,6 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -1721,39 +1571,6 @@ resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.0" - resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" - integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== - dependencies: - "@babel/types" "^7.3.0" - "@types/codemirror@^5.60.5": version "5.60.5" resolved "https://registry.npmmirror.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7" @@ -1761,7 +1578,7 @@ dependencies: "@types/tern" "*" -"@types/crypto-js@^4.0.2": +"@types/crypto-js@^4.1.1": version "4.1.1" resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d" integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA== @@ -1791,13 +1608,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - "@types/imagemin-gifsicle@^7.0.1": version "7.0.1" resolved "https://registry.npmmirror.com/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz#0844a96a338438bb98f77b298acf217260d0d409" @@ -1826,18 +1636,18 @@ dependencies: "@types/imagemin" "*" -"@types/imagemin-svgo@^9.0.1": - version "9.0.1" - resolved "https://registry.npmmirror.com/@types/imagemin-svgo/-/imagemin-svgo-9.0.1.tgz#629ebc8d01802405a9f07667e73e73943ba28ff7" - integrity sha512-DMMunSfN9EOYOh5hfvtY1N5ydVDoMnqN+1bvoL4OIspUJIOiN9hadrdeXTd51oI2tpQXM3Htadrb6QSg0VnYbQ== +"@types/imagemin-svgo@^10.0.0": + version "10.0.1" + resolved "https://registry.npmmirror.com/@types/imagemin-svgo/-/imagemin-svgo-10.0.1.tgz#c01d7a5612e3d6851e355ce92f4f26c6c25eef13" + integrity sha512-F3Tcm0iElDp9o1QnulC7EFR6KrYaXs0ARFnAmaYwPsPQ1AMcrjy45NI7cfGJ9yfuBDep/GU/tqj4EUD62DOWgg== dependencies: "@types/imagemin" "*" - "@types/svgo" "^1" + "@types/svgo" "*" -"@types/imagemin-webp@^5.1.2": - version "5.1.2" - resolved "https://registry.npmmirror.com/@types/imagemin-webp/-/imagemin-webp-5.1.2.tgz#b426f93c7019f3799578c88e28ce6949d95b1690" - integrity sha512-elm1oHtWvpu56ucCgnlcP4uiaH9tO8icfF+Vqma4VzuS2b1dgchSRccf7iI1eDxWatvmRt91jHwP0MDwsHhnuA== +"@types/imagemin-webp@^7.0.0": + version "7.0.0" + resolved "https://registry.npmmirror.com/@types/imagemin-webp/-/imagemin-webp-7.0.0.tgz#8fa322c9a2f99a3b57d459aec6e80e06ce050afa" + integrity sha512-Lb1tjy2vEU7qYwM5iFB9o5k0J3mIpulw6Yftset5LLLugPu7+C16rLYRP1WEwr4QM8AeJZRjC2BGBLd9lGvRhQ== dependencies: "@types/imagemin" "*" @@ -1855,7 +1665,7 @@ dependencies: "@types/node" "*" -"@types/inquirer@^8.1.3": +"@types/inquirer@^8.2.1": version "8.2.3" resolved "https://registry.npmmirror.com/@types/inquirer/-/inquirer-8.2.3.tgz#985515d04879a0d0c1f5f49ec375767410ba9dab" integrity sha512-ZlBqD+8WIVNy3KIVkl+Qne6bGLW2erwN0GJXY9Ri/9EMbyupee3xw3H0Mmv5kJoLyNpfd/oHlwKxO0DUDH7yWA== @@ -1867,39 +1677,12 @@ resolved "https://registry.npmmirror.com/@types/intro.js/-/intro.js-3.0.2.tgz#cbf9b69f055b77582cc2cebe236e9a405b30efbd" integrity sha512-kow8REgIIG42atN9vAaIdpEqVzj6WzV9m0PII8oce+an4Lc3eyfQF32/FbabbGmfWuF7TceTdd+gh74kOrXkPw== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^27.0.2": - version "27.5.2" - resolved "https://registry.npmmirror.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" - integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== - dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" - "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/lodash-es@^4.17.5": +"@types/lodash-es@^4.17.6": version "4.17.6" resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== @@ -1921,25 +1704,30 @@ resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/mockjs@^1.0.4": +"@types/mockjs@^1.0.4", "@types/mockjs@^1.0.6": version "1.0.6" resolved "https://registry.npmmirror.com/@types/mockjs/-/mockjs-1.0.6.tgz#dafdd5de65156f7aa63eab4e29fa3d532cd95609" integrity sha512-Yu5YlqbYZyqsd6LjO4e8ONJDN9pTSnciHDcRP4teNOh/au2b8helFhgRx+3w8xsTFEnwr9jtfTVJbAx+eYmlHA== +"@types/mousetrap@^1.6.4": + version "1.6.9" + resolved "https://registry.npmmirror.com/@types/mousetrap/-/mousetrap-1.6.9.tgz#f1ef9adbd1eac3466f21b6988b1c82c633a45340" + integrity sha512-HUAiN65VsRXyFCTicolwb5+I7FM6f72zjMWr+ajGk+YTvzBgXqa2A5U7d+rtsouAkunJ5U4Sb5lNJjo9w+nmXg== + "@types/node@*", "@types/node@>=12": - version "18.7.8" - resolved "https://registry.npmmirror.com/@types/node/-/node-18.7.8.tgz#6bbf2be6fbf9c187a5040d4277d24a06a18957a1" - integrity sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag== + version "18.7.9" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.7.9.tgz#180bfc495c91dc62573967edf047e15dbdce1491" + integrity sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ== "@types/node@^14.17.1": - version "14.18.24" - resolved "https://registry.npmmirror.com/@types/node/-/node-14.18.24.tgz#406b220dc748947e1959d8a38a75979e87166704" - integrity sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w== + version "14.18.25" + resolved "https://registry.npmmirror.com/@types/node/-/node-14.18.25.tgz#57c72455af0a658da5b59aa062b2f89e73df0a61" + integrity sha512-9pLfceRSrKIsv/MISN6RoFWTIzka36Uk2Uuf5a8cHyDYhEgl5Hm5dXoe621KULeBjt+cFsY18mILsWWtJeG80w== -"@types/node@^16.11.6": - version "16.11.51" - resolved "https://registry.npmmirror.com/@types/node/-/node-16.11.51.tgz#bb2114485e6fc1460f630702fb992007d120e928" - integrity sha512-h6p1A77pHBDdOcI9y6Wfh9iRGa8lMUZMk2ebHJTNTtRwgbQzgemZow6PW7+Xs7Z0r0IQFY1+iRlcNAkRrf53nA== +"@types/node@^17.0.25": + version "17.0.45" + resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1956,12 +1744,7 @@ resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.1.5": - version "2.7.0" - resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== - -"@types/qrcode@^1.4.1": +"@types/qrcode@^1.4.2": version "1.5.0" resolved "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz#6a98fe9a9a7b2a9a3167b6dde17eff999eabe40b" integrity sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA== @@ -1990,17 +1773,7 @@ resolved "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.13.0.tgz#870223438f8f2cd81157b128a4c0261adbcaa946" integrity sha512-C3064MH72iEfeGCYEGCt7FCxXoAXaMPG0QPnstcxvPmbl54erpISu06d++FY37Smja64iWy5L8wOyHHBghWbJQ== -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/svgo@^1": - version "1.3.6" - resolved "https://registry.npmmirror.com/@types/svgo/-/svgo-1.3.6.tgz#9db00a7ddf9b26ad2feb6b834bef1818677845e1" - integrity sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug== - -"@types/svgo@^2.4.2", "@types/svgo@^2.6.0": +"@types/svgo@*", "@types/svgo@^2.6.1": version "2.6.4" resolved "https://registry.npmmirror.com/@types/svgo/-/svgo-2.6.4.tgz#b7298fc1dd687539fd63fc818b00146d96e68836" integrity sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng== @@ -2031,19 +1804,12 @@ resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" +"@types/web-bluetooth@^0.0.14": + version "0.0.14" + resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5" + integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A== -"@typescript-eslint/eslint-plugin@^5.3.0": +"@typescript-eslint/eslint-plugin@^5.20.0": version "5.33.1" resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== @@ -2058,14 +1824,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.33.1" - resolved "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.33.1.tgz#5fa908addffb82ea8fb0e62cb47c387de1bff536" - integrity sha512-wk2o+4wojvKz/x3UCbsgjgXl0lyLPYQsfKP0MdRzj4jtsQr4bVtgWUWck6+N3GzThUTbUFyyKLduWPwePhh0xQ== - dependencies: - "@typescript-eslint/utils" "5.33.1" - -"@typescript-eslint/parser@^5.3.0": +"@typescript-eslint/parser@^5.20.0": version "5.33.1" resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.33.1.tgz#e4b253105b4d2a4362cfaa4e184e2d226c440ff3" integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== @@ -2130,7 +1889,7 @@ "@typescript-eslint/types" "5.33.1" eslint-visitor-keys "^3.3.0" -"@vitejs/plugin-legacy@^1.6.2": +"@vitejs/plugin-legacy@^1.8.1": version "1.8.2" resolved "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-1.8.2.tgz#2f315bcb6685b12719813fb9412851445cca636f" integrity sha512-NCOKU+pU+cxLMR9P9RTolEuOK+h+zYBXlknj+zGcKSj/NXBZYgA1GAH1FnO4zijoWRiTaiOm2ha9LQrELE7XHg== @@ -2141,7 +1900,7 @@ regenerator-runtime "^0.13.9" systemjs "^6.12.1" -"@vitejs/plugin-vue-jsx@^1.2.0": +"@vitejs/plugin-vue-jsx@^1.3.10": version "1.3.10" resolved "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz#5b61294ed4334fbc5f5679243fd3ccc448b26044" integrity sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw== @@ -2153,64 +1912,76 @@ "@vue/babel-plugin-jsx" "^1.1.1" hash-sum "^2.0.0" -"@vitejs/plugin-vue@^1.9.4": - version "1.10.2" - resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a" - integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw== +"@vitejs/plugin-vue@^2.3.1": + version "2.3.4" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz#966a6279060eb2d9d1a02ea1a331af071afdcf9e" + integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== -"@volar/code-gen@0.28.10": - version "0.28.10" - resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.28.10.tgz#3e8612d117ecb271968b3f38bb1add92c7c1631c" - integrity sha512-MybgBubg1im4MiFoiTUMmxKTC+KZJQfIO5g/TVnysEsCr4ssG0lG1rF3Gg3lbQKefdMiqsH5FNuMyqLC/bsWQg== +"@volar/code-gen@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.33.9.tgz#5d108451c4872fb905eab59143b64b824610eed0" + integrity sha512-HI+XemEjvOv9uSjqaNXIL1brSTaBy9vRTcXqz9787nL5VKktI8aU1Zk4w9yJR88eTqw7mlPIdMaib7Ps/QPq8Q== dependencies: - "@volar/shared" "0.28.10" - "@volar/source-map" "0.28.10" + "@volar/source-map" "0.33.9" -"@volar/html2pug@0.28.10": - version "0.28.10" - resolved "https://registry.npmmirror.com/@volar/html2pug/-/html2pug-0.28.10.tgz#73bd86f758d57bb1a2a4aec4b3bd05e91533aa28" - integrity sha512-orcNnKyUPZZVb7pRvRHU7R8gk4abKZQELT0zXt2T7EbC5B8usmWNav6Sis9kVzV5Etj5h/IYutv7Df7PiKwLOQ== +"@volar/pug-language-service@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/pug-language-service/-/pug-language-service-0.33.9.tgz#e5f94cd9f3eca5012b35d9360236e6259528492a" + integrity sha512-3oOV0HmoqkCyPAiHXSMoDzbLrSEQQv3d1dY/Lfo4H8hGoS8kUYJ958328TuLFc90yzsSmYnuvIux5AUok138pg== dependencies: - domelementtype "^2.2.0" - domhandler "^4.2.2" - htmlparser2 "^7.1.2" - pug "^3.0.2" + "@volar/code-gen" "0.33.9" + "@volar/shared" "0.33.9" + "@volar/source-map" "0.33.9" + "@volar/transforms" "0.33.9" + pug-lexer "^5.0.1" + pug-parser "^6.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.17.0-next.6" -"@volar/shared@0.28.10": - version "0.28.10" - resolved "https://registry.npmmirror.com/@volar/shared/-/shared-0.28.10.tgz#4ab2224127c3f170aabdaf527b220d9c9bd5887a" - integrity sha512-MzBEfBM5E5q4EfOd8Gkqmo+XTfbXiuT8IEWtfmpS8ax3GVeofkeAgzK/TadkatW/Nb2cKOaCYkmILpFKvDnDRQ== +"@volar/shared@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/shared/-/shared-0.33.9.tgz#4a7244cafab2011c1a7942f22754e08a21f08cf7" + integrity sha512-YqEBYT1SjyO+/W73lyKZlftumimsrYGvd98pHrIyvgc6HNhFnCcthRbyHskstjU6P8Bgj90mRl+7Sb29J+Z5ng== dependencies: upath "^2.0.1" - vscode-jsonrpc "^8.0.0-next.2" - vscode-uri "^3.0.2" - -"@volar/source-map@0.28.10": - version "0.28.10" - resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.28.10.tgz#acbee951042f4ee8ac5a3362a597480d07b9ebba" - integrity sha512-hQ2gclwP7yvZIdaVEC1LixViDPIO6JGkCBxAS8Erg9p2d0ruTyzazfd0NLaLuHLoMnxExILYNK2W05yQmIpRIA== - dependencies: - "@volar/shared" "0.28.10" - -"@volar/transforms@0.28.10": - version "0.28.10" - resolved "https://registry.npmmirror.com/@volar/transforms/-/transforms-0.28.10.tgz#7be740c04981905f2fa2a87fdddfd4b2436d1421" - integrity sha512-GOQN3amI733oFweKKjuBBOEOMwy0e/aEAnnJNavrrHa7LY6Ke/JfNsoWhi9Pb2FAPYd+WyruDDFX8yKHjQE1xw== - dependencies: - "@volar/shared" "0.28.10" - vscode-languageserver "^8.0.0-next.2" + vscode-jsonrpc "^8.0.0-next.5" + vscode-uri "^3.0.3" -"@vscode/emmet-helper@^2.8.0": - version "2.8.4" - resolved "https://registry.npmmirror.com/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz#ab937e3ce79b0873c604d1ad50a9eeb7abae2937" - integrity sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg== - dependencies: - emmet "^2.3.0" - jsonc-parser "^2.3.0" - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.15.1" - vscode-nls "^5.0.0" - vscode-uri "^2.1.2" +"@volar/source-map@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.33.9.tgz#d86d9db30b15e554f4d0d2853e03a84ae1bc1ebd" + integrity sha512-SE7dfumZ8pLsbj4DtiSDTg2/d/JT45nF51rUnuz1UNSBPEeXBexlzvz5EQ2AyrX0FjAAd2ijrRtirTk1a0SFhQ== + +"@volar/transforms@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/transforms/-/transforms-0.33.9.tgz#1155b5ea01b67bc318dddb49177f6c2df6b6f879" + integrity sha512-qdc2d0ZW/G6jCx1pBmoMjMJTY245pZJjpPL/OCT3zgbDLGvLvqhowXxQYQd2YiNXqxJvbadEKviH5LiZL3sU9g== + dependencies: + "@volar/shared" "0.33.9" + vscode-languageserver-types "^3.17.0-next.6" + +"@volar/vue-code-gen@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/vue-code-gen/-/vue-code-gen-0.33.9.tgz#353b5803d9cf84b14f9a5e2e1c661a072d776736" + integrity sha512-qRCXcBhm1kUlI06sW5zolavn8gqZdSC2eIWw7jgbW68K/cGlTyXHGGZgJPM9P22cF9pcrjV1ByehO18ke2u+aA== + dependencies: + "@volar/code-gen" "0.33.9" + "@volar/source-map" "0.33.9" + "@vue/compiler-core" "^3.2.27" + "@vue/compiler-dom" "^3.2.27" + "@vue/shared" "^3.2.27" + +"@volar/vue-typescript@0.33.9": + version "0.33.9" + resolved "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-0.33.9.tgz#6ac36812bba3967af316c0710559bf12bab904e8" + integrity sha512-UUViaQfzAV7z49TB+IsGCT6ls7zdEUib2N0L4k8U9nZbd2BQA4kcR9nyS/8oDOU5fK3ErP+pPlC+XzGGamKhcw== + dependencies: + "@volar/code-gen" "0.33.9" + "@volar/pug-language-service" "0.33.9" + "@volar/source-map" "0.33.9" + "@volar/vue-code-gen" "0.33.9" + "@vue/compiler-sfc" "^3.2.27" + "@vue/reactivity" "^3.2.27" "@vue/babel-helper-vue-transform-on@^1.0.2": version "1.0.2" @@ -2232,17 +2003,7 @@ html-tags "^3.1.0" svg-tags "^1.0.0" -"@vue/compiler-core@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.21.tgz#26566c32b2ad838199d471ef5df620a83846f24e" - integrity sha512-NhhiQZNG71KNq1h5pMW/fAXdTF7lJRaSI7LDm2edhHXVz1ROMICo8SreUmQnSf4Fet0UPBVqJ988eF4+936iDQ== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/shared" "3.2.21" - estree-walker "^2.0.2" - source-map "^0.6.1" - -"@vue/compiler-core@3.2.37": +"@vue/compiler-core@3.2.37", "@vue/compiler-core@^3.2.27": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== @@ -2252,15 +2013,7 @@ estree-walker "^2.0.2" source-map "^0.6.1" -"@vue/compiler-dom@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.21.tgz#d6f6c85364ef8888f9c4e9122bfba11e78fb398c" - integrity sha512-gsJD3DpYZSYquiA7UIPsMDSlAooYWDvHPq9VRsqzJEk2PZtFvLvHPb4aaMD8Ufd62xzYn32cnnkzsEOJhyGilA== - dependencies: - "@vue/compiler-core" "3.2.21" - "@vue/shared" "3.2.21" - -"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.20": +"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.27": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5" integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ== @@ -2268,23 +2021,7 @@ "@vue/compiler-core" "3.2.37" "@vue/shared" "3.2.37" -"@vue/compiler-sfc@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.21.tgz#42639ee49e725afb7d8f1d1940e75dc17a56002c" - integrity sha512-+yDlUSebKpz/ovxM2vLRRx7w/gVfY767pOfYTgbIhAs+ogvIV2BsIt4fpxlThnlCNChJ+yE0ERUNoROv2kEGEQ== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.21" - "@vue/compiler-dom" "3.2.21" - "@vue/compiler-ssr" "3.2.21" - "@vue/ref-transform" "3.2.21" - "@vue/shared" "3.2.21" - estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" - -"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.6": +"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.27", "@vue/compiler-sfc@^3.2.29", "@vue/compiler-sfc@^3.2.33": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4" integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg== @@ -2300,14 +2037,6 @@ postcss "^8.1.10" source-map "^0.6.1" -"@vue/compiler-ssr@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.21.tgz#37d124f89e8adef9fd56b85775de4b5310a0436e" - integrity sha512-eU+A0iWYy+1zAo2CRIJ0zSVlv1iuGAIbNRCnllSJ31pV1lX3jypJYzGbJlSRAbB7VP6E+tYveVT1Oq8JKewa3g== - dependencies: - "@vue/compiler-dom" "3.2.21" - "@vue/shared" "3.2.21" - "@vue/compiler-ssr@3.2.37": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff" @@ -2316,7 +2045,7 @@ "@vue/compiler-dom" "3.2.37" "@vue/shared" "3.2.37" -"@vue/devtools-api@^6.0.0-beta.19", "@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1": +"@vue/devtools-api@^6.1.0", "@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1": version "6.2.1" resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== @@ -2332,25 +2061,14 @@ estree-walker "^2.0.2" magic-string "^0.25.7" -"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.20": +"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.27": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848" integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== dependencies: "@vue/shared" "3.2.37" -"@vue/ref-transform@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/ref-transform/-/ref-transform-3.2.21.tgz#b0c554c9f640c3f005f77e676066aa0faba90984" - integrity sha512-uiEWWBsrGeun9O7dQExYWzXO3rHm/YdtFNXDVqCSoPypzOVxWxdiL+8hHeWzxMB58fVuV2sT80aUtIVyaBVZgQ== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.21" - "@vue/shared" "3.2.21" - estree-walker "^2.0.2" - magic-string "^0.25.7" - -"@vue/runtime-core@3.2.37": +"@vue/runtime-core@3.2.37", "@vue/runtime-core@^3.2.33": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3" integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== @@ -2375,33 +2093,35 @@ "@vue/compiler-ssr" "3.2.37" "@vue/shared" "3.2.37" -"@vue/shared@3.2.21": - version "3.2.21" - resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.21.tgz#4cd80c0e62cf65a7adab2449e86b6f0cb33a130b" - integrity sha512-5EQmIPK6gw4UVYUbM959B0uPsJ58+xoMESCZs3N89XyvJ9e+fX4pqEPrOGV8OroIk3SbEvJcC+eYc8BH9JQrHA== - -"@vue/shared@3.2.37", "@vue/shared@^3.2.20": +"@vue/shared@3.2.37", "@vue/shared@^3.2.27", "@vue/shared@^3.2.33": version "3.2.37" resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702" integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== -"@vue/test-utils@^2.0.0-rc.16": +"@vue/test-utils@^2.0.0-rc.21": version "2.0.2" resolved "https://registry.npmmirror.com/@vue/test-utils/-/test-utils-2.0.2.tgz#0b5edd683366153d5bc5a91edc62f292118710eb" integrity sha512-E2P4oXSaWDqTZNbmKZFVLrNN/siVN78YkEqs7pHryWerrlZR9bBFLWdJwRoguX45Ru6HxIflzKl4vQvwRMwm5g== -"@vueuse/core@^6.7.4": - version "6.9.2" - resolved "https://registry.npmmirror.com/@vueuse/core/-/core-6.9.2.tgz#76b16d01f33cf367dd1a2d7f2e31d106443ceb8a" - integrity sha512-FRwl4ccSFuHZBHLGgS9TMv/+Dd6XFaL4o9nph2qtgQIV+z29RBFokw08XjHfykiENRzB01MjYHJ7iRUnsIFQXg== +"@vueuse/core@^8.3.0": + version "8.9.4" + resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.9.4.tgz#c7db40f19390b3c9f4ff9294a30461497f62ec19" + integrity sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q== dependencies: - "@vueuse/shared" "6.9.2" + "@types/web-bluetooth" "^0.0.14" + "@vueuse/metadata" "8.9.4" + "@vueuse/shared" "8.9.4" vue-demi "*" -"@vueuse/shared@6.9.2", "@vueuse/shared@^6.7.4": - version "6.9.2" - resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-6.9.2.tgz#97e4369fa7262ebc96fe1d6e210268f30b037005" - integrity sha512-lAiMh6XROs0kSKVd0Yb/6GKoQMxC1fYrFDi6opvQWISPtcqRNluRrQxLUZ3WTI78ovtoKRLktjhkFAtydcfFDg== +"@vueuse/metadata@8.9.4": + version "8.9.4" + resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.9.4.tgz#a4132db33e4c1b1023636acfa20aa7b37ab3d978" + integrity sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw== + +"@vueuse/shared@8.9.4", "@vueuse/shared@^8.3.0": + version "8.9.4" + resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.9.4.tgz#c9741c30ffb666b50d62f0dd80b76119fd47573e" + integrity sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag== dependencies: vue-demi "*" @@ -2427,10 +2147,10 @@ micromatch "^4.0.5" windicss "^3.5.6" -"@zxcvbn-ts/core@^1.0.0-beta.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@zxcvbn-ts/core/-/core-1.2.0.tgz#92a9d3fdd3e0c467715ecfea3cab778a0df699b5" - integrity sha512-zaGUGolat04MB1ImVMbP8o7uDytKRLahZO6VSWeW6tK+tko6vHMl/eNsdKWSSWG7OR45BeUy7nBvFg79HYSdGA== +"@zxcvbn-ts/core@^2.0.1": + version "2.0.4" + resolved "https://registry.npmmirror.com/@zxcvbn-ts/core/-/core-2.0.4.tgz#3fcf849df12470d48c7b18485c77d6e547be4929" + integrity sha512-qf+JMVIRbzGzMk+VOyX2Nouih+9VGdNhLhit5Wv3m7ZD/o581x30272P6En8C9x+xwFW0o3GIkr9uLvWN8yvKA== JSONStream@^1.0.4: version "1.3.5" @@ -2440,29 +2160,11 @@ JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" @@ -2473,7 +2175,7 @@ acorn@^7.1.1: resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0: +acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0: version "8.8.0" resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -2483,12 +2185,10 @@ add-stream@^1.0.0: resolved "https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== -agent-base@6: - version "6.0.2" - resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" +adler-32@~1.3.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2" + integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A== aggregate-error@^3.0.0: version "3.1.0" @@ -2498,7 +2198,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.6: version "6.12.6" resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2508,7 +2208,7 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1, ajv@^8.11.0, ajv@^8.6.0: +ajv@^8.0.1, ajv@^8.6.0: version "8.11.0" resolved "https://registry.npmmirror.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -2518,11 +2218,6 @@ ajv@^8.0.1, ajv@^8.11.0, ajv@^8.6.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2540,6 +2235,11 @@ ansi-regex@^5.0.1: resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -2559,34 +2259,35 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== -ant-design-vue@2.2.8: - version "2.2.8" - resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-2.2.8.tgz#fa87cf6842d8ee9a0d8af393ff4099ecc4072f2b" - integrity sha512-3graq9/gCfJQs6hznrHV6sa9oDmk/D1H3Oo0vLdVpPS/I61fZPk8NEyNKCHpNA6fT2cx6xx9U3QS63uuyikg/Q== +ant-design-vue@^3.2.0: + version "3.2.11" + resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.11.tgz#034b2a2adef82a34440c10b90a5e02bcd25b376b" + integrity sha512-QKCAcOY5EJF0PepiVGA4X5PzUetYUvG5qALmA+2TON40pc2+brOEiVTwr3kjF9N+f7q4MpyiLPu4pIErwoajOQ== dependencies: - "@ant-design/icons-vue" "^6.0.0" + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-vue" "^6.1.0" "@babel/runtime" "^7.10.5" + "@ctrl/tinycolor" "^3.4.0" "@simonwep/pickr" "~1.8.0" array-tree-filter "^2.1.0" - async-validator "^3.3.0" + async-validator "^4.0.0" + dayjs "^1.10.5" dom-align "^1.12.1" dom-scroll-into-view "^2.0.0" lodash "^4.17.21" lodash-es "^4.17.15" - moment "^2.27.0" - omit.js "^2.0.0" resize-observer-polyfill "^1.5.1" scroll-into-view-if-needed "^2.2.25" shallow-equal "^1.0.0" vue-types "^3.0.0" warning "^4.0.0" -anymatch@^3.0.3, anymatch@~3.1.2: +anymatch@~3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -2611,13 +2312,6 @@ arg@^4.1.0: resolved "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -2668,16 +2362,6 @@ arrify@^1.0.1: resolved "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assert-never@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" - integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -2688,21 +2372,16 @@ astral-regex@^2.0.0: resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-validator@^3.3.0: - version "3.5.2" - resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" - integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ== +async-validator@^4.0.0: + version "4.2.5" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== async@^3.2.3: version "3.2.4" resolved "https://registry.npmmirror.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -2713,7 +2392,7 @@ atob@^2.1.2: resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.4.0: +autoprefixer@^10.4.4: version "10.4.8" resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== @@ -2725,33 +2404,19 @@ autoprefixer@^10.4.0: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -axios@^0.21.1: +axios@^0.21.4: version "0.21.4" resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== +axios@^0.26.0, axios@^0.26.1: + version "0.26.1" + resolved "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== dependencies: - follow-redirects "^1.14.4" - -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + follow-redirects "^1.14.8" babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" @@ -2760,27 +2425,6 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.2" resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" @@ -2805,39 +2449,6 @@ babel-plugin-polyfill-regenerator@^0.4.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.2" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -babel-walk@3.0.0-canary-5: - version "3.0.0-canary-5" - resolved "https://registry.npmmirror.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" - integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== - dependencies: - "@babel/types" "^7.9.6" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2866,6 +2477,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2995,11 +2611,6 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - browserslist@^4.20.2, browserslist@^4.21.3: version "4.21.3" resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" @@ -3010,20 +2621,6 @@ browserslist@^4.20.2, browserslist@^4.21.3: node-releases "^2.0.6" update-browserslist-db "^1.0.5" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmmirror.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -3065,6 +2662,13 @@ builtin-modules@^3.1.0, builtin-modules@^3.3.0: resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +builtins@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250" + integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w== + dependencies: + semver "^7.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3093,11 +2697,6 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -cachedir@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3146,17 +2745,12 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.0.0: version "6.3.0" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001370: - version "1.0.30001378" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" - integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== - -caniuse-lite@^1.0.30001373: +caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: version "1.0.30001380" resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz#6f2427ad8ebee1b400a38ca3560515756ba352bb" integrity sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg== @@ -3180,6 +2774,14 @@ caw@^2.0.0, caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" +cfb@~1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44" + integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA== + dependencies: + adler-32 "~1.3.0" + crc-32 "~1.2.0" + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -3226,11 +2828,6 @@ change-case@^4.1.2: snake-case "^3.0.4" tslib "^2.0.3" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - character-parser@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" @@ -3258,16 +2855,6 @@ chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3302,7 +2889,7 @@ cli-spinners@^2.5.0: resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -3310,6 +2897,14 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -3350,15 +2945,15 @@ clone@^2.1.1: resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== +codemirror@^5.65.3: + version "5.65.8" + resolved "https://registry.npmmirror.com/codemirror/-/codemirror-5.65.8.tgz#50f145ba7eb725091110c31f3a7c1fdef6bdc721" + integrity sha512-TNGkSkkoAsmZSf6W6g35LMVQJBHKasc2CKwhr/fTxSYun7cn6J+CbtyNjV/MYlFVkNTsqZoviegyCZimWhoMMA== -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== +codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== collection-visit@^1.0.0: version "1.0.0" @@ -3392,29 +2987,17 @@ color-name@~1.1.4: resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.9.2: +colord@^2.9.3: version "2.9.3" resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -colorette@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - colorette@^2.0.16: version "2.0.19" resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@*: +commander@*, commander@^9.0.0: version "9.4.0" resolved "https://registry.npmmirror.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== @@ -3429,31 +3012,11 @@ commander@^7.2.0: resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.2.0, commander@^8.3.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commitizen@^4.0.3, commitizen@^4.2.4: - version "4.2.5" - resolved "https://registry.npmmirror.com/commitizen/-/commitizen-4.2.5.tgz#48e5a5c28334c6e8ed845cc24fc9f072efd3961e" - integrity sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ== - dependencies: - cachedir "2.3.0" - cz-conventional-changelog "3.3.0" - dedent "0.7.0" - detect-indent "6.1.0" - find-node-modules "^2.1.2" - find-root "1.1.0" - fs-extra "9.1.0" - glob "7.2.3" - inquirer "8.2.4" - is-utf8 "^0.2.1" - lodash "4.17.21" - minimist "1.2.6" - strip-bom "4.0.0" - strip-json-comments "3.1.1" - common-tags@^1.8.0: version "1.8.2" resolved "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -3490,6 +3053,11 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + connect@^3.7.0: version "3.7.0" resolved "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -3500,11 +3068,21 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + console-stream@^0.1.1: version "0.1.1" resolved "https://registry.npmmirror.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" integrity sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ== +console@^0.7.2: + version "0.7.2" + resolved "https://registry.npmmirror.com/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0" + integrity sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g== + constant-case@^3.0.4: version "3.0.4" resolved "https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" @@ -3514,14 +3092,6 @@ constant-case@^3.0.4: tslib "^2.0.3" upper-case "^2.0.2" -constantinople@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" - integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== - dependencies: - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.1" - content-disposition@^0.5.2: version "0.5.4" resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -3544,7 +3114,7 @@ conventional-changelog-atom@^2.0.8: dependencies: q "^1.5.1" -conventional-changelog-cli@^2.1.1: +conventional-changelog-cli@^2.2.2: version "2.2.2" resolved "https://registry.npmmirror.com/conventional-changelog-cli/-/conventional-changelog-cli-2.2.2.tgz#9a7746cede92c6a8f27dc46692efaadfbed60daa" integrity sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA== @@ -3664,11 +3234,6 @@ conventional-changelog@^3.1.24: conventional-changelog-jshint "^2.0.9" conventional-changelog-preset-loader "^2.3.4" -conventional-commit-types@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" - integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== - conventional-commits-filter@^2.0.7: version "2.0.7" resolved "https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" @@ -3689,7 +3254,7 @@ conventional-commits-parser@^3.2.0, conventional-commits-parser@^3.2.2: split2 "^3.0.0" through2 "^4.0.0" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -3753,11 +3318,21 @@ cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" +crc-32@~1.2.0, crc-32@~1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cropperjs@^1.5.12: + version "1.5.12" + resolved "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.12.tgz#d9c0db2bfb8c0d769d51739e8f916bbc44e10f50" + integrity sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw== + cross-env@^7.0.3: version "7.0.3" resolved "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -3765,7 +3340,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@^3.0.6: +cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== @@ -3816,7 +3391,7 @@ css-functions-list@^3.1.0: resolved "https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== -css-select@^4.1.3: +css-select@^4.1.3, css-select@^4.2.1: version "4.3.0" resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== @@ -3852,23 +3427,6 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - csstype@^2.6.8: version "2.6.20" resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" @@ -3890,39 +3448,31 @@ cwebp-bin@^5.0.0: bin-wrapper "^4.0.1" logalot "^2.1.0" -cz-conventional-changelog@3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" - integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^3.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" +cz-git@^1.3.9: + version "1.3.11" + resolved "https://registry.npmmirror.com/cz-git/-/cz-git-1.3.11.tgz#fd386ca3b111d8585e22a1ea5678076b9aa897fa" + integrity sha512-YelXp5cbFCGslt60XQTpF+MQWoyTpkwPC5vMArIdI65bk9llgAl5vLQPtKBva+aQ781YctkeeKldlJ6Pizezbg== + +czg@^1.3.9: + version "1.3.11" + resolved "https://registry.npmmirror.com/czg/-/czg-1.3.11.tgz#a4de415478321ee83bb01da94ea6fee4e616c384" + integrity sha512-v7iZRG9Po8Vix8OfF7vqsaUxchc+uRD2iEOy0rN84Hr22rndzeekfRDff8Vl9wCZGSsBZDqn+eAp6HJt7nXgvg== dargs@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +dayjs@^1.10.5, dayjs@^1.11.1: + version "1.11.5" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -3930,13 +3480,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@^3.2.6: version "3.2.7" resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3944,6 +3487,13 @@ debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -3957,11 +3507,6 @@ decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.2.1: - version "10.4.0" - resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe" - integrity sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg== - decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -4027,12 +3572,7 @@ decompress@^4.0.0, decompress@^4.2.0: pify "^2.3.0" strip-dirs "^2.0.0" -dedent@0.7.0, dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -4084,30 +3624,15 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -detect-indent@6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff-match-patch@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== diff@^4.0.1: version "4.0.2" @@ -4133,11 +3658,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== - dom-align@^1.12.1: version "1.12.3" resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.3.tgz#a36d02531dae0eefa2abb0c4db6595250526f103" @@ -4184,13 +3704,6 @@ domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - domhandler@^2.3.0: version "2.4.2" resolved "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -4198,7 +3711,7 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: +domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== @@ -4253,15 +3766,15 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== +dotenv-expand@^8.0.2: + version "8.0.3" + resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e" + integrity sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg== -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.0: + version "16.0.1" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== download@^6.2.2: version "6.2.5" @@ -4303,7 +3816,12 @@ duplexer3@^0.1.4: resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== -echarts@^5.2.2: +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +echarts@^5.3.2: version "5.3.3" resolved "https://registry.npmmirror.com/echarts/-/echarts-5.3.3.tgz#df97b09c4c0e2ffcdfb44acf518d50c50e0b838e" integrity sha512-BRw2serInRwO5SIwRviZ6Xgm5Lb7irgz+sLiFMmy/HOaf4SQ+7oYqxKzRHAKp4xHQ05AuHw1xvoQWJjDQq/FGw== @@ -4328,24 +3846,16 @@ electron-to-chromium@^1.4.202: resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz#3e27bdd157cbaf19768141f2e0f0f45071e52338" integrity sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emmet@^2.3.0: - version "2.3.6" - resolved "https://registry.npmmirror.com/emmet/-/emmet-2.3.6.tgz#1d93c1ac03164da9ddf74864c1f341ed6ff6c336" - integrity sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A== - dependencies: - "@emmetio/abbreviation" "^2.2.3" - "@emmetio/css-abbreviation" "^2.1.4" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -4368,13 +3878,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - entities@^1.1.1: version "1.1.2" resolved "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -4385,11 +3888,6 @@ entities@^2.0.0: resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== - entities@^4.2.0, entities@^4.3.0: version "4.3.1" resolved "https://registry.npmmirror.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" @@ -4457,237 +3955,256 @@ esbuild-android-64@0.14.54: resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== -esbuild-android-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" - integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== +esbuild-android-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz#3c7b2f2a59017dab3f2c0356188a8dd9cbdc91c8" + integrity sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg== esbuild-android-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== -esbuild-darwin-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" - integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== +esbuild-android-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz#e301db818c5a67b786bf3bb7320e414ac0fcf193" + integrity sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg== esbuild-darwin-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== -esbuild-darwin-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" - integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== +esbuild-darwin-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz#11726de5d0bf5960b92421ef433e35871c091f8d" + integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== esbuild-darwin-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== -esbuild-freebsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" - integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== +esbuild-darwin-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz#ad89dafebb3613fd374f5a245bb0ce4132413997" + integrity sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg== esbuild-freebsd-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== -esbuild-freebsd-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" - integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== +esbuild-freebsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz#6bfb52b4a0d29c965aa833e04126e95173289c8a" + integrity sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA== esbuild-freebsd-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== -esbuild-linux-32@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" - integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== +esbuild-freebsd-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz#38a3fed8c6398072f9914856c7c3e3444f9ef4dd" + integrity sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w== esbuild-linux-32@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== -esbuild-linux-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" - integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== +esbuild-linux-32@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz#942dc70127f0c0a7ea91111baf2806e61fc81b32" + integrity sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ== esbuild-linux-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== -esbuild-linux-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" - integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== +esbuild-linux-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz#6d748564492d5daaa7e62420862c31ac3a44aed9" + integrity sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg== esbuild-linux-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== -esbuild-linux-arm@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" - integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== +esbuild-linux-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz#28cd899beb2d2b0a3870fd44f4526835089a318d" + integrity sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA== esbuild-linux-arm@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== -esbuild-linux-mips64le@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" - integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== +esbuild-linux-arm@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz#6441c256225564d8794fdef5b0a69bc1a43051b5" + integrity sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q== esbuild-linux-mips64le@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== -esbuild-linux-ppc64le@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" - integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== +esbuild-linux-mips64le@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz#d4927f817290eaffc062446896b2a553f0e11981" + integrity sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ== esbuild-linux-ppc64le@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== +esbuild-linux-ppc64le@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz#b6d660dc6d5295f89ac51c675f1a2f639e2fb474" + integrity sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw== + esbuild-linux-riscv64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== +esbuild-linux-riscv64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz#2801bf18414dc3d3ad58d1ea83084f00d9d84896" + integrity sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA== + esbuild-linux-s390x@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== -esbuild-netbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" - integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== +esbuild-linux-s390x@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz#12a634ae6d3384cacc2b8f4201047deafe596eae" + integrity sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ== esbuild-netbsd-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== -esbuild-node-loader@^0.4.2: - version "0.4.3" - resolved "https://registry.npmmirror.com/esbuild-node-loader/-/esbuild-node-loader-0.4.3.tgz#41a1b4559b04dc0bf554e4a9630daf9759d617d3" - integrity sha512-Jzs+nTsq7z4GqUTwlh8guP03EYTAhoB9r+rwb3JpVcNVG1/2fNE8Tb40syJ2nLY2yam+lZjsoh7FYd+2dGjbjg== - dependencies: - esbuild "^0.13.3" +esbuild-netbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz#951bbf87600512dfcfbe3b8d9d117d684d26c1b8" + integrity sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w== -esbuild-openbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" - integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== +esbuild-node-loader@^0.6.5: + version "0.6.5" + resolved "https://registry.npmmirror.com/esbuild-node-loader/-/esbuild-node-loader-0.6.5.tgz#c0aad436d01542150a8297b99dab71aa82add818" + integrity sha512-uPP+dllWm38cFvDysdocutN3lfe5pTIbddAHp1ENyLzpHYqE2r+3Wo+pfg9X3p8DFWwzIisft5YkeBIthIcixw== + dependencies: + esbuild ">=0.13.12" esbuild-openbsd-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== +esbuild-openbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz#26705b61961d525d79a772232e8b8f211fdbb035" + integrity sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA== + esbuild-plugin-alias@^0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.1.2.tgz#1232fbde807c0c8ad44c44ec859819eb492e12a8" integrity sha512-WsX0OJy8IGOsGZV+4oHEU5B6XQUpxOsZN1iSoYf9COTDbY7WXcOwd1oCLYNWUIWCExyGXSghIGq2k7sXBldxwQ== -esbuild-register@^3.0.0: +esbuild-register@^3.3.2: version "3.3.3" resolved "https://registry.npmmirror.com/esbuild-register/-/esbuild-register-3.3.3.tgz#5bd80025c80caf77e6484ced5cc77233b1d39688" integrity sha512-eFHOkutgIMJY5gc8LUp/7c+LLlDqzNi9T6AwCZ2WKKl3HmT+5ef3ZRyPPxDOynInML0fgaC50yszPKfPnjC0NQ== -esbuild-sunos-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" - integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== - esbuild-sunos-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== -esbuild-windows-32@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" - integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== +esbuild-sunos-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz#d794da1ae60e6e2f6194c44d7b3c66bf66c7a141" + integrity sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA== esbuild-windows-32@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== -esbuild-windows-64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" - integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== +esbuild-windows-32@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz#0670326903f421424be86bc03b7f7b3ff86a9db7" + integrity sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg== esbuild-windows-64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== -esbuild-windows-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" - integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== +esbuild-windows-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz#64f32acb7341f3f0a4d10e8ff1998c2d1ebfc0a9" + integrity sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw== esbuild-windows-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== +esbuild-windows-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz#4fe7f333ce22a922906b10233c62171673a3854b" + integrity sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA== + esbuild@0.11.3: version "0.11.3" resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.11.3.tgz#b57165b907be4ffba651f6450538ce8d8c1d5eb0" integrity sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw== +esbuild@>=0.13.0, esbuild@>=0.13.12: + version "0.15.5" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.15.5.tgz#5effd05666f621d4ff2fe2c76a67c198292193ff" + integrity sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg== + optionalDependencies: + "@esbuild/linux-loong64" "0.15.5" + esbuild-android-64 "0.15.5" + esbuild-android-arm64 "0.15.5" + esbuild-darwin-64 "0.15.5" + esbuild-darwin-arm64 "0.15.5" + esbuild-freebsd-64 "0.15.5" + esbuild-freebsd-arm64 "0.15.5" + esbuild-linux-32 "0.15.5" + esbuild-linux-64 "0.15.5" + esbuild-linux-arm "0.15.5" + esbuild-linux-arm64 "0.15.5" + esbuild-linux-mips64le "0.15.5" + esbuild-linux-ppc64le "0.15.5" + esbuild-linux-riscv64 "0.15.5" + esbuild-linux-s390x "0.15.5" + esbuild-netbsd-64 "0.15.5" + esbuild-openbsd-64 "0.15.5" + esbuild-sunos-64 "0.15.5" + esbuild-windows-32 "0.15.5" + esbuild-windows-64 "0.15.5" + esbuild-windows-arm64 "0.15.5" + esbuild@^0.11.23: version "0.11.23" resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== -esbuild@^0.13.2, esbuild@^0.13.3: - version "0.13.15" - resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" - integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== - optionalDependencies: - esbuild-android-arm64 "0.13.15" - esbuild-darwin-64 "0.13.15" - esbuild-darwin-arm64 "0.13.15" - esbuild-freebsd-64 "0.13.15" - esbuild-freebsd-arm64 "0.13.15" - esbuild-linux-32 "0.13.15" - esbuild-linux-64 "0.13.15" - esbuild-linux-arm "0.13.15" - esbuild-linux-arm64 "0.13.15" - esbuild-linux-mips64le "0.13.15" - esbuild-linux-ppc64le "0.13.15" - esbuild-netbsd-64 "0.13.15" - esbuild-openbsd-64 "0.13.15" - esbuild-sunos-64 "0.13.15" - esbuild-windows-32 "0.13.15" - esbuild-windows-64 "0.13.15" - esbuild-windows-arm64 "0.13.15" - -esbuild@^0.14.27: +esbuild@^0.14.14, esbuild@^0.14.27, esbuild@^0.14.47: version "0.14.54" resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== @@ -4729,45 +4246,16 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^8.3.0: +eslint-config-prettier@^8.5.0: version "8.5.0" resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== -eslint-define-config@^1.1.2: - version "1.6.0" - resolved "https://registry.npmmirror.com/eslint-define-config/-/eslint-define-config-1.6.0.tgz#fa28e0102b288bd6c74d535e8bb6b64122054b09" - integrity sha512-3qulYnwDRGYQHXHGdXBSRcfpI7m37ilBoERzTUYI8fBUoK/46yfUVNkGwM9cF/aoBrGgIDcBSz/HyPQJTHI/+w== - -eslint-plugin-jest@^25.2.2: - version "25.7.0" - resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" - integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== - dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" - eslint-plugin-prettier@^4.0.0: version "4.2.1" resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" @@ -4775,7 +4263,7 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-vue@^8.0.3: +eslint-plugin-vue@^8.6.0: version "8.7.1" resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz#f13c53547a0c9d64588a675cc5ecc6ccaf63703f" integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg== @@ -4820,7 +4308,7 @@ eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.1.0: +eslint@^8.13.0: version "8.22.0" resolved "https://registry.npmmirror.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== @@ -4865,15 +4353,16 @@ eslint@^8.1.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -esno@^0.10.1: - version "0.10.1" - resolved "https://registry.npmmirror.com/esno/-/esno-0.10.1.tgz#28f9adb30fdcc5960475d034a4f22311d334d6cd" - integrity sha512-wsXUWZxI0O59bvOjggWOGDd6VSwPxG+37Np8aUI1LwORIONN3L2nOOJHT7jZ3xAGkfq/J3YcnZsx+Mmw6BQFmQ== +esno@^0.14.1: + version "0.14.1" + resolved "https://registry.npmmirror.com/esno/-/esno-0.14.1.tgz#b7557b3c70eda5ae0c3f0daa07739b8337526610" + integrity sha512-yDFYw6dGUjCT1qKsdG7WOc/RzIh/qwxUEVZ+ohCltaxBxEFMNqeqbQL9xjRl6Yvdwrfc5OCjUA9JbFmuu/8BKg== dependencies: cross-spawn "^7.0.3" - esbuild "^0.13.3" - esbuild-node-loader "^0.4.2" - esbuild-register "^3.0.0" + esbuild ">=0.13.0" + esbuild-node-loader "^0.6.5" + esbuild-register "^3.3.2" + import-meta-resolve "^1.1.1" espree@^9.0.0, espree@^9.3.2, espree@^9.3.3: version "9.3.3" @@ -4884,11 +4373,6 @@ espree@^9.0.0, espree@^9.3.2, espree@^9.3.3: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esquery@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" @@ -5007,11 +4491,6 @@ executable@^4.1.0: dependencies: pify "^2.2.0" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -5025,23 +4504,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== - dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - ext-list@^2.0.0: version "2.2.2" resolved "https://registry.npmmirror.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" @@ -5105,7 +4567,7 @@ fast-diff@^1.1.2: resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -5116,12 +4578,12 @@ fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.7, fast-gl merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -5145,13 +4607,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -5264,21 +4719,8 @@ finalhandler@1.1.2: escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-node-modules@^2.1.2: - version "2.1.3" - resolved "https://registry.npmmirror.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" - integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== - dependencies: - findup-sync "^4.0.0" - merge "^2.1.1" - -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + statuses "~1.5.0" + unpipe "~1.0.0" find-up@^1.0.0: version "1.1.2" @@ -5295,7 +4737,7 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5318,16 +4760,6 @@ find-versions@^3.0.0: dependencies: semver-regex "^2.0.0" -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -5341,7 +4773,7 @@ flatted@^3.1.0: resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.14.0, follow-redirects@^1.14.4: +follow-redirects@^1.14.0, follow-redirects@^1.14.8: version "1.15.1" resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== @@ -5351,14 +4783,10 @@ for-in@^1.0.2: resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" +frac@~1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== fraction.js@^4.2.0: version "4.2.0" @@ -5385,21 +4813,21 @@ fs-constants@^1.0.0: resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.1.0, fs-extra@^9.0.1, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^10.0.0, fs-extra@^10.0.1, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: + at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" @@ -5409,7 +4837,7 @@ fs.realpath@^1.0.0: resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -5463,11 +4891,6 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" @@ -5535,14 +4958,15 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== -gifsicle@^5.0.0: - version "5.2.1" - resolved "https://registry.npmmirror.com/gifsicle/-/gifsicle-5.2.1.tgz#efadab266a493ef0b4178e34597493349937369e" - integrity sha512-9ewIQQCAnSmkU2DhuWafd1DdsgzAkKqIWnY+023xBLSiK9Az2TDUozWQW+SyRQgFMclbe6RQldUk/49TRO3Aqw== +gifsicle@5.2.0, gifsicle@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/gifsicle/-/gifsicle-5.2.0.tgz#b06b25ed7530f033f6ed2c545d6f9b546cc182fb" + integrity sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw== dependencies: bin-build "^3.0.0" bin-wrapper "^4.0.0" execa "^5.0.0" + logalot "^2.0.0" git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: version "2.0.11" @@ -5592,7 +5016,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@7.2.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5611,15 +5035,6 @@ global-dirs@^0.1.1: dependencies: ini "^1.3.4" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - global-modules@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -5627,17 +5042,6 @@ global-modules@^2.0.0: dependencies: global-prefix "^3.0.0" -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -5733,7 +5137,7 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.9: +graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.10" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -5861,7 +5265,7 @@ hash-sum@^2.0.0: resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== -he@^1.1.1, he@^1.2.0: +he@1.2.0, he@^1.1.1, he@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -5874,13 +5278,6 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -5893,18 +5290,6 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - html-minifier-terser@^6.1.0: version "6.1.0" resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" @@ -5935,16 +5320,6 @@ htmlparser2@^3.8.3: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^7.1.2: - version "7.2.0" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" - integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.2" - domutils "^2.8.0" - entities "^3.0.1" - htmlparser2@^8.0.0: version "8.0.1" resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" @@ -5960,23 +5335,6 @@ http-cache-semantics@3.8.1: resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -5992,7 +5350,7 @@ husky@^7.0.4: resolved "https://registry.npmmirror.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6011,6 +5369,11 @@ idb@^7.0.1: resolved "https://registry.npmmirror.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892" integrity sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg== +ids@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/ids/-/ids-1.0.0.tgz#df67f2d37b81d7c2effc87e03d17ebff95a58c05" + integrity sha512-Zvtq1xUto4LttpstyOlFum8lKx+i1OmRfg+6A9drFS9iSZsDPMHG4Sof/qwNR4kCU7jBeWFPrY2ocHxiz7cCRw== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -6116,13 +5479,12 @@ import-lazy@^4.0.0: resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== +import-meta-resolve@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz#244fd542fd1fae73550d4f8b3cde3bba1d7b2b18" + integrity sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A== dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" + builtins "^4.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -6159,7 +5521,7 @@ ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@8.2.4, inquirer@^8.2.0: +inquirer@^8.2.2: version "8.2.4" resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== @@ -6197,6 +5559,11 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" +intro.js@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/intro.js/-/intro.js-5.1.0.tgz#ffa804cd03f464198aa9be505afdd7fb814def3a" + integrity sha512-zwWl/duTh00eeNcZRU4o4/xxloNYPFKs4n4lMRDNx59jZr+qRI0jSOnzqYMOuVftD4beGrmxBHz4k8qp9/dCMA== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6348,10 +5715,10 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-gif@^3.0.0: version "3.0.0" @@ -6453,16 +5820,6 @@ is-png@^2.0.0: resolved "https://registry.npmmirror.com/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d" integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - is-regex@^1.0.3, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -6526,17 +5883,12 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== @@ -6553,7 +5905,7 @@ is-what@^3.14.1: resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -6587,48 +5939,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.npmmirror.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" @@ -6647,393 +5957,6 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== - dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== - dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - -jest-util@^27.0.0, jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== - dependencies: - "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" - -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== - dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -7043,24 +5966,6 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.3.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== - dependencies: - "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - jiti@^1.14.0: version "1.14.0" resolved "https://registry.npmmirror.com/jiti/-/jiti-1.14.0.tgz#5350fff532a4d891ca4bcd700c47c1f40e6ee326" @@ -7075,16 +5980,19 @@ jpegtran-bin@^5.0.0: bin-wrapper "^4.0.0" logalot "^2.0.0" +jpegtran-bin@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/jpegtran-bin/-/jpegtran-bin-6.0.1.tgz#9b86b8be0628c220cce40e7cb25d3541a8253459" + integrity sha512-WohhhHhqe22de7PU8hXs6Sr5d4BAvkrfA93NR5tGlHyPnFLgvEW/bH+q7fv65JgoiQDsd7SBwwQ/OGRBivU3Mw== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + js-base64@^2.1.9: version "2.6.4" resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-stringify@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7095,14 +6003,6 @@ js-tokens@^8.0.0: resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-8.0.0.tgz#5dbe2cdfa9afc93251d3a77bf18c3ad6fa8a4de4" integrity sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -7110,39 +6010,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -7193,11 +6060,6 @@ json-stringify-safe@^5.0.1: resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.2.0, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - json5@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -7205,15 +6067,10 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonc-parser@^2.3.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" - integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== - -jsonc-parser@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" - integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== +json5@^2.2.0, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonfile@^6.0.1: version "6.1.0" @@ -7234,14 +6091,6 @@ jsonpointer@^5.0.0: resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - junk@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" @@ -7278,11 +6127,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - known-css-properties@^0.25.0: version "0.25.0" resolved "https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.25.0.tgz#6ebc4d4b412f602e5cfbeb4086bd544e34c0a776" @@ -7323,50 +6167,47 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" +lilconfig@2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@11.2.6: - version "11.2.6" - resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" - integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== +lint-staged@12.3.7: + version "12.3.7" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-12.3.7.tgz#ad0e2014302f704f9cf2c0ebdb97ac63d0f17be0" + integrity sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ== dependencies: - cli-truncate "2.1.0" - colorette "^1.4.0" - commander "^8.2.0" - cosmiconfig "^7.0.1" - debug "^4.3.2" - enquirer "^2.3.6" + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^8.3.0" + debug "^4.3.3" execa "^5.1.1" - listr2 "^3.12.2" + lilconfig "2.0.4" + listr2 "^4.0.1" micromatch "^4.0.4" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "3.3.0" - supports-color "8.1.1" + object-inspect "^1.12.0" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.1" + yaml "^1.10.2" -listr2@^3.12.2: - version "3.14.0" - resolved "https://registry.npmmirror.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== +listr2@^4.0.1: + version "4.0.5" + resolved "https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== dependencies: cli-truncate "^2.1.0" colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" rfdc "^1.3.0" - rxjs "^7.5.1" + rxjs "^7.5.5" through "^2.3.8" wrap-ansi "^7.0.0" @@ -7432,26 +6273,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.get@^4: - version "4.4.2" - resolved "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.npmmirror.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -7467,7 +6293,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7503,11 +6329,6 @@ longest@^1.0.0: resolved "https://registry.npmmirror.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" - integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== - loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -7601,18 +6422,11 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1, make-error@^1.1.1: +make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7718,11 +6532,6 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - micromatch@3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz#5102d4eaf20b6997d6008e3acfe1c44a3fa815e2" @@ -7742,7 +6551,7 @@ micromatch@3.1.0: snapdragon "^0.8.1" to-regex "^3.0.1" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7750,18 +6559,11 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, mime-db@^1.28.0: +mime-db@^1.28.0: version "1.52.0" resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mime@^1.4.1: version "1.6.0" resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -7805,7 +6607,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.6, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.6" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -7830,10 +6632,10 @@ modify-values@^1.0.0: resolved "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment@^2.27.0, moment@^2.29.1: - version "2.29.4" - resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +mousetrap@^1.6.5: + version "1.6.5" + resolved "https://registry.npmmirror.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" + integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== mozjpeg@^7.0.0: version "7.1.1" @@ -7922,17 +6724,20 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== +node-html-parser@^5.3.3: + version "5.4.1" + resolved "https://registry.npmmirror.com/node-html-parser/-/node-html-parser-5.4.1.tgz#c9938b9521ef542c2374e4923078f8f2a365f50d" + integrity sha512-xy/O2wOEBJsIRLs4avwa1lVY7tIpXXOoHHUJLa0GvnoPPqMG1hgBVl1tNI3GHOwRktTVZy+Y6rjghk4B9/NLyg== + dependencies: + css-select "^4.2.1" + he "1.2.0" node-releases@^2.0.6: version "2.0.6" @@ -8027,11 +6832,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nwsapi@^2.2.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" - integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== - object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -8080,11 +6880,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -omit.js@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz#dd9b8436fab947a5f3ff214cb2538631e313ec2f" - integrity sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg== - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -8115,18 +6910,6 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -8335,7 +7118,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.0.0: version "5.2.0" resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -8350,16 +7133,6 @@ parse-node-version@^1.0.1: resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -8449,6 +7222,16 @@ path-type@^4.0.0: resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339" + integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw== + +pathe@^0.3.0: + version "0.3.5" + resolved "https://registry.npmmirror.com/pathe/-/pathe-0.3.5.tgz#87e5c1164ded1bebeb9dea5dab63563144062303" + integrity sha512-grU/QeYP0ChuE5kjU2/k8VtAeODzbernHlue0gTa27+ayGIu3wqYBIPGfP9r5xSqgCgDd4nWrjKXEfxMillByg== + pend@~1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -8459,7 +7242,7 @@ picocolors@^1.0.0: resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8469,6 +7252,11 @@ pidtree@^0.3.0: resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8484,12 +7272,12 @@ pify@^4.0.1: resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinia@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.0.tgz#6ac77af7a4ff2e2c87a5967b5aa2be8e04868f38" - integrity sha512-pqnQv1m7oEwYExGl//EtOn9rgFn7gtXECP/hZHy+WicmHXmWWkbsvpR+9z1xxrIgDOmVYuh1eYfRULJklzOKsQ== +pinia@2.0.12: + version "2.0.12" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.12.tgz#4c6f7f59cb41f56f20deee71c403e66d8d3c637d" + integrity sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew== dependencies: - "@vue/devtools-api" "^6.0.0-beta.19" + "@vue/devtools-api" "^6.1.0" vue-demi "*" pinkie-promise@^2.0.0: @@ -8504,25 +7292,6 @@ pinkie@^2.0.0: resolved "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - pngjs@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" @@ -8542,7 +7311,7 @@ posix-character-classes@^0.1.0: resolved "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== -postcss-html@^1.2.0: +postcss-html@^1.4.1: version "1.5.0" resolved "https://registry.npmmirror.com/postcss-html/-/postcss-html-1.5.0.tgz#57a43bc9e336f516ecc448a37d2e8c2290170a6f" integrity sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA== @@ -8552,10 +7321,10 @@ postcss-html@^1.2.0: postcss "^8.4.0" postcss-safe-parser "^6.0.0" -postcss-less@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-less/-/postcss-less-5.0.0.tgz#3fa361ed8e52a9c3e6e4fdb9bb95fd9032f3c62b" - integrity sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A== +postcss-less@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-less/-/postcss-less-6.0.0.tgz#463b34c60f53b648c237f569aeb2e09149d85af4" + integrity sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg== postcss-media-query-parser@^0.2.3: version "0.2.3" @@ -8605,7 +7374,7 @@ postcss@^5.2.17: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^8.1.10, postcss@^8.3.11, postcss@^8.4.0, postcss@^8.4.13, postcss@^8.4.16: +postcss@^8.1.10, postcss@^8.3.11, postcss@^8.4.0, postcss@^8.4.12, postcss@^8.4.13, postcss@^8.4.16: version "8.4.16" resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== @@ -8652,16 +7421,16 @@ posthtml@^0.9.2: posthtml-parser "^0.2.0" posthtml-render "^1.0.5" +preact@^10.4.8: + version "10.10.6" + resolved "https://registry.npmmirror.com/preact/-/preact-10.10.6.tgz#1fe62aecf93974b64e6a42e09ba1f00f93207d14" + integrity sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -8679,7 +7448,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.4.1: +prettier@^2.6.2: version "2.7.1" resolved "https://registry.npmmirror.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== @@ -8689,35 +7458,16 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^27.0.0, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" +print-js@^1.6.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/print-js/-/print-js-1.6.0.tgz#692b046cf31992b46afa6c6d8a9db1c69d431d1f" + integrity sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise@^7.0.1: - version "7.3.1" - resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - proto-list@~1.2.1: version "1.2.4" resolved "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -8733,50 +7483,11 @@ pseudomap@^1.0.2: resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pug-attrs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" - integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== - dependencies: - constantinople "^4.0.1" - js-stringify "^1.0.2" - pug-runtime "^3.0.0" - -pug-code-gen@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" - integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== - dependencies: - constantinople "^4.0.1" - doctypes "^1.1.0" - js-stringify "^1.0.2" - pug-attrs "^3.0.0" - pug-error "^2.0.0" - pug-runtime "^3.0.0" - void-elements "^3.1.0" - with "^7.0.0" - pug-error@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== -pug-filters@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" - integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== - dependencies: - constantinople "^4.0.1" - jstransformer "1.0.0" - pug-error "^2.0.0" - pug-walk "^2.0.0" - resolve "^1.15.1" - pug-lexer@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" @@ -8786,22 +7497,6 @@ pug-lexer@^5.0.1: is-expression "^4.0.0" pug-error "^2.0.0" -pug-linker@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" - integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== - dependencies: - pug-error "^2.0.0" - pug-walk "^2.0.0" - -pug-load@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" - integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== - dependencies: - object-assign "^4.1.1" - pug-walk "^2.0.0" - pug-parser@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" @@ -8810,37 +7505,6 @@ pug-parser@^6.0.0: pug-error "^2.0.0" token-stream "1.0.0" -pug-runtime@^3.0.0, pug-runtime@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" - integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== - -pug-strip-comments@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" - integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== - dependencies: - pug-error "^2.0.0" - -pug-walk@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" - integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== - -pug@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" - integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== - dependencies: - pug-code-gen "^3.0.2" - pug-filters "^4.0.0" - pug-lexer "^5.0.1" - pug-linker "^4.0.0" - pug-load "^3.0.0" - pug-parser "^6.0.0" - pug-runtime "^3.0.1" - pug-strip-comments "^2.0.0" - pump@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -8849,7 +7513,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -8859,7 +7523,7 @@ q@^1.5.1: resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qrcode@^1.4.4: +qrcode@^1.5.0: version "1.5.1" resolved "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.1.tgz#0103f97317409f7bc91772ef30793a54cd59f0cb" integrity sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg== @@ -8869,7 +7533,7 @@ qrcode@^1.4.4: pngjs "^5.0.0" yargs "^15.3.1" -qs@^6.10.1: +qs@^6.10.3: version "6.11.0" resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -8910,11 +7574,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9110,11 +7769,6 @@ replace-ext@^1.0.0: resolved "https://registry.npmmirror.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== -request-light@^0.5.4: - version "0.5.8" - resolved "https://registry.npmmirror.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27" - integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -9135,21 +7789,6 @@ resize-observer-polyfill@^1.5.1: resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -9172,12 +7811,7 @@ resolve-url@^0.2.1: resolved "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -9223,20 +7857,20 @@ rimraf@^2.5.4: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rollup-plugin-purge-icons@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.7.0.tgz#4419b810d5d75f1bba3af72a238e70b4a675f03c" - integrity sha512-zAff7SrjC2nA7TCm6gaOclh1cZ2IBupX1tnebn+sfvcvrezu+avS7k0BhhAC2pAtfhdOvD6G/2a+kkkm6hvpiw== +rollup-plugin-purge-icons@^0.8.1: + version "0.8.1" + resolved "https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.8.1.tgz#ae371c92e162a1786816f26437a95931f8398698" + integrity sha512-7ktMV+gWtXAdOIShE8EtTcnpGhozi5H2hKk1MQVGt+7FmlLkjR+XKu1Nyzjocwd6xJvKube2Lh+SfcJ8FYYySw== dependencies: - "@purge-icons/core" "^0.7.0" - "@purge-icons/generated" "^0.7.0" + "@purge-icons/core" "^0.8.0" + "@purge-icons/generated" "^0.8.1" rollup-plugin-terser@^7.0.0: version "7.0.2" @@ -9248,17 +7882,17 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup-plugin-visualizer@^5.5.2: - version "5.7.1" - resolved "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.7.1.tgz#7af30b02e6579155368a90b37b6ee9137b391d06" - integrity sha512-E/IgOMnmXKlc6ICyf53ok1b6DxPeNVUs3R0kYYPuDpGfofT4bkiG+KtSMlGjMACFmfwbbqTVDZBIF7sMZVKJbA== +rollup-plugin-visualizer@^5.6.0: + version "5.8.0" + resolved "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.8.0.tgz#32f2fe23d4299e977c06c59c07255590354e3445" + integrity sha512-pY6j/7qHz5I9rB7d/bQoA5gX+2FbV3MBG055wrsFxDn550bgl0FNViRj6wDHh85PMswv+JVdZjhnMBzz/hdAHA== dependencies: nanoid "^3.3.4" open "^8.4.0" source-map "^0.7.3" yargs "^17.5.1" -"rollup@>=2.59.0 <2.78.0", rollup@^2.43.1, rollup@^2.56.3, rollup@^2.60.2: +"rollup@>=2.59.0 <2.78.0", "rollup@>=2.75.6 <2.77.0 || ~2.77.0", rollup@^2.43.1, rollup@^2.56.3, rollup@^2.60.2, rollup@^2.70.2: version "2.78.1" resolved "https://registry.npmmirror.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== @@ -9277,7 +7911,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.1, rxjs@^7.5.5: +rxjs@^7.5.5: version "7.5.6" resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== @@ -9311,13 +7945,6 @@ sax@^1.2.4: resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - scroll-into-view-if-needed@^2.2.25: version "2.2.29" resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885" @@ -9332,11 +7959,6 @@ seek-bzip@^1.0.5: dependencies: commander "^2.8.1" -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== - semver-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" @@ -9359,14 +7981,7 @@ semver@7.0.0: resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.5: - version "7.3.5" - resolved "https://registry.npmmirror.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@7.3.7, semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -9443,6 +8058,13 @@ shell-quote@^1.6.1: resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +showdown@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" + integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== + dependencies: + commander "^9.0.0" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -9457,11 +8079,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -9485,6 +8102,14 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -9544,7 +8169,7 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -sortablejs@^1.14.0: +sortablejs@^1.15.0: version "1.15.0" resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== @@ -9565,7 +8190,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -9578,7 +8203,7 @@ source-map-url@^0.4.0: resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -9652,11 +8277,6 @@ split@^1.0.0: dependencies: through "2" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - squeak@^1.0.0: version "1.3.0" resolved "https://registry.npmmirror.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3" @@ -9666,18 +8286,18 @@ squeak@^1.0.0: console-stream "^0.1.1" lpad-align "^1.0.1" +ssf@~0.11.2: + version "0.11.2" + resolved "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + dependencies: + frac "~1.1.2" + stable@^0.1.8: version "0.1.8" resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -9696,19 +8316,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -string-argv@0.3.1: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9718,6 +8330,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.6: version "4.0.7" resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" @@ -9773,7 +8394,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@3.3.0, stringify-object@^3.3.0: +stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -9796,10 +8417,12 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@4.0.0, strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" strip-bom@^2.0.0: version "2.0.0" @@ -9849,7 +8472,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -9871,7 +8494,7 @@ style-search@^0.1.0: resolved "https://registry.npmmirror.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== -stylelint-config-html@^1.0.0: +stylelint-config-html@>=1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66" integrity sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ== @@ -9881,17 +8504,31 @@ stylelint-config-prettier@^9.0.3: resolved "https://registry.npmmirror.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz#0dccebeff359dcc393c9229184408b08964d561c" integrity sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg== -stylelint-config-recommended@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz#fd2523a322836005ad9bf473d3e5534719c09f9d" - integrity sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw== +stylelint-config-recommended-vue@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.4.0.tgz#0a182da17dc9e846e4bec65a7676ccf882b35964" + integrity sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q== + dependencies: + semver "^7.3.5" + stylelint-config-html ">=1.0.0" + stylelint-config-recommended ">=6.0.0" + +stylelint-config-recommended@>=6.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz#1c9e07536a8cd875405f8ecef7314916d94e7e40" + integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== + +stylelint-config-recommended@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz#7497372ae83ab7a6fffc18d7d7b424c6480ae15e" + integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q== -stylelint-config-standard@^23.0.0: - version "23.0.0" - resolved "https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-23.0.0.tgz#4ad58c74804c544cb4d30667c21a30ab14d1c17d" - integrity sha512-8PDlk+nWuc1T66nVaODTdVodN0pjuE5TBlopi39Lt9EM36YJsRhqttMyUhnS78oc/59Q6n8iw2GJB4QcoFqtRg== +stylelint-config-standard@^25.0.0: + version "25.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz#2c916984e6655d40d6e8748b19baa8603b680bff" + integrity sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA== dependencies: - stylelint-config-recommended "^6.0.0" + stylelint-config-recommended "^7.0.0" stylelint-order@^5.0.0: version "5.0.0" @@ -9901,14 +8538,14 @@ stylelint-order@^5.0.0: postcss "^8.3.11" postcss-sorting "^7.0.1" -stylelint@^14.0.1: - version "14.10.0" - resolved "https://registry.npmmirror.com/stylelint/-/stylelint-14.10.0.tgz#c588f5cd47cd214cf1acee5bc165961b6a3ad836" - integrity sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ== +stylelint@^14.7.1: + version "14.11.0" + resolved "https://registry.npmmirror.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc" + integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" - colord "^2.9.2" + colord "^2.9.3" cosmiconfig "^7.0.1" css-functions-list "^3.1.0" debug "^4.3.4" @@ -9943,14 +8580,7 @@ stylelint@^14.0.1: svg-tags "^1.0.0" table "^6.8.0" v8-compile-cache "^2.3.0" - write-file-atomic "^4.0.1" - -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" + write-file-atomic "^4.0.2" supports-color@^2.0.0: version "2.0.0" @@ -9978,7 +8608,12 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: +supports-color@^9.2.1: + version "9.2.2" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" + integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== + +supports-hyperlinks@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== @@ -10028,11 +8663,6 @@ svgo@^2.1.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - systemjs@^6.12.1: version "6.12.3" resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.12.3.tgz#9c4b614dea4445523d22cda0a7188714f0c4f64c" @@ -10098,14 +8728,6 @@ tempy@^0.6.0: type-fest "^0.16.0" unique-string "^2.0.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - terser@^5.0.0, terser@^5.10.0: version "5.14.2" resolved "https://registry.npmmirror.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" @@ -10116,15 +8738,6 @@ terser@^5.0.0, terser@^5.10.0: commander "^2.20.0" source-map-support "~0.5.20" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" @@ -10135,11 +8748,6 @@ text-table@^0.2.0: resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - through2@^2.0.0: version "2.0.5" resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -10170,6 +8778,11 @@ tinycolor2@^1.4.2: resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +tinymce@^5.10.3: + version "5.10.5" + resolved "https://registry.npmmirror.com/tinymce/-/tinymce-5.10.5.tgz#02aef6a67e915f1559e51fa8fb007270d9666778" + integrity sha512-nFKtLhmoRtExBxUfv06JlkbQWux5D+d115vxSRAqUmccZdrtpFvOIYwZmikvulLdM9pfEpvO0B+RQ2qFV/+R7w== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10177,11 +8790,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" @@ -10229,15 +8837,6 @@ token-stream@1.0.0: resolved "https://registry.npmmirror.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -10245,13 +8844,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -10279,21 +8871,7 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -ts-jest@^27.0.7: - version "27.1.5" - resolved "https://registry.npmmirror.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" - integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-node@^10.4.0, ts-node@^10.8.1: +ts-node@^10.7.0, ts-node@^10.8.1: version "10.9.1" resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -10312,18 +8890,6 @@ ts-node@^10.4.0, ts-node@^10.8.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -ts-node@^9: - version "9.1.1" - resolved "https://registry.npmmirror.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - tslib@2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" @@ -10334,7 +8900,7 @@ tslib@^1.8.1: resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: version "2.4.0" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -10360,18 +8926,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.11.0: version "0.11.0" resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" @@ -10407,14 +8961,7 @@ type-fest@^0.8.1: resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.4.3, typescript@^4.4.4, typescript@^4.6.4: +typescript@^4.4.3, typescript@^4.6.3: version "4.7.4" resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== @@ -10482,10 +9029,10 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^2.0.0: version "2.0.0" @@ -10598,15 +9145,6 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -10620,44 +9158,58 @@ vary@^1: resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vite-plugin-compression@^0.3.5: - version "0.3.6" - resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.3.6.tgz#85e3ce5047ae6747bc3952177177a852fac901be" - integrity sha512-aSskQCJsP3VQ8PsnY+vO7UfD5qoFMOEuzg0PG2E9Zqyx+ARmc3wr9KCgOFraZOFW1Y4UAa5BR0SMTjoxHRMJoQ== +vditor@^3.8.13: + version "3.8.17" + resolved "https://registry.npmmirror.com/vditor/-/vditor-3.8.17.tgz#13925dae3c70635bf70f28659915b5c523c00b29" + integrity sha512-itaVyNwC/+xjOsTaDZKGy4BGhEcmZWkCDKaMyIH7rcbojw2H29Vg/FV1MNPcNyjZ6mvmcNlS6oZT1drDnAVFMQ== + dependencies: + diff-match-patch "^1.0.5" + +vite-plugin-compression@^0.5.1: + version "0.5.1" + resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz#a75b0d8f48357ebb377b65016da9f20885ef39b6" + integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg== dependencies: chalk "^4.1.2" - debug "^4.3.2" + debug "^4.3.3" fs-extra "^10.0.0" -vite-plugin-html@^2.1.1: - version "2.1.2" - resolved "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-2.1.2.tgz#aaf846a806b37e4884870e5ce1918166e9ce9125" - integrity sha512-7HXkL6n7M2qDEaUV4Vnz8yM2glW4gV36d5HSBIM5gOoAG1PkuQb4Vv9FTPgPiQxq4sPRf/6IgABX0MeLVW+CyQ== +vite-plugin-html@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz#0d4df9900642a321a139f1c25c05195ba9d0ec79" + integrity sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ== dependencies: - "@rollup/pluginutils" "^4.1.2" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" + "@rollup/pluginutils" "^4.2.0" + colorette "^2.0.16" + connect-history-api-fallback "^1.6.0" + consola "^2.15.3" + dotenv "^16.0.0" + dotenv-expand "^8.0.2" ejs "^3.1.6" - fs-extra "^10.0.0" + fast-glob "^3.2.11" + fs-extra "^10.0.1" html-minifier-terser "^6.1.0" + node-html-parser "^5.3.3" + pathe "^0.2.0" -vite-plugin-imagemin@^0.4.6: - version "0.4.6" - resolved "https://registry.npmmirror.com/vite-plugin-imagemin/-/vite-plugin-imagemin-0.4.6.tgz#f551dacb0529ca327a80d2f5830b5cc0ccb5677a" - integrity sha512-4dE7E77MM2ywFW5KOM6PTwgFZCh+OqlBufhpH07k81a4Ao2/Orvrido7JhLE3TWbWY2K1ZkiZ1E4buIPWtHQRA== +vite-plugin-imagemin@^0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/vite-plugin-imagemin/-/vite-plugin-imagemin-0.6.1.tgz#d4e538beaa6265fb0df17396666ee90483e953bc" + integrity sha512-cP7LDn8euPrji7WYtDoNQpJEB9nkMxJHm/A+QZnvMrrCSuyo/clpMy/T1v7suDXPBavsDiDdFdVQB5p7VGD2cg== dependencies: "@types/imagemin" "^7.0.1" "@types/imagemin-gifsicle" "^7.0.1" "@types/imagemin-jpegtran" "^5.0.1" "@types/imagemin-mozjpeg" "^8.0.1" "@types/imagemin-optipng" "^5.2.1" - "@types/imagemin-svgo" "^9.0.1" - "@types/imagemin-webp" "^5.1.2" - "@types/svgo" "^2.4.2" + "@types/imagemin-svgo" "^10.0.0" + "@types/imagemin-webp" "^7.0.0" + "@types/svgo" "^2.6.1" chalk "^4.1.2" - debug "^4.3.2" - esbuild "^0.13.2" + debug "^4.3.3" + esbuild "^0.14.14" fs-extra "^10.0.0" + gifsicle "5.2.0" imagemin "^7.0.1" imagemin-gifsicle "^7.0.0" imagemin-jpegtran "^7.0.0" @@ -10666,6 +9218,19 @@ vite-plugin-imagemin@^0.4.6: imagemin-pngquant "^9.0.2" imagemin-svgo "^9.0.0" imagemin-webp "^6.0.0" + jpegtran-bin "^6.0.1" + pathe "^0.2.0" + +vite-plugin-mkcert@^1.6.0: + version "1.9.0" + resolved "https://registry.npmmirror.com/vite-plugin-mkcert/-/vite-plugin-mkcert-1.9.0.tgz#894fadd4d932fb1a8face1b73009982428cfba3d" + integrity sha512-lKIOVJvbt1ijAMeF31TYGwEzH8iqK+Q8BiInpQRcAW543y8HYttZTRVGDAFqVaej6iE5o7XAisZ1aCg+q5tOfA== + dependencies: + "@octokit/rest" "^19.0.3" + axios "^0.21.4" + debug "^4.3.4" + picocolors "^1.0.0" + vite "^3.0.0" vite-plugin-mock@^2.9.6: version "2.9.6" @@ -10682,16 +9247,16 @@ vite-plugin-mock@^2.9.6: fast-glob "^3.2.7" path-to-regexp "^6.2.0" -vite-plugin-purge-icons@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.7.0.tgz#c460037438fd71372153360ccb9e7d97b030fb58" - integrity sha512-oGZUKFAL4waIZIeiCPT5KZvGbBA500AO/03oxW+ODTKUMq+0jbh9s+T8NPzfJQFC1jtE7eUb2ium82IP/gxZjA== +vite-plugin-purge-icons@^0.8.1: + version "0.8.2" + resolved "https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.8.2.tgz#bdbbbad34f82e2cf239afc0f3aa8c6bd175f48f6" + integrity sha512-rW3RcNKj7QY3M7wcnwYVc3Ig+WwSQQ/Z67v+xdtk/8MA+ON05A3zc3qGaPdi6+8BUKYDpqvviKYiuLgRjleUOQ== dependencies: - "@purge-icons/core" "^0.7.0" - "@purge-icons/generated" "^0.7.0" - rollup-plugin-purge-icons "^0.7.0" + "@purge-icons/core" "^0.8.0" + "@purge-icons/generated" "^0.8.1" + rollup-plugin-purge-icons "^0.8.1" -vite-plugin-pwa@^0.11.3: +vite-plugin-pwa@^0.11.13: version "0.11.13" resolved "https://registry.npmmirror.com/vite-plugin-pwa/-/vite-plugin-pwa-0.11.13.tgz#54ed80580b7d3e61aadcf4325fe9bc6f7ffce5db" integrity sha512-Ssj14m3TRVLfkFEAWSMcFE2d1cSdEZyrVTzfY2lSL+umHYvcIFHVDAY143sygtBCb44OPczsAOmWwBTxwOvh7g== @@ -10703,32 +9268,34 @@ vite-plugin-pwa@^0.11.3: workbox-build "^6.4.2" workbox-window "^6.4.2" -vite-plugin-style-import@^1.3.0: - version "1.4.1" - resolved "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-1.4.1.tgz#47a66920cce5484640f2faacd73190aac0b91b94" - integrity sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ== +vite-plugin-style-import@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz#edafd9fbb09e8bb5ae67dee8f601afbe386a9969" + integrity sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA== dependencies: "@rollup/pluginutils" "^4.1.2" change-case "^4.1.2" - debug "^4.3.3" + console "^0.7.2" es-module-lexer "^0.9.3" fs-extra "^10.0.0" magic-string "^0.25.7" + pathe "^0.2.0" -vite-plugin-svg-icons@^1.0.5: - version "1.1.0" - resolved "https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-1.1.0.tgz#a02dd241c6697565a016ac6197bb1ff2ec1a8c98" - integrity sha512-dmpr7Wq8vQN6ajBrVTrBxy8wJjQfcP30i73q+40uAZc8p7EwphBNZ+bVTI0enFaCrsITI8y0Ruo/mN/SaJQ6Hw== +vite-plugin-svg-icons@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz#7269a0962593509f371b9e2bb344d469db2c6df9" + integrity sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA== dependencies: - "@types/svgo" "^2.6.0" + "@types/svgo" "^2.6.1" cors "^2.8.5" debug "^4.3.3" etag "^1.8.1" fs-extra "^10.0.0" + pathe "^0.2.0" svg-baker "1.7.0" svgo "^2.8.0" -vite-plugin-theme@^0.8.1: +vite-plugin-theme@^0.8.6: version "0.8.6" resolved "https://registry.npmmirror.com/vite-plugin-theme/-/vite-plugin-theme-0.8.6.tgz#31d373ccd44d9160d22dd8f58ac69b237073eefc" integrity sha512-GyoP9JjGkF106AawBh1kvw2eQZ/CCPeZKN5p5XhQe1ah1LO7A/6aVGY5gYGWk2qHG9nXpM1IvxjdbMsg94bvYg== @@ -10742,15 +9309,15 @@ vite-plugin-theme@^0.8.1: esbuild-plugin-alias "^0.1.2" tinycolor2 "^1.4.2" -vite-plugin-vue-setup-extend@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.1.0.tgz#9f08efbbc2aed103f549b3696dee5d462db23f38" - integrity sha512-emS0pGCeWDdzxIpHzlPMaPv4HrNJMlXSkkzOFi110MrkyNweJv4TrDpB0ZYtjd+JywqjUCA3/cl3CuJBbv6qzw== +vite-plugin-vue-setup-extend@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz#ebbbe265320039b8c6a3b9fcae3b8d152ecf4a13" + integrity sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ== dependencies: - "@vue/compiler-sfc" "^3.2.6" + "@vue/compiler-sfc" "^3.2.29" magic-string "^0.25.7" -vite-plugin-windicss@^1.4.12: +vite-plugin-windicss@^1.8.4: version "1.8.7" resolved "https://registry.npmmirror.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.7.tgz#884b3e7e4054df22344f61f5b2fddf07f2982405" integrity sha512-/zwQ8+RV+MSkbG0IGqsEma6r2R01NzN/aNpNjJD7VVAkxAptNznqDXOObFTskkWfZ+9m6KJZCOuCPgAFtQIzEA== @@ -10760,7 +9327,7 @@ vite-plugin-windicss@^1.4.12: kolorist "^1.5.1" windicss "^3.5.6" -vite@^2.6.13: +vite@^2.9.5: version "2.9.15" resolved "https://registry.npmmirror.com/vite/-/vite-2.9.15.tgz#2858dd5b2be26aa394a283e62324281892546f0b" integrity sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ== @@ -10772,141 +9339,44 @@ vite@^2.6.13: optionalDependencies: fsevents "~2.3.2" -void-elements@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -vscode-css-languageservice@^5.1.7: - version "5.4.2" - resolved "https://registry.npmmirror.com/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz#69ea74c000bd653dfc8e458a1720d28b9ffa5cfb" - integrity sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg== - dependencies: - vscode-languageserver-textdocument "^1.0.4" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" - -vscode-html-languageservice@^4.1.0: - version "4.2.5" - resolved "https://registry.npmmirror.com/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz#c0cc8ff3d824d16388bbac187e1828749eccf006" - integrity sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw== - dependencies: - vscode-languageserver-textdocument "^1.0.4" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" - -vscode-json-languageservice@^4.1.8: - version "4.2.1" - resolved "https://registry.npmmirror.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" - integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== +vite@^3.0.0: + version "3.0.9" + resolved "https://registry.npmmirror.com/vite/-/vite-3.0.9.tgz#45fac22c2a5290a970f23d66c1aef56a04be8a30" + integrity sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw== dependencies: - jsonc-parser "^3.0.0" - vscode-languageserver-textdocument "^1.0.3" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" + esbuild "^0.14.47" + postcss "^8.4.16" + resolve "^1.22.1" + rollup ">=2.75.6 <2.77.0 || ~2.77.0" + optionalDependencies: + fsevents "~2.3.2" -vscode-jsonrpc@8.0.2, vscode-jsonrpc@^8.0.0-next.2: +vscode-jsonrpc@^8.0.0-next.5: version "8.0.2" resolved "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== -vscode-languageserver-protocol@3.17.2: - version "3.17.2" - resolved "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" - integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== - dependencies: - vscode-jsonrpc "8.0.2" - vscode-languageserver-types "3.17.2" - -vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.3, vscode-languageserver-textdocument@^1.0.4: +vscode-languageserver-textdocument@^1.0.3: version "1.0.5" resolved "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz#838769940ece626176ec5d5a2aa2d0aa69f5095c" integrity sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg== -vscode-languageserver-types@3.17.2, vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0: +vscode-languageserver-types@^3.17.0-next.6: version "3.17.2" resolved "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== -vscode-languageserver@^8.0.0-next.2: - version "8.0.2" - resolved "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz#cfe2f0996d9dfd40d3854e786b2821604dfec06d" - integrity sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA== - dependencies: - vscode-languageserver-protocol "3.17.2" - -vscode-nls@^5.0.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/vscode-nls/-/vscode-nls-5.1.0.tgz#443b301a7465d88c81c0f4e1914f9857f0dce1e4" - integrity sha512-37Ha44QrLFwR2IfSSYdOArzUvOyoWbOYTwQC+wS0NfqKjhW7s0WQ1lMy5oJXgSZy9sAiZS5ifELhbpXodeMR8w== - -vscode-pug-languageservice@0.28.10: - version "0.28.10" - resolved "https://registry.npmmirror.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.28.10.tgz#805ce197a882b42a83fe602008d979fea13e63f2" - integrity sha512-zhpNmMxltAlid4ZWVq0YrCbD0v2Nk/OsUl2q1pZkSJheGVMj/ZAlcYqDvWjLbMfGPtpvoC6nPxhSCc6sIDN9XA== - dependencies: - "@volar/code-gen" "0.28.10" - "@volar/shared" "0.28.10" - "@volar/source-map" "0.28.10" - "@volar/transforms" "0.28.10" - pug-lexer "^5.0.1" - pug-parser "^6.0.0" - vscode-languageserver "^8.0.0-next.2" - -vscode-typescript-languageservice@0.28.10: - version "0.28.10" - resolved "https://registry.npmmirror.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.28.10.tgz#887387857e802dc8aab92a8efec21533fce19bd3" - integrity sha512-TTJSQss0YR784e0Rr8se5huxd0edqGzO7A51kejEQiPPhIcOlYCEeeFxDtqv3S+/fUUkeFVdRBZA9Ie7Jfrldw== - dependencies: - "@volar/shared" "0.28.10" - semver "^7.3.5" - upath "^2.0.1" - vscode-languageserver "^8.0.0-next.2" - vscode-languageserver-textdocument "^1.0.1" - -vscode-uri@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" - integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== - -vscode-uri@^3.0.2, vscode-uri@^3.0.3: +vscode-uri@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== -vscode-vue-languageservice@0.28.10: - version "0.28.10" - resolved "https://registry.npmmirror.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.28.10.tgz#3f5ea3b2319c542f23127c3017f945cae67673ee" - integrity sha512-xsA9aEiELiA9zHxzhI58Y6crcSfqxtt3EDKyey9rcNYe/bdY1NY0qLh3SRxdXF8YwoxzRvnn4iUw0oxCjHnFUQ== - dependencies: - "@volar/code-gen" "0.28.10" - "@volar/html2pug" "0.28.10" - "@volar/shared" "0.28.10" - "@volar/source-map" "0.28.10" - "@volar/transforms" "0.28.10" - "@vscode/emmet-helper" "^2.8.0" - "@vue/compiler-dom" "^3.2.20" - "@vue/reactivity" "^3.2.20" - "@vue/shared" "^3.2.20" - request-light "^0.5.4" - upath "^2.0.1" - vscode-css-languageservice "^5.1.7" - vscode-html-languageservice "^4.1.0" - vscode-json-languageservice "^4.1.8" - vscode-languageserver "^8.0.0-next.2" - vscode-languageserver-textdocument "^1.0.1" - vscode-pug-languageservice "0.28.10" - vscode-typescript-languageservice "0.28.10" - vue-demi@*: version "0.13.8" resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz#5c568fb3b4d8f848acc658dfccd3d875035b5653" integrity sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg== -vue-eslint-parser@^8.0.1: +vue-eslint-parser@^8.0.1, vue-eslint-parser@^8.3.0: version "8.3.0" resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== @@ -10929,20 +9399,24 @@ vue-i18n@^9.1.9: "@intlify/vue-devtools" "9.2.2" "@vue/devtools-api" "^6.2.1" -vue-router@^4.0.12: +vue-json-pretty@^2.0.6: + version "2.2.0" + resolved "https://registry.npmmirror.com/vue-json-pretty/-/vue-json-pretty-2.2.0.tgz#d1a302bb0debdc72e7c1de2cebdf9937d019fec9" + integrity sha512-Jah7kWV+ZEFPIvf1NCAntUzcmtNYAbkkj2l5WHJotz97BE7YRJ3hx5ecBcaCPkW6bYBugm1ditZjKAdX8AQZMA== + +vue-router@^4.0.14: version "4.1.3" resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.3.tgz#f8dc7931a2253cc5aa9b740f8b98969d08ca283c" integrity sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA== dependencies: "@vue/devtools-api" "^6.1.4" -vue-tsc@^0.28.10: - version "0.28.10" - resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.28.10.tgz#2fc0154537bef5004e86002b117758af4b2b066c" - integrity sha512-tGD7eC74MHqKH2/F66AYkC1zNiLrgnhMzeYWou3p/wApMaUEM4h29HqYoKN6uE+pq87uvq/penYqUSBXhIwLiA== +vue-tsc@^0.33.9: + version "0.33.9" + resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.33.9.tgz#96f81eeb0f141b7f0ab73a31941034fce823785e" + integrity sha512-s/+r4JNsCh4e3MUdsYrjEA8IgPPDzHL5kEah/OznxIHd1XMlYiIkXGdiyU6JE5J+lzXNOKdOlNliqwwpeETQWw== dependencies: - "@volar/shared" "0.28.10" - vscode-vue-languageservice "0.28.10" + "@volar/vue-typescript" "0.33.9" vue-types@^3.0.0: version "3.0.2" @@ -10958,7 +9432,7 @@ vue-types@^4.1.1: dependencies: is-plain-object "5.0.0" -vue@^3.2.21: +vue@^3.2.33: version "3.2.37" resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e" integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== @@ -10969,27 +9443,6 @@ vue@^3.2.21: "@vue/server-renderer" "3.2.37" "@vue/shared" "3.2.37" -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: - version "1.0.8" - resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - warning@^4.0.0: version "4.0.3" resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -11014,28 +9467,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -11053,15 +9484,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -11078,7 +9500,7 @@ which-module@^2.0.0: resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11097,21 +9519,21 @@ windicss@^3.5.6: resolved "https://registry.npmmirror.com/windicss/-/windicss-3.5.6.tgz#30a34da76894d952a96c9a1921f2e91e13932183" integrity sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA== -with@^7.0.0: - version "7.0.2" - resolved "https://registry.npmmirror.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" - integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== - dependencies: - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" - assert-never "^1.2.1" - babel-walk "3.0.0-canary-5" +wmf@~1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== -word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word@~0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" + integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -11298,17 +9720,7 @@ wrappy@1: resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.1: +write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== @@ -11316,20 +9728,18 @@ write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xlsx@^0.18.5: + version "0.18.5" + resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0" + integrity sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ== + dependencies: + adler-32 "~1.3.0" + cfb "~1.2.1" + codepage "~1.15.0" + crc-32 "~1.2.1" + ssf "~0.11.2" + wmf "~1.0.1" + word "~0.3.0" xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" @@ -11356,16 +9766,11 @@ yallist@^4.0.0: resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -11374,6 +9779,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.0.0: version "21.1.1" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" -- Gitee From 0f8f66f0382dec8e8ff673a5062569dc042bcc68 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Tue, 23 Aug 2022 08:26:24 +0800 Subject: [PATCH 05/12] =?UTF-8?q?fix:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/demo/api-cascader.ts | 414 +++++++++--------- mock/demo/select-demo.ts | 10 +- mock/demo/system.ts | 134 +++--- mock/demo/table-demo.ts | 42 +- mock/demo/tree-demo.ts | 12 +- src/components/Markdown/src/getTheme.ts | 18 +- src/components/Table/src/hooks/useScrollTo.ts | 14 +- src/components/Tree/src/hooks/useTree.ts | 18 +- src/components/Tree/src/types/tree.ts | 30 +- src/components/Tree/style/index.ts | 2 +- .../lang/zh-CN/antdLocale/DatePicker.ts | 26 +- src/locales/lang/zh-CN/routes/model.ts | 2 +- src/utils/bem.ts | 14 +- src/utils/http/axios/axiosRetry.ts | 2 +- src/utils/props.ts | 22 +- src/utils/types.ts | 4 +- 16 files changed, 382 insertions(+), 382 deletions(-) diff --git a/mock/demo/api-cascader.ts b/mock/demo/api-cascader.ts index 3bb89b3..337c66d 100644 --- a/mock/demo/api-cascader.ts +++ b/mock/demo/api-cascader.ts @@ -1,323 +1,323 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { resultSuccess } from "../_util"; const areaList: any[] = [ { - id: '530825900854620160', - code: '430000', - parentCode: '100000', + id: "530825900854620160", + code: "430000", + parentCode: "100000", levelType: 1, - name: '湖南省', - province: '湖南省', + name: "湖南省", + province: "湖南省", city: null, district: null, town: null, village: null, - parentPath: '430000', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', + parentPath: "430000", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 16:33:42", customized: false, usable: true, }, { - id: '530825900883980288', - code: '430100', - parentCode: '430000', + id: "530825900883980288", + code: "430100", + parentCode: "430000", levelType: 2, - name: '长沙市', - province: '湖南省', - city: '长沙市', + name: "长沙市", + province: "湖南省", + city: "长沙市", district: null, town: null, village: null, - parentPath: '430000,430100', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', + parentPath: "430000,430100", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 16:33:42", customized: false, usable: true, }, { - id: '530825900951089152', - code: '430102', - parentCode: '430100', + id: "530825900951089152", + code: "430102", + parentCode: "430100", levelType: 3, - name: '芙蓉区', - province: '湖南省', - city: '长沙市', - district: '芙蓉区', + name: "芙蓉区", + province: "湖南省", + city: "长沙市", + district: "芙蓉区", town: null, village: null, - parentPath: '430000,430100,430102', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', + parentPath: "430000,430100,430102", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 16:33:42", customized: false, usable: true, }, { - id: '530825901014003712', - code: '430104', - parentCode: '430100', + id: "530825901014003712", + code: "430104", + parentCode: "430100", levelType: 3, - name: '岳麓区', - province: '湖南省', - city: '长沙市', - district: '岳麓区', + name: "岳麓区", + province: "湖南省", + city: "长沙市", + district: "岳麓区", town: null, village: null, - parentPath: '430000,430100,430104', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', + parentPath: "430000,430100,430104", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 16:33:42", customized: false, usable: true, }, { - id: '530825900988837888', - code: '430103', - parentCode: '430100', + id: "530825900988837888", + code: "430103", + parentCode: "430100", levelType: 3, - name: '天心区', - province: '湖南省', - city: '长沙市', - district: '天心区', + name: "天心区", + province: "湖南省", + city: "长沙市", + district: "天心区", town: null, village: null, - parentPath: '430000,430100,430103', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', + parentPath: "430000,430100,430103", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 16:33:42", customized: false, usable: true, }, { - id: '530826672489115648', - code: '430103002', - parentCode: '430103', + id: "530826672489115648", + code: "430103002", + parentCode: "430103", levelType: 4, - name: '坡子街街道', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', + name: "坡子街街道", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", village: null, - parentPath: '430000,430100,430103,430103002', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-12-14 15:26:43', + parentPath: "430000,430100,430103,430103002", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-12-14 15:26:43", customized: false, usable: true, }, { - id: '530840241171607552', - code: '430103002001', - parentCode: '430103002', + id: "530840241171607552", + code: "430103002001", + parentCode: "430103002", levelType: 5, - name: '八角亭社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '八角亭社区', - parentPath: '430000,430100,430103,430103002,430103002001', - createTime: '2020-11-30 15:47:31', - updateTime: '2021-01-20 14:07:23', + name: "八角亭社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "八角亭社区", + parentPath: "430000,430100,430103,430103002,430103002001", + createTime: "2020-11-30 15:47:31", + updateTime: "2021-01-20 14:07:23", customized: false, usable: true, }, { - id: '530840241200967680', - code: '430103002002', - parentCode: '430103002', + id: "530840241200967680", + code: "430103002002", + parentCode: "430103002", levelType: 5, - name: '西牌楼社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '西牌楼社区', - parentPath: '430000,430100,430103,430103002,430103002002', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "西牌楼社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "西牌楼社区", + parentPath: "430000,430100,430103,430103002,430103002002", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241230327808', - code: '430103002003', - parentCode: '430103002', + id: "530840241230327808", + code: "430103002003", + parentCode: "430103002", levelType: 5, - name: '太平街社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '太平街社区', - parentPath: '430000,430100,430103,430103002,430103002003', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "太平街社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "太平街社区", + parentPath: "430000,430100,430103,430103002,430103002003", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241259687936', - code: '430103002005', - parentCode: '430103002', + id: "530840241259687936", + code: "430103002005", + parentCode: "430103002", levelType: 5, - name: '坡子街社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '坡子街社区', - parentPath: '430000,430100,430103,430103002,430103002005', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "坡子街社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "坡子街社区", + parentPath: "430000,430100,430103,430103002,430103002005", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241284853760', - code: '430103002006', - parentCode: '430103002', + id: "530840241284853760", + code: "430103002006", + parentCode: "430103002", levelType: 5, - name: '青山祠社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '青山祠社区', - parentPath: '430000,430100,430103,430103002,430103002006', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "青山祠社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "青山祠社区", + parentPath: "430000,430100,430103,430103002,430103002006", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241310019584', - code: '430103002007', - parentCode: '430103002', + id: "530840241310019584", + code: "430103002007", + parentCode: "430103002", levelType: 5, - name: '沙河社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '沙河社区', - parentPath: '430000,430100,430103,430103002,430103002007', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "沙河社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "沙河社区", + parentPath: "430000,430100,430103,430103002,430103002007", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241381322752', - code: '430103002008', - parentCode: '430103002', + id: "530840241381322752", + code: "430103002008", + parentCode: "430103002", levelType: 5, - name: '碧湘社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '碧湘社区', - parentPath: '430000,430100,430103,430103002,430103002008', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "碧湘社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "碧湘社区", + parentPath: "430000,430100,430103,430103002,430103002008", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241410682880', - code: '430103002009', - parentCode: '430103002', + id: "530840241410682880", + code: "430103002009", + parentCode: "430103002", levelType: 5, - name: '创远社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '创远社区', - parentPath: '430000,430100,430103,430103002,430103002009', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "创远社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "创远社区", + parentPath: "430000,430100,430103,430103002,430103002009", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241431654400', - code: '430103002010', - parentCode: '430103002', + id: "530840241431654400", + code: "430103002010", + parentCode: "430103002", levelType: 5, - name: '楚湘社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '楚湘社区', - parentPath: '430000,430100,430103,430103002,430103002010', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "楚湘社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "楚湘社区", + parentPath: "430000,430100,430103,430103002,430103002010", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241465208832', - code: '430103002011', - parentCode: '430103002', + id: "530840241465208832", + code: "430103002011", + parentCode: "430103002", levelType: 5, - name: '西湖社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '西湖社区', - parentPath: '430000,430100,430103,430103002,430103002011', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "西湖社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "西湖社区", + parentPath: "430000,430100,430103,430103002,430103002011", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241502957568', - code: '430103002012', - parentCode: '430103002', + id: "530840241502957568", + code: "430103002012", + parentCode: "430103002", levelType: 5, - name: '登仁桥社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '登仁桥社区', - parentPath: '430000,430100,430103,430103002,430103002012', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "登仁桥社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "登仁桥社区", + parentPath: "430000,430100,430103,430103002,430103002012", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, { - id: '530840241553289216', - code: '430103002013', - parentCode: '430103002', + id: "530840241553289216", + code: "430103002013", + parentCode: "430103002", levelType: 5, - name: '文庙坪社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '文庙坪社区', - parentPath: '430000,430100,430103,430103002,430103002013', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', + name: "文庙坪社区", + province: "湖南省", + city: "长沙市", + district: "天心区", + town: "坡子街街道", + village: "文庙坪社区", + parentPath: "430000,430100,430103,430103002,430103002013", + createTime: "2020-11-30 15:47:31", + updateTime: "2020-11-30 17:30:41", customized: false, usable: true, }, ]; export default [ { - url: '/dev-api/cascader/getAreaRecord', + url: "/dev-api/cascader/getAreaRecord", timeout: 1000, - method: 'post', + method: "post", response: ({ body }) => { const { parentCode } = body || {}; if (!parentCode) { - return resultSuccess(areaList.filter((it) => it.code === '430000')); + return resultSuccess(areaList.filter((it) => it.code === "430000")); } return resultSuccess(areaList.filter((it) => it.parentCode === parentCode)); }, diff --git a/mock/demo/select-demo.ts b/mock/demo/select-demo.ts index cafb4aa..b851a07 100644 --- a/mock/demo/select-demo.ts +++ b/mock/demo/select-demo.ts @@ -1,5 +1,5 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { resultSuccess } from "../_util"; const demoList = (keyword, count = 20) => { const result = { @@ -7,7 +7,7 @@ const demoList = (keyword, count = 20) => { }; for (let index = 0; index < count; index++) { result.list.push({ - name: `${keyword ?? ''}选项${index}`, + name: `${keyword ?? ""}选项${index}`, id: `${index}`, }); } @@ -16,9 +16,9 @@ const demoList = (keyword, count = 20) => { export default [ { - url: '/dev-api/select/getDemoOptions', + url: "/dev-api/select/getDemoOptions", timeout: 1000, - method: 'get', + method: "get", response: ({ query }) => { const { keyword, count } = query; console.log(keyword); diff --git a/mock/demo/system.ts b/mock/demo/system.ts index b1f80ba..439719a 100644 --- a/mock/demo/system.ts +++ b/mock/demo/system.ts @@ -1,18 +1,18 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultError, resultPageSuccess, resultSuccess } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { resultError, resultPageSuccess, resultSuccess } from "../_util"; const accountList = (() => { const result: any[] = []; for (let index = 0; index < 20; index++) { result.push({ id: `${index}`, - account: '@first', - email: '@email', - nickname: '@cname()', - role: '@first', - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '1'], + account: "@first", + email: "@email", + nickname: "@cname()", + role: "@first", + createTime: "@datetime", + remark: "@cword(10,20)", + "status|1": ["0", "1"], }); } return result; @@ -24,12 +24,12 @@ const roleList = (() => { result.push({ id: index + 1, orderNo: `${index + 1}`, - roleName: ['超级管理员', '管理员', '文章管理员', '普通用户'][index], - roleValue: '@first', - createTime: '@datetime', - remark: '@cword(10,20)', - menu: [['0', '1', '2'], ['0', '1'], ['0', '2'], ['2']][index], - 'status|1': ['0', '1'], + roleName: ["超级管理员", "管理员", "文章管理员", "普通用户"][index], + roleValue: "@first", + createTime: "@datetime", + remark: "@cword(10,20)", + menu: [["0", "1", "2"], ["0", "1"], ["0", "2"], ["2"]][index], + "status|1": ["0", "1"], }); } return result; @@ -40,21 +40,21 @@ const deptList = (() => { for (let index = 0; index < 3; index++) { result.push({ id: `${index}`, - deptName: ['华东分部', '华南分部', '西北分部'][index], + deptName: ["华东分部", "华南分部", "西北分部"][index], orderNo: index + 1, - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '0', '1'], + createTime: "@datetime", + remark: "@cword(10,20)", + "status|1": ["0", "0", "1"], children: (() => { const children: any[] = []; for (let j = 0; j < 4; j++) { children.push({ id: `${index}-${j}`, - deptName: ['研发部', '市场部', '商务部', '财务部'][j], + deptName: ["研发部", "市场部", "商务部", "财务部"][j], orderNo: j + 1, - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '1'], + createTime: "@datetime", + remark: "@cword(10,20)", + "status|1": ["0", "1"], parentDept: `${index}`, children: undefined, }); @@ -71,54 +71,54 @@ const menuList = (() => { for (let index = 0; index < 3; index++) { result.push({ id: `${index}`, - icon: ['ion:layers-outline', 'ion:git-compare-outline', 'ion:tv-outline'][index], - component: 'LAYOUT', - type: '0', - menuName: ['Dashboard', '权限管理', '功能'][index], - permission: '', + icon: ["ion:layers-outline", "ion:git-compare-outline", "ion:tv-outline"][index], + component: "LAYOUT", + type: "0", + menuName: ["Dashboard", "权限管理", "功能"][index], + permission: "", orderNo: index + 1, - createTime: '@datetime', - 'status|1': ['0', '0', '1'], + createTime: "@datetime", + "status|1": ["0", "0", "1"], children: (() => { const children: any[] = []; for (let j = 0; j < 4; j++) { children.push({ id: `${index}-${j}`, - type: '1', - menuName: ['菜单1', '菜单2', '菜单3', '菜单4'][j], - icon: 'ion:document', - permission: ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index], + type: "1", + menuName: ["菜单1", "菜单2", "菜单3", "菜单4"][j], + icon: "ion:document", + permission: ["menu1:view", "menu2:add", "menu3:update", "menu4:del"][index], component: [ - '/dashboard/welcome/index', - '/dashboard/analysis/index', - '/dashboard/workbench/index', - '/dashboard/test/index', + "/dashboard/welcome/index", + "/dashboard/analysis/index", + "/dashboard/workbench/index", + "/dashboard/test/index", ][j], orderNo: j + 1, - createTime: '@datetime', - 'status|1': ['0', '1'], + createTime: "@datetime", + "status|1": ["0", "1"], parentMenu: `${index}`, children: (() => { const children: any[] = []; for (let k = 0; k < 4; k++) { children.push({ id: `${index}-${j}-${k}`, - type: '2', - menuName: '按钮' + (j + 1) + '-' + (k + 1), - icon: '', + type: "2", + menuName: "按钮" + (j + 1) + "-" + (k + 1), + icon: "", permission: - ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index] + - ':btn' + + ["menu1:view", "menu2:add", "menu3:update", "menu4:del"][index] + + ":btn" + (k + 1), component: [ - '/dashboard/welcome/index', - '/dashboard/analysis/index', - '/dashboard/workbench/index', - '/dashboard/test/index', + "/dashboard/welcome/index", + "/dashboard/analysis/index", + "/dashboard/workbench/index", + "/dashboard/test/index", ][j], orderNo: j + 1, - createTime: '@datetime', - 'status|1': ['0', '1'], + createTime: "@datetime", + "status|1": ["0", "1"], parentMenu: `${index}-${j}`, children: undefined, }); @@ -136,64 +136,64 @@ const menuList = (() => { export default [ { - url: '/dev-api/system/getAccountList', + url: "/dev-api/system/getAccountList", timeout: 100, - method: 'get', + method: "get", response: ({ query }) => { const { page = 1, pageSize = 20 } = query; return resultPageSuccess(page, pageSize, accountList); }, }, { - url: '/dev-api/system/getRoleListByPage', + url: "/dev-api/system/getRoleListByPage", timeout: 100, - method: 'get', + method: "get", response: ({ query }) => { const { page = 1, pageSize = 20 } = query; return resultPageSuccess(page, pageSize, roleList); }, }, { - url: '/dev-api/system/setRoleStatus', + url: "/dev-api/system/setRoleStatus", timeout: 500, - method: 'post', + method: "post", response: ({ query }) => { const { id, status } = query; return resultSuccess({ id, status }); }, }, { - url: '/dev-api/system/getAllRoleList', + url: "/dev-api/system/getAllRoleList", timeout: 100, - method: 'get', + method: "get", response: () => { return resultSuccess(roleList); }, }, { - url: '/dev-api/system/getDeptList', + url: "/dev-api/system/getDeptList", timeout: 100, - method: 'get', + method: "get", response: () => { return resultSuccess(deptList); }, }, { - url: '/dev-api/system/getMenuList', + url: "/dev-api/system/getMenuList", timeout: 100, - method: 'get', + method: "get", response: () => { return resultSuccess(menuList); }, }, { - url: '/dev-api/system/accountExist', + url: "/dev-api/system/accountExist", timeout: 500, - method: 'post', + method: "post", response: ({ body }) => { const { account } = body || {}; - if (account && account.indexOf('admin') !== -1) { - return resultError('该字段不能包含admin'); + if (account && account.indexOf("admin") !== -1) { + return resultError("该字段不能包含admin"); } else { return resultSuccess(`${account} can use`); } diff --git a/mock/demo/table-demo.ts b/mock/demo/table-demo.ts index aeb8eb1..f6efe81 100644 --- a/mock/demo/table-demo.ts +++ b/mock/demo/table-demo.ts @@ -1,11 +1,11 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { Random } from 'mockjs'; -import { resultPageSuccess } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { Random } from "mockjs"; +import { resultPageSuccess } from "../_util"; function getRandomPics(count = 10): string[] { const arr: string[] = []; for (let i = 0; i < count; i++) { - arr.push(Random.image('800x600', Random.color(), Random.color(), Random.title())); + arr.push(Random.image("800x600", Random.color(), Random.color(), Random.title())); } return arr; } @@ -15,25 +15,25 @@ const demoList = (() => { for (let index = 0; index < 200; index++) { result.push({ id: `${index}`, - beginTime: '@datetime', - endTime: '@datetime', - address: '@city()', - name: '@cname()', - name1: '@cname()', - name2: '@cname()', - name3: '@cname()', - name4: '@cname()', - name5: '@cname()', - name6: '@cname()', - name7: '@cname()', - name8: '@cname()', - avatar: Random.image('400x400', Random.color(), Random.color(), Random.first()), + beginTime: "@datetime", + endTime: "@datetime", + address: "@city()", + name: "@cname()", + name1: "@cname()", + name2: "@cname()", + name3: "@cname()", + name4: "@cname()", + name5: "@cname()", + name6: "@cname()", + name7: "@cname()", + name8: "@cname()", + avatar: Random.image("400x400", Random.color(), Random.color(), Random.first()), imgArr: getRandomPics(Math.ceil(Math.random() * 3) + 1), imgs: getRandomPics(Math.ceil(Math.random() * 3) + 1), date: `@date('yyyy-MM-dd')`, time: `@time('HH:mm')`, - 'no|100000-10000000': 100000, - 'status|1': ['normal', 'enable', 'disable'], + "no|100000-10000000": 100000, + "status|1": ["normal", "enable", "disable"], }); } return result; @@ -41,9 +41,9 @@ const demoList = (() => { export default [ { - url: '/dev-api/table/getDemoList', + url: "/dev-api/table/getDemoList", timeout: 100, - method: 'get', + method: "get", response: ({ query }) => { const { page = 1, pageSize = 20 } = query; return resultPageSuccess(page, pageSize, demoList); diff --git a/mock/demo/tree-demo.ts b/mock/demo/tree-demo.ts index 666ca20..636bc66 100644 --- a/mock/demo/tree-demo.ts +++ b/mock/demo/tree-demo.ts @@ -1,5 +1,5 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; +import { MockMethod } from "vite-plugin-mock"; +import { resultSuccess } from "../_util"; const demoTreeList = (keyword) => { const result = { @@ -9,13 +9,13 @@ const demoTreeList = (keyword) => { const children: Recordable[] = []; for (let j = 0; j < 3; j++) { children.push({ - title: `${keyword ?? ''}选项${index}-${j}`, + title: `${keyword ?? ""}选项${index}-${j}`, value: `${index}-${j}`, key: `${index}-${j}`, }); } result.list.push({ - title: `${keyword ?? ''}选项${index}`, + title: `${keyword ?? ""}选项${index}`, value: `${index}`, key: `${index}`, children, @@ -26,9 +26,9 @@ const demoTreeList = (keyword) => { export default [ { - url: '/dev-api/tree/getDemoOptions', + url: "/dev-api/tree/getDemoOptions", timeout: 1000, - method: 'get', + method: "get", response: ({ query }) => { const { keyword } = query; console.log(keyword); diff --git a/src/components/Markdown/src/getTheme.ts b/src/components/Markdown/src/getTheme.ts index fcfe9d3..a1774f0 100644 --- a/src/components/Markdown/src/getTheme.ts +++ b/src/components/Markdown/src/getTheme.ts @@ -4,16 +4,16 @@ * @param themeMode 主题类型——外观(默认), 内容, 代码块 */ export const getTheme = ( - darkModeVal: 'light' | 'dark' | string, - themeMode: 'default' | 'content' | 'code' = 'default', + darkModeVal: "light" | "dark" | string, + themeMode: "default" | "content" | "code" = "default", ) => { - const isDark = darkModeVal === 'dark'; + const isDark = darkModeVal === "dark"; switch (themeMode) { - case 'default': - return isDark ? 'dark' : 'classic'; - case 'content': - return isDark ? 'dark' : 'light'; - case 'code': - return isDark ? 'dracula' : 'github'; + case "default": + return isDark ? "dark" : "classic"; + case "content": + return isDark ? "dark" : "light"; + case "code": + return isDark ? "dracula" : "github"; } }; diff --git a/src/components/Table/src/hooks/useScrollTo.ts b/src/components/Table/src/hooks/useScrollTo.ts index b368f81..506bc5d 100644 --- a/src/components/Table/src/hooks/useScrollTo.ts +++ b/src/components/Table/src/hooks/useScrollTo.ts @@ -1,6 +1,6 @@ -import type { ComputedRef, Ref } from 'vue'; -import { nextTick, unref } from 'vue'; -import { warn } from '/@/utils/log'; +import type { ComputedRef, Ref } from "vue"; +import { nextTick, unref } from "vue"; +import { warn } from "/@/utils/log"; export function useTableScrollTo( tableElRef: Ref<ComponentRef>, @@ -17,7 +17,7 @@ export function useTableScrollTo( await nextTick(); bodyEl?.scrollTo({ top: targetRowEl?.offsetTop ?? 0, - behavior: 'smooth', + behavior: "smooth", }); } @@ -29,7 +29,7 @@ export function useTableScrollTo( if (!tableEl) return; if (!bodyEl) { - bodyEl = tableEl.querySelector('.ant-table-body'); + bodyEl = tableEl.querySelector(".ant-table-body"); if (!bodyEl) return; } @@ -37,9 +37,9 @@ export function useTableScrollTo( if (!dataSource) return; // judge pos type - if (pos === 'top') { + if (pos === "top") { findTargetRowToScroll(dataSource[0]); - } else if (pos === 'bottom') { + } else if (pos === "bottom") { findTargetRowToScroll(dataSource[dataSource.length - 1]); } else { const targetRowData = dataSource.find((data) => data.id === pos); diff --git a/src/components/Tree/src/hooks/useTree.ts b/src/components/Tree/src/hooks/useTree.ts index 17345a2..61d7ac9 100644 --- a/src/components/Tree/src/hooks/useTree.ts +++ b/src/components/Tree/src/hooks/useTree.ts @@ -1,10 +1,10 @@ -import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from '../types/tree'; -import type { Ref, ComputedRef } from 'vue'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; +import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from "../types/tree"; +import type { Ref, ComputedRef } from "vue"; +import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; -import { cloneDeep } from 'lodash-es'; -import { unref } from 'vue'; -import { forEach } from '/@/utils/helper/treeHelper'; +import { cloneDeep } from "lodash-es"; +import { unref } from "vue"; +import { forEach } from "/@/utils/helper/treeHelper"; export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: ComputedRef<FieldNames>) { function getAllKeys(list?: TreeDataItem[]) { @@ -96,7 +96,7 @@ export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: Compute const item = data[index]; const { key: keyField, children: childrenField } = unref(getFieldNames); - const key = keyField ? item[keyField] : ''; + const key = keyField ? item[keyField] : ""; const children = childrenField ? item[childrenField] : []; res.push(key); if (children && children.length && currentLevel < level) { @@ -110,7 +110,7 @@ export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: Compute /** * 添加节点 */ - function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) { + function insertNodeByKey({ parentKey = null, node, push = "push" }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!parentKey) { treeData[push](node); @@ -132,7 +132,7 @@ export function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: Compute /** * 批量添加节点 */ - function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) { + function insertNodesByKey({ parentKey = null, list, push = "push" }: InsertNodeParams) { const treeData: any = cloneDeep(unref(treeDataRef)); if (!list || list.length < 1) { return; diff --git a/src/components/Tree/src/types/tree.ts b/src/components/Tree/src/types/tree.ts index 03fe57f..b0a0648 100644 --- a/src/components/Tree/src/types/tree.ts +++ b/src/components/Tree/src/types/tree.ts @@ -1,7 +1,7 @@ -import type { ExtractPropTypes } from 'vue'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; +import type { ExtractPropTypes } from "vue"; +import type { TreeDataItem } from "ant-design-vue/es/tree/Tree"; -import { buildProps } from '/@/utils/props'; +import { buildProps } from "/@/utils/props"; export enum ToolbarEnum { SELECT_ALL, @@ -13,12 +13,12 @@ export enum ToolbarEnum { } export const treeEmits = [ - 'update:expandedKeys', - 'update:selectedKeys', - 'update:value', - 'change', - 'check', - 'update:searchValue', + "update:expandedKeys", + "update:selectedKeys", + "update:value", + "change", + "check", + "update:searchValue", ]; export interface TreeState { @@ -51,18 +51,18 @@ export const treeProps = buildProps({ helpMessage: { type: [String, Array] as PropType<string | string[]>, - default: '', + default: "", }, title: { type: String, - default: '', + default: "", }, toolbar: Boolean, search: Boolean, searchValue: { type: String, - default: '', + default: "", }, checkStrictly: Boolean, clickRowToExpand: { @@ -72,7 +72,7 @@ export const treeProps = buildProps({ checkable: Boolean, defaultExpandLevel: { type: [String, Number] as PropType<string | number>, - default: '', + default: "", }, defaultExpandAll: Boolean, @@ -167,7 +167,7 @@ export interface InsertNodeParams { parentKey: string | null; node: TreeDataItem; list?: TreeDataItem[]; - push?: 'push' | 'unshift'; + push?: "push" | "unshift"; } export interface TreeActionType { @@ -183,7 +183,7 @@ export interface TreeActionType { insertNodeByKey: (opt: InsertNodeParams) => void; insertNodesByKey: (opt: InsertNodeParams) => void; deleteNodeByKey: (key: string) => void; - updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void; + updateNodeByKey: (key: string, node: Omit<TreeDataItem, "key">) => void; setSearchValue: (value: string) => void; getSearchValue: () => string; getSelectedNode: ( diff --git a/src/components/Tree/style/index.ts b/src/components/Tree/style/index.ts index d74e52e..49f7e3f 100644 --- a/src/components/Tree/style/index.ts +++ b/src/components/Tree/style/index.ts @@ -1 +1 @@ -import './index.less'; +import "./index.less"; diff --git a/src/locales/lang/zh-CN/antdLocale/DatePicker.ts b/src/locales/lang/zh-CN/antdLocale/DatePicker.ts index 452dff0..6e6bafa 100644 --- a/src/locales/lang/zh-CN/antdLocale/DatePicker.ts +++ b/src/locales/lang/zh-CN/antdLocale/DatePicker.ts @@ -1,19 +1,19 @@ export default { lang: { - shortWeekDays: ['一', '二', '三', '四', '五', '六', '日'], + shortWeekDays: ["一", "二", "三", "四", "五", "六", "日"], shortMonths: [ - '1月', - '2月', - '3月', - '4月', - '5月', - '6月', - '7月', - '8月', - '9月', - '10月', - '11月', - '12月', + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月", ], }, }; diff --git a/src/locales/lang/zh-CN/routes/model.ts b/src/locales/lang/zh-CN/routes/model.ts index 8c3666e..a410ff2 100644 --- a/src/locales/lang/zh-CN/routes/model.ts +++ b/src/locales/lang/zh-CN/routes/model.ts @@ -1,3 +1,3 @@ export default { - model: '模型', + model: "模型", }; diff --git a/src/utils/bem.ts b/src/utils/bem.ts index 7dcadbc..059815e 100644 --- a/src/utils/bem.ts +++ b/src/utils/bem.ts @@ -1,4 +1,4 @@ -import { prefixCls } from '/@/settings/designSetting'; +import { prefixCls } from "/@/settings/designSetting"; type Mod = string | { [key: string]: any }; type Mods = Mod | Mod[]; @@ -7,18 +7,18 @@ export type BEM = ReturnType<typeof createBEM>; function genBem(name: string, mods?: Mods): string { if (!mods) { - return ''; + return ""; } - if (typeof mods === 'string') { + if (typeof mods === "string") { return ` ${name}--${mods}`; } if (Array.isArray(mods)) { - return mods.reduce<string>((ret, item) => ret + genBem(name, item), ''); + return mods.reduce<string>((ret, item) => ret + genBem(name, item), ""); } - return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), ''); + return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ""), ""); } /** @@ -31,9 +31,9 @@ function genBem(name: string, mods?: Mods): string { */ export function buildBEM(name: string) { return (el?: Mods, mods?: Mods): Mods => { - if (el && typeof el !== 'string') { + if (el && typeof el !== "string") { mods = el; - el = ''; + el = ""; } el = el ? `${name}__${el}` : name; diff --git a/src/utils/http/axios/axiosRetry.ts b/src/utils/http/axios/axiosRetry.ts index d081b96..c80a8d4 100644 --- a/src/utils/http/axios/axiosRetry.ts +++ b/src/utils/http/axios/axiosRetry.ts @@ -1,4 +1,4 @@ -import { AxiosError, AxiosInstance } from 'axios'; +import { AxiosError, AxiosInstance } from "axios"; /** * 请求重试机制 */ diff --git a/src/utils/props.ts b/src/utils/props.ts index 729c9ef..b623e85 100644 --- a/src/utils/props.ts +++ b/src/utils/props.ts @@ -1,10 +1,10 @@ // copy from element-plus -import { warn } from 'vue'; -import { isObject } from '@vue/shared'; -import { fromPairs } from 'lodash-es'; -import type { ExtractPropTypes, PropType } from '@vue/runtime-core'; -import type { Mutable } from './types'; +import { warn } from "vue"; +import { isObject } from "@vue/shared"; +import { fromPairs } from "lodash-es"; +import type { ExtractPropTypes, PropType } from "@vue/runtime-core"; +import type { Mutable } from "./types"; const wrapperKey = Symbol(); export type PropWrapper<T> = { [wrapperKey]: T }; @@ -13,7 +13,7 @@ export const propKey = Symbol(); type ResolveProp<T> = ExtractPropTypes<{ key: { type: T; required: true }; -}>['key']; +}>["key"]; type ResolvePropType<T> = ResolveProp<T> extends { type: infer V } ? V : ResolveProp<T>; type ResolvePropTypeWithReadonly<T> = Readonly<T> extends Readonly<Array<infer A>> ? ResolvePropType<A[]> @@ -117,10 +117,10 @@ export function buildProp< if (!valid && allowedValues.length > 0) { const allowValuesText = [...new Set(allowedValues)] .map((value) => JSON.stringify(value)) - .join(', '); + .join(", "); warn( `Invalid prop: validation failed${ - key ? ` for prop "${key}"` : '' + key ? ` for prop "${key}"` : "" }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`, ); } @@ -130,7 +130,7 @@ export function buildProp< return { type: - typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey) + typeof type === "object" && Object.getOwnPropertySymbols(type).includes(wrapperKey) ? type[wrapperKey] : type, required: !!required, @@ -172,7 +172,7 @@ export const buildProps = < infer V, infer C > - ? BuildPropReturn<T, O[K]['default'], R, V, C> + ? BuildPropReturn<T, O[K]["default"], R, V, C> : never; }; @@ -182,4 +182,4 @@ export const keyOf = <T>(arr: T) => Object.keys(arr) as Array<keyof T>; export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) => val as Mutable<typeof val>; -export const componentSize = ['large', 'medium', 'small', 'mini'] as const; +export const componentSize = ["large", "medium", "small", "mini"] as const; diff --git a/src/utils/types.ts b/src/utils/types.ts index 4453ec4..7778cce 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -1,6 +1,6 @@ // copy from element-plus -import type { CSSProperties, Plugin } from 'vue'; +import type { CSSProperties, Plugin } from "vue"; type OptionalKeys<T extends Record<string, unknown>> = { [K in keyof T]: T extends Record<K, T[K]> ? never : K; @@ -35,7 +35,7 @@ export type Hash<T> = Indexable<T>; export type TimeoutHandle = ReturnType<typeof global.setTimeout>; -export type ComponentSize = 'large' | 'medium' | 'small' | 'mini'; +export type ComponentSize = "large" | "medium" | "small" | "mini"; export type StyleValue = string | CSSProperties | Array<StyleValue>; -- Gitee From d0f77ab47b57fb234a91908c6c0390c79167add3 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Tue, 23 Aug 2022 08:27:45 +0800 Subject: [PATCH 06/12] =?UTF-8?q?style:=20=E5=A2=9E=E5=8A=A0=E5=AE=9E?= =?UTF-8?q?=E4=B9=A0=E8=AE=B0=E5=BD=95=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practice/practice-record/index.vue | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/views/student/practice/practice-record/index.vue b/src/views/student/practice/practice-record/index.vue index 3adc38e..832c2b6 100644 --- a/src/views/student/practice/practice-record/index.vue +++ b/src/views/student/practice/practice-record/index.vue @@ -1,18 +1,17 @@ <template> -<div class="b-6"> - - <Tabs type="card" :centered="true"> - <TabPane key="1" tab="实习听课记录"> - <PracticeLectureRecord /> - </TabPane> - <TabPane key="2" tab="教育实习教案" force-render> - <PracticeLessonPlan /> - </TabPane> - <TabPane key="3" tab="教研活动心得"> - <TeachingResearchSummary /> - </TabPane> - </Tabs> -</div> + <div class="b-6"> + <Tabs type="card" :centered="true"> + <TabPane key="1" tab="实习听课记录"> + <PracticeLectureRecord /> + </TabPane> + <TabPane key="2" tab="教育实习教案" force-render> + <PracticeLessonPlan /> + </TabPane> + <TabPane key="3" tab="教研活动心得"> + <TeachingResearchSummary /> + </TabPane> + </Tabs> + </div> </template> <script lang="ts"> import { Tabs, TabPane } from "ant-design-vue"; -- Gitee From bdaad6f0b2931911e63c817ee22270d14d43e523 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Tue, 23 Aug 2022 18:57:54 +0800 Subject: [PATCH 07/12] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E5=AE=9E=E4=B9=A0=E5=90=AC=E8=AF=BE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/student/practice.ts | 14 +++- src/api/student/model/practice-model.ts | 2 +- .../practice-lecture-record/description.vue | 84 +++++++++++++++---- .../practice-lecture-record/index.vue | 47 +++++++---- 4 files changed, 110 insertions(+), 37 deletions(-) diff --git a/mock/student/practice.ts b/mock/student/practice.ts index 1a59f3e..b6d2d1a 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -7,14 +7,20 @@ function getLectureRecordList() { for (let i = 0; i < 30; i++) { const item: PracticeLectureRecordItem = { className: `${i}班`, - date: "2022/8/20", + startDate: "2022/8/20", docLink: "", experience: `体会与建议——${i}`, groupEvaluation: `小组评价——${i}`, lectureType: "类型1", personalSummary: `个人总结——${i}`, teacherName: `宋浩--${i}`, - teachingProcess: `听课过程——${i}`, + teachingProcess: `听课过程——${i}aaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccddddddddd + eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee + ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii + 巴拉巴拉巴拉巴拉`, recordId: i, lectureContent: `这是一条听课内容——${i}`, }; @@ -29,8 +35,8 @@ export default [ timeout: 100, method: "get", response: ({ query }) => { - const { pageNum = 1, pageSize = 10 } = query; - return resultPageSuccess(pageNum, pageSize, getLectureRecordList()); + const { page = 1, pageSize = 10 } = query; + return resultPageSuccess(page, pageSize, getLectureRecordList()); }, }, ] as MockMethod[]; diff --git a/src/api/student/model/practice-model.ts b/src/api/student/model/practice-model.ts index 16810e6..7f4a01c 100644 --- a/src/api/student/model/practice-model.ts +++ b/src/api/student/model/practice-model.ts @@ -8,7 +8,7 @@ interface BasePracticeModel { //小组评价 groupEvaluation: string; //日期 - date: string; + startDate: string; //文件链接 docLink: string; } diff --git a/src/views/student/practice/practice-record/practice-lecture-record/description.vue b/src/views/student/practice/practice-record/practice-lecture-record/description.vue index 3700440..f533c36 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/description.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/description.vue @@ -1,35 +1,91 @@ <template> - <div class="p-4 mx-auto flex flex-col space-y-3"> - <Description @register="register" /> - <a-button class="rounded-full" @click="router.back()">返回</a-button> - </div> + <BasicModal + v-bind="$attrs" + title="详情" + @register="registerModal" + :minHeight="650" + width="1000px" + :showOkBtn="false" + cancelText="关闭" + > + <Description @register="registerDesc" :column="2" size="middle" /> + </BasicModal> </template> <script lang="ts"> - import { defineComponent } from "vue"; - import { useRoute, useRouter } from "vue-router"; + import { defineComponent, ref } from "vue"; import { DescItem, Description, useDescription } from "/@/components/Description"; + import { BasicModal, useModalInner } from "/@/components/Modal"; export default defineComponent({ - name: "LectureRecordDescription", + name: "LectureRecordDescriptionModal", components: { Description, + BasicModal, }, + props: { userData: { type: Object } }, setup() { const schema: DescItem[] = [ + { + field: "startDate", + label: "听课时间", + labelMinWidth: 100, + contentMinWidth: 200, + }, { field: "lectureContent", label: "听课内容", + labelMinWidth: 100, + contentMinWidth: 200, + }, + { + field: "teacherName", + label: "任课教师", + labelMinWidth: 100, + contentMinWidth: 200, + }, + { + field: "lectureType", + label: "课程类型", + labelMinWidth: 100, + contentMinWidth: 200, + }, + { + field: "teachingProcess", + label: "教学过程", + span: 2, + labelMinWidth: 100, + }, + { + field: "experience", + label: "听课体会与建议", + span: 2, + labelMinWidth: 100, + }, + { + field: "personalSummary", + label: "个人反思与总结", + span: 2, + }, + { + field: "groupEvaluation", + label: "小组评价", + span: 2, + }, + { + field: "docLink", + label: "word文件下载地址", }, ]; - const route = useRoute(); - const router = useRouter(); - const [register] = useDescription({ - title: "详情", + const userData = ref({}); + const [registerModal] = useModalInner((data) => { + userData.value = data; + }); + const [registerDesc] = useDescription({ schema, - data: route.params, + data: userData, }); return { - register, - router, + registerDesc, + registerModal, }; }, }); diff --git a/src/views/student/practice/practice-record/practice-lecture-record/index.vue b/src/views/student/practice/practice-record/practice-lecture-record/index.vue index bce2696..f9d5344 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/index.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/index.vue @@ -10,8 +10,7 @@ :actions="[ { label: '详情', - icon: 'ic:outline-delete-outline', - onClick: handleMoreInfo.bind(null, record), + onClick: handleDesc.bind(null, record), }, { label: '编辑', @@ -20,25 +19,34 @@ { label: '删除', icon: 'ic:outline-delete-outline', - onClick: handleDelete.bind(null, record), + popConfirm: { + title: '确认删除?', + okText: '确认', + cancelText: '取消', + confirm: handleDelete.bind(null, record), + }, }, ]" /> </template> </template> </BasicTable> + <LectureRecordDescriptionModal @register="registerDescModal" /> + <LectureRecordEditModal @register="registerEditModal" /> </template> <script lang="ts"> - import { defineComponent } from "vue"; - import { useRouter } from "vue-router"; + import { defineComponent, ref } from "vue"; import { PracticeLectureRecordItem } from "/@/api/student/model/practice-model"; import { getLectureRecordPageById } from "/@/api/student/practice"; import { BasicColumn, TableAction, useTable } from "/@/components/Table"; import { BasicTable } from "/@/components/Table"; + import LectureRecordDescriptionModal from "./description.vue"; + import LectureRecordEditModal from "./edit.vue"; + import { useModal } from "/@/components/Modal"; export default defineComponent({ name: "PracticeLectureRecord", - components: { BasicTable, TableAction }, + components: { BasicTable, TableAction, LectureRecordDescriptionModal, LectureRecordEditModal }, setup() { const columns: BasicColumn[] = [ { @@ -80,33 +88,36 @@ fixed: "right", }, }); - const router = useRouter(); + const userData = ref<any>(null); + function handleReloadCurrent() { reload(); } - function handleMoreInfo(record: PracticeLectureRecordItem) { - console.log(record); - router.push({ - name: "LectureRecordDescription", - params: record, - }); - } + const [registerDescModal, { openModal: openDescModal }] = useModal(); + const [registerEditModal, { openModal: openEditModal }] = useModal(); - function handleDelete(record: PracticeLectureRecordItem) { - console.log(record); + function handleDesc(record: PracticeLectureRecordItem) { + openDescModal(true, record); } function handleEdit(record: PracticeLectureRecordItem) { - console.log(record); + openEditModal(true, record); + } + + function handleDelete(record: PracticeLectureRecordItem) { + console.log("删除", record); } return { registerTable, handleReloadCurrent, - handleMoreInfo, + handleDesc, handleDelete, handleEdit, + userData, + registerDescModal, + registerEditModal, }; }, }); -- Gitee From dc4b284ba0f3175ccc75df33d917d6775a21adaa Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Fri, 26 Aug 2022 11:26:27 +0800 Subject: [PATCH 08/12] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=AE=9E?= =?UTF-8?q?=E4=B9=A0=E5=90=AC=E8=AF=BE=E4=BF=A1=E6=81=AF=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E6=94=B9=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/student/practice.ts | 12 +- src/api/model/baseModel.ts | 4 +- src/api/student/model/practice-model.ts | 18 +- src/api/student/practice.ts | 228 ++++++++++++++++-- src/enums/tableOperationTypeEnum.ts | 4 + src/router/routes/modules/student/practice.ts | 14 -- .../practice/practice-record/index.vue | 12 +- .../practice-lecture-record/description.vue | 21 +- .../practice-lecture-record/edit.vue | 185 ++++++++++++++ .../practice-lecture-record/index.vue | 47 ++-- .../index.vue | 2 +- tests/server/index.ts | 30 +-- 12 files changed, 480 insertions(+), 97 deletions(-) create mode 100644 src/enums/tableOperationTypeEnum.ts create mode 100644 src/views/student/practice/practice-record/practice-lecture-record/edit.vue rename src/views/student/practice/practice-record/{teaching-research-summary => teaching-study-summary}/index.vue (83%) diff --git a/mock/student/practice.ts b/mock/student/practice.ts index b6d2d1a..0b6d028 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -1,14 +1,14 @@ -import { PracticeLectureRecordItem } from "/@/api/student/model/practice-model"; +import { LectureNoteItemModel } from "/@/api/student/model/practice-model"; import { resultPageSuccess } from "mock/_util"; import { MockMethod } from "vite-plugin-mock"; function getLectureRecordList() { - const list: PracticeLectureRecordItem[] = []; + const list: LectureNoteItemModel[] = []; for (let i = 0; i < 30; i++) { - const item: PracticeLectureRecordItem = { + const item: LectureNoteItemModel = { className: `${i}班`, startDate: "2022/8/20", - docLink: "", + docLink: "http://localhost:3300/static/upload/favicon.ico", experience: `体会与建议——${i}`, groupEvaluation: `小组评价——${i}`, lectureType: "类型1", @@ -21,7 +21,7 @@ function getLectureRecordList() { hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 巴拉巴拉巴拉巴拉`, - recordId: i, + noteId: i, lectureContent: `这是一条听课内容——${i}`, }; list.push(item); @@ -31,7 +31,7 @@ function getLectureRecordList() { export default [ { - url: "/dev-api/practice/record", + url: "/dev-api/lectureNote/page", timeout: 100, method: "get", response: ({ query }) => { diff --git a/src/api/model/baseModel.ts b/src/api/model/baseModel.ts index 1a36511..6ae825e 100644 --- a/src/api/model/baseModel.ts +++ b/src/api/model/baseModel.ts @@ -1,9 +1,9 @@ export interface BasicPageParams { - page: number; + pageNum: number; pageSize: number; } export interface BasicFetchResult<T> { - items: T[]; + content: T[]; total: number; } diff --git a/src/api/student/model/practice-model.ts b/src/api/student/model/practice-model.ts index 7f4a01c..e300a89 100644 --- a/src/api/student/model/practice-model.ts +++ b/src/api/student/model/practice-model.ts @@ -1,6 +1,6 @@ import { BasicFetchResult } from "../../model/baseModel"; -interface BasePracticeModel { +interface BasicPracticeModel { //教学(教研)过程 teachingProcess: string; //个人总结 @@ -14,8 +14,8 @@ interface BasePracticeModel { } //教育实习听课记录 -export interface PracticeLectureRecordItem extends BasePracticeModel { - recordId: number; +export interface LectureNoteItemModel extends BasicPracticeModel { + noteId: number; //听课内容 lectureContent: string; //任课教师名称 @@ -28,10 +28,10 @@ export interface PracticeLectureRecordItem extends BasePracticeModel { experience: string; } -export type PracticeLectureRecordListResultModel = BasicFetchResult<PracticeLectureRecordItem>; +export type LectureNoteListResultModel = BasicFetchResult<LectureNoteItemModel>; //教育实习教案信息 -export interface PracticeLessonPlanItem extends BasePracticeModel { +export interface LessonPlanItemModel extends BasicPracticeModel { planId: number; //课题名称 subjectName: string; @@ -41,11 +41,11 @@ export interface PracticeLessonPlanItem extends BasePracticeModel { designIdea: string; } -export type PracticeLessonPlanListResultModel = BasicFetchResult<PracticeLessonPlanItem>; +export type LessonPlanListResultModel = BasicFetchResult<LessonPlanItemModel>; //教研活动心得体会 -export interface ResearchActivityItem { - researchId: number; +export interface TeachingStudyItemModel extends BasicPracticeModel { + studyId: number; //教研内容 content: string; //教研方式 @@ -54,4 +54,4 @@ export interface ResearchActivityItem { designIdea: string; } -export type ResearchActivityResultModel = BasicFetchResult<ResearchActivityItem>; +export type TeachingStudyListResultModel = BasicFetchResult<TeachingStudyItemModel>; diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts index d4012d7..efbdd7f 100644 --- a/src/api/student/practice.ts +++ b/src/api/student/practice.ts @@ -1,23 +1,112 @@ import { - PracticeLectureRecordListResultModel, - PracticeLessonPlanListResultModel, - ResearchActivityResultModel, + LectureNoteItemModel, + LectureNoteListResultModel, + LessonPlanItemModel, + LessonPlanListResultModel, + TeachingStudyItemModel, + TeachingStudyListResultModel, } from "./model/practice-model"; -import { UIdPageParams } from "../model/baseModel"; +import { BasicPageParams } from "../model/baseModel"; import { defHttp } from "/@/utils/http/axios"; + enum Api { - LectureRecord = "/practice/record", - LessonPlan = "/practice/plan", - ResearchActivity = "/practice/research", + GetLectureRecordPage = "/lectureNote/page", + SaveLectureRecord = "/lectureNote/save", + UpdateLectureRecord = "/lectureNote/update", + RemoveLectureRecord = "/lectureNote/remove", + GetLessonPlanPage = "/lessonPlan/page", + SaveLessonPlan = "/lessonPlan/save", + UpdateLessonPlan = "/lessonPlan/update", + RemoveLessonPlan = "/lessonPlan/remove", + SetLessonPlanRemark = "/lessonPlan/setRemark", + GetLessonPlanRemark = "/lessonPlan/getRemark", + GetTeachingStudyPage = "/teachingStudy/page", + SaveTeachingStudy = "/teachingStudy/save", + UpdateTeachingStudy = "/teachingStudy/update", + RemoveTeachingStudy = "/teachingStudy/remove", + SetTeachingStudyRemark = "/teachingStudy/setRemark", } /** - * @description 通过用户Id分页查询实习听课记录 - * @param params 查询参数 + * @description 分页查询用户本人的实习听课记录 + * @param params 分页查询参数 + */ +export const getLectureRecordPage = (params: BasicPageParams) => + defHttp.get<LectureNoteListResultModel>({ + url: Api.GetLectureRecordPage, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); + +/** + * @description 分页查询特定用户的实习听课记录 + * @param params 分页查询参数 + * @param userId 用户Id + */ +export const getLectureRecordPageById = (params: BasicPageParams, userId: number) => + defHttp.get<LectureNoteListResultModel>({ + url: Api.GetLectureRecordPage + `/${userId}`, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); + +/** + * @description 新增实习听课记录 + * @param record + */ +export const saveLectureRecord = (record: LectureNoteItemModel) => + defHttp.post({ + url: Api.SaveLectureRecord, + params: record, + }); + +/** + * @description 更新实习听课记录 + * @param record + */ +export const updateLectureRecord = (record: LectureNoteItemModel) => + defHttp.put({ + url: Api.UpdateLectureRecord, + params: record, + }); + +/** + * @description 删除实习听课记录 + * @param noteId + */ +export const removeLectureRecord = (noteId: number) => + defHttp.delete({ + url: Api.RemoveLectureRecord + `/${noteId}`, + }); + +/** + * @description 查询本人的实习教案信息 + * @param params 分页查询参数 + */ +export const getLessonPlanPage = (params: BasicPageParams) => + defHttp.get<LessonPlanListResultModel>({ + url: Api.GetLessonPlanPage, + params, + headers: { + // @ts-ignore + ignoreCancelToken: true, + }, + }); + +/** + * @description 查询特定用户的实习教案信息 + * @param params 分页查询参数 + * @param userId 用户ID */ -export const getLectureRecordPageById = (params: UIdPageParams) => - defHttp.get<PracticeLectureRecordListResultModel>({ - url: Api.LectureRecord, +export const getLessonPlanPageById = (params: BasicPageParams, userId: number) => + defHttp.get<LessonPlanListResultModel>({ + url: Api.GetLessonPlanPage + `/${userId}`, params, headers: { // @ts-ignore @@ -26,31 +115,122 @@ export const getLectureRecordPageById = (params: UIdPageParams) => }); /** - * 通过用户Id分页查询实习教案信息 - * @param params 查询参数 + * @description 新增实习教案信息 + * @param lessonPlan + */ +export const saveLessonPlan = (lessonPlan: LessonPlanItemModel) => + defHttp.post({ + url: Api.SaveLessonPlan, + params: lessonPlan, + }); + +/** + * @description 更新实习教案信息 + * @param lessonPlan + */ +export const updateLessonPlan = (lessonPlan: LessonPlanItemModel) => + defHttp.put({ + url: Api.UpdateLessonPlan, + params: lessonPlan, + }); + +/** + * @description 删除实习教案信息 + * @param planId + */ +export const removeLessonPlanById = (planId: number) => + defHttp.delete({ + url: Api.RemoveLessonPlan + `/${planId}`, + }); + +/** + * @description 小组长评价小组成员的实习教案 + * @param userId 小组长要评价的组员用户ID + * @param planId 小组长要评价的组员教案ID + * @param content 评价内容 + */ +export const remarkLessonPlan = (userId: number, planId: number, content: string) => + defHttp.put({ + url: Api.SetLessonPlanRemark + `/${userId}/${planId}`, + params: { content }, + }); + +/** + * @description 小组长获取小组成员实习教案的评语内容 + * @param userId 小组成员用户ID + * @param planId 小组成员教案ID + */ +export const getLessonPlanRemark = (userId: number, planId: number) => + defHttp.get<string>({ + url: Api.GetLessonPlanRemark + `/${userId}/${planId}`, + }); + +/** + * @description 分页查询本人的教研活动信息 + * @param params 分页查询参数 */ -export const getLessonPlanPageById = (params: UIdPageParams) => { - defHttp.get<PracticeLessonPlanListResultModel>({ - url: Api.LessonPlan, +export const getTeachingStudyPage = (params: BasicPageParams) => + defHttp.get<TeachingStudyListResultModel>({ + url: Api.GetTeachingStudyPage, params, headers: { // @ts-ignore ignoreCancelToken: true, }, }); -}; /** - * 通过用户Id查询教研活动信息 - * @param params 查询参数)息信页分和di含包( + * @description 分页查询特定用户的教研活动信息 + * @param params 分页查询参数 + * @param userId 用户ID */ -export const getResearchActivity = (params: UIdPageParams) => { - defHttp.get<ResearchActivityResultModel>({ - url: Api.ResearchActivity, +export const getTeachingStudyPageById = (params: BasicPageParams, userId: number) => + defHttp.get<TeachingStudyListResultModel>({ + url: Api.GetTeachingStudyPage + `/${userId}`, params, headers: { // @ts-ignore ignoreCancelToken: true, }, }); -}; + +/** + * @description 新增教研活动信息 + * @param teachingStudy + */ +export const saveTeachingStudy = (teachingStudy: TeachingStudyItemModel) => + defHttp.post({ + url: Api.SaveTeachingStudy, + params: teachingStudy, + }); + +/** + * @description 更新教研活动信息 + * @param teachingStudy + */ +export const updateTeachingStudy = (teachingStudy: TeachingStudyItemModel) => + defHttp.put({ + url: Api.UpdateTeachingStudy, + params: teachingStudy, + }); + +/** + * @description 删除教研活动信息 + * @param studyId + */ +export const removeTeachingStudy = (studyId: number) => + defHttp.delete({ + url: Api.RemoveTeachingStudy + `/${studyId}`, + }); + +/** + * @description 小组长评价小组成员的教研活动 + * @param userId 小组长要评价的组员用户ID + * @param studyId 小组长要评价的组员教研活动ID + * @param content 评价内容 + */ +export const remarkTeachingStudy = (userId: number, studyId: number, content: string) => + defHttp.put({ + url: Api.SetLessonPlanRemark + `/${userId}/${studyId}`, + params: { content }, + }); diff --git a/src/enums/tableOperationTypeEnum.ts b/src/enums/tableOperationTypeEnum.ts new file mode 100644 index 0000000..91f18c4 --- /dev/null +++ b/src/enums/tableOperationTypeEnum.ts @@ -0,0 +1,4 @@ +export enum TableOperationTypeEnum { + UPDATE = "update", + SAVE = "save", +} diff --git a/src/router/routes/modules/student/practice.ts b/src/router/routes/modules/student/practice.ts index a28757c..12422b9 100644 --- a/src/router/routes/modules/student/practice.ts +++ b/src/router/routes/modules/student/practice.ts @@ -21,20 +21,6 @@ const practice: AppRouteModule = { icon: "simple-icons:about-dot-me", hideChildrenInMenu: true, }, - children: [ - { - path: "description", - name: "LectureRecordDescription", - component: () => - import( - "/@/views/student/practice/practice-record/practice-lecture-record/description.vue" - ), - meta: { - title: "详情", - hideMenu: true, - }, - }, - ], }, ], }; diff --git a/src/views/student/practice/practice-record/index.vue b/src/views/student/practice/practice-record/index.vue index 832c2b6..eee0c66 100644 --- a/src/views/student/practice/practice-record/index.vue +++ b/src/views/student/practice/practice-record/index.vue @@ -2,13 +2,13 @@ <div class="b-6"> <Tabs type="card" :centered="true"> <TabPane key="1" tab="实习听课记录"> - <PracticeLectureRecord /> + <PracticeLectureNote /> </TabPane> <TabPane key="2" tab="教育实习教案" force-render> <PracticeLessonPlan /> </TabPane> <TabPane key="3" tab="教研活动心得"> - <TeachingResearchSummary /> + <TeachingStudySummary /> </TabPane> </Tabs> </div> @@ -16,17 +16,17 @@ <script lang="ts"> import { Tabs, TabPane } from "ant-design-vue"; import { defineComponent } from "vue"; - import PracticeLectureRecord from "/@/views/student/practice/practice-record/practice-lecture-record/index.vue"; + import PracticeLectureNote from "/@/views/student/practice/practice-record/practice-lecture-record/index.vue"; import PracticeLessonPlan from "/@/views/student/practice/practice-record/practice-lesson-plan/index.vue"; - import TeachingResearchSummary from "/@/views/student/practice/practice-record/teaching-research-summary/index.vue"; + import TeachingStudySummary from "/@/views/student/practice/practice-record/teaching-study-summary/index.vue"; export default defineComponent({ name: "PracticeRecord", components: { Tabs, TabPane, - PracticeLectureRecord, + PracticeLectureNote, PracticeLessonPlan, - TeachingResearchSummary, + TeachingStudySummary, }, }); </script> diff --git a/src/views/student/practice/practice-record/practice-lecture-record/description.vue b/src/views/student/practice/practice-record/practice-lecture-record/description.vue index f533c36..1150168 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/description.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/description.vue @@ -3,7 +3,7 @@ v-bind="$attrs" title="详情" @register="registerModal" - :minHeight="650" + :minHeight="550" width="1000px" :showOkBtn="false" cancelText="关闭" @@ -12,11 +12,12 @@ </BasicModal> </template> <script lang="ts"> - import { defineComponent, ref } from "vue"; + import { defineComponent, h, ref } from "vue"; import { DescItem, Description, useDescription } from "/@/components/Description"; import { BasicModal, useModalInner } from "/@/components/Modal"; + export default defineComponent({ - name: "LectureRecordDescriptionModal", + name: "LectureNoteDescriptionModal", components: { Description, BasicModal, @@ -30,11 +31,17 @@ labelMinWidth: 100, contentMinWidth: 200, }, + { + field: "className", + label: "听课班级", + labelMinWidth: 100, + }, { field: "lectureContent", label: "听课内容", labelMinWidth: 100, contentMinWidth: 200, + span: 2, }, { field: "teacherName", @@ -72,7 +79,13 @@ }, { field: "docLink", - label: "word文件下载地址", + label: "word文件", + render: (val) => { + if (val === "") { + return "无"; + } + return h("a", { href: val, target: "_blank", text: "点击下载" }); + }, }, ]; const userData = ref({}); diff --git a/src/views/student/practice/practice-record/practice-lecture-record/edit.vue b/src/views/student/practice/practice-record/practice-lecture-record/edit.vue new file mode 100644 index 0000000..092c459 --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lecture-record/edit.vue @@ -0,0 +1,185 @@ +<template> + <BasicModal + v-bind="$attrs" + :title="operType === 'update' ? '编辑' : '添加'" + @register="registerModal" + :minHeight="650" + width="900px" + :showOkBtn="false" + :showCancelBtn="false" + > + <BasicForm @register="registerForm" :model="formData" @submit="handleSubmit" /> + </BasicModal> +</template> +<script lang="ts"> + import { defineComponent, ref } from "vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { BasicForm, FormSchema, useForm } from "/@/components/Form"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; + import { uploadApi } from "/@/api/sys/upload"; + import { saveLectureRecord, updateLectureRecord } from "/@/api/student/practice"; + + export default defineComponent({ + name: "LectureNoteEditModal", + components: { + BasicForm, + BasicModal, + }, + setup() { + const schemas: FormSchema[] = [ + { + field: "noteId", + label: "id", + component: "Input", + show: false, + }, + { + field: "startDate", + label: "听课时间", + component: "DatePicker", + required: true, + colProps: { + span: 12, + }, + }, + { + field: "className", + label: "听课班级", + component: "Input", + colProps: { + span: 12, + }, + }, + { + field: "lectureContent", + label: "听课内容", + component: "Input", + required: true, + colProps: { + span: 24, + }, + }, + { + field: "teacherName", + label: "任课教师", + component: "Input", + colProps: { + span: 12, + }, + }, + { + field: "lectureType", + label: "课程类型", + component: "Input", + colProps: { + span: 12, + }, + }, + { + field: "teachingProcess", + label: "教学过程", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "experience", + label: "听课体会与建议", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "personalSummary", + label: "个人反思与总结", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "docLink", + label: "word文档", + component: "Upload", + colProps: { + span: 8, + }, + componentProps: { + api: uploadApi, + multiple: false, + maxNumber: 1, + accept: ["doc,", "docx"], + }, + }, + ]; + const formData = ref({ + className: "", + docLink: [] as string[], + experience: "", + groupEvaluation: "", + lectureContent: "", + lectureType: "", + noteId: 0, + personalSummary: "", + startDate: "", + teacherName: "", + teachingProcess: "", + }); + const operType = ref(""); + const [registerModal, { closeModal }] = useModalInner(({ record, operType: type }) => { + operType.value = type; + if (type == TableOperationTypeEnum.UPDATE) { + formData.value = record; + formData.value.docLink = record.docLink === "" ? [] : [record.docLink]; + } + }); + + const [registerForm] = useForm({ + labelWidth: 100, + labelAlign: "right", + showResetButton: false, + showSubmitButton: true, + submitButtonOptions: { + text: "提交", + }, + schemas, + actionColOptions: { + span: 24, + }, + }); + + function handleSubmit(value) { + if (operType.value === TableOperationTypeEnum.SAVE) { + return saveLectureRecord({ ...value, docLink: value.docLink[0] }).then(() => + closeModal(), + ); + } else if (operType.value === TableOperationTypeEnum.UPDATE) { + return updateLectureRecord({ ...value, docLink: value.docLink[0] }).then(() => + closeModal(), + ); + } + return Promise.reject("未知操作"); + } + + return { + uploadApi, + registerForm, + registerModal, + handleSubmit, + formData, + operType, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lecture-record/index.vue b/src/views/student/practice/practice-record/practice-lecture-record/index.vue index f9d5344..6d6e7dd 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/index.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/index.vue @@ -1,6 +1,7 @@ <template> <BasicTable @register="registerTable"> <template #toolbar> + <a-button type="primary" @click="handleSave"> 新增</a-button> <a-button type="primary" @click="handleReloadCurrent"> 刷新</a-button> </template> <template #bodyCell="{ column, record }"> @@ -10,10 +11,12 @@ :actions="[ { label: '详情', + icon: 'ant-design:info-circle-outlined', onClick: handleDesc.bind(null, record), }, { label: '编辑', + icon: 'akar-icons:edit', onClick: handleEdit.bind(null, record), }, { @@ -31,32 +34,33 @@ </template> </template> </BasicTable> - <LectureRecordDescriptionModal @register="registerDescModal" /> - <LectureRecordEditModal @register="registerEditModal" /> + <LectureNoteDescriptionModal @register="registerDescModal" /> + <LectureNoteEditModal @register="registerEditModal" /> </template> <script lang="ts"> import { defineComponent, ref } from "vue"; - import { PracticeLectureRecordItem } from "/@/api/student/model/practice-model"; - import { getLectureRecordPageById } from "/@/api/student/practice"; + import { LectureNoteItemModel } from "/@/api/student/model/practice-model"; + import { getLectureRecordPage } from "/@/api/student/practice"; import { BasicColumn, TableAction, useTable } from "/@/components/Table"; import { BasicTable } from "/@/components/Table"; - import LectureRecordDescriptionModal from "./description.vue"; - import LectureRecordEditModal from "./edit.vue"; + import LectureNoteDescriptionModal from "./description.vue"; + import LectureNoteEditModal from "./edit.vue"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; import { useModal } from "/@/components/Modal"; export default defineComponent({ - name: "PracticeLectureRecord", - components: { BasicTable, TableAction, LectureRecordDescriptionModal, LectureRecordEditModal }, + name: "PracticeLectureNote", + components: { BasicTable, TableAction, LectureNoteDescriptionModal, LectureNoteEditModal }, setup() { const columns: BasicColumn[] = [ { title: "Id", - dataIndex: "recordId", + dataIndex: "noteId", defaultHidden: true, }, { title: "听课时间", - dataIndex: "date", + dataIndex: "startDate", width: 150, sorter: true, }, @@ -65,6 +69,11 @@ dataIndex: "lectureContent", width: 150, }, + { + title: "听课班级", + dataIndex: "className", + width: 150, + }, { title: "任课教师", dataIndex: "teacherName", @@ -73,11 +82,12 @@ { title: "课程类型", dataIndex: "lectureType", + width: 150, }, ]; const [registerTable, { reload }] = useTable({ title: "实习听课记录", - api: getLectureRecordPageById, + api: getLectureRecordPage, columns, rowKey: "recordId", pagination: { pageSize: 10 }, @@ -97,15 +107,19 @@ const [registerDescModal, { openModal: openDescModal }] = useModal(); const [registerEditModal, { openModal: openEditModal }] = useModal(); - function handleDesc(record: PracticeLectureRecordItem) { + function handleDesc(record: LectureNoteItemModel) { openDescModal(true, record); } - function handleEdit(record: PracticeLectureRecordItem) { - openEditModal(true, record); + function handleEdit(record: LectureNoteItemModel) { + openEditModal(true, { record, operType: TableOperationTypeEnum.UPDATE }); } - function handleDelete(record: PracticeLectureRecordItem) { + function handleSave() { + openEditModal(true, { operType: TableOperationTypeEnum.SAVE }); + } + + function handleDelete(record: LectureNoteItemModel) { console.log("删除", record); } @@ -115,9 +129,10 @@ handleDesc, handleDelete, handleEdit, - userData, + handleSave, registerDescModal, registerEditModal, + userData, }; }, }); diff --git a/src/views/student/practice/practice-record/teaching-research-summary/index.vue b/src/views/student/practice/practice-record/teaching-study-summary/index.vue similarity index 83% rename from src/views/student/practice/practice-record/teaching-research-summary/index.vue rename to src/views/student/practice/practice-record/teaching-study-summary/index.vue index b765772..cda3efd 100644 --- a/src/views/student/practice/practice-record/teaching-research-summary/index.vue +++ b/src/views/student/practice/practice-record/teaching-study-summary/index.vue @@ -5,7 +5,7 @@ import { defineComponent } from "vue"; export default defineComponent({ - name: "TeachingResearchSummary", + name: "TeachingStudySummary", setup() {}, }); </script> diff --git a/tests/server/index.ts b/tests/server/index.ts index 6c92d76..ba8b6d8 100644 --- a/tests/server/index.ts +++ b/tests/server/index.ts @@ -1,30 +1,30 @@ -import Koa from 'koa'; -import path from 'path'; -import Router from 'koa-router'; -import body from 'koa-body'; -import cors from 'koa2-cors'; -import koaStatic from 'koa-static'; -import websockify from 'koa-websocket'; -import route from 'koa-route'; +import Koa from "koa"; +import path from "path"; +import Router from "koa-router"; +import body from "koa-body"; +import cors from "koa2-cors"; +import koaStatic from "koa-static"; +import websockify from "koa-websocket"; +import route from "koa-route"; -import AppRoutes from './routes'; +import AppRoutes from "./routes"; -const PORT = 3300; +const PORT = 8633; const app = websockify(new Koa()); app.ws.use(function (ctx, next) { - ctx.websocket.send('connection succeeded!'); + ctx.websocket.send("connection succeeded!"); return next(ctx); }); app.ws.use( - route.all('/test', function (ctx) { + route.all("/test", function (ctx) { // ctx.websocket.send('Hello World'); - ctx.websocket.on('message', function (message) { + ctx.websocket.on("message", function (message) { // do something with the message from client - if (message !== 'ping') { + if (message !== "ping") { const data = JSON.stringify({ id: Math.ceil(Math.random() * 1000), time: new Date().getTime(), @@ -45,7 +45,7 @@ AppRoutes.forEach((route) => router[route.method](route.path, route.action)); app.use(cors()); app.use( body({ - encoding: 'gzip', + encoding: "gzip", multipart: true, formidable: { // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录 -- Gitee From 2a00b39a3c69a7316e812b644efdbb322abd3576 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Fri, 26 Aug 2022 15:21:00 +0800 Subject: [PATCH 09/12] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=AE=9E?= =?UTF-8?q?=E4=B9=A0=E6=95=99=E6=A1=88=E4=BF=A1=E6=81=AF=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E6=94=B9=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/student/practice.ts | 33 +++- src/api/student/model/practice-model.ts | 2 +- .../practice-lesson-plan/description.vue | 93 ++++++++++ .../practice-lesson-plan/edit.vue | 174 ++++++++++++++++++ .../practice-lesson-plan/index.vue | 124 ++++++++++++- 5 files changed, 421 insertions(+), 5 deletions(-) create mode 100644 src/views/student/practice/practice-record/practice-lesson-plan/description.vue create mode 100644 src/views/student/practice/practice-record/practice-lesson-plan/edit.vue diff --git a/mock/student/practice.ts b/mock/student/practice.ts index 0b6d028..5b8075f 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -1,4 +1,4 @@ -import { LectureNoteItemModel } from "/@/api/student/model/practice-model"; +import { LectureNoteItemModel, LessonPlanItemModel } from "/@/api/student/model/practice-model"; import { resultPageSuccess } from "mock/_util"; import { MockMethod } from "vite-plugin-mock"; @@ -29,6 +29,28 @@ function getLectureRecordList() { return list; } +function getLessonPlanList() { + const list: LessonPlanItemModel[] = []; + for (let i = 0; i < 30; i++) { + const item: LessonPlanItemModel = { + designIdea: "设计思路-----" + i, + docLink: "http://localhost:3100/static/upload/favicon.ico", + groupEvaluation: "小组评价————" + i, + personalSummary: "个人总结————" + i, + planId: i, + startDate: "2022/8/26", + subjectName: "课题名称————" + i, + subjectType: "课题类型1", + teachingProcess: `教学过程aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbccccccc + ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd + eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee + 巴拉巴拉${i}`, + }; + list.push(item); + } + return list; +} + export default [ { url: "/dev-api/lectureNote/page", @@ -39,4 +61,13 @@ export default [ return resultPageSuccess(page, pageSize, getLectureRecordList()); }, }, + { + url: "/dev-api/lessonPlan/page", + timeout: 100, + method: "get", + response: ({ query }) => { + const { page = 1, pageSize = 10 } = query; + return resultPageSuccess(page, pageSize, getLessonPlanList()); + }, + }, ] as MockMethod[]; diff --git a/src/api/student/model/practice-model.ts b/src/api/student/model/practice-model.ts index e300a89..e698ebd 100644 --- a/src/api/student/model/practice-model.ts +++ b/src/api/student/model/practice-model.ts @@ -36,7 +36,7 @@ export interface LessonPlanItemModel extends BasicPracticeModel { //课题名称 subjectName: string; //课程类型 - classType: string; + subjectType: string; //课程设计思路 designIdea: string; } diff --git a/src/views/student/practice/practice-record/practice-lesson-plan/description.vue b/src/views/student/practice/practice-record/practice-lesson-plan/description.vue new file mode 100644 index 0000000..e02320f --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lesson-plan/description.vue @@ -0,0 +1,93 @@ +<template> + <BasicModal + v-bind="$attrs" + title="详情" + @register="registerModal" + :minHeight="550" + width="1000px" + :showOkBtn="false" + cancelText="关闭" + > + <Description @register="registerDesc" :column="2" size="middle" /> + </BasicModal> +</template> +<script lang="ts"> + import { defineComponent, h, ref } from "vue"; + import { DescItem, Description, useDescription } from "/@/components/Description"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + + export default defineComponent({ + name: "LessonPlanDescriptionModal", + components: { + Description, + BasicModal, + }, + props: { userData: { type: Object } }, + setup() { + const schema: DescItem[] = [ + { + field: "startDate", + label: "听课时间", + labelMinWidth: 100, + contentMinWidth: 200, + }, + { + field: "subjectType", + label: "课程类型", + labelMinWidth: 100, + }, + { + field: "subjectName", + label: "课题名称", + labelMinWidth: 100, + contentMinWidth: 200, + span: 2, + }, + { + field: "teachingProcess", + label: "教学过程", + span: 2, + labelMinWidth: 100, + }, + { + field: "designIdea", + label: "课程设计思路", + span: 2, + labelMinWidth: 100, + }, + { + field: "personalSummary", + label: "个人反思与总结", + span: 2, + }, + { + field: "groupEvaluation", + label: "小组评价", + span: 2, + }, + { + field: "docLink", + label: "word文件", + render: (val) => { + if (val === "") { + return "无"; + } + return h("a", { href: val, target: "_blank", text: "点击下载" }); + }, + }, + ]; + const userData = ref({}); + const [registerModal] = useModalInner((data) => { + userData.value = data; + }); + const [registerDesc] = useDescription({ + schema, + data: userData, + }); + return { + registerDesc, + registerModal, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lesson-plan/edit.vue b/src/views/student/practice/practice-record/practice-lesson-plan/edit.vue new file mode 100644 index 0000000..83e0d65 --- /dev/null +++ b/src/views/student/practice/practice-record/practice-lesson-plan/edit.vue @@ -0,0 +1,174 @@ +<template> + <BasicModal + v-bind="$attrs" + :title="operType === 'update' ? '编辑' : '添加'" + @register="registerModal" + :minHeight="650" + width="900px" + :showOkBtn="false" + :showCancelBtn="false" + :closeFunc="handleModalClose" + > + <BasicForm @register="registerForm" :model="formData" @submit="handleSubmit" /> + </BasicModal> +</template> +<script lang="ts"> + import { defineComponent, ref } from "vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { BasicForm, FormSchema, useForm } from "/@/components/Form"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; + import { uploadApi } from "/@/api/sys/upload"; + import { saveLessonPlan, updateLessonPlan } from "/@/api/student/practice"; + import { useMessage } from "/@/hooks/web/useMessage"; + + export default defineComponent({ + name: "LessonPlanEditModal", + components: { + BasicForm, + BasicModal, + }, + setup() { + const schemas: FormSchema[] = [ + { + field: "planId", + label: "id", + component: "Input", + show: false, + }, + { + field: "startDate", + label: "教案撰写时间", + component: "DatePicker", + required: true, + colProps: { + span: 12, + }, + }, + { + field: "subjectName", + label: "课题名称", + component: "Input", + required: true, + colProps: { + span: 12, + }, + }, + { + field: "subjectType", + label: "课题类型", + component: "Input", + colProps: { + span: 24, + }, + }, + { + field: "teachingProcess", + label: "教学过程", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "designIdea", + label: "课程设计思路", + component: "InputTextArea", + colProps: { + span: 24, + }, + }, + { + field: "personalSummary", + label: "个人反思与总结", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "docLink", + label: "word文档", + component: "Upload", + colProps: { + span: 8, + }, + componentProps: { + api: uploadApi, + multiple: false, + maxNumber: 1, + accept: ["doc,", "docx"], + }, + }, + ]; + const empty = { + subjectType: "", + designIdea: "", + docLink: [] as string[], + groupEvaluation: "", + personalSummary: "", + planId: 0, + startDate: "", + subjectName: "", + teachingProcess: "", + }; + const formData = ref(empty); + const operType = ref(""); + const [registerModal, { closeModal }] = useModalInner(({ plan, operType: type }) => { + operType.value = type; + if (type == TableOperationTypeEnum.UPDATE) { + formData.value = { ...plan, docLink: plan.docLink === "" ? [] : [plan.docLink] }; + } + }); + + const [registerForm] = useForm({ + labelWidth: 100, + labelAlign: "right", + showResetButton: false, + showSubmitButton: true, + submitButtonOptions: { + text: "提交", + }, + schemas, + actionColOptions: { + span: 24, + }, + }); + + const { createMessage } = useMessage(); + + function handleSubmit(value) { + if (operType.value === TableOperationTypeEnum.SAVE) { + return saveLessonPlan({ ...value, docLink: value.docLink[0] }) + .then(() => closeModal()) + .catch((reason) => createMessage.error("发生错误:" + reason + "请联系系统管理员")); + } else if (operType.value === TableOperationTypeEnum.UPDATE) { + return updateLessonPlan({ ...value, docLink: value.docLink[0] }) + .then(() => closeModal()) + .catch((reason) => createMessage.error("发生错误:" + reason + "请联系系统管理员")); + } + return Promise.reject("未知操作"); + } + + function handleModalClose() { + formData.value = empty; + return Promise.resolve(true); + } + + return { + uploadApi, + registerForm, + registerModal, + handleSubmit, + handleModalClose, + formData, + operType, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/practice-lesson-plan/index.vue b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue index e60767d..62cb769 100644 --- a/src/views/student/practice/practice-record/practice-lesson-plan/index.vue +++ b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue @@ -1,11 +1,129 @@ <template> - <h1>教案信息</h1> + <BasicTable @register="registerTable"> + <template #toolbar> + <a-button type="primary" @click="handleSave"> 新增</a-button> + <a-button type="primary" @click="handleReloadCurrent"> 刷新</a-button> + </template> + <template #bodyCell="{ column, record }"> + <template v-if="column.key === 'action'"> + <TableAction + stopButtonPropagation + :actions="[ + { + label: '详情', + icon: 'ant-design:info-circle-outlined', + onClick: handleDesc.bind(null, record), + }, + { + label: '编辑', + icon: 'akar-icons:edit', + onClick: handleEdit.bind(null, record), + }, + { + label: '删除', + icon: 'ic:outline-delete-outline', + popConfirm: { + title: '确认删除?', + okText: '确认', + cancelText: '取消', + confirm: handleDelete.bind(null, record), + }, + }, + ]" + /> + </template> + </template> + </BasicTable> + <LessonPlanDescriptionModal @register="registerDescModal" /> + <LessonPlanEditModal @register="registerEditModal" /> </template> <script lang="ts"> - import { defineComponent } from "vue"; + import { defineComponent, ref } from "vue"; + import { LectureNoteItemModel, LessonPlanItemModel } from "/@/api/student/model/practice-model"; + import { getLessonPlanPage } from "/@/api/student/practice"; + import { BasicColumn, TableAction, useTable } from "/@/components/Table"; + import { BasicTable } from "/@/components/Table"; + import LessonPlanDescriptionModal from "./description.vue"; + import LessonPlanEditModal from "./edit.vue"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; + import { useModal } from "/@/components/Modal"; export default defineComponent({ name: "PracticeLessonPlan", - setup() {}, + components: { BasicTable, TableAction, LessonPlanDescriptionModal, LessonPlanEditModal }, + setup() { + const columns: BasicColumn[] = [ + { + title: "Id", + dataIndex: "planId", + defaultHidden: true, + }, + { + title: "教案撰写时间", + dataIndex: "startDate", + width: 150, + sorter: true, + }, + { + title: "课题名称", + dataIndex: "subjectName", + width: 150, + }, + { + title: "课程类型", + dataIndex: "subjectType", + width: 150, + }, + ]; + const [registerTable, { reload }] = useTable({ + title: "教育实习教案", + api: getLessonPlanPage, + columns, + rowKey: "planId", + pagination: { pageSize: 10 }, + actionColumn: { + title: "操作", + dataIndex: "action", + width: 240, + fixed: "right", + }, + }); + const userData = ref<any>(null); + + function handleReloadCurrent() { + reload(); + } + + const [registerDescModal, { openModal: openDescModal }] = useModal(); + const [registerEditModal, { openModal: openEditModal }] = useModal(); + + function handleDesc(plan: LessonPlanItemModel) { + openDescModal(true, plan); + } + + function handleEdit(plan: LessonPlanItemModel) { + openEditModal(true, { plan, operType: TableOperationTypeEnum.UPDATE }); + } + + function handleSave() { + openEditModal(true, { operType: TableOperationTypeEnum.SAVE }); + } + + function handleDelete(record: LectureNoteItemModel) { + console.log("删除", record); + } + + return { + registerTable, + handleReloadCurrent, + handleDesc, + handleDelete, + handleEdit, + handleSave, + registerDescModal, + registerEditModal, + userData, + }; + }, }); </script> -- Gitee From f5b60a75e8ce15c28e7de41e4489f79d65872c44 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Fri, 26 Aug 2022 15:29:16 +0800 Subject: [PATCH 10/12] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AE=9E?= =?UTF-8?q?=E4=B9=A0=E5=90=AC=E8=AF=BE=E8=AE=B0=E5=BD=95=E5=85=88=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=86=8D=E6=89=93=E5=BC=80=E6=96=B0=E5=A2=9E=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E5=90=8E=E8=A1=A8=E5=8D=95=E6=95=B0=E6=8D=AE=E4=B8=8D?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/student/practice.ts | 28 +++++++++---------- .../practice-lecture-record/edit.vue | 25 ++++++++++------- .../practice-lecture-record/index.vue | 16 +++++------ 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts index efbdd7f..90e095a 100644 --- a/src/api/student/practice.ts +++ b/src/api/student/practice.ts @@ -10,10 +10,10 @@ import { BasicPageParams } from "../model/baseModel"; import { defHttp } from "/@/utils/http/axios"; enum Api { - GetLectureRecordPage = "/lectureNote/page", - SaveLectureRecord = "/lectureNote/save", - UpdateLectureRecord = "/lectureNote/update", - RemoveLectureRecord = "/lectureNote/remove", + GetLectureNotePage = "/lectureNote/page", + SaveLectureNote = "/lectureNote/save", + UpdateLectureNote = "/lectureNote/update", + RemoveLectureNote = "/lectureNote/remove", GetLessonPlanPage = "/lessonPlan/page", SaveLessonPlan = "/lessonPlan/save", UpdateLessonPlan = "/lessonPlan/update", @@ -31,9 +31,9 @@ enum Api { * @description 分页查询用户本人的实习听课记录 * @param params 分页查询参数 */ -export const getLectureRecordPage = (params: BasicPageParams) => +export const getLectureNotePage = (params: BasicPageParams) => defHttp.get<LectureNoteListResultModel>({ - url: Api.GetLectureRecordPage, + url: Api.GetLectureNotePage, params, headers: { // @ts-ignore @@ -46,9 +46,9 @@ export const getLectureRecordPage = (params: BasicPageParams) => * @param params 分页查询参数 * @param userId 用户Id */ -export const getLectureRecordPageById = (params: BasicPageParams, userId: number) => +export const getLectureNotePageById = (params: BasicPageParams, userId: number) => defHttp.get<LectureNoteListResultModel>({ - url: Api.GetLectureRecordPage + `/${userId}`, + url: Api.GetLectureNotePage + `/${userId}`, params, headers: { // @ts-ignore @@ -60,9 +60,9 @@ export const getLectureRecordPageById = (params: BasicPageParams, userId: number * @description 新增实习听课记录 * @param record */ -export const saveLectureRecord = (record: LectureNoteItemModel) => +export const saveLectureNote = (record: LectureNoteItemModel) => defHttp.post({ - url: Api.SaveLectureRecord, + url: Api.SaveLectureNote, params: record, }); @@ -70,9 +70,9 @@ export const saveLectureRecord = (record: LectureNoteItemModel) => * @description 更新实习听课记录 * @param record */ -export const updateLectureRecord = (record: LectureNoteItemModel) => +export const updateLectureNote = (record: LectureNoteItemModel) => defHttp.put({ - url: Api.UpdateLectureRecord, + url: Api.UpdateLectureNote, params: record, }); @@ -80,9 +80,9 @@ export const updateLectureRecord = (record: LectureNoteItemModel) => * @description 删除实习听课记录 * @param noteId */ -export const removeLectureRecord = (noteId: number) => +export const removeLectureNote = (noteId: number) => defHttp.delete({ - url: Api.RemoveLectureRecord + `/${noteId}`, + url: Api.RemoveLectureNote + `/${noteId}`, }); /** diff --git a/src/views/student/practice/practice-record/practice-lecture-record/edit.vue b/src/views/student/practice/practice-record/practice-lecture-record/edit.vue index 092c459..ce6272e 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/edit.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/edit.vue @@ -17,7 +17,7 @@ import { BasicForm, FormSchema, useForm } from "/@/components/Form"; import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; import { uploadApi } from "/@/api/sys/upload"; - import { saveLectureRecord, updateLectureRecord } from "/@/api/student/practice"; + import { saveLectureNote, updateLectureNote } from "/@/api/student/practice"; export default defineComponent({ name: "LectureNoteEditModal", @@ -123,7 +123,7 @@ }, }, ]; - const formData = ref({ + const empty = { className: "", docLink: [] as string[], experience: "", @@ -135,13 +135,14 @@ startDate: "", teacherName: "", teachingProcess: "", - }); + }; + const formData = ref(empty); const operType = ref(""); - const [registerModal, { closeModal }] = useModalInner(({ record, operType: type }) => { + const [registerModal, { closeModal }] = useModalInner(({ note, operType: type }) => { operType.value = type; if (type == TableOperationTypeEnum.UPDATE) { - formData.value = record; - formData.value.docLink = record.docLink === "" ? [] : [record.docLink]; + formData.value = note; + formData.value.docLink = note.docLink === "" ? [] : [note.docLink]; } }); @@ -161,22 +162,26 @@ function handleSubmit(value) { if (operType.value === TableOperationTypeEnum.SAVE) { - return saveLectureRecord({ ...value, docLink: value.docLink[0] }).then(() => - closeModal(), - ); + return saveLectureNote({ ...value, docLink: value.docLink[0] }).then(() => closeModal()); } else if (operType.value === TableOperationTypeEnum.UPDATE) { - return updateLectureRecord({ ...value, docLink: value.docLink[0] }).then(() => + return updateLectureNote({ ...value, docLink: value.docLink[0] }).then(() => closeModal(), ); } return Promise.reject("未知操作"); } + function handleModalClose() { + formData.value = empty; + return Promise.resolve(true); + } + return { uploadApi, registerForm, registerModal, handleSubmit, + handleModalClose, formData, operType, }; diff --git a/src/views/student/practice/practice-record/practice-lecture-record/index.vue b/src/views/student/practice/practice-record/practice-lecture-record/index.vue index 6d6e7dd..851ed78 100644 --- a/src/views/student/practice/practice-record/practice-lecture-record/index.vue +++ b/src/views/student/practice/practice-record/practice-lecture-record/index.vue @@ -40,7 +40,7 @@ <script lang="ts"> import { defineComponent, ref } from "vue"; import { LectureNoteItemModel } from "/@/api/student/model/practice-model"; - import { getLectureRecordPage } from "/@/api/student/practice"; + import { getLectureNotePage, removeLectureNote } from "/@/api/student/practice"; import { BasicColumn, TableAction, useTable } from "/@/components/Table"; import { BasicTable } from "/@/components/Table"; import LectureNoteDescriptionModal from "./description.vue"; @@ -87,7 +87,7 @@ ]; const [registerTable, { reload }] = useTable({ title: "实习听课记录", - api: getLectureRecordPage, + api: getLectureNotePage, columns, rowKey: "recordId", pagination: { pageSize: 10 }, @@ -107,20 +107,20 @@ const [registerDescModal, { openModal: openDescModal }] = useModal(); const [registerEditModal, { openModal: openEditModal }] = useModal(); - function handleDesc(record: LectureNoteItemModel) { - openDescModal(true, record); + function handleDesc(note: LectureNoteItemModel) { + openDescModal(true, note); } - function handleEdit(record: LectureNoteItemModel) { - openEditModal(true, { record, operType: TableOperationTypeEnum.UPDATE }); + function handleEdit(note: LectureNoteItemModel) { + openEditModal(true, { note, operType: TableOperationTypeEnum.UPDATE }); } function handleSave() { openEditModal(true, { operType: TableOperationTypeEnum.SAVE }); } - function handleDelete(record: LectureNoteItemModel) { - console.log("删除", record); + function handleDelete(note: LectureNoteItemModel) { + removeLectureNote(note.noteId); } return { -- Gitee From 2effa2ce87a829a2e36ce101c35496e6643634c6 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Fri, 26 Aug 2022 15:31:45 +0800 Subject: [PATCH 11/12] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9C=AA?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=88=A0=E9=99=A4=E5=AE=9E=E4=B9=A0=E6=95=99?= =?UTF-8?q?=E6=A1=88=E6=8E=A5=E5=8F=A3=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practice-record/practice-lesson-plan/index.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/student/practice/practice-record/practice-lesson-plan/index.vue b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue index 62cb769..0f399f6 100644 --- a/src/views/student/practice/practice-record/practice-lesson-plan/index.vue +++ b/src/views/student/practice/practice-record/practice-lesson-plan/index.vue @@ -39,8 +39,8 @@ </template> <script lang="ts"> import { defineComponent, ref } from "vue"; - import { LectureNoteItemModel, LessonPlanItemModel } from "/@/api/student/model/practice-model"; - import { getLessonPlanPage } from "/@/api/student/practice"; + import { LessonPlanItemModel } from "/@/api/student/model/practice-model"; + import { getLessonPlanPage, removeLessonPlanById } from "/@/api/student/practice"; import { BasicColumn, TableAction, useTable } from "/@/components/Table"; import { BasicTable } from "/@/components/Table"; import LessonPlanDescriptionModal from "./description.vue"; @@ -109,8 +109,8 @@ openEditModal(true, { operType: TableOperationTypeEnum.SAVE }); } - function handleDelete(record: LectureNoteItemModel) { - console.log("删除", record); + function handleDelete(plan: LessonPlanItemModel) { + removeLessonPlanById(plan.planId); } return { -- Gitee From 4d9dc70d99130c48273285be1d14bf0c310e4488 Mon Sep 17 00:00:00 2001 From: InChh <2319397152@qq.com> Date: Fri, 26 Aug 2022 16:25:04 +0800 Subject: [PATCH 12/12] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E6=95=99?= =?UTF-8?q?=E7=A0=94=E6=B4=BB=E5=8A=A8=E5=BF=83=E5=BE=97=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/student/practice.ts | 37 +++- src/api/student/practice.ts | 2 +- .../teaching-study-summary/description.vue | 93 ++++++++++ .../teaching-study-summary/edit.vue | 174 ++++++++++++++++++ .../teaching-study-summary/index.vue | 126 ++++++++++++- 5 files changed, 426 insertions(+), 6 deletions(-) create mode 100644 src/views/student/practice/practice-record/teaching-study-summary/description.vue create mode 100644 src/views/student/practice/practice-record/teaching-study-summary/edit.vue diff --git a/mock/student/practice.ts b/mock/student/practice.ts index 5b8075f..0917021 100644 --- a/mock/student/practice.ts +++ b/mock/student/practice.ts @@ -1,4 +1,8 @@ -import { LectureNoteItemModel, LessonPlanItemModel } from "/@/api/student/model/practice-model"; +import { + LectureNoteItemModel, + LessonPlanItemModel, + TeachingStudyItemModel, +} from "/@/api/student/model/practice-model"; import { resultPageSuccess } from "mock/_util"; import { MockMethod } from "vite-plugin-mock"; @@ -51,6 +55,28 @@ function getLessonPlanList() { return list; } +function getTeachingStudyList() { + const list: TeachingStudyItemModel[] = []; + for (let i = 0; i < 30; i++) { + const item: TeachingStudyItemModel = { + designIdea: "教研思路-----" + i, + docLink: "http://localhost:3100/static/upload/favicon.ico", + groupEvaluation: "小组评价————" + i, + personalSummary: "个人总结————" + i, + studyId: i, + startDate: "2022/8/26", + content: "教研内容————" + i, + type: "教研方式" + i, + teachingProcess: `教研过程aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbccccccc + ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd + eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee + 巴拉巴拉${i}`, + }; + list.push(item); + } + return list; +} + export default [ { url: "/dev-api/lectureNote/page", @@ -70,4 +96,13 @@ export default [ return resultPageSuccess(page, pageSize, getLessonPlanList()); }, }, + { + url: "/dev-api/teachingStudy/page", + timeout: 100, + method: "get", + response: ({ query }) => { + const { page = 1, pageSize = 10 } = query; + return resultPageSuccess(page, pageSize, getTeachingStudyList()); + }, + }, ] as MockMethod[]; diff --git a/src/api/student/practice.ts b/src/api/student/practice.ts index 90e095a..9cdbe69 100644 --- a/src/api/student/practice.ts +++ b/src/api/student/practice.ts @@ -218,7 +218,7 @@ export const updateTeachingStudy = (teachingStudy: TeachingStudyItemModel) => * @description 删除教研活动信息 * @param studyId */ -export const removeTeachingStudy = (studyId: number) => +export const removeTeachingStudyById = (studyId: number) => defHttp.delete({ url: Api.RemoveTeachingStudy + `/${studyId}`, }); diff --git a/src/views/student/practice/practice-record/teaching-study-summary/description.vue b/src/views/student/practice/practice-record/teaching-study-summary/description.vue new file mode 100644 index 0000000..cf2c30c --- /dev/null +++ b/src/views/student/practice/practice-record/teaching-study-summary/description.vue @@ -0,0 +1,93 @@ +<template> + <BasicModal + v-bind="$attrs" + title="详情" + @register="registerModal" + :minHeight="550" + width="1000px" + :showOkBtn="false" + cancelText="关闭" + > + <Description @register="registerDesc" :column="2" size="middle" /> + </BasicModal> +</template> +<script lang="ts"> + import { defineComponent, h, ref } from "vue"; + import { DescItem, Description, useDescription } from "/@/components/Description"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + + export default defineComponent({ + name: "TeachingStudyDescriptionModal", + components: { + Description, + BasicModal, + }, + props: { userData: { type: Object } }, + setup() { + const schema: DescItem[] = [ + { + field: "startDate", + label: "教研开始时间", + labelMinWidth: 100, + contentMinWidth: 200, + }, + { + field: "type", + label: "教研方式", + labelMinWidth: 100, + }, + { + field: "content", + label: "教研内容", + labelMinWidth: 100, + contentMinWidth: 200, + span: 2, + }, + { + field: "teachingProcess", + label: "教研过程", + span: 2, + labelMinWidth: 100, + }, + { + field: "designIdea", + label: "教研思路", + span: 2, + labelMinWidth: 100, + }, + { + field: "personalSummary", + label: "个人反思与总结", + span: 2, + }, + { + field: "groupEvaluation", + label: "小组评价", + span: 2, + }, + { + field: "docLink", + label: "word文件", + render: (val) => { + if (val === "") { + return "无"; + } + return h("a", { href: val, target: "_blank", text: "点击下载" }); + }, + }, + ]; + const userData = ref({}); + const [registerModal] = useModalInner((data) => { + userData.value = data; + }); + const [registerDesc] = useDescription({ + schema, + data: userData, + }); + return { + registerDesc, + registerModal, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/teaching-study-summary/edit.vue b/src/views/student/practice/practice-record/teaching-study-summary/edit.vue new file mode 100644 index 0000000..704f0f2 --- /dev/null +++ b/src/views/student/practice/practice-record/teaching-study-summary/edit.vue @@ -0,0 +1,174 @@ +<template> + <BasicModal + v-bind="$attrs" + :title="operType === 'update' ? '编辑' : '添加'" + @register="registerModal" + :minHeight="650" + width="900px" + :showOkBtn="false" + :showCancelBtn="false" + :closeFunc="handleModalClose" + > + <BasicForm @register="registerForm" :model="formData" @submit="handleSubmit" /> + </BasicModal> +</template> +<script lang="ts"> + import { defineComponent, ref } from "vue"; + import { BasicModal, useModalInner } from "/@/components/Modal"; + import { BasicForm, FormSchema, useForm } from "/@/components/Form"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; + import { uploadApi } from "/@/api/sys/upload"; + import { saveTeachingStudy, updateTeachingStudy } from "/@/api/student/practice"; + import { useMessage } from "/@/hooks/web/useMessage"; + + export default defineComponent({ + name: "LessonPlanEditModal", + components: { + BasicForm, + BasicModal, + }, + setup() { + const schemas: FormSchema[] = [ + { + field: "studyId", + label: "id", + component: "Input", + show: false, + }, + { + field: "startDate", + label: "教研开始时间", + component: "DatePicker", + required: true, + colProps: { + span: 12, + }, + }, + { + field: "type", + label: "教研方式", + component: "Input", + colProps: { + span: 12, + }, + }, + { + field: "content", + label: "教研内容", + component: "Input", + required: true, + colProps: { + span: 24, + }, + }, + { + field: "teachingProcess", + label: "教学过程", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "designIdea", + label: "教研思路", + component: "InputTextArea", + colProps: { + span: 24, + }, + }, + { + field: "personalSummary", + label: "个人反思与总结", + component: "InputTextArea", + colProps: { + span: 24, + }, + componentProps: { + rows: 10, + }, + }, + { + field: "docLink", + label: "word文档", + component: "Upload", + colProps: { + span: 8, + }, + componentProps: { + api: uploadApi, + multiple: false, + maxNumber: 1, + accept: ["doc,", "docx"], + }, + }, + ]; + const empty = { + content: "", + designIdea: "", + docLink: [] as string[], + groupEvaluation: "", + personalSummary: "", + startDate: "", + studyId: 0, + teachingProcess: "", + type: "", + }; + const formData = ref(empty); + const operType = ref(""); + const [registerModal, { closeModal }] = useModalInner(({ study, operType: type }) => { + operType.value = type; + if (type == TableOperationTypeEnum.UPDATE) { + formData.value = { ...study, docLink: study.docLink === "" ? [] : [study.docLink] }; + } + }); + + const [registerForm] = useForm({ + labelWidth: 100, + labelAlign: "right", + showResetButton: false, + showSubmitButton: true, + submitButtonOptions: { + text: "提交", + }, + schemas, + actionColOptions: { + span: 24, + }, + }); + + const { createMessage } = useMessage(); + + function handleSubmit(value) { + if (operType.value === TableOperationTypeEnum.SAVE) { + return saveTeachingStudy({ ...value, docLink: value.docLink[0] }) + .then(() => closeModal()) + .catch((reason) => createMessage.error("发生错误:" + reason + "请联系系统管理员")); + } else if (operType.value === TableOperationTypeEnum.UPDATE) { + return updateTeachingStudy({ ...value, docLink: value.docLink[0] }) + .then(() => closeModal()) + .catch((reason) => createMessage.error("发生错误:" + reason + "请联系系统管理员")); + } + return Promise.reject("未知操作"); + } + + function handleModalClose() { + formData.value = empty; + return Promise.resolve(true); + } + + return { + uploadApi, + registerForm, + registerModal, + handleSubmit, + handleModalClose, + formData, + operType, + }; + }, + }); +</script> diff --git a/src/views/student/practice/practice-record/teaching-study-summary/index.vue b/src/views/student/practice/practice-record/teaching-study-summary/index.vue index cda3efd..21f7e8e 100644 --- a/src/views/student/practice/practice-record/teaching-study-summary/index.vue +++ b/src/views/student/practice/practice-record/teaching-study-summary/index.vue @@ -1,11 +1,129 @@ <template> - <h1>教研活动心得</h1> + <BasicTable @register="registerTable"> + <template #toolbar> + <a-button type="primary" @click="handleSave"> 新增</a-button> + <a-button type="primary" @click="handleReloadCurrent"> 刷新</a-button> + </template> + <template #bodyCell="{ column, record }"> + <template v-if="column.key === 'action'"> + <TableAction + stopButtonPropagation + :actions="[ + { + label: '详情', + icon: 'ant-design:info-circle-outlined', + onClick: handleDesc.bind(null, record), + }, + { + label: '编辑', + icon: 'akar-icons:edit', + onClick: handleEdit.bind(null, record), + }, + { + label: '删除', + icon: 'ic:outline-delete-outline', + popConfirm: { + title: '确认删除?', + okText: '确认', + cancelText: '取消', + confirm: handleDelete.bind(null, record), + }, + }, + ]" + /> + </template> + </template> + </BasicTable> + <TeachingStudyDescriptionModal @register="registerDescModal" /> + <TeachingStudyEditModal @register="registerEditModal" /> </template> <script lang="ts"> - import { defineComponent } from "vue"; + import { defineComponent, ref } from "vue"; + import { TeachingStudyItemModel } from "/@/api/student/model/practice-model"; + import { getTeachingStudyPage, removeTeachingStudyById } from "/@/api/student/practice"; + import { BasicColumn, TableAction, useTable } from "/@/components/Table"; + import { BasicTable } from "/@/components/Table"; + import TeachingStudyDescriptionModal from "./description.vue"; + import TeachingStudyEditModal from "./edit.vue"; + import { TableOperationTypeEnum } from "/@/enums/tableOperationTypeEnum"; + import { useModal } from "/@/components/Modal"; export default defineComponent({ - name: "TeachingStudySummary", - setup() {}, + name: "PracticeLessonPlan", + components: { BasicTable, TableAction, TeachingStudyDescriptionModal, TeachingStudyEditModal }, + setup() { + const columns: BasicColumn[] = [ + { + title: "Id", + dataIndex: "studyId", + defaultHidden: true, + }, + { + title: "教研开始时间", + dataIndex: "startDate", + width: 150, + sorter: true, + }, + { + title: "教研内容", + dataIndex: "content", + width: 150, + }, + { + title: "教研方式", + dataIndex: "type", + width: 150, + }, + ]; + const [registerTable, { reload }] = useTable({ + title: "教研活动心得", + api: getTeachingStudyPage, + columns, + rowKey: "studyId", + pagination: { pageSize: 10 }, + actionColumn: { + title: "操作", + dataIndex: "action", + width: 240, + fixed: "right", + }, + }); + const userData = ref<any>(null); + + function handleReloadCurrent() { + reload(); + } + + const [registerDescModal, { openModal: openDescModal }] = useModal(); + const [registerEditModal, { openModal: openEditModal }] = useModal(); + + function handleDesc(study: TeachingStudyItemModel) { + openDescModal(true, study); + } + + function handleEdit(study: TeachingStudyItemModel) { + openEditModal(true, { study, operType: TableOperationTypeEnum.UPDATE }); + } + + function handleSave() { + openEditModal(true, { operType: TableOperationTypeEnum.SAVE }); + } + + function handleDelete(study: TeachingStudyItemModel) { + removeTeachingStudyById(study.studyId); + } + + return { + registerTable, + handleReloadCurrent, + handleDesc, + handleDelete, + handleEdit, + handleSave, + registerDescModal, + registerEditModal, + userData, + }; + }, }); </script> -- Gitee