From a572d0ebdea68e9f528304cef0fa9f91b0bab363 Mon Sep 17 00:00:00 2001
From: CoderSerio <2779066456@qq.com>
Date: Mon, 16 Oct 2023 14:24:39 +0800
Subject: [PATCH] refactor of linkis-web
---
linkis-web-next/.commitlintrc.ts | 45 +
linkis-web-next/.env | 20 +
linkis-web-next/.eslintignore | 17 +
linkis-web-next/.eslintrc.json | 39 +
linkis-web-next/.gitattributes | 9 +
linkis-web-next/.gitignore | 12 +
linkis-web-next/.husky/commit-msg | 19 +
linkis-web-next/.husky/pre-commit | 19 +
linkis-web-next/.prettierrc.ts | 29 +
linkis-web-next/README.md | 129 +
linkis-web-next/README_CN.md | 129 +
linkis-web-next/index.html | 30 +
linkis-web-next/package-lock.json | 10894 ++++++++++++++++
linkis-web-next/package.json | 59 +
linkis-web-next/pom.xml | 82 +
linkis-web-next/public/favicon.ico | Bin 0 -> 6462 bytes
linkis-web-next/public/sidebar/ECMManage.svg | 38 +
.../public/sidebar/basedataManagement.svg | 46 +
linkis-web-next/public/sidebar/codeQuery.svg | 54 +
.../public/sidebar/dataSourceManage.svg | 41 +
linkis-web-next/public/sidebar/dateReport.svg | 44 +
.../public/sidebar/globalHistory.svg | 39 +
.../public/sidebar/microserviceManage.svg | 44 +
linkis-web-next/public/sidebar/resource.svg | 48 +
linkis-web-next/public/sidebar/setting.svg | 40 +
.../public/sidebar/udfFunctionTitle.svg | 44 +
linkis-web-next/public/vite.svg | 37 +
linkis-web-next/release-docs/LICENSE | 247 +
linkis-web-next/release-docs/NOTICE | 25 +
.../licenses/LICENSE-ace-builds.txt | 24 +
.../licenses/LICENSE-autoprefixer.txt | 20 +
.../release-docs/licenses/LICENSE-axios.txt | 19 +
.../release-docs/licenses/LICENSE-core-js.txt | 19 +
.../release-docs/licenses/LICENSE-dexie.txt | 202 +
.../licenses/LICENSE-eslint-plugin-vue.txt | 21 +
.../release-docs/licenses/LICENSE-eslint.txt | 19 +
.../licenses/LICENSE-form-create.txt | 21 +
.../licenses/LICENSE-highlight.js.txt | 29 +
.../release-docs/licenses/LICENSE-iview.txt | 21 +
.../licenses/LICENSE-jsencrypt.txt | 107 +
.../licenses/LICENSE-license-checker.txt | 24 +
.../release-docs/licenses/LICENSE-lodash.txt | 49 +
.../release-docs/licenses/LICENSE-md5.txt | 27 +
.../release-docs/licenses/LICENSE-mitt.txt | 21 +
.../release-docs/licenses/LICENSE-moment.txt | 22 +
.../licenses/LICENSE-object-to-formdata.txt | 21 +
.../release-docs/licenses/LICENSE-postcss.txt | 20 +
.../release-docs/licenses/LICENSE-qs.txt | 29 +
.../LICENSE-reconnecting-websocket.txt | 21 +
.../licenses/LICENSE-sql-formatter.txt | 22 +
.../release-docs/licenses/LICENSE-svgo.txt | 21 +
.../licenses/LICENSE-v-jsoneditor.txt | 201 +
.../licenses/LICENSE-vue-i18n.txt | 20 +
.../licenses/LICENSE-vue-router.txt | 21 +
.../release-docs/licenses/LICENSE-vue.txt | 21 +
.../licenses/LICENSE-vuedraggable.txt | 21 +
.../licenses/LICENSE-vuescroll.txt | 21 +
.../licenses/LICENSE-worker-loader.txt | 20 +
linkis-web-next/src/App.vue | 22 +
linkis-web-next/src/assets/vue.svg | 24 +
.../src/components/editor/editor.vue | 228 +
.../src/components/editor/highRiskGrammar.ts | 34 +
.../src/components/editor/index.less | 61 +
.../src/components/editor/index.ts | 21 +
.../src/components/editor/keyword/hql.ts | 2384 ++++
.../src/components/editor/keyword/python.ts | 384 +
.../src/components/editor/keyword/sas.ts | 172 +
.../src/components/editor/keyword/sh.ts | 570 +
.../src/components/editor/languages/hql.ts | 1587 +++
.../src/components/editor/languages/log.ts | 43 +
.../src/components/editor/languages/out.ts | 1570 +++
.../src/components/editor/languages/sas.ts | 66 +
.../src/components/editor/languages/sh.ts | 220 +
.../src/components/editor/linkis_dml.sql | 50 +
.../src/components/editor/monaco-loader.ts | 54 +
.../editor/sqlFormatter/core/Formatter.ts | 348 +
.../editor/sqlFormatter/core/Indentation.ts | 87 +
.../editor/sqlFormatter/core/InlineBlock.ts | 120 +
.../editor/sqlFormatter/core/Params.ts | 47 +
.../editor/sqlFormatter/core/Tokenizer.ts | 508 +
.../editor/sqlFormatter/core/tokenTypes.ts | 36 +
.../sqlFormatter/languages/Db2Formatter.ts | 601 +
.../sqlFormatter/languages/N1qlFormatter.ts | 276 +
.../sqlFormatter/languages/PlSqlFormatter.ts | 463 +
.../languages/StandardSqlFormatter.ts | 379 +
.../editor/sqlFormatter/sqlFormatter.ts | 51 +
.../components/editor/theme/defaultView.ts | 30 +
.../src/components/editor/theme/logView.ts | 36 +
linkis-web-next/src/components/editor/util.ts | 69 +
.../src/components/sidebar/index.less | 45 +
.../src/components/sidebar/index.vue | 137 +
linkis-web-next/src/config/const.ts | 28 +
linkis-web-next/src/config/db.ts | 32 +
linkis-web-next/src/config/scriptis.ts | 343 +
.../src/dss/assets/images/Linkis.svg | 23 +
.../src/dss/assets/images/loginbgc.svg | 1947 +++
.../src/dss/assets/styles/app.less | 92 +
.../src/dss/assets/styles/normalize.less | 387 +
linkis-web-next/src/dss/dssRouter.ts | 93 +
linkis-web-next/src/dss/view/403.vue | 23 +
linkis-web-next/src/dss/view/404.vue | 31 +
linkis-web-next/src/dss/view/500.vue | 41 +
linkis-web-next/src/dss/view/app.vue | 28 +
.../src/dss/view/commonIframe/index.vue | 101 +
linkis-web-next/src/dss/view/icon.vue | 70 +
linkis-web-next/src/dss/view/layout.vue | 24 +
.../src/dss/view/logPage/index.vue | 125 +
linkis-web-next/src/dss/view/login/index.vue | 362 +
linkis-web-next/src/env.d.ts | 23 +
linkis-web-next/src/helper/clickoutside.js | 42 +
linkis-web-next/src/helper/db.ts | 201 +
.../src/helper/elementResizeEvent.js | 134 +
linkis-web-next/src/helper/emitter.js | 58 +
linkis-web-next/src/helper/eventbus.js | 112 +
linkis-web-next/src/helper/fesx.js | 104 +
linkis-web-next/src/helper/storage.ts | 245 +
linkis-web-next/src/index.d.ts | 26 +
linkis-web-next/src/layout.vue | 246 +
linkis-web-next/src/locales/en.ts | 1087 ++
linkis-web-next/src/locales/index.ts | 24 +
linkis-web-next/src/locales/zh.ts | 1045 ++
linkis-web-next/src/main.ts | 94 +
.../pages/globalHistoryManagement/count.vue | 135 +
.../pages/globalHistoryManagement/drawer.vue | 248 +
.../pages/globalHistoryManagement/filter.vue | 339 +
.../pages/globalHistoryManagement/index.less | 43 +
.../pages/globalHistoryManagement/index.vue | 26 +
.../pages/globalHistoryManagement/table.vue | 362 +
.../globalHistoryManagement/tooltipText.vue | 73 +
.../src/pages/globalHistoryManagement/type.ts | 24 +
linkis-web-next/src/pages/login/index.vue | 201 +
.../src/pages/parameterConfig/card.vue | 171 +
.../src/pages/parameterConfig/drawer.vue | 512 +
.../src/pages/parameterConfig/handleChange.ts | 24 +
.../src/pages/parameterConfig/ide/index.vue | 103 +
.../src/pages/parameterConfig/index.less | 42 +
.../src/pages/parameterConfig/index.vue | 102 +
.../src/pages/parameterConfig/list.vue | 129 +
.../src/pages/parameterConfig/modal.vue | 87 +
.../pages/parameterConfig/scripts/index.vue | 20 +
.../parameterConfig/tableauServer/index.vue | 20 +
.../src/pages/resource/history/index.less | 17 +
.../src/pages/resource/history/index.vue | 18 +
linkis-web-next/src/pages/resource/index.less | 17 +
linkis-web-next/src/pages/resource/index.vue | 42 +
.../src/pages/resource/manage/index.less | 17 +
.../src/pages/resource/manage/index.vue | 18 +
linkis-web-next/src/router/index.ts | 132 +
.../src/scriptis/module/webSocket/index.js | 144 +
.../src/scriptis/service/db/globalcache.js | 102 +
.../src/scriptis/service/db/history.js | 36 +
.../src/scriptis/service/db/log.js | 36 +
.../src/scriptis/service/db/progress.js | 36 +
.../src/scriptis/service/db/result.js | 36 +
.../src/scriptis/service/db/tab.ts | 35 +
.../src/scriptis/service/db/tree.js | 36 +
linkis-web-next/src/service/api.ts | 420 +
linkis-web-next/src/service/apiCache.ts | 76 +
linkis-web-next/src/service/db/index.ts | 96 +
linkis-web-next/src/service/execute.js | 679 +
linkis-web-next/src/service/layoutMixin.js | 54 +
linkis-web-next/src/service/mixin.js | 95 +
linkis-web-next/src/service/moduleMixin.js | 149 +
linkis-web-next/src/service/socket.js | 201 +
.../src/service/timeToCronMixin.js | 246 +
linkis-web-next/src/style/style.less | 645 +
linkis-web-next/src/style/variable.less | 56 +
linkis-web-next/src/util/convert.ts | 251 +
linkis-web-next/src/util/currentModules.ts | 50 +
linkis-web-next/src/util/debug.ts | 34 +
linkis-web-next/src/util/index.ts | 113 +
linkis-web-next/src/util/object.ts | 63 +
linkis-web-next/src/util/type.ts | 118 +
linkis-web-next/src/vite-env.d.ts | 18 +
linkis-web-next/tsconfig.json | 53 +
linkis-web-next/tsconfig.node.json | 27 +
linkis-web-next/vite.config.ts | 45 +
177 files changed, 38169 insertions(+)
create mode 100644 linkis-web-next/.commitlintrc.ts
create mode 100644 linkis-web-next/.env
create mode 100644 linkis-web-next/.eslintignore
create mode 100644 linkis-web-next/.eslintrc.json
create mode 100644 linkis-web-next/.gitattributes
create mode 100644 linkis-web-next/.gitignore
create mode 100644 linkis-web-next/.husky/commit-msg
create mode 100644 linkis-web-next/.husky/pre-commit
create mode 100644 linkis-web-next/.prettierrc.ts
create mode 100644 linkis-web-next/README.md
create mode 100644 linkis-web-next/README_CN.md
create mode 100644 linkis-web-next/index.html
create mode 100644 linkis-web-next/package-lock.json
create mode 100644 linkis-web-next/package.json
create mode 100644 linkis-web-next/pom.xml
create mode 100644 linkis-web-next/public/favicon.ico
create mode 100644 linkis-web-next/public/sidebar/ECMManage.svg
create mode 100644 linkis-web-next/public/sidebar/basedataManagement.svg
create mode 100644 linkis-web-next/public/sidebar/codeQuery.svg
create mode 100644 linkis-web-next/public/sidebar/dataSourceManage.svg
create mode 100644 linkis-web-next/public/sidebar/dateReport.svg
create mode 100644 linkis-web-next/public/sidebar/globalHistory.svg
create mode 100644 linkis-web-next/public/sidebar/microserviceManage.svg
create mode 100644 linkis-web-next/public/sidebar/resource.svg
create mode 100644 linkis-web-next/public/sidebar/setting.svg
create mode 100644 linkis-web-next/public/sidebar/udfFunctionTitle.svg
create mode 100644 linkis-web-next/public/vite.svg
create mode 100644 linkis-web-next/release-docs/LICENSE
create mode 100644 linkis-web-next/release-docs/NOTICE
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-ace-builds.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-autoprefixer.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-axios.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-core-js.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-dexie.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-eslint-plugin-vue.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-eslint.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-form-create.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-highlight.js.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-iview.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-jsencrypt.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-license-checker.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-lodash.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-md5.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-mitt.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-moment.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-object-to-formdata.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-postcss.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-qs.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-reconnecting-websocket.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-sql-formatter.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-svgo.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-v-jsoneditor.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-vue-i18n.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-vue-router.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-vue.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-vuedraggable.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-vuescroll.txt
create mode 100644 linkis-web-next/release-docs/licenses/LICENSE-worker-loader.txt
create mode 100644 linkis-web-next/src/App.vue
create mode 100644 linkis-web-next/src/assets/vue.svg
create mode 100644 linkis-web-next/src/components/editor/editor.vue
create mode 100644 linkis-web-next/src/components/editor/highRiskGrammar.ts
create mode 100644 linkis-web-next/src/components/editor/index.less
create mode 100644 linkis-web-next/src/components/editor/index.ts
create mode 100644 linkis-web-next/src/components/editor/keyword/hql.ts
create mode 100644 linkis-web-next/src/components/editor/keyword/python.ts
create mode 100644 linkis-web-next/src/components/editor/keyword/sas.ts
create mode 100644 linkis-web-next/src/components/editor/keyword/sh.ts
create mode 100644 linkis-web-next/src/components/editor/languages/hql.ts
create mode 100644 linkis-web-next/src/components/editor/languages/log.ts
create mode 100644 linkis-web-next/src/components/editor/languages/out.ts
create mode 100644 linkis-web-next/src/components/editor/languages/sas.ts
create mode 100644 linkis-web-next/src/components/editor/languages/sh.ts
create mode 100644 linkis-web-next/src/components/editor/linkis_dml.sql
create mode 100644 linkis-web-next/src/components/editor/monaco-loader.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/Formatter.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/Indentation.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/InlineBlock.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/Params.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/Tokenizer.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/core/tokenTypes.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/languages/Db2Formatter.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/languages/N1qlFormatter.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/languages/PlSqlFormatter.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/languages/StandardSqlFormatter.ts
create mode 100644 linkis-web-next/src/components/editor/sqlFormatter/sqlFormatter.ts
create mode 100644 linkis-web-next/src/components/editor/theme/defaultView.ts
create mode 100644 linkis-web-next/src/components/editor/theme/logView.ts
create mode 100644 linkis-web-next/src/components/editor/util.ts
create mode 100644 linkis-web-next/src/components/sidebar/index.less
create mode 100644 linkis-web-next/src/components/sidebar/index.vue
create mode 100644 linkis-web-next/src/config/const.ts
create mode 100644 linkis-web-next/src/config/db.ts
create mode 100644 linkis-web-next/src/config/scriptis.ts
create mode 100644 linkis-web-next/src/dss/assets/images/Linkis.svg
create mode 100644 linkis-web-next/src/dss/assets/images/loginbgc.svg
create mode 100644 linkis-web-next/src/dss/assets/styles/app.less
create mode 100644 linkis-web-next/src/dss/assets/styles/normalize.less
create mode 100644 linkis-web-next/src/dss/dssRouter.ts
create mode 100644 linkis-web-next/src/dss/view/403.vue
create mode 100644 linkis-web-next/src/dss/view/404.vue
create mode 100644 linkis-web-next/src/dss/view/500.vue
create mode 100644 linkis-web-next/src/dss/view/app.vue
create mode 100644 linkis-web-next/src/dss/view/commonIframe/index.vue
create mode 100644 linkis-web-next/src/dss/view/icon.vue
create mode 100644 linkis-web-next/src/dss/view/layout.vue
create mode 100644 linkis-web-next/src/dss/view/logPage/index.vue
create mode 100644 linkis-web-next/src/dss/view/login/index.vue
create mode 100644 linkis-web-next/src/env.d.ts
create mode 100644 linkis-web-next/src/helper/clickoutside.js
create mode 100644 linkis-web-next/src/helper/db.ts
create mode 100644 linkis-web-next/src/helper/elementResizeEvent.js
create mode 100644 linkis-web-next/src/helper/emitter.js
create mode 100644 linkis-web-next/src/helper/eventbus.js
create mode 100644 linkis-web-next/src/helper/fesx.js
create mode 100644 linkis-web-next/src/helper/storage.ts
create mode 100644 linkis-web-next/src/index.d.ts
create mode 100644 linkis-web-next/src/layout.vue
create mode 100644 linkis-web-next/src/locales/en.ts
create mode 100644 linkis-web-next/src/locales/index.ts
create mode 100644 linkis-web-next/src/locales/zh.ts
create mode 100644 linkis-web-next/src/main.ts
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/count.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/drawer.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/filter.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/index.less
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/index.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/table.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/tooltipText.vue
create mode 100644 linkis-web-next/src/pages/globalHistoryManagement/type.ts
create mode 100644 linkis-web-next/src/pages/login/index.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/card.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/drawer.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/handleChange.ts
create mode 100644 linkis-web-next/src/pages/parameterConfig/ide/index.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/index.less
create mode 100644 linkis-web-next/src/pages/parameterConfig/index.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/list.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/modal.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/scripts/index.vue
create mode 100644 linkis-web-next/src/pages/parameterConfig/tableauServer/index.vue
create mode 100644 linkis-web-next/src/pages/resource/history/index.less
create mode 100644 linkis-web-next/src/pages/resource/history/index.vue
create mode 100644 linkis-web-next/src/pages/resource/index.less
create mode 100644 linkis-web-next/src/pages/resource/index.vue
create mode 100644 linkis-web-next/src/pages/resource/manage/index.less
create mode 100644 linkis-web-next/src/pages/resource/manage/index.vue
create mode 100644 linkis-web-next/src/router/index.ts
create mode 100644 linkis-web-next/src/scriptis/module/webSocket/index.js
create mode 100644 linkis-web-next/src/scriptis/service/db/globalcache.js
create mode 100644 linkis-web-next/src/scriptis/service/db/history.js
create mode 100644 linkis-web-next/src/scriptis/service/db/log.js
create mode 100644 linkis-web-next/src/scriptis/service/db/progress.js
create mode 100644 linkis-web-next/src/scriptis/service/db/result.js
create mode 100644 linkis-web-next/src/scriptis/service/db/tab.ts
create mode 100644 linkis-web-next/src/scriptis/service/db/tree.js
create mode 100644 linkis-web-next/src/service/api.ts
create mode 100644 linkis-web-next/src/service/apiCache.ts
create mode 100644 linkis-web-next/src/service/db/index.ts
create mode 100644 linkis-web-next/src/service/execute.js
create mode 100644 linkis-web-next/src/service/layoutMixin.js
create mode 100644 linkis-web-next/src/service/mixin.js
create mode 100644 linkis-web-next/src/service/moduleMixin.js
create mode 100644 linkis-web-next/src/service/socket.js
create mode 100644 linkis-web-next/src/service/timeToCronMixin.js
create mode 100644 linkis-web-next/src/style/style.less
create mode 100644 linkis-web-next/src/style/variable.less
create mode 100644 linkis-web-next/src/util/convert.ts
create mode 100644 linkis-web-next/src/util/currentModules.ts
create mode 100644 linkis-web-next/src/util/debug.ts
create mode 100644 linkis-web-next/src/util/index.ts
create mode 100644 linkis-web-next/src/util/object.ts
create mode 100644 linkis-web-next/src/util/type.ts
create mode 100644 linkis-web-next/src/vite-env.d.ts
create mode 100644 linkis-web-next/tsconfig.json
create mode 100644 linkis-web-next/tsconfig.node.json
create mode 100644 linkis-web-next/vite.config.ts
diff --git a/linkis-web-next/.commitlintrc.ts b/linkis-web-next/.commitlintrc.ts
new file mode 100644
index 0000000000..b95251a00f
--- /dev/null
+++ b/linkis-web-next/.commitlintrc.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+ extends: ["@commitlint/config-conventional"],
+ rules: {
+ "type-enum": [
+ 2,
+ "always",
+ [
+ "build",
+ "chore",
+ "ci",
+ "docs",
+ "feat",
+ "fix",
+ "perf",
+ "refactor",
+ "revert",
+ "style",
+ "test",
+ ],
+ ],
+ "type-case": [0],
+ "type-empty": [0],
+ "scope-empty": [0],
+ "scope-case": [0],
+ "subject-full-stop": [0, "never"],
+ "subject-case": [0, "never"],
+ "header-max-length": [0, "always", 72],
+ },
+};
diff --git a/linkis-web-next/.env b/linkis-web-next/.env
new file mode 100644
index 0000000000..4184e2defd
--- /dev/null
+++ b/linkis-web-next/.env
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+VITE_VUE_APP_HOST=
+VITE_BACKEND_URL=
+VITE_VUE_APP_MN_CONFIG_PREFIX=
+VITE_VUE_APP_MN_CONFIG_SOCKET=
+VITE_VUE_APP_VERSION=
diff --git a/linkis-web-next/.eslintignore b/linkis-web-next/.eslintignore
new file mode 100644
index 0000000000..bd11f99b8d
--- /dev/null
+++ b/linkis-web-next/.eslintignore
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+node_modules
+dist
diff --git a/linkis-web-next/.eslintrc.json b/linkis-web-next/.eslintrc.json
new file mode 100644
index 0000000000..604c30cf96
--- /dev/null
+++ b/linkis-web-next/.eslintrc.json
@@ -0,0 +1,39 @@
+{
+ "root": true,
+ "env": {
+ "browser": true,
+ "es2021": true
+ },
+ "extends": [
+ "eslint:recommended",
+ "plugin:vue/vue3-essential",
+ "plugin:@typescript-eslint/recommended",
+ "prettier"
+ ],
+ "overrides": [],
+ "parser": "vue-eslint-parser",
+ "parserOptions": {
+ "ecmaVersion": "latest",
+ "sourceType": "module",
+ "parser": "@typescript-eslint/parser"
+ },
+ "settings": {
+ "import/resolver": {
+ "typescript": {},
+ "alias": {
+ "map": ["@", "./src"],
+ "extentions": [".js", ".ts", ".vue"]
+ }
+ }
+ },
+ "plugins": ["vue", "@typescript-eslint"],
+ "rules": {
+ "indent": ["error", 2],
+ "linebreak-style": ["error", "unix"],
+ "semi": ["error", "always"],
+ "vue/multi-word-component-names": 0,
+ "quotes": ["error", "double"],
+ "vue/html-quotes": ["error", "double"],
+ "import/extensions": "off"
+ }
+}
diff --git a/linkis-web-next/.gitattributes b/linkis-web-next/.gitattributes
new file mode 100644
index 0000000000..ec8935df7d
--- /dev/null
+++ b/linkis-web-next/.gitattributes
@@ -0,0 +1,9 @@
+* text=auto
+* text eol=lf
+*.png binary
+*.gif binary
+*.ttf binary
+*.woff binary
+*.eot binary
+*.woff binary
+*.otf binary
\ No newline at end of file
diff --git a/linkis-web-next/.gitignore b/linkis-web-next/.gitignore
new file mode 100644
index 0000000000..89cc5767eb
--- /dev/null
+++ b/linkis-web-next/.gitignore
@@ -0,0 +1,12 @@
+.DS_Store
+.vscode
+.cache
+.idea/
+
+node_modules/
+dist/
+
+package-lock.json
+apache-linkis-*.tar.gz
+./cn.json
+.env.*
diff --git a/linkis-web-next/.husky/commit-msg b/linkis-web-next/.husky/commit-msg
new file mode 100644
index 0000000000..59600a66d3
--- /dev/null
+++ b/linkis-web-next/.husky/commit-msg
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+. "$(dirname "$0")/_/husky.sh"
+
+npx --no-install commitlint --edit $1
\ No newline at end of file
diff --git a/linkis-web-next/.husky/pre-commit b/linkis-web-next/.husky/pre-commit
new file mode 100644
index 0000000000..f61e74e3c8
--- /dev/null
+++ b/linkis-web-next/.husky/pre-commit
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+. "$(dirname "$0")/_/husky.sh"
+
+npx lint-staged
diff --git a/linkis-web-next/.prettierrc.ts b/linkis-web-next/.prettierrc.ts
new file mode 100644
index 0000000000..15327bbe1c
--- /dev/null
+++ b/linkis-web-next/.prettierrc.ts
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ trailingComma: "all",
+ tabWidth: 4,
+ semi: true,
+ singleQuote: true,
+ overrides: [
+ {
+ files: [".prettierrc.js", ".commitlintrc.ts"],
+ // options: { "parser": "json" }
+ },
+ ],
+};
diff --git a/linkis-web-next/README.md b/linkis-web-next/README.md
new file mode 100644
index 0000000000..6377bcefb6
--- /dev/null
+++ b/linkis-web-next/README.md
@@ -0,0 +1,129 @@
+
+ Apache Linkis Web
+
+
+
+ Linkis builds a computation middleware layer to facilitate connection,
+ governance and orchestration between the upper applications and the underlying data engines.
+
+
+ https://linkis.apache.org/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+[English](README.md) | [中文](README_CN.md)
+
+# Introduction
+
+ Linkis builds a layer of computation middleware between upper applications and underlying engines. By using standard interfaces such as REST/WS/JDBC provided by Linkis, the upper applications can easily access the underlying engines such as MySQL/Spark/Hive/Presto/Flink, etc., and achieve the intercommunication of user resources like unified variables, scripts, UDFs, functions and resource files at the same time.
+
+Linkis Web provides a management system for easy management of user resources.
+
+# Start
+
+```shell
+# configure the project basic information in the `src/.env` firstly
+cd linkis/linkis-web-next
+npm install
+npm run dev
+
+# build
+npm run build
+```
+
+# File Structure
+
+> ├── README.md
+> ├── README_CN.md
+> ├── index.html
+> ├── node_modules
+> ├── package-lock.json
+> ├── package.json
+> ├── pom.xml
+> ├── public
+> │ ├── favicon.ico`
+> │ ├── sidebar
+> │ └── vite.svg
+> ├── release-docs
+> │ ├── LICENSE
+> │ ├── NOTICE
+> │ └── licenses
+> ├── src
+> │ ├── App.vue
+> │ ├── assets
+> │ ├── components
+> │ ├── config
+> │ ├── dss
+> │ ├── env.d.ts
+> │ ├── helper
+> │ ├── index.d.ts
+> │ ├── layout.vue
+> │ ├── locales
+> │ ├── main.ts
+> │ ├── pages
+> │ ├── router
+> │ ├── scriptis
+> │ ├── service
+> │ ├── style
+> │ ├── util
+> │ └── vite-env.d.ts
+> ├── tsconfig.json
+> ├── tsconfig.node.json
+> └── vite.config.ts
+
+# Contributing
+
+Contributions are always welcomed, we need more contributors to build Linkis together. either code, or doc, or other supports that could help the community.
+For code and documentation contributions, please follow the [contribution guide](https://linkis.apache.org/community/how-to-contribute).
+
+# Contact Us
+
+- Any questions or suggestions please kindly submit an [issue](https://github.com/apache/linkis/issues).
+- By mail [dev@linkis.apache.org](mailto:dev@linkis.apache.org)
+- You can scan the QR code below to join our WeChat group to get more immediate response
+
+
+
+# Who is Using Linkis
+
+We opened an issue [[Who is Using Linkis]](https://github.com/apache/linkis/issues/23) for users to feedback and record who is using Linkis.
+Since the first release of Linkis in 2019, it has accumulated more than **700** trial companies and **1000+** sandbox trial users, which involving diverse industries, from finance, banking, tele-communication, to manufactory, internet companies and so on.
diff --git a/linkis-web-next/README_CN.md b/linkis-web-next/README_CN.md
new file mode 100644
index 0000000000..5779a8e5df
--- /dev/null
+++ b/linkis-web-next/README_CN.md
@@ -0,0 +1,129 @@
+
+ Apache Linkis Web
+
+
+
+ Linkis 构建了一层计算中间件,方便上层应用与底层数据引擎之间的连接、治理和编排
+
+
+ https://linkis.apache.org/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+[English](README.md) | [中文](README_CN.md)
+
+# 介绍
+
+Linkis 在上层应用程序和底层引擎之间构建了一层计算中间件。通过使用 Linkis 提供的 REST/WebSocket/JDBC 等标准接口,
+上层应用可以方便地连接访问 MySQL/Spark/Hive/Presto/Flink 等底层引擎,同时实现变量、脚本、函数和资源文件等用户资源的跨上层应用互通。
+
+Linkis Web 提供了一个可视化的后台管理系统,便于对用户资源进行管理。
+
+# 启动
+
+```shell
+# 首先要在 `src/.env` 中配置基本信息
+cd linkis/linkis-web-next
+npm install
+npm run dev
+
+# 打包构建
+npm run build
+```
+
+# 文件结构
+
+> ├── README.md
+> ├── README_CN.md
+> ├── index.html
+> ├── node_modules
+> ├── package-lock.json
+> ├── package.json
+> ├── pom.xml
+> ├── public
+> │ ├── favicon.ico`
+> │ ├── sidebar
+> │ └── vite.svg
+> ├── release-docs
+> │ ├── LICENSE
+> │ ├── NOTICE
+> │ └── licenses
+> ├── src
+> │ ├── App.vue
+> │ ├── assets
+> │ ├── components
+> │ ├── config
+> │ ├── dss
+> │ ├── env.d.ts
+> │ ├── helper
+> │ ├── index.d.ts
+> │ ├── layout.vue
+> │ ├── locales
+> │ ├── main.ts
+> │ ├── pages
+> │ ├── router
+> │ ├── scriptis
+> │ ├── service
+> │ ├── style
+> │ ├── util
+> │ └── vite-env.d.ts
+> ├── tsconfig.json
+> ├── tsconfig.node.json
+> └── vite.config.ts
+
+# 贡献
+
+我们非常欢迎和期待更多的贡献者参与共建 Linkis, 不论是代码、文档,或是其他能够帮助到社区的贡献形式。
+代码和文档相关的贡献请参照[贡献指引](https://linkis.apache.org/zh-CN/community/how-to-contribute).
+
+# 联系我们
+
+- 对 Linkis 的任何问题和建议,可以提交 issue,以便跟踪处理和经验沉淀共享
+- 通过邮件方式 [dev@linkis.apache.org](mailto:dev@linkis.apache.org)
+- 可以扫描下面的二维码,加入我们的微信群,以获得更快速的响应
+
+
+
+# 谁在使用 Linkis
+
+我们创建了一个 issue [[Who is Using Linkis]](https://github.com/apache/linkis/issues/23) 以便用户反馈和记录谁在使用 Linkis.
+Linkis 自 2019 年开源发布以来,累计已有 700 多家试验企业和 1000+沙盒试验用户,涉及金融、电信、制造、互联网等多个行业。
diff --git a/linkis-web-next/index.html b/linkis-web-next/index.html
new file mode 100644
index 0000000000..be14d0e56c
--- /dev/null
+++ b/linkis-web-next/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+ Vite + Vue + TS
+
+
+
+
+
+
diff --git a/linkis-web-next/package-lock.json b/linkis-web-next/package-lock.json
new file mode 100644
index 0000000000..967a4091e6
--- /dev/null
+++ b/linkis-web-next/package-lock.json
@@ -0,0 +1,10894 @@
+{
+ "name": "LINKIS-WEB-NEXT",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "LINKIS-WEB-NEXT",
+ "version": "0.0.0",
+ "dependencies": {
+ "@fesjs/fes-design": "^0.7.31",
+ "@types/lodash": "^4.14.198",
+ "@vitejs/plugin-vue": "^4.1.0",
+ "axios": "^1.5.0",
+ "dayjs": "^1.11.10",
+ "dexie": "^3.2.4",
+ "md5": "^2.3.0",
+ "monaco-editor": "^0.43.0",
+ "qs": "^6.11.2",
+ "vite": "^4.3.9",
+ "vue": "^3.2.47",
+ "vue-i18n": "^9.4.1",
+ "vue-router": "^4.2.2"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^17.6.3",
+ "@commitlint/config-conventional": "^17.6.1",
+ "@typescript-eslint/eslint-plugin": "^5.59.9",
+ "@typescript-eslint/parser": "^5.59.9",
+ "eslint": "^8.41.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-vue": "^9.14.1",
+ "husky": "^7.0.0",
+ "jsencrypt": "^3.3.2",
+ "less": "^4.2.0",
+ "lint-staged": "^13.3.0",
+ "prettier": "2.8.8",
+ "typescript": "^5.0.2",
+ "vue-eslint-parser": "^9.3.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz",
+ "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.22.11",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz",
+ "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@commitlint/cli": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz",
+ "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/format": "^17.4.4",
+ "@commitlint/lint": "^17.7.0",
+ "@commitlint/load": "^17.7.1",
+ "@commitlint/read": "^17.5.1",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0",
+ "lodash.isfunction": "^3.0.9",
+ "resolve-from": "5.0.0",
+ "resolve-global": "1.0.0",
+ "yargs": "^17.0.0"
+ },
+ "bin": {
+ "commitlint": "cli.js"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/config-conventional": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz",
+ "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==",
+ "dev": true,
+ "dependencies": {
+ "conventional-changelog-conventionalcommits": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/config-validator": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz",
+ "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/ensure": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz",
+ "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/execute-rule": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/format": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
+ "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "chalk": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/is-ignored": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz",
+ "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "semver": "7.5.4"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/lint": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz",
+ "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/is-ignored": "^17.7.0",
+ "@commitlint/parse": "^17.7.0",
+ "@commitlint/rules": "^17.7.0",
+ "@commitlint/types": "^17.4.4"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/load": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz",
+ "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/config-validator": "^17.6.7",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.6.7",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "20.4.7",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/message": {
+ "version": "17.4.2",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
+ "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/parse": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz",
+ "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "conventional-changelog-angular": "^6.0.0",
+ "conventional-commits-parser": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/read": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
+ "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/top-level": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "fs-extra": "^11.0.0",
+ "git-raw-commits": "^2.0.11",
+ "minimist": "^1.2.6"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/resolve-extends": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz",
+ "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/config-validator": "^17.6.7",
+ "@commitlint/types": "^17.4.4",
+ "import-fresh": "^3.0.0",
+ "lodash.mergewith": "^4.6.2",
+ "resolve-from": "^5.0.0",
+ "resolve-global": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/rules": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz",
+ "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/ensure": "^17.6.7",
+ "@commitlint/message": "^17.4.2",
+ "@commitlint/to-lines": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/to-lines": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
+ "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
+ "dev": true,
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/top-level": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
+ "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/types": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz",
+ "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz",
+ "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fesjs/fes-design": {
+ "version": "0.7.32",
+ "resolved": "https://registry.npmmirror.com/@fesjs/fes-design/-/fes-design-0.7.32.tgz",
+ "integrity": "sha512-EYneDcAeL5fsHkoFYo7Ik4Dwo59In/YUkeWoDl28plD+vDRncyRmzkTrVQRV+tk6YI+ev/aBX+Ao/b8ye839Bw==",
+ "dependencies": {
+ "@babel/runtime": "^7.16.3",
+ "@floating-ui/dom": "^1.2.9",
+ "@juggle/resize-observer": "^3.3.1",
+ "@types/lodash-es": "^4.17.5",
+ "@vue/shared": "^3.2.24",
+ "@vueuse/core": "^9.6.0",
+ "async-validator": "^4.0.7",
+ "csstype": "^3.0.10",
+ "date-fns": "^2.28.0",
+ "lodash-es": "^4.17.21",
+ "stickybits": "^3.7.9"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.24"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz",
+ "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.1.1"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz",
+ "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==",
+ "dependencies": {
+ "@floating-ui/core": "^1.4.1",
+ "@floating-ui/utils": "^0.1.1"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz",
+ "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw=="
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
+ "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@intlify/core-base": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.4.1.tgz",
+ "integrity": "sha512-WIwx+elsZbxSMxRG5+LC+utRohFvmZMoDevfKOfnYMLbpCjCSavqTfHJAtfsY6ruowzqXeKkeLhRHbYbjoJx5g==",
+ "dependencies": {
+ "@intlify/message-compiler": "9.4.1",
+ "@intlify/shared": "9.4.1"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/message-compiler": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.4.1.tgz",
+ "integrity": "sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw==",
+ "dependencies": {
+ "@intlify/shared": "9.4.1",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/shared": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.4.1.tgz",
+ "integrity": "sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "devOptional": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.14.198",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
+ "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.9",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz",
+ "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.4.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz",
+ "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==",
+ "devOptional": true
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==",
+ "dev": true
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+ "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/type-utils": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+ "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
+ "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==",
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+ "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+ "dependencies": {
+ "@babel/parser": "^7.21.3",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+ "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+ "dependencies": {
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+ "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/reactivity-transform": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0",
+ "postcss": "^8.1.10",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+ "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
+ "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+ "dependencies": {
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+ "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+ "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+ "dependencies": {
+ "@vue/reactivity": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+ "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+ "dependencies": {
+ "@vue/runtime-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "csstype": "^3.1.1"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+ "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/shared": "3.3.4"
+ },
+ "peerDependencies": {
+ "vue": "3.3.4"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
+ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+ },
+ "node_modules/@vueuse/core": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.16",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
+ "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+ "dependencies": {
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "devOptional": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
+ "dev": true
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+ "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
+ "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz",
+ "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/compare-func": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
+ "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
+ "dev": true,
+ "dependencies": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^5.1.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "node_modules/conventional-changelog-angular": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz",
+ "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==",
+ "dev": true,
+ "dependencies": {
+ "compare-func": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/conventional-changelog-conventionalcommits": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz",
+ "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==",
+ "dev": true,
+ "dependencies": {
+ "compare-func": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/conventional-commits-parser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz",
+ "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==",
+ "dev": true,
+ "dependencies": {
+ "is-text-path": "^1.0.1",
+ "JSONStream": "^1.3.5",
+ "meow": "^8.1.2",
+ "split2": "^3.2.2"
+ },
+ "bin": {
+ "conventional-commits-parser": "cli.js"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/copy-anything": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+ "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+ "devOptional": true,
+ "dependencies": {
+ "is-what": "^3.14.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "dependencies": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ }
+ },
+ "node_modules/cosmiconfig-typescript-loader": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz",
+ "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==",
+ "dev": true,
+ "engines": {
+ "node": ">=v14.21.3"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "cosmiconfig": ">=7",
+ "ts-node": ">=10",
+ "typescript": ">=4"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/dargs": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
+ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dev": true,
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dexie": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.4.tgz",
+ "integrity": "sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==",
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "dependencies": {
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
+ "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.1",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.1",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.0",
+ "safe-array-concat": "^1.0.0",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz",
+ "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.48.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
+ "dev": true,
+ "dependencies": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.2"
+ }
+ },
+ "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
+ "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.28.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
+ "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.findlastindex": "^1.2.2",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.8.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.13.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.6",
+ "object.groupby": "^1.0.0",
+ "object.values": "^1.1.6",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "9.17.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz",
+ "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.13",
+ "semver": "^7.5.4",
+ "vue-eslint-parser": "^9.3.1",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "dev": true
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
+ "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.7",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/git-raw-commits": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
+ "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
+ "dev": true,
+ "dependencies": {
+ "dargs": "^7.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "bin": {
+ "git-raw-commits": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.21.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
+ "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/husky": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
+ "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
+ "dev": true,
+ "bin": {
+ "husky": "lib/bin.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==",
+ "dev": true,
+ "dependencies": {
+ "text-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-what": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
+ "devOptional": true
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsencrypt": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/jsencrypt/-/jsencrypt-3.3.2.tgz",
+ "integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==",
+ "dev": true
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ]
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+ "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/less": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
+ "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
+ "devOptional": true,
+ "dependencies": {
+ "copy-anything": "^2.0.1",
+ "parse-node-version": "^1.0.1",
+ "tslib": "^2.3.0"
+ },
+ "bin": {
+ "lessc": "bin/lessc"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "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"
+ }
+ },
+ "node_modules/less/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "devOptional": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/lint-staged": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz",
+ "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "5.3.0",
+ "commander": "11.0.0",
+ "debug": "4.3.4",
+ "execa": "7.2.0",
+ "lilconfig": "2.1.0",
+ "listr2": "6.6.1",
+ "micromatch": "4.0.5",
+ "pidtree": "0.6.0",
+ "string-argv": "0.3.2",
+ "yaml": "2.3.1"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/lint-staged"
+ }
+ },
+ "node_modules/lint-staged/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/lint-staged/node_modules/execa": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/lint-staged/node_modules/human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.18.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz",
+ "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^3.1.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^5.0.1",
+ "rfdc": "^1.3.0",
+ "wrap-ansi": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true
+ },
+ "node_modules/lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "node_modules/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true
+ },
+ "node_modules/log-update": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^5.0.0",
+ "cli-cursor": "^4.0.0",
+ "slice-ansi": "^5.0.0",
+ "strip-ansi": "^7.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz",
+ "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/md5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+ "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+ "dependencies": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "~1.1.6"
+ }
+ },
+ "node_modules/meow": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
+ "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/monaco-editor": {
+ "version": "0.43.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.43.0.tgz",
+ "integrity": "sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q=="
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/needle": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.6.3",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "needle": "bin/needle"
+ },
+ "engines": {
+ "node": ">= 4.4.x"
+ }
+ },
+ "node_modules/needle/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
+ "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+ "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+ "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+ "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.29",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
+ "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-global": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
+ "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
+ "dev": true,
+ "dependencies": {
+ "global-dirs": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.28.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz",
+ "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
+ "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
+ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+ "dev": true
+ },
+ "node_modules/split2": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
+ "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^3.0.0"
+ }
+ },
+ "node_modules/stickybits": {
+ "version": "3.7.11",
+ "resolved": "https://registry.npmjs.org/stickybits/-/stickybits-3.7.11.tgz",
+ "integrity": "sha512-WO+ns7BYZqGS4jWVTg5JNhIvNV4LGbUtNTSck4zAkWRQzA1IfxwIkMGc0BbdGy4PGIjK7kKo5CZcN6Sd5dHVlw=="
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.19.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
+ "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "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"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+ "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+ "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
+ "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
+ "dependencies": {
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
+ "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-sfc": "3.3.4",
+ "@vue/runtime-dom": "3.3.4",
+ "@vue/server-renderer": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/vue-eslint-parser": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz",
+ "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/vue-i18n": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.4.1.tgz",
+ "integrity": "sha512-vnQyYE9LBuNOqPpETIcCaGnAyLEqfeIvDcyZ9T+WBCWFTqWw1J8FuF1jfeDwpHBi5JKgAwgXyq1mt8jp/x/GPA==",
+ "dependencies": {
+ "@intlify/core-base": "9.4.1",
+ "@intlify/shared": "9.4.1",
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz",
+ "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "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"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
+ "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
+ "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "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.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
+ "@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz",
+ "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA=="
+ },
+ "@babel/runtime": {
+ "version": "7.22.11",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz",
+ "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==",
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@commitlint/cli": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz",
+ "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==",
+ "dev": true,
+ "requires": {
+ "@commitlint/format": "^17.4.4",
+ "@commitlint/lint": "^17.7.0",
+ "@commitlint/load": "^17.7.1",
+ "@commitlint/read": "^17.5.1",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0",
+ "lodash.isfunction": "^3.0.9",
+ "resolve-from": "5.0.0",
+ "resolve-global": "1.0.0",
+ "yargs": "^17.0.0"
+ }
+ },
+ "@commitlint/config-conventional": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz",
+ "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-conventionalcommits": "^6.1.0"
+ }
+ },
+ "@commitlint/config-validator": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz",
+ "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
+ }
+ },
+ "@commitlint/ensure": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz",
+ "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
+ }
+ },
+ "@commitlint/execute-rule": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
+ "dev": true
+ },
+ "@commitlint/format": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
+ "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "chalk": "^4.1.0"
+ }
+ },
+ "@commitlint/is-ignored": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz",
+ "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "semver": "7.5.4"
+ }
+ },
+ "@commitlint/lint": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz",
+ "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==",
+ "dev": true,
+ "requires": {
+ "@commitlint/is-ignored": "^17.7.0",
+ "@commitlint/parse": "^17.7.0",
+ "@commitlint/rules": "^17.7.0",
+ "@commitlint/types": "^17.4.4"
+ }
+ },
+ "@commitlint/load": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz",
+ "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==",
+ "dev": true,
+ "requires": {
+ "@commitlint/config-validator": "^17.6.7",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.6.7",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "20.4.7",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
+ }
+ },
+ "@commitlint/message": {
+ "version": "17.4.2",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
+ "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
+ "dev": true
+ },
+ "@commitlint/parse": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz",
+ "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "conventional-changelog-angular": "^6.0.0",
+ "conventional-commits-parser": "^4.0.0"
+ }
+ },
+ "@commitlint/read": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
+ "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
+ "dev": true,
+ "requires": {
+ "@commitlint/top-level": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "fs-extra": "^11.0.0",
+ "git-raw-commits": "^2.0.11",
+ "minimist": "^1.2.6"
+ }
+ },
+ "@commitlint/resolve-extends": {
+ "version": "17.6.7",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz",
+ "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==",
+ "dev": true,
+ "requires": {
+ "@commitlint/config-validator": "^17.6.7",
+ "@commitlint/types": "^17.4.4",
+ "import-fresh": "^3.0.0",
+ "lodash.mergewith": "^4.6.2",
+ "resolve-from": "^5.0.0",
+ "resolve-global": "^1.0.0"
+ }
+ },
+ "@commitlint/rules": {
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz",
+ "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==",
+ "dev": true,
+ "requires": {
+ "@commitlint/ensure": "^17.6.7",
+ "@commitlint/message": "^17.4.2",
+ "@commitlint/to-lines": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0"
+ }
+ },
+ "@commitlint/to-lines": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
+ "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
+ "dev": true
+ },
+ "@commitlint/top-level": {
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
+ "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
+ "dev": true,
+ "requires": {
+ "find-up": "^5.0.0"
+ }
+ },
+ "@commitlint/types": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0"
+ }
+ },
+ "@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ }
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "optional": true
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz",
+ "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ }
+ }
+ },
+ "@eslint/js": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz",
+ "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==",
+ "dev": true
+ },
+ "@fesjs/fes-design": {
+ "version": "0.7.32",
+ "resolved": "https://registry.npmmirror.com/@fesjs/fes-design/-/fes-design-0.7.32.tgz",
+ "integrity": "sha512-EYneDcAeL5fsHkoFYo7Ik4Dwo59In/YUkeWoDl28plD+vDRncyRmzkTrVQRV+tk6YI+ev/aBX+Ao/b8ye839Bw==",
+ "requires": {
+ "@babel/runtime": "^7.16.3",
+ "@floating-ui/dom": "^1.2.9",
+ "@juggle/resize-observer": "^3.3.1",
+ "@types/lodash-es": "^4.17.5",
+ "@vue/shared": "^3.2.24",
+ "@vueuse/core": "^9.6.0",
+ "async-validator": "^4.0.7",
+ "csstype": "^3.0.10",
+ "date-fns": "^2.28.0",
+ "lodash-es": "^4.17.21",
+ "stickybits": "^3.7.9"
+ }
+ },
+ "@floating-ui/core": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz",
+ "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==",
+ "requires": {
+ "@floating-ui/utils": "^0.1.1"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz",
+ "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==",
+ "requires": {
+ "@floating-ui/core": "^1.4.1",
+ "@floating-ui/utils": "^0.1.1"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz",
+ "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw=="
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
+ "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@intlify/core-base": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.4.1.tgz",
+ "integrity": "sha512-WIwx+elsZbxSMxRG5+LC+utRohFvmZMoDevfKOfnYMLbpCjCSavqTfHJAtfsY6ruowzqXeKkeLhRHbYbjoJx5g==",
+ "requires": {
+ "@intlify/message-compiler": "9.4.1",
+ "@intlify/shared": "9.4.1"
+ }
+ },
+ "@intlify/message-compiler": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.4.1.tgz",
+ "integrity": "sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw==",
+ "requires": {
+ "@intlify/shared": "9.4.1",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "@intlify/shared": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.4.1.tgz",
+ "integrity": "sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng=="
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "devOptional": true
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "optional": true,
+ "peer": true
+ },
+ "@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "devOptional": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true
+ },
+ "@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true,
+ "peer": true
+ },
+ "@types/lodash": {
+ "version": "4.14.198",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
+ "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.9",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz",
+ "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "20.4.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz",
+ "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==",
+ "devOptional": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "@types/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==",
+ "dev": true
+ },
+ "@types/web-bluetooth": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+ "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/type-utils": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+ "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@vitejs/plugin-vue": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
+ "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==",
+ "requires": {}
+ },
+ "@vue/compiler-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+ "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+ "requires": {
+ "@babel/parser": "^7.21.3",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+ "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+ "requires": {
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+ "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+ "requires": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/reactivity-transform": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0",
+ "postcss": "^8.1.10",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+ "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "@vue/reactivity": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
+ "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+ "requires": {
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "@vue/reactivity-transform": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+ "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+ "requires": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+ "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+ "requires": {
+ "@vue/reactivity": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+ "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+ "requires": {
+ "@vue/runtime-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "csstype": "^3.1.1"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+ "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+ "requires": {
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
+ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+ },
+ "@vueuse/core": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+ "requires": {
+ "@types/web-bluetooth": "^0.0.16",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "requires": {}
+ }
+ }
+ },
+ "@vueuse/metadata": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
+ "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+ },
+ "@vueuse/shared": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+ "requires": {
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "requires": {}
+ }
+ }
+ },
+ "acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "devOptional": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^1.0.2"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ }
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "array.prototype.findlastindex": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+ "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "arraybuffer.prototype.slice": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
+ "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true
+ },
+ "async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true
+ },
+ "axios": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "optional": true,
+ "peer": true
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
+ },
+ "cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^4.0.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ }
+ },
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz",
+ "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==",
+ "dev": true
+ },
+ "compare-func": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
+ "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^5.1.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "conventional-changelog-angular": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz",
+ "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0"
+ }
+ },
+ "conventional-changelog-conventionalcommits": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz",
+ "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz",
+ "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==",
+ "dev": true,
+ "requires": {
+ "is-text-path": "^1.0.1",
+ "JSONStream": "^1.3.5",
+ "meow": "^8.1.2",
+ "split2": "^3.2.2"
+ }
+ },
+ "copy-anything": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+ "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+ "devOptional": true,
+ "requires": {
+ "is-what": "^3.14.1"
+ }
+ },
+ "cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ }
+ },
+ "cosmiconfig-typescript-loader": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz",
+ "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==",
+ "dev": true,
+ "requires": {}
+ },
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "dargs": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
+ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
+ "dev": true
+ },
+ "date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "requires": {
+ "@babel/runtime": "^7.21.0"
+ }
+ },
+ "dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "dexie": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.4.tgz",
+ "integrity": "sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA=="
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
+ "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.1",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.1",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.0",
+ "safe-array-concat": "^1.0.0",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.10"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "requires": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz",
+ "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.48.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
+ "dev": true,
+ "requires": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
+ "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.28.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
+ "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.findlastindex": "^1.2.2",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.8.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.13.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.6",
+ "object.groupby": "^1.0.0",
+ "object.values": "^1.1.6",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "9.17.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz",
+ "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.13",
+ "semver": "^7.5.4",
+ "vue-eslint-parser": "^9.3.1",
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "dev": true
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "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-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "requires": {
+ "@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"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
+ "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.2.7",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs-extra": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "git-raw-commits": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
+ "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
+ "dev": true,
+ "requires": {
+ "dargs": "^7.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "globals": {
+ "version": "13.21.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz",
+ "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "husky": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
+ "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true,
+ "optional": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dev": true,
+ "requires": {
+ "which-typed-array": "^1.1.11"
+ }
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-what": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
+ "devOptional": true
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsencrypt": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/jsencrypt/-/jsencrypt-3.3.2.tgz",
+ "integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "keyv": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+ "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "less": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
+ "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
+ "devOptional": true,
+ "requires": {
+ "copy-anything": "^2.0.1",
+ "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",
+ "parse-node-version": "^1.0.1",
+ "source-map": "~0.6.0",
+ "tslib": "^2.3.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "devOptional": true
+ }
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "lint-staged": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz",
+ "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "5.3.0",
+ "commander": "11.0.0",
+ "debug": "4.3.4",
+ "execa": "7.2.0",
+ "lilconfig": "2.1.0",
+ "listr2": "6.6.1",
+ "micromatch": "4.0.5",
+ "pidtree": "0.6.0",
+ "string-argv": "0.3.2",
+ "yaml": "2.3.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true
+ },
+ "execa": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dev": true,
+ "requires": {
+ "path-key": "^4.0.0"
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true
+ }
+ }
+ },
+ "listr2": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz",
+ "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "^3.1.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^5.0.1",
+ "rfdc": "^1.3.0",
+ "wrap-ansi": "^8.1.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true
+ },
+ "lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true
+ },
+ "log-update": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz",
+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^5.0.0",
+ "cli-cursor": "^4.0.0",
+ "slice-ansi": "^5.0.0",
+ "strip-ansi": "^7.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.30.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz",
+ "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true
+ },
+ "md5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+ "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "~1.1.6"
+ }
+ },
+ "meow": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
+ "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
+ "dev": true,
+ "requires": {
+ "@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"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true
+ }
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "optional": true
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ }
+ },
+ "monaco-editor": {
+ "version": "0.43.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.43.0.tgz",
+ "integrity": "sha512-cnoqwQi/9fml2Szamv1XbSJieGJ1Dc8tENVMD26Kcfl7xGQWp7OBKMjlwKVGYFJ3/AXJjSOGvcqK7Ry/j9BM1Q=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "needle": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.6.3",
+ "sax": "^1.2.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
+ "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+ "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "object.groupby": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+ "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+ "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@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": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "devOptional": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "optional": true
+ },
+ "postcss": {
+ "version": "8.4.29",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
+ "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+ "requires": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+ "dev": true,
+ "optional": true
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "resolve-global": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
+ "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^0.1.1"
+ }
+ },
+ "restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "3.28.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz",
+ "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==",
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-array-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
+ "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
+ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+ "dev": true
+ },
+ "split2": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
+ "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^3.0.0"
+ }
+ },
+ "stickybits": {
+ "version": "3.7.11",
+ "resolved": "https://registry.npmjs.org/stickybits/-/stickybits-3.7.11.tgz",
+ "integrity": "sha512-WO+ns7BYZqGS4jWVTg5JNhIvNV4LGbUtNTSck4zAkWRQzA1IfxwIkMGc0BbdGy4PGIjK7kKo5CZcN6Sd5dHVlw=="
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "peer": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "terser": {
+ "version": "5.19.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
+ "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "optional": true,
+ "peer": true
+ }
+ }
+ },
+ "text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "3"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true
+ },
+ "ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "requires": {
+ "@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"
+ }
+ },
+ "tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typed-array-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+ "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+ "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
+ "typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vite": {
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
+ "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
+ "requires": {
+ "esbuild": "^0.18.10",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ }
+ },
+ "vue": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
+ "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+ "requires": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-sfc": "3.3.4",
+ "@vue/runtime-dom": "3.3.4",
+ "@vue/server-renderer": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz",
+ "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "vue-i18n": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.4.1.tgz",
+ "integrity": "sha512-vnQyYE9LBuNOqPpETIcCaGnAyLEqfeIvDcyZ9T+WBCWFTqWw1J8FuF1jfeDwpHBi5JKgAwgXyq1mt8jp/x/GPA==",
+ "requires": {
+ "@intlify/core-base": "9.4.1",
+ "@intlify/shared": "9.4.1",
+ "@vue/devtools-api": "^6.5.0"
+ }
+ },
+ "vue-router": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz",
+ "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
+ "requires": {
+ "@vue/devtools-api": "^6.5.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "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-typed-array": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
+ "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
+ "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "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.1.1"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/linkis-web-next/package.json b/linkis-web-next/package.json
new file mode 100644
index 0000000000..72b2c462c1
--- /dev/null
+++ b/linkis-web-next/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "LINKIS-WEB-NEXT",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc && vite build",
+ "preview": "vite preview",
+ "prepare": "husky install"
+ },
+ "dependencies": {
+ "@fesjs/fes-design": "^0.7.31",
+ "@types/lodash": "^4.14.198",
+ "@vitejs/plugin-vue": "^4.1.0",
+ "axios": "^1.5.0",
+ "dayjs": "^1.11.10",
+ "dexie": "^3.2.4",
+ "md5": "^2.3.0",
+ "monaco-editor": "^0.43.0",
+ "qs": "^6.11.2",
+ "vite": "^4.3.9",
+ "vue": "^3.2.47",
+ "vue-i18n": "^9.4.1",
+ "vue-router": "^4.2.2"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^17.6.3",
+ "@commitlint/config-conventional": "^17.6.1",
+ "@typescript-eslint/eslint-plugin": "^5.59.9",
+ "@typescript-eslint/parser": "^5.59.9",
+ "eslint": "^8.41.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-vue": "^9.14.1",
+ "husky": "^7.0.0",
+ "jsencrypt": "^3.3.2",
+ "less": "^4.2.0",
+ "lint-staged": "^13.3.0",
+ "prettier": "2.8.8",
+ "typescript": "^5.0.2",
+ "vue-eslint-parser": "^9.3.0"
+ },
+ "lint-staged": {
+ "*.{js,jsx,vue,ts,tsx}": [
+ "eslint --fix",
+ "prettier --write"
+ ],
+ "*.{scss,less,css,html,md,json}": [
+ "prettier --write"
+ ]
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm run lint-staged",
+ "commit-msg": "commitlint -E $HUSKY_GIT_PARAMS"
+ }
+ }
+}
diff --git a/linkis-web-next/pom.xml b/linkis-web-next/pom.xml
new file mode 100644
index 0000000000..c448b453d8
--- /dev/null
+++ b/linkis-web-next/pom.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ linkis
+ org.apache.linkis
+ ${revision}
+
+ 4.0.0
+
+ linkis-web
+ pom
+
+
+
+ web
+
+
+ linkis.build.web
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ dependency
+ install
+
+ run
+
+
+
+
+
+
+
+
+
+
+ build
+ install
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/public/favicon.ico b/linkis-web-next/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..3fab0999132d2c922c8b76e63b15d6f67dff172e
GIT binary patch
literal 6462
zcmc(j3y@b;9mntP607X8yYkvy7F`@reoUod_G@L&%&7i^mja7LVx!#f|SDeeRT5l;mkc
z-oomV#(GJ6j#WK;8}cF6ccPAjGHfN(f$s)?|0Vs8B>zv?<)>o7=&}_vs;<~R`SQ_+
zrwzJl&(A(rzH;u!i|VFSjyiD1z%iMbLk9f|z02<$I^gy1QDtGjz_8r6d&=HR7L&(F9g*PC)x1ID{7!F+^4_cp!N3Y3ieO<3+3&LwzRBQ$EPnLy~Dio3twKiYeLlOg2Ht_^0};F{ho^Us|RLgMy>GQ4*J7`@E)k=
z2>cx4c?fgBb67LONHZpJUB~{9a2e!4sNN!5lK)Bsx$q=pU<-7Fi{V``Zvj~E{^WTt
z_A>MQ*=EwVW4aaWgY$3;H0m%77s5+m9ku@yIza5Fv2qI&YJd~z?@4~pzc8tHLj5)s
z+Q-_5Fb|tZUz94(=J^3oyF3c#L8IEF9W{Ln3Lqb{p|MUnVLp6h{V9#EfggkV4#DlI
zvc5dOos_+by%^%YCpy$p1UJBM;jge7=D;9m1!?)#Z%%&&Wn19@%uDLsi*-HigZ}2F
ze?be@wH)SPRVu%RbQpVM=CRt#@%b1W1lvioljn)h8XB854abguF?r{}r(qy;2kYGf
z&Fa@_qRBO}Hqp8x$!m*!HpzPv+rxZ+iEr1*lElAl90E1F*Frx&ApKQ{-$}iDto{<~
zgkPwSJ?Z#cUrk`#Gp0D!o^j@>_bo7Q8CWN1*N%n#pw|C@W8E7rhezNrSoRV)zOg(l
zv{Zk3{09Udp`R)JxoGojQ0oD8LKS#6nRgeMm)8Ff{=zudkj~P7LMQBVV7Yy~3eH6T
z*LklNo`6pTA1Bc7oxuBmT8;B+t%ie~d7kIDVbkp!YnFlfTqA=aU2Z?_htR)x4Ozi@
z(9-dD|GO{bxR{pcRO<-v{uQqk?i>+}=J_D!cBW>~l|P80Oj~?}F;@TYKz$#==OJj*
z=D;t&a@WxpA>BXquK>%pKqz6x7}TH{LODZ1k;uH;%ft*Yt+IB~N6!
z7OmZd|Ftj$`oT;HXN?-3hHenFk0ZSUf_~?seNt{ba*wPB%in=(AP?d(Xh|Q?sdi)k
zZQz<$zp>M`TV9&K`N`tEEtyVvTNuCk2J()8G3Gr8d(-yCvQ6+4_zeW@q1^XYf_r`r
zI3A%)>l$=E<27Dh_@de*E3u7T3eQ+$=2X}VYWGg(ns*Ey0{y-P--RmpKBzskyOs2>
zAw3VFEZA2me>?S#dpY!7>$80e^*#TH{hNdStI;zVJ_{A#UFK5wCK%g|m1^G)w?lj%
z!-u-{IRWB1#k%(I2J>HmzTp0-noo}#&XXg$Jsn}i|5s?U<{4tiTB-;u9+(#&
z*LO#l2+zXC&TTh7bA9g#ugx3TE#sMtFZa{5MscFuz^
z7M^Vt&<4t27PxLKUkL?MD@UmR2Y2%jrI>aW&evI*RL3L;K-vlAn
z80*bzqO+wB;a#lbdo#E$_k(?C4%cice_K$$i~`RD`*1AV$-5bH_?v_}3*o86x3Q)Y
zS}M2MdiqFkZH|Jw;1BQuxK_1(tJx?2E>Hv6v#zKNeegT|PIwO76W&YaLVw5}*K>C8
ze+%z9hx&OO;#kwHurnyYXK2fP?0DHH_kgkO-(cJBlj|WHLLXe0-Uo}JNZk;8X-9)=
zGQ98KXyWoSka=3KB<*-_@k|W&s-2|0XW7T&bc8%?9()Z#-(CB&pvC+4w8S=3nfBCp
zF5C-Y4QT%i&P6wHo;>r7iCy7ZSO#HFseL{aK{G9#y=>bA$8!pVzYVw^j9vc(W0m`J
z4Qz!lSJv4F_T5-<+qDWiI8+F(tQGPT7o2hA)729n&G{kcz
Z>(EhK6BWkKwGmw*e_J#-whg4C=zq
+
+
+
+ ECM管理-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/basedataManagement.svg b/linkis-web-next/public/sidebar/basedataManagement.svg
new file mode 100644
index 0000000000..fcc7b45868
--- /dev/null
+++ b/linkis-web-next/public/sidebar/basedataManagement.svg
@@ -0,0 +1,46 @@
+
+
+
+
+ 基础数据管理-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/codeQuery.svg b/linkis-web-next/public/sidebar/codeQuery.svg
new file mode 100644
index 0000000000..6a3d45f251
--- /dev/null
+++ b/linkis-web-next/public/sidebar/codeQuery.svg
@@ -0,0 +1,54 @@
+
+
+
+
+ 代码检索-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/dataSourceManage.svg b/linkis-web-next/public/sidebar/dataSourceManage.svg
new file mode 100644
index 0000000000..739f6bad84
--- /dev/null
+++ b/linkis-web-next/public/sidebar/dataSourceManage.svg
@@ -0,0 +1,41 @@
+
+
+
+
+ 数据源管理-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/dateReport.svg b/linkis-web-next/public/sidebar/dateReport.svg
new file mode 100644
index 0000000000..9c2f10b1af
--- /dev/null
+++ b/linkis-web-next/public/sidebar/dateReport.svg
@@ -0,0 +1,44 @@
+
+
+
+
+ 全局变量-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/globalHistory.svg b/linkis-web-next/public/sidebar/globalHistory.svg
new file mode 100644
index 0000000000..d4ac94980d
--- /dev/null
+++ b/linkis-web-next/public/sidebar/globalHistory.svg
@@ -0,0 +1,39 @@
+
+
+
+
+ 任务概览-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/microserviceManage.svg b/linkis-web-next/public/sidebar/microserviceManage.svg
new file mode 100644
index 0000000000..8d7a949f58
--- /dev/null
+++ b/linkis-web-next/public/sidebar/microserviceManage.svg
@@ -0,0 +1,44 @@
+
+
+
+
+ 微服务管理-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/resource.svg b/linkis-web-next/public/sidebar/resource.svg
new file mode 100644
index 0000000000..35f2854763
--- /dev/null
+++ b/linkis-web-next/public/sidebar/resource.svg
@@ -0,0 +1,48 @@
+
+
+
+
+ 资源管理-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/setting.svg b/linkis-web-next/public/sidebar/setting.svg
new file mode 100644
index 0000000000..67cc9c694a
--- /dev/null
+++ b/linkis-web-next/public/sidebar/setting.svg
@@ -0,0 +1,40 @@
+
+
+
+
+ 参数配置-常规
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/sidebar/udfFunctionTitle.svg b/linkis-web-next/public/sidebar/udfFunctionTitle.svg
new file mode 100644
index 0000000000..fb66cd265c
--- /dev/null
+++ b/linkis-web-next/public/sidebar/udfFunctionTitle.svg
@@ -0,0 +1,44 @@
+
+
+
+ UDF函数-常规
+
+
+
+
+
+
+
+
+
+
+ FX
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/public/vite.svg b/linkis-web-next/public/vite.svg
new file mode 100644
index 0000000000..b704a57c3c
--- /dev/null
+++ b/linkis-web-next/public/vite.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/LICENSE b/linkis-web-next/release-docs/LICENSE
new file mode 100644
index 0000000000..74785fe6f4
--- /dev/null
+++ b/linkis-web-next/release-docs/LICENSE
@@ -0,0 +1,247 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+============================================================================
+ APACHE LINKIS SUBCOMPONENTS:
+
+ The Apache Linkis project contains subcomponents with separate copyright
+ notices and license terms. Your use of the source code for the these
+ subcomponents is subject to the terms and conditions of the following
+ licenses.
+
+============================================================================
+
+Third party of Linkis Web project
+See licenses/ for text of these licenses.
+ (The Apache-2.0 License) dexie@2.0.4 (https://github.com/dfahlander/Dexie.js)
+ (The BSD-3-Clause License) highlight.js@10.7.3 (https://github.com/highlightjs/highlight.js)
+ (The BSD-3-Clause License) license-checker@25.0.1 (https://github.com/davglass/license-checker)
+ (The BSD-3-Clause License) md5@2.3.0 (https://github.com/pvorb/node-md5)
+ (The BSD-3-Clause License) qs@6.9.4 (https://github.com/ljharb/qs)
+ (The ISC License) dt-sql-parser@1.2.1 (https://github.com/DTStack/dt-sql-parser)
+ (The MIT License) axios@0.19.2 (https://github.com/axios/axios)
+ (The MIT License) babel-polyfill@6.26.0 (https://github.com/babel/babel/tree/master/packages/babel-polyfill)
+ (The MIT License) core-js@2.6.11 (https://github.com/zloirock/core-js)
+ (The MIT License) eslint-plugin-vue@6.2.2 (https://github.com/vuejs/eslint-plugin-vue)
+ (The MIT License) eslint@6.8.0 (https://github.com/eslint/eslint)
+ (The MIT License) iview@3.5.4 (https://github.com/iview/iview)
+ (The MIT License) lodash@4.17.21 (https://github.com/lodash/lodash)
+ (The MIT License) mitt@1.2.0 (https://github.com/developit/mitt)
+ (The MIT License) moment@2.29.1 (https://github.com/moment/moment)
+ (The MIT License) monaco-editor@0.19.3 (https://github.com/Microsoft/monaco-editor)
+ (The MIT License) reconnecting-websocket@4.4.0 (https://github.com/pladaria/reconnecting-websocket)
+ (The MIT License) sql-formatter@2.3.3 (https://github.com/zeroturnaround/sql-formatter)
+ (The MIT License) svgo@1.3.0 (https://github.com/svg/svgo)
+ (The MIT License) vue-i18n@8.22.1 (https://github.com/kazupon/vue-i18n)
+ (The MIT License) vue-router@3.4.8 (https://github.com/vuejs/vue-router)
+ (The MIT License) vue@2.6.12 (https://github.com/vuejs/vue)
+ (The MIT License) vuedraggable@2.24.3 (https://github.com/SortableJS/Vue.Draggable)
+ (The MIT License) vuescroll@4.16.1 (https://github.com/YvesCoding/vuescroll)
+ (The MIT License) worker-loader@2.0.0 (https://github.com/webpack-contrib/worker-loader)
+ (The MIT License) @form-create/iview@2.5.13 (https://github.com/xaboy/form-create)
+ (The MIT License) object-to-formdata@4.2.2 (https://github.com/therealparmesh/object-to-formdata)
+ (The MIT License) jsencrypt@3.2.1 (https://github.com/travist/jsencrypt)
+ (The Apache-2.0 License) material-design-icons@^3.0.1 (https://github.com/google/material-design-icons)
+ (The Apache-2.0 License) v-jsoneditor@1.4.5 (https://github.com/yansenlei/VJsoneditor)
+ (The BSD-3-Clause License) ace-builds@^1.10.1 (https://github.com/ajaxorg/ace-builds)
diff --git a/linkis-web-next/release-docs/NOTICE b/linkis-web-next/release-docs/NOTICE
new file mode 100644
index 0000000000..c9b63ba5c6
--- /dev/null
+++ b/linkis-web-next/release-docs/NOTICE
@@ -0,0 +1,25 @@
+Apache Linkis
+Copyright 2021-2023 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+The initial codebase was donated to the ASF by WeBank, copyright 2015-2020.
+
+
+-------------------------------------- Dexie.js NOTICE --------------------------------------
+Dexie.js
+
+Copyright (c) 2014-2017 David Fahlander
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-ace-builds.txt b/linkis-web-next/release-docs/licenses/LICENSE-ace-builds.txt
new file mode 100644
index 0000000000..4760be2a62
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-ace-builds.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2010, Ajax.org B.V.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Ajax.org B.V. nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-autoprefixer.txt b/linkis-web-next/release-docs/licenses/LICENSE-autoprefixer.txt
new file mode 100644
index 0000000000..1b21e2bc5e
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-autoprefixer.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-axios.txt b/linkis-web-next/release-docs/licenses/LICENSE-axios.txt
new file mode 100644
index 0000000000..d36c80ef27
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-axios.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2014-present Matt Zabriskie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-core-js.txt b/linkis-web-next/release-docs/licenses/LICENSE-core-js.txt
new file mode 100644
index 0000000000..1256c1dd96
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-core-js.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2014-2022 Denis Pushkarev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-dexie.txt b/linkis-web-next/release-docs/licenses/LICENSE-dexie.txt
new file mode 100644
index 0000000000..e06d208186
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-dexie.txt
@@ -0,0 +1,202 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-eslint-plugin-vue.txt b/linkis-web-next/release-docs/licenses/LICENSE-eslint-plugin-vue.txt
new file mode 100644
index 0000000000..c914149a6f
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-eslint-plugin-vue.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Toru Nagashima
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-eslint.txt b/linkis-web-next/release-docs/licenses/LICENSE-eslint.txt
new file mode 100644
index 0000000000..b607bb36e9
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-eslint.txt
@@ -0,0 +1,19 @@
+Copyright OpenJS Foundation and other contributors,
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-form-create.txt b/linkis-web-next/release-docs/licenses/LICENSE-form-create.txt
new file mode 100644
index 0000000000..5609421fb8
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-form-create.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 xaboy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-highlight.js.txt b/linkis-web-next/release-docs/licenses/LICENSE-highlight.js.txt
new file mode 100644
index 0000000000..2250cc7eca
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-highlight.js.txt
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2006, Ivan Sagalaev.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-iview.txt b/linkis-web-next/release-docs/licenses/LICENSE-iview.txt
new file mode 100644
index 0000000000..5449fc815b
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-iview.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 iview
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-jsencrypt.txt b/linkis-web-next/release-docs/licenses/LICENSE-jsencrypt.txt
new file mode 100644
index 0000000000..8be95e3296
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-jsencrypt.txt
@@ -0,0 +1,107 @@
+File: /src/LICENSE.txt
+The MIT License (MIT)
+Copyright (c) 2015 Form.io
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in the
+Software without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+File: /lib/jsrsasign/LICENSE.txt
+
+
+CONTAINS CODE FROM YUI LIBRARY SEE LICENSE @ http://yuilibrary.com/license/
+
+The 'jsrsasign'(RSA-Sign JavaScript Library) License
+
+Copyright (c) 2010-2013 Kenji Urushima
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+File: /lib/jsbn/LICENSE.txt
+
+
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+ Tom Wu
+ tjw@cs.Stanford.EDU
+File: /lib/asn1js/LICENSE.txt
+
+
+ASN.1 JavaScript decoder
+Copyright (c) 2008-2013 Lapo Luchini
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-license-checker.txt b/linkis-web-next/release-docs/licenses/LICENSE-license-checker.txt
new file mode 100644
index 0000000000..8af6d9d67e
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-license-checker.txt
@@ -0,0 +1,24 @@
+Copyright 2012 Yahoo Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Yahoo! Inc. nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-lodash.txt b/linkis-web-next/release-docs/licenses/LICENSE-lodash.txt
new file mode 100644
index 0000000000..4773fd8e84
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-lodash.txt
@@ -0,0 +1,49 @@
+The MIT License
+
+Copyright JS Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-md5.txt b/linkis-web-next/release-docs/licenses/LICENSE-md5.txt
new file mode 100644
index 0000000000..f476d11e7d
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-md5.txt
@@ -0,0 +1,27 @@
+Copyright © 2011-2012, Paul Vorbach.
+Copyright © 2009, Jeff Mott.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+* Neither the name Crypto-JS nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-mitt.txt b/linkis-web-next/release-docs/licenses/LICENSE-mitt.txt
new file mode 100644
index 0000000000..84c52fe2cf
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-mitt.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Jason Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-moment.txt b/linkis-web-next/release-docs/licenses/LICENSE-moment.txt
new file mode 100644
index 0000000000..8618b7333d
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-moment.txt
@@ -0,0 +1,22 @@
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-object-to-formdata.txt b/linkis-web-next/release-docs/licenses/LICENSE-object-to-formdata.txt
new file mode 100644
index 0000000000..d0152019b1
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-object-to-formdata.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Parmesh Krishen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-postcss.txt b/linkis-web-next/release-docs/licenses/LICENSE-postcss.txt
new file mode 100644
index 0000000000..1b21e2bc5e
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-postcss.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-qs.txt b/linkis-web-next/release-docs/licenses/LICENSE-qs.txt
new file mode 100644
index 0000000000..fecf6b6942
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-qs.txt
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-reconnecting-websocket.txt b/linkis-web-next/release-docs/licenses/LICENSE-reconnecting-websocket.txt
new file mode 100644
index 0000000000..278279cbb6
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-reconnecting-websocket.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Pedro Ladaria
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-sql-formatter.txt b/linkis-web-next/release-docs/licenses/LICENSE-sql-formatter.txt
new file mode 100644
index 0000000000..7b1a172780
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-sql-formatter.txt
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2020 ZeroTurnaround LLC
+Copyright (c) 2020-present George Leslie-Waksman and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-svgo.txt b/linkis-web-next/release-docs/licenses/LICENSE-svgo.txt
new file mode 100644
index 0000000000..38a47dacb9
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-svgo.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Kir Belevich
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-v-jsoneditor.txt b/linkis-web-next/release-docs/licenses/LICENSE-v-jsoneditor.txt
new file mode 100644
index 0000000000..261eeb9e9f
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-v-jsoneditor.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-vue-i18n.txt b/linkis-web-next/release-docs/licenses/LICENSE-vue-i18n.txt
new file mode 100644
index 0000000000..398540b341
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-vue-i18n.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 kazuya kawaguchi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-vue-router.txt b/linkis-web-next/release-docs/licenses/LICENSE-vue-router.txt
new file mode 100644
index 0000000000..8a8c7c2492
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-vue-router.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present Evan You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-vue.txt b/linkis-web-next/release-docs/licenses/LICENSE-vue.txt
new file mode 100644
index 0000000000..b65dd9e62e
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-vue.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-vuedraggable.txt b/linkis-web-next/release-docs/licenses/LICENSE-vuedraggable.txt
new file mode 100644
index 0000000000..a95b50a4c9
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-vuedraggable.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2019 David Desmaisons
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-vuescroll.txt b/linkis-web-next/release-docs/licenses/LICENSE-vuescroll.txt
new file mode 100644
index 0000000000..dba6cdafe4
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-vuescroll.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Yi(Yves) Wang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/linkis-web-next/release-docs/licenses/LICENSE-worker-loader.txt b/linkis-web-next/release-docs/licenses/LICENSE-worker-loader.txt
new file mode 100644
index 0000000000..8c11fc7289
--- /dev/null
+++ b/linkis-web-next/release-docs/licenses/LICENSE-worker-loader.txt
@@ -0,0 +1,20 @@
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/linkis-web-next/src/App.vue b/linkis-web-next/src/App.vue
new file mode 100644
index 0000000000..104f17c2f4
--- /dev/null
+++ b/linkis-web-next/src/App.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/assets/vue.svg b/linkis-web-next/src/assets/vue.svg
new file mode 100644
index 0000000000..620d312285
--- /dev/null
+++ b/linkis-web-next/src/assets/vue.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkis-web-next/src/components/editor/editor.vue b/linkis-web-next/src/components/editor/editor.vue
new file mode 100644
index 0000000000..3821e24489
--- /dev/null
+++ b/linkis-web-next/src/components/editor/editor.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/components/editor/highRiskGrammar.ts b/linkis-web-next/src/components/editor/highRiskGrammar.ts
new file mode 100644
index 0000000000..3111068c44
--- /dev/null
+++ b/linkis-web-next/src/components/editor/highRiskGrammar.ts
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const hql = [
+ /Truncate\s*Table/i,
+ /Drop\s*Table/i,
+ /Drop\s*Function/i,
+ /Drop\s*Database/i,
+ /ALTER\s*DATABASE/i,
+];
+
+const python = [/sys/i, /os/i, /sc\.stop/i, /spark\.stop/i];
+
+const scala = [/sc\.stop/i, /spark\.stop/i];
+
+export default {
+ hql,
+ python,
+ scala,
+};
diff --git a/linkis-web-next/src/components/editor/index.less b/linkis-web-next/src/components/editor/index.less
new file mode 100644
index 0000000000..46abc63d71
--- /dev/null
+++ b/linkis-web-next/src/components/editor/index.less
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// @import '~@/common/style/variables.scss';
+.we-editor {
+ height: 100%;
+ width: 100%;
+ a {
+ color: #646465 !important;
+ }
+ .glyphMarginClass {
+ background: #ff9900;
+ }
+ .contentClass {
+ background: #fad8a483;
+ }
+ .inlineDecoration {
+ position: relative;
+ color: #ff9900 !important;
+ cursor: pointer;
+ font-style: oblique;
+ // wavy line(波浪线)
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: -2px;
+ left: 5%;
+ width: 90%;
+ height: 2px;
+ background: -webkit-linear-gradient(
+ 315deg,
+ transparent,
+ transparent 45%,
+ #ed4014,
+ transparent 55%,
+ transparent 100%
+ ),
+ -webkit-linear-gradient(45deg, transparent, transparent 45%, #ed4014, transparent
+ 55%, transparent 100%);
+ background-size: 4px 4px;
+ background-repeat: repeat-x;
+ }
+ }
+ .highRiskGrammar {
+ color: red;
+ }
+}
diff --git a/linkis-web-next/src/components/editor/index.ts b/linkis-web-next/src/components/editor/index.ts
new file mode 100644
index 0000000000..0dca9fd678
--- /dev/null
+++ b/linkis-web-next/src/components/editor/index.ts
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import weEditor from './editor.vue';
+
+export default weEditor;
diff --git a/linkis-web-next/src/components/editor/keyword/hql.ts b/linkis-web-next/src/components/editor/keyword/hql.ts
new file mode 100644
index 0000000000..25ac60bc35
--- /dev/null
+++ b/linkis-web-next/src/components/editor/keyword/hql.ts
@@ -0,0 +1,2384 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { isEmpty } from 'lodash';
+import { getHiveList, getReturnList, getFormatProposalsList } from '../util';
+import storage from '@/common/helper/storage';
+
+const kewordInfoProposals = [
+ {
+ label: 'ADD',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ADD',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ADMIN',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ADMIN',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'AFTER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'AFTER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ANALYZE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ANALYZE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ASC',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ASC',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'BEFORE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'BEFORE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'BUCKET',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'BUCKET',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'BUCKETS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'BUCKETS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CASCADE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CASCADE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CHANGE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CHANGE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CLUSTER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CLUSTER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CLUSTERED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CLUSTERED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CLUSTERSTATUS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CLUSTERSTATUS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COLLECTION',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COLLECTION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COLUMNS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COLUMNS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COMMENT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COMMENT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COMPACT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COMPACT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COMPACTIONS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COMPACTIONS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'COMPUTE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'COMPUTE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CONCATENATE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CONCATENATE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'CONTINUE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'CONTINUE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DATA',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DATA',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DATABASES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DATABASES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DATETIME',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DATETIME',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DAY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DAY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DBPROPERTIES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DBPROPERTIES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DEFERRED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DEFERRED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DEFINED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DEFINED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DELIMITED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DELIMITED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DEPENDENCY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DEPENDENCY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DESC',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DESC',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DIRECTORIES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DIRECTORIES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DIRECTORY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DIRECTORY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DISABLE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DISABLE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DISTRIBUTE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'DISTRIBUTE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ELEM_TYPE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ELEM_TYPE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ENABLE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ENABLE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ESCAPED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ESCAPED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'EXCLUSIVE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'EXCLUSIVE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'EXPLAIN',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'EXPLAIN',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'EXPORT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'EXPORT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FIELDS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FIELDS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FILE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FILE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FILEFORMAT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FILEFORMAT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FIRST',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FIRST',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FORMAT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FORMAT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FORMATTED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FORMATTED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'FUNCTIONS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'FUNCTIONS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'HOLD_DDLTIME',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'HOLD_DDLTIME',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'HOUR',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'HOUR',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'IDXPROPERTIES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'IDXPROPERTIES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'IGNORE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'IGNORE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'INDEX',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'INDEX',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'INDEXES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'INDEXES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'INPATH',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'INPATH',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'INPUTDRIVER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'INPUTDRIVER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'INPUTFORMAT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'INPUTFORMAT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ITEMS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ITEMS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'JAR',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'JAR',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'KEYS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'KEYS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'KEY_TYPE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'KEY_TYPE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LIMIT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LIMIT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LINES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LINES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LOAD',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LOAD',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LOCATION',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LOCATION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LOCK',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LOCK',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LOCKS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LOCKS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LOGICAL',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LOGICAL',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LONG',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'LONG',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MAPJOIN',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MAPJOIN',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MATERIALIZED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MATERIALIZED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'METADATA',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'METADATA',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MINUS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MINUS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MINUTE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MINUTE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MONTH',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MONTH',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MSCK',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'MSCK',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'NOSCAN',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'NOSCAN',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'NO_DROP',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'NO_DROP',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OFFLINE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OFFLINE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OPTION',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OPTION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OUTPUTDRIVER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OUTPUTDRIVER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OUTPUTFORMAT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OUTPUTFORMAT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OVERWRITE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OVERWRITE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OWNER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'OWNER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PARTITIONED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PARTITIONED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PARTITIONS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PARTITIONS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PLUS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PLUS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PRETTY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PRETTY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PRINCIPALS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PRINCIPALS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PROTECTION',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PROTECTION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'PURGE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'PURGE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'READ',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'READ',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'READONLY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'READONLY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REBUILD',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REBUILD',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RECORDREADER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RECORDREADER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RECORDWRITER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RECORDWRITER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REGEXP',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REGEXP',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RELOAD',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RELOAD',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RENAME',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RENAME',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REPAIR',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REPAIR',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REPLACE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REPLACE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REPLICATION',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REPLICATION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RESTRICT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RESTRICT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'REWRITE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'REWRITE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RLIKE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'RLIKE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ROLE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ROLE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ROLES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'ROLES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SCHEMA',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SCHEMA',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SCHEMAS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SCHEMAS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SECOND',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SECOND',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SEMI',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SEMI',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SERDE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SERDE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SERDEPROPERTIES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SERDEPROPERTIES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SERVER',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SERVER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SETS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SETS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SHARED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SHARED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SHOW',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SHOW',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SHOW_DATABASE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SHOW_DATABASE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SKEWED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SKEWED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SORT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SORT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SORTED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SORTED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SSL',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'SSL',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'STATISTICS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'STATISTICS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'STORED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'STORED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'STREAMTABLE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'STREAMTABLE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'STRING',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'STRING',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'STRUCT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'STRUCT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TABLES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TABLES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TBLPROPERTIES',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TBLPROPERTIES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TEMPORARY',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TEMPORARY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TERMINATED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TERMINATED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TINYINT',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TINYINT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TOUCH',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TOUCH',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TRANSACTIONS',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'TRANSACTIONS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNARCHIVE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNARCHIVE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNDO',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNDO',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNIONTYPE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNIONTYPE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNLOCK',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNLOCK',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNSET',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNSET',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UNSIGNED',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UNSIGNED',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'URI',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'URI',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'USE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'USE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UTC',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UTC',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'UTCTIMESTAMP',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'UTCTIMESTAMP',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'VALUE_TYPE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'VALUE_TYPE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'VIEW',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'VIEW',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'WHILE',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'WHILE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'YEAR',
+ documentation: 'Hive 1.2.0 Non-reserved Keywords',
+ insertText: 'YEAR',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'AUTOCOMMIT',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'AUTOCOMMIT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ISOLATION',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'ISOLATION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LEVEL',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'LEVEL',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OFFSET',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'OFFSET',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SNAPSHOT',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'SNAPSHOT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TRANSACTION',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'TRANSACTION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'WORK',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'WORK',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'WRITE',
+ documentation: 'Hive 2.0.0 Non-reserved Keywords',
+ insertText: 'WRITE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ABORT',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'ABORT',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'KEY',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'KEY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'LAST',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'LAST',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'NORELY',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'NORELY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'NOVALIDATE',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'NOVALIDATE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'NULLS',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'NULLS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'RELY',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'RELY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'VALIDATE',
+ documentation: 'Hive 2.1.0 Non-reserved Keywords',
+ insertText: 'VALIDATE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DETAIL',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'DETAIL',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DOW',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'DOW',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'EXPRESSION',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'EXPRESSION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'OPERATOR',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'OPERATOR',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'QUARTER',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'QUARTER',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SUMMARY',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'SUMMARY',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'VECTORIZATION',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'VECTORIZATION',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'WEEK',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'WEEK',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'YEARS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'YEARS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MONTHS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'MONTHS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'WEEKS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'WEEKS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'DAYS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'DAYS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'HOURS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'HOURS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'MINUTES',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'MINUTES',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'SECONDS',
+ documentation: 'Hive 2.2.0 Non-reserved Keywords',
+ insertText: 'SECONDS',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'TIMESTAMPTZ',
+ documentation: 'Hive 3.0.0 Non-reserved Keywords',
+ insertText: 'TIMESTAMPTZ',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ZONE',
+ documentation: 'Hive 3.0.0 Non-reserved Keywords',
+ insertText: 'ZONE',
+ detail: 'Non-reserved Keywords',
+ },
+ {
+ label: 'ALL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ALL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ALTER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ALTER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'AND',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'AND',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ARRAY',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ARRAY',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'AS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'AS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'AUTHORIZATION',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'AUTHORIZATION',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BETWEEN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BETWEEN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BIGINT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BIGINT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BINARY',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BINARY',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BOOLEAN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BOOLEAN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BOTH',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BOTH',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'BY',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'BY',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CASE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CASE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CAST',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CAST',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CHAR',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CHAR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'COLUMN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'COLUMN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CONF',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CONF',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CREATE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CREATE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CROSS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CROSS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CUBE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CUBE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CURRENT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CURRENT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CURRENT_DATE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CURRENT_DATE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CURRENT_TIMESTAMP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CURRENT_TIMESTAMP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CURSOR',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'CURSOR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DATABASE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DATABASE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DATE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DATE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DECIMAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DECIMAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DELETE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DELETE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DESCRIBE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DESCRIBE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DISTINCT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DISTINCT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DOUBLE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DOUBLE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DROP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'DROP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ELSE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ELSE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'END',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'END',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXCHANGE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXCHANGE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXISTS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXISTS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXTENDED',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXTENDED',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXTERNAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXTERNAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FALSE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FALSE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXTERNAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXTERNAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FETCH',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FETCH',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FLOAT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FLOAT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FOLLOWING',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'EXFOLLOWINGTERNAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FOR',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FOR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'from',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'from',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FULL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FULL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FUNCTION',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'FUNCTION',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'GRANT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'GRANT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'GROUP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'GROUP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'GROUPING',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'GROUPING',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'HAVING',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'HAVING',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'IF',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'IF',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'IMPORT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'IMPORT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'IN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'IN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INNER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INNER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INSERT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INSERT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INTERSECT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INTERSECT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INTERVAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INTERVAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INTO',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'INTO',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'IS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'IS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'JOIN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'JOIN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'LATERAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'LATERAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'LEFT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'LEFT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'LESS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'LESS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'LIKE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'LIKE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'LOCAL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'LOCAL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'MACRO',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'MACRO',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'MAP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'MAP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'MORE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'MORE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'NONE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'NONE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'NOT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'NOT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'NULL',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'NULL',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'OF',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'OF',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ON',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ON',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'OR',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'OR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ORDER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ORDER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'OUT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'OUT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'OUTER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'OUTER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'OVER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'OVER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PARTIALSCAN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PARTIALSCAN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PARTITION',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PARTITION',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PERCENT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PERCENT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PRECEDING',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PRECEDING',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PRESERVE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PRESERVE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PROCEDURE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'PROCEDURE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'RANGE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'RANGE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'READS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'READS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'REDUCE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'REDUCE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'REVOKE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'REVOKE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'RIGHT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'RIGHT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ROLLUP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ROLLUP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ROW',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ROW',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ROWS',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'ROWS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'SELECT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'SELECT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'SET',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'SET',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'SMALLINT',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'SMALLINT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TABLE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TABLE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TABLESAMPLE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TABLESAMPLE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'THEN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'THEN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TIMESTAMP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TIMESTAMP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TO',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TO',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TRANSFORM',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TRANSFORM',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TRIGGER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TRIGGER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TRUE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TRUE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TRUNCATE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'TRUNCATE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'UNBOUNDED',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'UNBOUNDED',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'UNION',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'UNION',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'UNIQUEJOIN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'UNIQUEJOIN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'UPDATE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'UPDATE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'USER',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'USER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'USING',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'USING',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'UTC_TMESTAMP',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'UTC_TMESTAMP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'VALUES',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'VALUES',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'VARCHAR',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'VARCHAR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'WHEN',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'WHEN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'WHERE',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'WHERE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'WINDOW',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'WINDOW',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'WITH',
+ documentation: 'Hive 1.2.0 Reserved Keywords',
+ insertText: 'WITH',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'COMMIT',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'COMMIT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ONLY',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'ONLY',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'REGEXP',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'REGEXP',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'RLIKE',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'RLIKE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ROLLBACK',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'ROLLBACK',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'START',
+ documentation: 'Hive 2.0.0 Reserved Keywords',
+ insertText: 'START',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CACHE',
+ documentation: 'Hive 2.1.0 Reserved Keywords',
+ insertText: 'CACHE',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'CONSTRAINT',
+ documentation: 'Hive 2.1.0 Reserved Keywords',
+ insertText: 'CONSTRAINT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FOREIGN',
+ documentation: 'Hive 2.1.0 Reserved Keywords',
+ insertText: 'FOREIGN',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PRIMARY',
+ documentation: 'Hive 2.1.0 Reserved Keywords',
+ insertText: 'PRIMARY',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'DAYOFWEEK',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'DAYOFWEEK',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'EXTRACT',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'EXTRACT',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'FLOOR',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'FLOOR',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'INTEGER',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'INTEGER',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'PRECISION',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'PRECISION',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'VIEWS',
+ documentation: 'Hive 2.2.0 Reserved Keywords',
+ insertText: 'VIEWS',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'TIME',
+ documentation: 'Hive 3.0.0 Reserved Keywords',
+ insertText: 'TIME',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'NUMERIC',
+ documentation: 'Hive 3.0.0 Reserved Keywords',
+ insertText: 'NUMERIC',
+ detail: 'Reserved Keywords',
+ },
+ {
+ label: 'ide.engine.no.limit.allow',
+ documentation: '当设置为true时,本次执行的SQL将进行全量导出',
+ insertText: 'ide.engine.no.limit.allow',
+ detail: 'build-in parameters',
+ },
+];
+// Common grammatical structures(常用语法结构)
+const commonGrammaticalStruCture = [
+ {
+ label: 'drop table',
+ documentation: '删除hive表',
+ insertText: 'drop table if exists {${1:table_name}$0};',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'create table partitioned by',
+ documentation: '创建hive分区表',
+ insertText:
+ 'create table {${1:table_name}$0} ({${2:columns}}) partitioned by ({${3:partition}}) row format delimited fields terminated by "," stored as orc;',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'create table as select',
+ documentation: '通过select创建表',
+ insertText: 'create table {${1:table_name}$0} as select;',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'insert into table',
+ documentation: '添加方式插入数据',
+ insertText:
+ 'insert into table {${1:table_name}$0} partition({partition});',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'insert overwrite table',
+ documentation: '覆盖方式插入数据',
+ insertText:
+ 'insert overwrite table {${1:table_name}$0} partition({partition});',
+ detail: '常用语法结构',
+ },
+];
+// System Embedded Variables(系统内嵌变量)
+const buildInVariableProposals = [
+ {
+ label: 'run_date',
+ documentation: '当前日期的前一天',
+ insertText: '${run_date}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_date_std',
+ documentation: '当前日期的前一天,年月日之间有横杠分割',
+ insertText: '${run_date_std}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_begin',
+ documentation: '当前月份的第一天',
+ insertText: '${run_month_begin}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_begin_std',
+ documentation: '当前月份的第一天,年月日之间有横杠分割',
+ insertText: '${run_month_begin_std}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_end',
+ documentation: '当前月份的最后一天',
+ insertText: '${run_month_end}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_end_std',
+ documentation: '当前月份的最后一天,年月日之间有横杠分割',
+ insertText: '${run_month_end_std}',
+ detail: '系统内嵌变量',
+ },
+];
+const columnsProposals = [
+ {
+ label: 'id',
+ documentation: '常用表字段',
+ insertText: 'id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_id',
+ documentation: '常用表字段',
+ insertText: 'id_id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'org',
+ documentation: '常用表字段',
+ insertText: 'org',
+ detail: '常用表字段',
+ },
+ {
+ label: 'product_cd',
+ documentation: '常用表字段',
+ insertText: 'product_cd',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_no_hash',
+ documentation: '常用表字段',
+ insertText: 'id_no_hash',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_no_mask',
+ documentation: '常用表字段',
+ insertText: 'id_no_mask',
+ detail: '常用表字段',
+ },
+ {
+ label: 'app_no',
+ documentation: '常用表字段',
+ insertText: 'app_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'ecif_no',
+ documentation: '常用表字段',
+ insertText: 'ecif_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'name_hash',
+ documentation: '常用表字段',
+ insertText: 'name_hash',
+ detail: '常用表字段',
+ },
+ {
+ label: 'acct_no',
+ documentation: '常用表字段',
+ insertText: 'acct_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'card_no',
+ documentation: '常用表字段',
+ insertText: 'card_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'cust_id',
+ documentation: '常用表字段',
+ insertText: 'cust_id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'case_no',
+ documentation: '常用表字段',
+ insertText: 'case_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_type',
+ documentation: '常用表字段',
+ insertText: 'id_type',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_no',
+ documentation: '常用表字段',
+ insertText: 'id_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'cust_type',
+ documentation: '常用表字段',
+ insertText: 'cust_type',
+ detail: '常用表字段',
+ },
+ {
+ label: 'cust_no',
+ documentation: '常用表字段',
+ insertText: 'cust_no',
+ detail: '常用表字段',
+ },
+ {
+ label: 'app_type',
+ documentation: '常用表字段',
+ insertText: 'app_type',
+ detail: '常用表字段',
+ },
+ {
+ label: 'openid',
+ documentation: '常用表字段',
+ insertText: 'openid',
+ detail: '常用表字段',
+ },
+ {
+ label: 'acct_type',
+ documentation: '常用表字段',
+ insertText: 'acct_type',
+ detail: '常用表字段',
+ },
+ {
+ label: 'prod_code',
+ documentation: '常用表字段',
+ insertText: 'prod_code',
+ detail: '常用表字段',
+ },
+ {
+ label: 'prod_id',
+ documentation: '常用表字段',
+ insertText: 'prod_id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'partner_id',
+ documentation: '常用表字段',
+ insertText: 'partner_id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'product_id',
+ documentation: '常用表字段',
+ insertText: 'product_id',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_acct',
+ documentation: '常用表字段',
+ insertText: 'id_acct',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_app',
+ documentation: '常用表字段',
+ insertText: 'id_app',
+ detail: '常用表字段',
+ },
+ {
+ label: 'c_prod_cd',
+ documentation: '常用表字段',
+ insertText: 'c_prod_cd',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_cust',
+ documentation: '常用表字段',
+ insertText: 'id_cust',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_openid',
+ documentation: '常用表字段',
+ insertText: 'id_openid',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_wx_openid',
+ documentation: '常用表字段',
+ insertText: 'id_wx_openid',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_qq_openid',
+ documentation: '常用表字段',
+ insertText: 'id_qq_openid',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_sg_openid',
+ documentation: '常用表字段',
+ insertText: 'id_sg_openid',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_loan',
+ documentation: '常用表字段',
+ insertText: 'id_loan',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_org',
+ documentation: '常用表字段',
+ insertText: 'id_org',
+ detail: '常用表字段',
+ },
+ {
+ label: 'reportsn',
+ documentation: '常用表字段',
+ insertText: 'reportsn',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_batch',
+ documentation: '常用表字段',
+ insertText: 'id_batch',
+ detail: '常用表字段',
+ },
+ {
+ label: 'id_case',
+ documentation: '常用表字段',
+ insertText: 'id_case',
+ detail: '常用表字段',
+ },
+ {
+ label: 'ds',
+ documentation: '常用表字段',
+ insertText: 'ds',
+ detail: '常用表字段',
+ },
+];
+
+let dbInfoProposals = [];
+let tableInfoProposals = [];
+let udfProposals = [];
+let variableProposals = [];
+
+export default {
+ keyword: kewordInfoProposals,
+ register(monaco) {
+ const lang = 'hql';
+ const hqlProposals = getFormatProposalsList(
+ monaco,
+ kewordInfoProposals,
+ '',
+ 'Keyword',
+ );
+ const BIVPro = getFormatProposalsList(
+ monaco,
+ buildInVariableProposals,
+ '',
+ 'Variable',
+ );
+ const CGSPro = getFormatProposalsList(
+ monaco,
+ commonGrammaticalStruCture,
+ '',
+ 'Reference',
+ false,
+ true,
+ );
+ const columnsPro = getFormatProposalsList(
+ monaco,
+ columnsProposals,
+ '',
+ 'Field',
+ );
+ getHiveList(monaco, lang).then((list) => {
+ dbInfoProposals = list.dbInfoProposals;
+ tableInfoProposals = list.tableInfoProposals;
+ udfProposals = list.udfProposals;
+ variableProposals = list.variableProposals;
+ });
+ monaco.languages.registerCompletionItemProvider('hql', {
+ triggerCharacters:
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._'.split(
+ '',
+ ),
+ async provideCompletionItems(model, position) {
+ const empty =
+ isEmpty(dbInfoProposals) ||
+ isEmpty(udfProposals) ||
+ isEmpty(tableInfoProposals) ||
+ isEmpty(variableProposals);
+ const needRefresh = storage.get('need-refresh-proposals-hql');
+ if (needRefresh === true || empty) {
+ const list = await getHiveList(monaco, lang);
+ dbInfoProposals = list.dbInfoProposals;
+ tableInfoProposals = list.tableInfoProposals;
+ udfProposals = list.udfProposals;
+ variableProposals = list.variableProposals;
+ storage.set('need-refresh-proposals-hql', false);
+ }
+ const textUntilPosition = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ });
+
+ const tableMatch = textUntilPosition.match(
+ /from\s+(\w+)\.(\w+)?$/,
+ );
+ const databaseMatch = textUntilPosition.match(/from\s+\w+$/);
+ const functionMatch = textUntilPosition.match(
+ /(select|where|on|having|order by|cluster by|sort by)\s+\w+$/i,
+ );
+ const keywordMatch = textUntilPosition.match(/([^"]*)?$/i);
+ const grammarBlockMatch = textUntilPosition.match(
+ /(create table|drop table)\s?$/i,
+ );
+ // debug_log('log',tableMatch,databaseMatch,functionMatch,keywordMatch,grammarBlockMatch)
+ if (tableMatch) {
+ return getReturnList({
+ match: tableMatch[2],
+ proposals: tableInfoProposals,
+ fieldString: 'caption',
+ attachMatch: tableMatch[1],
+ });
+ } else if (databaseMatch) {
+ const match = databaseMatch[0].split(' ')[1];
+ return getReturnList({
+ match,
+ proposals: dbInfoProposals,
+ fieldString: 'caption',
+ });
+ } else if (grammarBlockMatch) {
+ const match = grammarBlockMatch[0].split(' ')[1];
+ return getReturnList({
+ match,
+ proposals: CGSPro,
+ fieldString: 'insertText',
+ attachMatch: grammarBlockMatch,
+ needSplit: true,
+ });
+ } else if (functionMatch) {
+ const match = functionMatch[0].split(' ')[1];
+ let proposalsList = [];
+ proposalsList = udfProposals.concat(
+ columnsPro,
+ variableProposals,
+ BIVPro,
+ );
+ return getReturnList({
+ match,
+ proposals: proposalsList,
+ fieldString: 'insertText',
+ });
+ } else if (keywordMatch) {
+ const matchList = keywordMatch[0].split(' ');
+ const match = matchList[matchList.length - 1];
+ let proposalsList = [];
+ proposalsList = hqlProposals.concat(
+ BIVPro,
+ CGSPro,
+ udfProposals,
+ columnsProposals,
+ );
+ return getReturnList(
+ {
+ match,
+ proposals: proposalsList,
+ fieldString: 'insertText',
+ position,
+ },
+ monaco,
+ );
+ }
+ return [];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/keyword/python.ts b/linkis-web-next/src/components/editor/keyword/python.ts
new file mode 100644
index 0000000000..8245a57ec3
--- /dev/null
+++ b/linkis-web-next/src/components/editor/keyword/python.ts
@@ -0,0 +1,384 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { isEmpty } from 'lodash';
+import { getHiveList, getReturnList, getFormatProposalsList } from '../util';
+
+const pyKeywordInfoProposals = [
+ {
+ label: 'False',
+ documentation: 'Keywords',
+ insertText: 'False',
+ detail: 'Keywords',
+ },
+ {
+ label: 'class',
+ documentation: 'Keywords',
+ insertText: 'class',
+ detail: 'Keywords',
+ },
+ {
+ label: 'finally',
+ documentation: 'Keywords',
+ insertText: 'finally',
+ detail: 'Keywords',
+ },
+ {
+ label: 'is',
+ documentation: 'Keywords',
+ insertText: 'is',
+ detail: 'Keywords',
+ },
+ {
+ label: 'return',
+ documentation: 'Keywords',
+ insertText: 'return',
+ detail: 'Keywords',
+ },
+ {
+ label: 'None',
+ documentation: 'Keywords',
+ insertText: 'None',
+ detail: 'Keywords',
+ },
+ {
+ label: 'continue',
+ documentation: 'Keywords',
+ insertText: 'continue',
+ detail: 'Keywords',
+ },
+ {
+ label: 'for',
+ documentation: 'Keywords',
+ insertText: 'for',
+ detail: 'Keywords',
+ },
+ {
+ label: 'lambda',
+ documentation: 'Keywords',
+ insertText: 'lambda',
+ detail: 'Keywords',
+ },
+ {
+ label: 'try',
+ documentation: 'Keywords',
+ insertText: 'try',
+ detail: 'Keywords',
+ },
+ {
+ label: 'True',
+ documentation: 'Keywords',
+ insertText: 'True',
+ detail: 'Keywords',
+ },
+ {
+ label: 'def',
+ documentation: 'Keywords',
+ insertText: 'def',
+ detail: 'Keywords',
+ },
+ {
+ label: 'from',
+ documentation: 'Keywords',
+ insertText: 'from',
+ detail: 'Keywords',
+ },
+ {
+ label: 'nonlocal',
+ documentation: 'Keywords',
+ insertText: 'nonlocal',
+ detail: 'Keywords',
+ },
+ {
+ label: 'while',
+ documentation: 'Keywords',
+ insertText: 'while',
+ detail: 'Keywords',
+ },
+ {
+ label: 'and',
+ documentation: 'Keywords',
+ insertText: 'and',
+ detail: 'Keywords',
+ },
+ {
+ label: 'del',
+ documentation: 'Keywords',
+ insertText: 'del',
+ detail: 'Keywords',
+ },
+ {
+ label: 'global',
+ documentation: 'Keywords',
+ insertText: 'global',
+ detail: 'Keywords',
+ },
+ {
+ label: 'not',
+ documentation: 'Keywords',
+ insertText: 'not',
+ detail: 'Keywords',
+ },
+ {
+ label: 'with',
+ documentation: 'Keywords',
+ insertText: 'with',
+ detail: 'Keywords',
+ },
+ {
+ label: 'as',
+ documentation: 'Keywords',
+ insertText: 'as',
+ detail: 'Keywords',
+ },
+ {
+ label: 'elif',
+ documentation: 'Keywords',
+ insertText: 'elif',
+ detail: 'Keywords',
+ },
+ {
+ label: 'if',
+ documentation: 'Keywords',
+ insertText: 'if',
+ detail: 'Keywords',
+ },
+ {
+ label: 'or',
+ documentation: 'Keywords',
+ insertText: 'or',
+ detail: 'Keywords',
+ },
+ {
+ label: 'yield',
+ documentation: 'Keywords',
+ insertText: 'yield',
+ detail: 'Keywords',
+ },
+ {
+ label: 'assert',
+ documentation: 'Keywords',
+ insertText: 'assert',
+ detail: 'Keywords',
+ },
+ {
+ label: 'else',
+ documentation: 'Keywords',
+ insertText: 'else',
+ detail: 'Keywords',
+ },
+ {
+ label: 'import',
+ documentation: 'Keywords',
+ insertText: 'import',
+ detail: 'Keywords',
+ },
+ {
+ label: 'pass',
+ documentation: 'Keywords',
+ insertText: 'pass',
+ detail: 'Keywords',
+ },
+ {
+ label: 'break',
+ documentation: 'Keywords',
+ insertText: 'break',
+ detail: 'Keywords',
+ },
+ {
+ label: 'except',
+ documentation: 'Keywords',
+ insertText: 'except',
+ detail: 'Keywords',
+ },
+ {
+ label: 'in',
+ documentation: 'Keywords',
+ insertText: 'in',
+ detail: 'Keywords',
+ },
+ {
+ label: 'raise',
+ documentation: 'Keywords',
+ insertText: 'raise',
+ detail: 'Keywords',
+ },
+ {
+ label: 'print',
+ documentation: 'Keywords',
+ insertText: 'print',
+ detail: 'Keywords',
+ },
+ {
+ label: 'exec',
+ documentation: 'Keywords',
+ insertText: 'exec',
+ detail: 'Keywords',
+ },
+];
+
+// Common grammatical structures(常用语法结构)
+/**
+ *
+ const commonGrammaticalStruCture = [
+ {
+ label: 'drop table',
+ documentation: '删除hive表',
+ insertText: 'drop table if exists {table_name};',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'create table partitioned by',
+ documentation: '创建hive分区表',
+ insertText: 'create table {table_name} ({columns}) partitioned by ({partition}) row format delimited fields terminated by "," stored as orc;',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'create table as select',
+ documentation: '通过select创建表',
+ insertText: 'create table {table_name} as select',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'insert into table',
+ documentation: '添加方式插入数据',
+ insertText: 'insert into table {table_name} partition({partition})',
+ detail: '常用语法结构',
+ },
+ {
+ label: 'insert overwrite table',
+ documentation: '覆盖方式插入数据',
+ insertText: 'insert overwrite table {table_name} partition({partition})',
+ detail: '常用语法结构',
+ },
+ ];
+ */
+
+const buildInVariableProposals = [
+ {
+ label: 'run_date',
+ documentation: '当前日期的前一天',
+ insertText: '${run_date}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_date_std',
+ documentation: '当前日期的前一天,年月日之间有横杠分割',
+ insertText: '${run_date_std}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_begin',
+ documentation: '当前月份的第一天',
+ insertText: '${run_month_begin}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_begin_std',
+ documentation: '当前月份的第一天,年月日之间有横杠分割',
+ insertText: '${run_month_begin_std}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_end',
+ documentation: '当前月份的最后一天',
+ insertText: '${run_month_end}',
+ detail: '系统内嵌变量',
+ },
+ {
+ label: 'run_month_end_std',
+ documentation: '当前月份的最后一天,年月日之间有横杠分割',
+ insertText: '${run_month_end_std}',
+ detail: '系统内嵌变量',
+ },
+];
+
+let functionProposals = [];
+
+export default {
+ async register(monaco) {
+ const lang = 'python';
+
+ const pyProposals = getFormatProposalsList(
+ monaco,
+ pyKeywordInfoProposals,
+ '',
+ 'Keyword',
+ );
+ const BIVPro = getFormatProposalsList(
+ monaco,
+ buildInVariableProposals,
+ '',
+ 'Variable',
+ );
+ // const CGSPro = getFormatProposalsList(monaco, commonGrammaticalStruCture, '', 'Reference');
+
+ getHiveList(monaco, lang).then((list) => {
+ functionProposals = list.udfProposals;
+ });
+
+ monaco.languages.registerCompletionItemProvider('python', {
+ triggerCharacters:
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._'.split(
+ '',
+ ),
+ async provideCompletionItems(model, position) {
+ const needRefresh = storage.get(
+ 'need-refresh-proposals-python',
+ );
+ if (needRefresh || isEmpty(functionProposals)) {
+ const list = await getHiveList(monaco, lang);
+ functionProposals = list.udfProposals;
+ storage.set('need-refresh-proposals-python', false);
+ }
+
+ const textUntilPosition = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ });
+ const keywordMatch = textUntilPosition.match(/([^"]*)?$/i);
+ const functionMatch = textUntilPosition.match(/\s+/i);
+ if (functionMatch) {
+ const match = functionMatch[0].split(' ')[1];
+ let proposalsList = [];
+ proposalsList = functionProposals.concat(BIVPro);
+ return getReturnList({
+ match,
+ proposals: proposalsList,
+ fieldString: 'insertText',
+ });
+ } else if (keywordMatch) {
+ const matchList = keywordMatch[0].split(' ');
+ const match = matchList[matchList.length - 1];
+ const proposalsList = pyProposals.concat(BIVPro);
+ return getReturnList(
+ {
+ match,
+ proposals: proposalsList,
+ fieldString: 'insertText',
+ position,
+ },
+ monaco,
+ );
+ }
+ return [];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/keyword/sas.ts b/linkis-web-next/src/components/editor/keyword/sas.ts
new file mode 100644
index 0000000000..e455c54fc0
--- /dev/null
+++ b/linkis-web-next/src/components/editor/keyword/sas.ts
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import hql from './hql';
+
+const sasProposals = [
+ {
+ label: '%DO',
+ documentation: 'sas',
+ insertText: 'DO',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%UNTIL',
+ documentation: 'sas',
+ insertText: 'UNTIL',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: 'GOTO',
+ documentation: 'sas',
+ insertText: 'GOTO',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: 'LABEL',
+ documentation: 'sas',
+ insertText: 'LABEL',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: 'LET',
+ documentation: 'sas',
+ insertText: 'LET',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: 'MEND',
+ documentation: 'sas',
+ insertText: 'MEND',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%TO',
+ documentation: 'sas',
+ insertText: 'TO',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%WHILE',
+ documentation: 'sas',
+ insertText: 'WHILE',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%END',
+ documentation: 'sas',
+ insertText: 'END',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%GLOBAL',
+ documentation: 'sas',
+ insertText: 'GLOBAL',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%GOTO',
+ documentation: 'sas',
+ insertText: 'GOTO',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%IF',
+ documentation: 'sas',
+ insertText: 'IF',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%THEN',
+ documentation: 'sas',
+ insertText: 'THEN',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%ELSE',
+ documentation: 'sas',
+ insertText: 'ELSE',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%LABEL',
+ documentation: 'sas',
+ insertText: 'LABEL',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%LET',
+ documentation: 'sas',
+ insertText: 'LET',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%LOCAL',
+ documentation: 'sas',
+ insertText: 'LOCAL',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%MACRO',
+ documentation: 'sas',
+ insertText: 'MACRO',
+ detail: 'sas宏语言关键字',
+ },
+ {
+ label: '%MEND',
+ documentation: 'sas',
+ insertText: 'MEND',
+ detail: 'sas宏语言关键字',
+ },
+];
+
+// Inherit hql related keywords(继承hql相关的keyword)
+const kewordInfoProposals = [...hql.keyword, ...sasProposals];
+
+export default {
+ register(monaco) {
+ // eslint-disable-next-line no-shadow
+ const sasProposals = kewordInfoProposals.map((item) => ({
+ label: item.label.toLowerCase(),
+ kind: monaco.languages.CompletionItemKind.Keyword,
+ insertText: item.insertText.toLowerCase(),
+ detail: item.detail,
+ documentation: item.documentation,
+ }));
+
+ monaco.languages.registerCompletionItemProvider('sas', {
+ triggerCharacters:
+ '%abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._'.split(
+ '',
+ ),
+ provideCompletionItems(model, position) {
+ const textUntilPosition = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ });
+
+ if (textUntilPosition.match(/([^"]*)?$/i)) {
+ return sasProposals;
+ }
+
+ return [];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/keyword/sh.ts b/linkis-web-next/src/components/editor/keyword/sh.ts
new file mode 100644
index 0000000000..1420f6d631
--- /dev/null
+++ b/linkis-web-next/src/components/editor/keyword/sh.ts
@@ -0,0 +1,570 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getReturnList } from '../util';
+
+const shellKeywordInfoProposals = [
+ {
+ label: 'if',
+ documentation: 'Keywords',
+ insertText: 'if',
+ detail: 'Keywords',
+ },
+ {
+ label: 'then',
+ documentation: 'Keywords',
+ insertText: 'then',
+ detail: 'Keywords',
+ },
+ {
+ label: 'do',
+ documentation: 'Keywords',
+ insertText: 'do',
+ detail: 'Keywords',
+ },
+ {
+ label: 'else',
+ documentation: 'Keywords',
+ insertText: 'else',
+ detail: 'Keywords',
+ },
+ {
+ label: 'elif',
+ documentation: 'Keywords',
+ insertText: 'elif',
+ detail: 'Keywords',
+ },
+ {
+ label: 'while',
+ documentation: 'Keywords',
+ insertText: 'while',
+ detail: 'Keywords',
+ },
+ {
+ label: 'until',
+ documentation: 'Keywords',
+ insertText: 'until',
+ detail: 'Keywords',
+ },
+ {
+ label: 'for',
+ documentation: 'Keywords',
+ insertText: 'for',
+ detail: 'Keywords',
+ },
+ {
+ label: 'in',
+ documentation: 'Keywords',
+ insertText: 'in',
+ detail: 'Keywords',
+ },
+ {
+ label: 'esac',
+ documentation: 'Keywords',
+ insertText: 'esac',
+ detail: 'Keywords',
+ },
+ {
+ label: 'fi',
+ documentation: 'Keywords',
+ insertText: 'fi',
+ detail: 'Keywords',
+ },
+ {
+ label: 'fin',
+ documentation: 'Keywords',
+ insertText: 'fin',
+ detail: 'Keywords',
+ },
+ {
+ label: 'fil',
+ documentation: 'Keywords',
+ insertText: 'fil',
+ detail: 'Keywords',
+ },
+ {
+ label: 'done',
+ documentation: 'Keywords',
+ insertText: 'done',
+ detail: 'Keywords',
+ },
+ {
+ label: 'exit',
+ documentation: 'Keywords',
+ insertText: 'exit',
+ detail: 'Keywords',
+ },
+ {
+ label: 'set',
+ documentation: 'Keywords',
+ insertText: 'set',
+ detail: 'Keywords',
+ },
+ {
+ label: 'unset',
+ documentation: 'Keywords',
+ insertText: 'unset',
+ detail: 'Keywords',
+ },
+ {
+ label: 'export',
+ documentation: 'Keywords',
+ insertText: 'export',
+ detail: 'Keywords',
+ },
+ {
+ label: 'function',
+ documentation: 'Keywords',
+ insertText: 'function',
+ detail: 'Keywords',
+ },
+ {
+ label: 'awk',
+ documentation: 'Builtin',
+ insertText: 'awk',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ab',
+ documentation: 'Builtin',
+ insertText: 'ab',
+ detail: 'Builtin',
+ },
+ {
+ label: 'bash',
+ documentation: 'Builtin',
+ insertText: 'bash',
+ detail: 'Builtin',
+ },
+ {
+ label: 'beep',
+ documentation: 'Builtin',
+ insertText: 'beep',
+ detail: 'Builtin',
+ },
+ {
+ label: 'cat',
+ documentation: 'Builtin',
+ insertText: 'cat',
+ detail: 'Builtin',
+ },
+ {
+ label: 'cc',
+ documentation: 'Builtin',
+ insertText: 'cc',
+ detail: 'Builtin',
+ },
+ {
+ label: 'cd',
+ documentation: 'Builtin',
+ insertText: 'cd',
+ detail: 'Builtin',
+ },
+ {
+ label: 'chown',
+ documentation: 'Builtin',
+ insertText: 'chown',
+ detail: 'Builtin',
+ },
+ {
+ label: 'chmod',
+ documentation: 'Builtin',
+ insertText: 'chmod',
+ detail: 'Builtin',
+ },
+ {
+ label: 'chroot',
+ documentation: 'Builtin',
+ insertText: 'chroot',
+ detail: 'Builtin',
+ },
+ {
+ label: 'clear',
+ documentation: 'Builtin',
+ insertText: 'clear',
+ detail: 'Builtin',
+ },
+ {
+ label: 'cp',
+ documentation: 'Builtin',
+ insertText: 'cp',
+ detail: 'Builtin',
+ },
+ {
+ label: 'curl',
+ documentation: 'Builtin',
+ insertText: 'curl',
+ detail: 'Builtin',
+ },
+ {
+ label: 'cut',
+ documentation: 'Builtin',
+ insertText: 'cut',
+ detail: 'Builtin',
+ },
+ {
+ label: 'diff',
+ documentation: 'Builtin',
+ insertText: 'diff',
+ detail: 'Builtin',
+ },
+ {
+ label: 'echo',
+ documentation: 'Builtin',
+ insertText: 'echo',
+ detail: 'Builtin',
+ },
+ {
+ label: 'find',
+ documentation: 'Builtin',
+ insertText: 'find',
+ detail: 'Builtin',
+ },
+ {
+ label: 'gawk',
+ documentation: 'Builtin',
+ insertText: 'gawk',
+ detail: 'Builtin',
+ },
+ {
+ label: 'gcc',
+ documentation: 'Builtin',
+ insertText: 'gcc',
+ detail: 'Builtin',
+ },
+ {
+ label: 'get',
+ documentation: 'Builtin',
+ insertText: 'get',
+ detail: 'Builtin',
+ },
+ {
+ label: 'git',
+ documentation: 'Builtin',
+ insertText: 'git',
+ detail: 'Builtin',
+ },
+ {
+ label: 'grep',
+ documentation: 'Builtin',
+ insertText: 'grep',
+ detail: 'Builtin',
+ },
+ {
+ label: 'hg',
+ documentation: 'Builtin',
+ insertText: 'hg',
+ detail: 'Builtin',
+ },
+ {
+ label: 'kill',
+ documentation: 'Builtin',
+ insertText: 'kill',
+ detail: 'Builtin',
+ },
+ {
+ label: 'killall',
+ documentation: 'Builtin',
+ insertText: 'killall',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ln',
+ documentation: 'Builtin',
+ insertText: 'ln',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ls',
+ documentation: 'Builtin',
+ insertText: 'ls',
+ detail: 'Builtin',
+ },
+ {
+ label: 'make',
+ documentation: 'Builtin',
+ insertText: 'make',
+ detail: 'Builtin',
+ },
+ {
+ label: 'mkdir',
+ documentation: 'Builtin',
+ insertText: 'mkdir',
+ detail: 'Builtin',
+ },
+ {
+ label: 'openssl',
+ documentation: 'Builtin',
+ insertText: 'openssl',
+ detail: 'Builtin',
+ },
+ {
+ label: 'mv',
+ documentation: 'Builtin',
+ insertText: 'mv',
+ detail: 'Builtin',
+ },
+ {
+ label: 'nc',
+ documentation: 'Builtin',
+ insertText: 'nc',
+ detail: 'Builtin',
+ },
+ {
+ label: 'node',
+ documentation: 'Builtin',
+ insertText: 'node',
+ detail: 'Builtin',
+ },
+ {
+ label: 'npm',
+ documentation: 'Builtin',
+ insertText: 'npm',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ping',
+ documentation: 'Builtin',
+ insertText: 'ping',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ps',
+ documentation: 'Builtin',
+ insertText: 'ps',
+ detail: 'Builtin',
+ },
+ {
+ label: 'restart',
+ documentation: 'Builtin',
+ insertText: 'restart',
+ detail: 'Builtin',
+ },
+ {
+ label: 'rm',
+ documentation: 'Builtin',
+ insertText: 'rm',
+ detail: 'Builtin',
+ },
+ {
+ label: 'rmdir',
+ documentation: 'Builtin',
+ insertText: 'rmdir',
+ detail: 'Builtin',
+ },
+ {
+ label: 'sed',
+ documentation: 'Builtin',
+ insertText: 'sed',
+ detail: 'Builtin',
+ },
+ {
+ label: 'service',
+ documentation: 'Builtin',
+ insertText: 'service',
+ detail: 'Builtin',
+ },
+ {
+ label: 'sh',
+ documentation: 'Builtin',
+ insertText: 'sh',
+ detail: 'Builtin',
+ },
+ {
+ label: 'shopt',
+ documentation: 'Builtin',
+ insertText: 'shopt',
+ detail: 'Builtin',
+ },
+ {
+ label: 'shred',
+ documentation: 'Builtin',
+ insertText: 'shred',
+ detail: 'Builtin',
+ },
+ {
+ label: 'source',
+ documentation: 'Builtin',
+ insertText: 'source',
+ detail: 'Builtin',
+ },
+ {
+ label: 'sort',
+ documentation: 'Builtin',
+ insertText: 'sort',
+ detail: 'Builtin',
+ },
+ {
+ label: 'sleep',
+ documentation: 'Builtin',
+ insertText: 'sleep',
+ detail: 'Builtin',
+ },
+ {
+ label: 'ssh',
+ documentation: 'Builtin',
+ insertText: 'ssh',
+ detail: 'Builtin',
+ },
+ {
+ label: 'start',
+ documentation: 'Builtin',
+ insertText: 'start',
+ detail: 'Builtin',
+ },
+ {
+ label: 'stop',
+ documentation: 'Builtin',
+ insertText: 'stop',
+ detail: 'Builtin',
+ },
+ {
+ label: 'su',
+ documentation: 'Builtin',
+ insertText: 'su',
+ detail: 'Builtin',
+ },
+ {
+ label: 'sudo',
+ documentation: 'Builtin',
+ insertText: 'sudo',
+ detail: 'Builtin',
+ },
+ {
+ label: 'svn',
+ documentation: 'Builtin',
+ insertText: 'svn',
+ detail: 'Builtin',
+ },
+ {
+ label: 'tee',
+ documentation: 'Builtin',
+ insertText: 'tee',
+ detail: 'Builtin',
+ },
+ {
+ label: 'telnet',
+ documentation: 'Builtin',
+ insertText: 'telnet',
+ detail: 'Builtin',
+ },
+ {
+ label: 'top',
+ documentation: 'Builtin',
+ insertText: 'top',
+ detail: 'Builtin',
+ },
+ {
+ label: 'touch',
+ documentation: 'Builtin',
+ insertText: 'touch',
+ detail: 'Builtin',
+ },
+ {
+ label: 'vi',
+ documentation: 'Builtin',
+ insertText: 'vi',
+ detail: 'Builtin',
+ },
+ {
+ label: 'vim',
+ documentation: 'Builtin',
+ insertText: 'vim',
+ detail: 'Builtin',
+ },
+ {
+ label: 'wall',
+ documentation: 'Builtin',
+ insertText: 'wall',
+ detail: 'Builtin',
+ },
+ {
+ label: 'wc',
+ documentation: 'Builtin',
+ insertText: 'wc',
+ detail: 'Builtin',
+ },
+ {
+ label: 'wget',
+ documentation: 'Builtin',
+ insertText: 'wget',
+ detail: 'Builtin',
+ },
+ {
+ label: 'who',
+ documentation: 'Builtin',
+ insertText: 'who',
+ detail: 'Builtin',
+ },
+ {
+ label: 'write',
+ documentation: 'Builtin',
+ insertText: 'write',
+ detail: 'Builtin',
+ },
+ {
+ label: 'yes',
+ documentation: 'Builtin',
+ insertText: 'yes',
+ detail: 'Builtin',
+ },
+ {
+ label: 'zsh',
+ documentation: 'Builtin',
+ insertText: 'zsh',
+ detail: 'Builtin',
+ },
+];
+
+export default {
+ async register(monaco) {
+ const shellProposals = shellKeywordInfoProposals.map((item) => ({
+ label: item.label.toLowerCase(),
+ kind: monaco.languages.CompletionItemKind.Keyword,
+ insertText: item.insertText.toLowerCase(),
+ detail: item.detail,
+ documentation: item.documentation,
+ }));
+
+ monaco.languages.registerCompletionItemProvider('sh', {
+ triggerCharacters:
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._'.split(
+ '',
+ ),
+ async provideCompletionItems(model, position) {
+ const textUntilPosition = model.getValueInRange({
+ startLineNumber: position.lineNumber,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column,
+ });
+ const keywordMatch = textUntilPosition.match(/([^"]*)?$/i);
+ if (keywordMatch) {
+ const matchList = keywordMatch[0].split(' ');
+ const match = matchList[matchList.length - 1];
+ const list = getReturnList(
+ match,
+ shellProposals,
+ 'insertText',
+ );
+ return list;
+ }
+ return [];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/languages/hql.ts b/linkis-web-next/src/components/editor/languages/hql.ts
new file mode 100644
index 0000000000..03368e9874
--- /dev/null
+++ b/linkis-web-next/src/components/editor/languages/hql.ts
@@ -0,0 +1,1587 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import sqlFormatter from '../sqlFormatter/sqlFormatter';
+
+const richLanguageConfiguration = {
+ comments: {
+ lineComment: '--',
+ blockComment: ['/*', '*/'],
+ },
+ brackets: [
+ ['{', '}'],
+ ['[', ']'],
+ ['(', ')'],
+ ],
+ autoClosingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ ],
+ surroundingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ ],
+};
+
+const langDefinition = {
+ defaultToken: '',
+ tokenPostfix: '.sql',
+ ignoreCase: true,
+
+ brackets: [
+ { open: '[', close: ']', token: 'delimiter.square' },
+ { open: '(', close: ')', token: 'delimiter.parenthesis' },
+ ],
+
+ keywords: [
+ 'ABORT_AFTER_WAIT',
+ 'ABSENT',
+ 'ABSOLUTE',
+ 'ABORT',
+ 'ACCENT_SENSITIVITY',
+ 'ACTION',
+ 'ACTIVATION',
+ 'ACTIVE',
+ 'ADD',
+ 'ADDRESS',
+ 'ADMIN',
+ 'AES',
+ 'AES_128',
+ 'AES_192',
+ 'AES_256',
+ 'AFFINITY',
+ 'AFTER',
+ 'AGGREGATE',
+ 'ALGORITHM',
+ 'ALL_CONSTRAINTS',
+ 'ALL_ERRORMSGS',
+ 'ALL_INDEXES',
+ 'ALL_LEVELS',
+ 'ALL_SPARSE_COLUMNS',
+ 'ALLOW_CONNECTIONS',
+ 'ALLOW_MULTIPLE_EVENT_LOSS',
+ 'ALLOW_PAGE_LOCKS',
+ 'ALLOW_ROW_LOCKS',
+ 'ALLOW_SINGLE_EVENT_LOSS',
+ 'ALLOW_SNAPSHOT_ISOLATION',
+ 'ALLOWED',
+ 'ALTER',
+ 'ANALYZE',
+ 'ANONYMOUS',
+ 'ANSI_DEFAULTS',
+ 'ANSI_NULL_DEFAULT',
+ 'ANSI_NULL_DFLT_OFF',
+ 'ANSI_NULL_DFLT_ON',
+ 'ANSI_NULLS',
+ 'ANSI_PADDING',
+ 'ANSI_WARNINGS',
+ 'APPEND',
+ 'APPLICATION',
+ 'APPLICATION_LOG',
+ 'ARCHIVE',
+ 'ARITHABORT',
+ 'ARITHIGNORE',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASSEMBLY',
+ 'ASYMMETRIC',
+ 'ASYNCHRONOUS_COMMIT',
+ 'AT',
+ 'ATOMIC',
+ 'ATTACH',
+ 'ATTACH_REBUILD_LOG',
+ 'AUDIT',
+ 'AUDIT_GUID',
+ 'AUTHENTICATION',
+ 'AUTHORIZATION',
+ 'AUTO',
+ 'AUTOCOMMIT',
+ 'AUTO_CLEANUP',
+ 'AUTO_CLOSE',
+ 'AUTO_CREATE_STATISTICS',
+ 'AUTO_SHRINK',
+ 'AUTO_UPDATE_STATISTICS',
+ 'AUTO_UPDATE_STATISTICS_ASYNC',
+ 'AUTOMATED_BACKUP_PREFERENCE',
+ 'AUTOMATIC',
+ 'AVAILABILITY',
+ 'AVAILABILITY_MODE',
+ 'BACKUP',
+ 'BACKUP_PRIORITY',
+ 'BASE64',
+ 'BATCHSIZE',
+ 'BEFORE',
+ 'BEGIN',
+ 'BEGIN_DIALOG',
+ 'BIGINT',
+ 'BINARY',
+ 'BINDING',
+ 'BIT',
+ 'BLOCKERS',
+ 'BLOCKSIZE',
+ 'BOOLEAN',
+ 'BOTH',
+ 'BOUNDING_BOX',
+ 'BREAK',
+ 'BROKER',
+ 'BROKER_INSTANCE',
+ 'BROWSE',
+ 'BUCKET',
+ 'BUCKETS',
+ 'BUCKET_COUNT',
+ 'BUFFER',
+ 'BUFFERCOUNT',
+ 'BULK',
+ 'BULK_LOGGED',
+ 'BY',
+ 'CACHE',
+ 'CALL',
+ 'CALLED',
+ 'CALLER',
+ 'CAP_CPU_PERCENT',
+ 'CASCADE',
+ 'CASE',
+ 'CATALOG',
+ 'CATCH',
+ 'CELLS_PER_OBJECT',
+ 'CERTIFICATE',
+ 'CHANGE',
+ 'CHANGE_RETENTION',
+ 'CHANGE_TRACKING',
+ 'CHANGES',
+ 'CHAR',
+ 'CHARACTER',
+ 'CHECK',
+ 'CHECK_CONSTRAINTS',
+ 'CHECK_EXPIRATION',
+ 'CHECK_POLICY',
+ 'CHECKALLOC',
+ 'CHECKCATALOG',
+ 'CHECKCONSTRAINTS',
+ 'CHECKDB',
+ 'CHECKFILEGROUP',
+ 'CHECKIDENT',
+ 'CHECKPOINT',
+ 'CHECKTABLE',
+ 'CLASSIFIER_FUNCTION',
+ 'CLEANTABLE',
+ 'CLEANUP',
+ 'CLEAR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'CLUSTERED',
+ 'CLUSTERSTATUS',
+ 'CODEPAGE',
+ 'COLLATE',
+ 'COLLECTION',
+ 'COLUMN',
+ 'COLUMN_SET',
+ 'COLUMNS',
+ 'COLUMNSTORE',
+ 'COLUMNSTORE_ARCHIVE',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMMITTED',
+ 'COMPACT',
+ 'COMPACTIONS',
+ 'COMPATIBILITY_LEVEL',
+ 'COMPRESSION',
+ 'COMPUTE',
+ 'CONCAT',
+ 'CONCAT_NULL_YIELDS_NULL',
+ 'CONCATENATE',
+ 'CONF',
+ 'CONFIGURATION',
+ 'CONNECT',
+ 'CONSTRAINT',
+ 'CONTAINMENT',
+ 'CONTENT',
+ 'CONTEXT',
+ 'CONTINUE',
+ 'CONTINUE_AFTER_ERROR',
+ 'CONTRACT',
+ 'CONTRACT_NAME',
+ 'CONTROL',
+ 'CONVERSATION',
+ 'COOKIE',
+ 'COPY_ONLY',
+ 'COUNTER',
+ 'CPU',
+ 'CREATE',
+ 'CREATE_NEW',
+ 'CREATION_DISPOSITION',
+ 'CREDENTIAL',
+ 'CRYPTOGRAPHIC',
+ 'CUBE',
+ 'CURRENT',
+ 'CURRENT_DATE',
+ 'CURSOR',
+ 'CURSOR_CLOSE_ON_COMMIT',
+ 'CURSOR_DEFAULT',
+ 'CYCLE',
+ 'DATA',
+ 'DATA_COMPRESSION',
+ 'DATA_PURITY',
+ 'DATABASE',
+ 'DATABASES',
+ 'DATABASE_DEFAULT',
+ 'DATABASE_MIRRORING',
+ 'DATABASE_SNAPSHOT',
+ 'DATAFILETYPE',
+ 'DATE',
+ 'DATE_CORRELATION_OPTIMIZATION',
+ 'DATEFIRST',
+ 'DATEFORMAT',
+ 'DATETIME',
+ 'DATETIME2',
+ 'DATETIMEOFFSET',
+ 'DAY',
+ 'DAYOFWEEK',
+ 'DAYOFYEAR',
+ 'DAYS',
+ 'DB_CHAINING',
+ 'DBCC',
+ 'DBREINDEX',
+ 'DBPROPERTIES',
+ 'DDL_DATABASE_LEVEL_EVENTS',
+ 'DEADLOCK_PRIORITY',
+ 'DEALLOCATE',
+ 'DEC',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECRYPTION',
+ 'DEFAULT',
+ 'DEFAULT_DATABASE',
+ 'DEFAULT_FULLTEXT_LANGUAGE',
+ 'DEFAULT_LANGUAGE',
+ 'DEFAULT_SCHEMA',
+ 'DEFERRED',
+ 'DEFINED',
+ 'DEFINITION',
+ 'DELAY',
+ 'DELAYED_DURABILITY',
+ 'DELETE',
+ 'DELETED',
+ 'DELIMITED',
+ 'DENSITY_VECTOR',
+ 'DENY',
+ 'DEPENDENCY',
+ 'DEPENDENTS',
+ 'DES',
+ 'DESC',
+ 'DESCRIPTION',
+ 'DESCRIBE',
+ 'DESX',
+ 'DETAIL',
+ 'DHCP',
+ 'DIAGNOSTICS',
+ 'DIALOG',
+ 'DIFFERENTIAL',
+ 'DIRECTORIES',
+ 'DIRECTORY',
+ 'DIRECTORY_NAME',
+ 'DISABLE',
+ 'DISABLE_BROKER',
+ 'DISABLED',
+ 'DISK',
+ 'DISTINCT',
+ 'DISTRIBUTE',
+ 'DISTRIBUTED',
+ 'DOCUMENT',
+ 'DOUBLE',
+ 'DOW',
+ 'DROP',
+ 'DROP_EXISTING',
+ 'DROPCLEANBUFFERS',
+ 'DUMP',
+ 'DURABILITY',
+ 'DYNAMIC',
+ 'EDITION',
+ 'ELEMENTS',
+ 'ELEM_TYPE',
+ 'ELSE',
+ 'EMERGENCY',
+ 'EMPTY',
+ 'EMPTYFILE',
+ 'ENABLE',
+ 'ENABLE_BROKER',
+ 'ENABLED',
+ 'ENCRYPTION',
+ 'END',
+ 'ENDPOINT',
+ 'ENDPOINT_URL',
+ 'ERRLVL',
+ 'ERROR',
+ 'ERROR_BROKER_CONVERSATIONS',
+ 'ERRORFILE',
+ 'ESCAPE',
+ 'ESCAPED',
+ 'ESTIMATEONLY',
+ 'EVENT',
+ 'EVENT_RETENTION_MODE',
+ 'EXCHANGE',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTABLE',
+ 'EXECUTE',
+ 'EXIT',
+ 'EXPAND',
+ 'EXPORT',
+ 'EXPIREDATE',
+ 'EXPIRY_DATE',
+ 'EXPLAIN',
+ 'EXPLICIT',
+ 'EXPRESSION',
+ 'EXTENDED',
+ 'EXTENDED_LOGICAL_CHECKS',
+ 'EXTENSION',
+ 'EXTERNAL',
+ 'EXTERNAL_ACCESS',
+ 'EXTRACT',
+ 'FAIL_OPERATION',
+ 'FAILOVER',
+ 'FAILOVER_MODE',
+ 'FAILURE_CONDITION_LEVEL',
+ 'FALSE',
+ 'FAN_IN',
+ 'FAST',
+ 'FAST_FORWARD',
+ 'FETCH',
+ 'FIELDS',
+ 'FIELDTERMINATOR',
+ 'FILE',
+ 'FILEFORMAT',
+ 'FILEGROUP',
+ 'FILEGROWTH',
+ 'FILELISTONLY',
+ 'FILENAME',
+ 'FILEPATH',
+ 'FILESTREAM',
+ 'FILESTREAM_ON',
+ 'FILETABLE_COLLATE_FILENAME',
+ 'FILETABLE_DIRECTORY',
+ 'FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME',
+ 'FILETABLE_NAMESPACE',
+ 'FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME',
+ 'FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME',
+ 'FILLFACTOR',
+ 'FILTERING',
+ 'FIRE_TRIGGERS',
+ 'FIRST',
+ 'FIRSTROW',
+ 'FLOAT',
+ 'FMTONLY',
+ 'FOLLOWING',
+ 'FOR',
+ 'FORCE',
+ 'FORCE_FAILOVER_ALLOW_DATA_LOSS',
+ 'FORCE_SERVICE_ALLOW_DATA_LOSS',
+ 'FORCED',
+ 'FORCEPLAN',
+ 'FORCESCAN',
+ 'FORCESEEK',
+ 'FOREIGN',
+ 'FORMATFILE',
+ 'FORMATTED',
+ 'FORMSOF',
+ 'FORWARD_ONLY',
+ 'FREE',
+ 'FREEPROCCACHE',
+ 'FREESESSIONCACHE',
+ 'FREESYSTEMCACHE',
+ 'FROM',
+ 'FULL',
+ 'FULLSCAN',
+ 'FULLTEXT',
+ 'FUNCTION',
+ 'FUNCTIONS',
+ 'GB',
+ 'GEOGRAPHY_AUTO_GRID',
+ 'GEOGRAPHY_GRID',
+ 'GEOMETRY_AUTO_GRID',
+ 'GEOMETRY_GRID',
+ 'GET',
+ 'GLOBAL',
+ 'GO',
+ 'GOTO',
+ 'GOVERNOR',
+ 'GRANT',
+ 'GRIDS',
+ 'GROUP',
+ 'GROUP_MAX_REQUESTS',
+ 'HADR',
+ 'HASH',
+ 'HASHED',
+ 'HAVING',
+ 'HEADERONLY',
+ 'HEALTH_CHECK_TIMEOUT',
+ 'HELP',
+ 'HIERARCHYID',
+ 'HIGH',
+ 'HINT',
+ 'HISTOGRAM',
+ 'HOLDLOCK',
+ 'HOLD_DDLTIME',
+ 'HONOR_BROKER_PRIORITY',
+ 'HOUR',
+ 'HOURS',
+ 'IDENTITY',
+ 'IDENTITY_INSERT',
+ 'IDENTITY_VALUE',
+ 'IDENTITYCOL',
+ 'IDXPROPERTIES',
+ 'IF',
+ 'IGNORE',
+ 'IGNORE_CONSTRAINTS',
+ 'IGNORE_DUP_KEY',
+ 'IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX',
+ 'IGNORE_TRIGGERS',
+ 'IMAGE',
+ 'IMMEDIATE',
+ 'IMPERSONATE',
+ 'IMPLICIT_TRANSACTIONS',
+ 'IMPORT',
+ 'IMPORTANCE',
+ 'INCLUDE',
+ 'INCREMENT',
+ 'INCREMENTAL',
+ 'INDEX',
+ 'INDEXES',
+ 'INDEXDEFRAG',
+ 'INFINITE',
+ 'INFLECTIONAL',
+ 'INIT',
+ 'INITIATOR',
+ 'INPATH',
+ 'INPUT',
+ 'INPUTDRIVER',
+ 'INPUTFORMAT',
+ 'INPUTBUFFER',
+ 'INSENSITIVE',
+ 'INSERT',
+ 'INSERTED',
+ 'INSTEAD',
+ 'INT',
+ 'INTEGER',
+ 'INTERVAL',
+ 'INTO',
+ 'IO',
+ 'IP',
+ 'ISABOUT',
+ 'ISOLATION',
+ 'ITEMS',
+ 'JAR',
+ 'JOB',
+ 'KB',
+ 'KEEP',
+ 'KEEP_CDC',
+ 'KEEP_NULLS',
+ 'KEEP_REPLICATION',
+ 'KEEPDEFAULTS',
+ 'KEEPFIXED',
+ 'KEEPIDENTITY',
+ 'KEEPNULLS',
+ 'KERBEROS',
+ 'KEY',
+ 'KEY_SOURCE',
+ 'KEY_TYPE',
+ 'KEYS',
+ 'KEYSET',
+ 'KILL',
+ 'KILOBYTES_PER_BATCH',
+ 'LABELONLY',
+ 'LANGUAGE',
+ 'LAST',
+ 'LASTROW',
+ 'LATERAL',
+ 'LESS',
+ 'LEVEL',
+ 'LEVEL_1',
+ 'LEVEL_2',
+ 'LEVEL_3',
+ 'LEVEL_4',
+ 'LIFETIME',
+ 'LIMIT',
+ 'LINENO',
+ 'LINES',
+ 'LIST',
+ 'LISTENER',
+ 'LISTENER_IP',
+ 'LISTENER_PORT',
+ 'LOAD',
+ 'LOADHISTORY',
+ 'LOB_COMPACTION',
+ 'LOCAL',
+ 'LOCAL_SERVICE_NAME',
+ 'LOCATION',
+ 'LOCK',
+ 'LOCKS',
+ 'LOCK_ESCALATION',
+ 'LOCK_TIMEOUT',
+ 'LOGICAL',
+ 'LOGIN',
+ 'LOGSPACE',
+ 'LONG',
+ 'LOOP',
+ 'LOW',
+ 'MACRO',
+ 'MAP',
+ 'MAPJOIN',
+ 'MANUAL',
+ 'MARK',
+ 'MARK_IN_USE_FOR_REMOVAL',
+ 'MASTER',
+ 'MATERIALIZED',
+ 'MAX_CPU_PERCENT',
+ 'MAX_DISPATCH_LATENCY',
+ 'MAX_DOP',
+ 'MAX_DURATION',
+ 'MAX_EVENT_SIZE',
+ 'MAX_FILES',
+ 'MAX_IOPS_PER_VOLUME',
+ 'MAX_MEMORY',
+ 'MAX_MEMORY_PERCENT',
+ 'MAX_QUEUE_READERS',
+ 'MAX_ROLLOVER_FILES',
+ 'MAX_SIZE',
+ 'MAXDOP',
+ 'MAXERRORS',
+ 'MAXLENGTH',
+ 'MAXRECURSION',
+ 'MAXSIZE',
+ 'MAXTRANSFERSIZE',
+ 'MAXVALUE',
+ 'MB',
+ 'MEDIADESCRIPTION',
+ 'MEDIANAME',
+ 'MEDIAPASSWORD',
+ 'MEDIUM',
+ 'MEMBER',
+ 'MEMORY_OPTIMIZED',
+ 'MEMORY_OPTIMIZED_DATA',
+ 'MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT',
+ 'MEMORY_PARTITION_MODE',
+ 'MERGE',
+ 'MESSAGE',
+ 'MESSAGE_FORWARD_SIZE',
+ 'MESSAGE_FORWARDING',
+ 'METADATA',
+ 'MICROSECOND',
+ 'MILLISECOND',
+ 'MIN_CPU_PERCENT',
+ 'MIN_IOPS_PER_VOLUME',
+ 'MIN_MEMORY_PERCENT',
+ 'MINUS',
+ 'MINUTE',
+ 'MINUTES',
+ 'MINVALUE',
+ 'MIRROR',
+ 'MIRROR_ADDRESS',
+ 'MODIFY',
+ 'MONEY',
+ 'MONTH',
+ 'MONTHS',
+ 'MORE',
+ 'MOVE',
+ 'MSCK',
+ 'MULTI_USER',
+ 'MUST_CHANGE',
+ 'NAME',
+ 'NANOSECOND',
+ 'NATIONAL',
+ 'NATIVE_COMPILATION',
+ 'NCHAR',
+ 'NEGOTIATE',
+ 'NESTED_TRIGGERS',
+ 'NEW_ACCOUNT',
+ 'NEW_BROKER',
+ 'NEW_PASSWORD',
+ 'NEWNAME',
+ 'NEXT',
+ 'NO',
+ 'NO_BROWSETABLE',
+ 'NO_CHECKSUM',
+ 'NO_COMPRESSION',
+ 'NO_EVENT_LOSS',
+ 'NO_INFOMSGS',
+ 'NO_TRUNCATE',
+ 'NO_WAIT',
+ 'NOCHECK',
+ 'NOCOUNT',
+ 'NO_DROP',
+ 'NOEXEC',
+ 'NOEXPAND',
+ 'NOFORMAT',
+ 'NOINDEX',
+ 'NOINIT',
+ 'NOLOCK',
+ 'NON',
+ 'NON_TRANSACTED_ACCESS',
+ 'NONCLUSTERED',
+ 'NONE',
+ 'NORECOMPUTE',
+ 'NORECOVERY',
+ 'NORELY',
+ 'NORESEED',
+ 'NORESET',
+ 'NOREWIND',
+ 'NORMAL',
+ 'NOSCAN',
+ 'NOSKIP',
+ 'NOTIFICATION',
+ 'NOTRUNCATE',
+ 'NOUNLOAD',
+ 'NOVALIDATE',
+ 'NOWAIT',
+ 'NTEXT',
+ 'NTLM',
+ 'NULLS',
+ 'NUMANODE',
+ 'NUMERIC',
+ 'NUMERIC_ROUNDABORT',
+ 'NVARCHAR',
+ 'OBJECT',
+ 'OF',
+ 'OFF',
+ 'OFFLINE',
+ 'OFFSET',
+ 'OFFSETS',
+ 'OLD_ACCOUNT',
+ 'OLD_PASSWORD',
+ 'ON',
+ 'ON_FAILURE',
+ 'ONLINE',
+ 'ONLY',
+ 'OPEN',
+ 'OPEN_EXISTING',
+ 'OPENTRAN',
+ 'OPERATOR',
+ 'OPTIMISTIC',
+ 'OPTIMIZE',
+ 'OPTION',
+ 'ORDER',
+ 'OUT',
+ 'OUTPUT',
+ 'OUTPUTDRIVER',
+ 'OUTPUTBUFFER',
+ 'OUTPUTFORMAT',
+ 'OVER',
+ 'OVERRIDE',
+ 'OWNER',
+ 'OWNERSHIP',
+ 'OVERWRITE',
+ 'PAD_INDEX',
+ 'PAGE',
+ 'PAGE_VERIFY',
+ 'PAGECOUNT',
+ 'PAGLOCK',
+ 'PARAMETERIZATION',
+ 'PARSEONLY',
+ 'PARTIAL',
+ 'PARTIALSCAN',
+ 'PARTITION',
+ 'PARTITIONED',
+ 'PARTITIONS',
+ 'PARTNER',
+ 'PASSWORD',
+ 'PATH',
+ 'PER_CPU',
+ 'PER_NODE',
+ 'PERCENT',
+ 'PERMISSION_SET',
+ 'PERSISTED',
+ 'PHYSICAL_ONLY',
+ 'PLAN',
+ 'PLUS',
+ 'POISON_MESSAGE_HANDLING',
+ 'POOL',
+ 'POPULATION',
+ 'PORT',
+ 'PRECEDING',
+ 'PRECISION',
+ 'PRETTY',
+ 'PRESERVE',
+ 'PRIMARY',
+ 'PRIMARY_ROLE',
+ 'PRINT',
+ 'PRIOR',
+ 'PRIORITY',
+ 'PRIORITY_LEVEL',
+ 'PRINCIPALS',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROC',
+ 'PROCCACHE',
+ 'PROCEDURE',
+ 'PROCEDURE_NAME',
+ 'PROCESS',
+ 'PROFILE',
+ 'PROPERTY',
+ 'PROPERTY_DESCRIPTION',
+ 'PROPERTY_INT_ID',
+ 'PROPERTY_SET_GUID',
+ 'PROTECTION',
+ 'PROVIDER',
+ 'PROVIDER_KEY_NAME',
+ 'PUBLIC',
+ 'PURGE',
+ 'PUT',
+ 'QUARTER',
+ 'QUERY',
+ 'QUERY_GOVERNOR_COST_LIMIT',
+ 'QUEUE',
+ 'QUEUE_DELAY',
+ 'QUOTED_IDENTIFIER',
+ 'RAISERROR',
+ 'RANGE',
+ 'RAW',
+ 'RC2',
+ 'RC4',
+ 'RC4_128',
+ 'READ',
+ 'READ_COMMITTED_SNAPSHOT',
+ 'READ_ONLY',
+ 'READ_ONLY_ROUTING_LIST',
+ 'READ_ONLY_ROUTING_URL',
+ 'READ_WRITE',
+ 'READ_WRITE_FILEGROUPS',
+ 'READCOMMITTED',
+ 'READCOMMITTEDLOCK',
+ 'READONLY',
+ 'READPAST',
+ 'READS',
+ 'READTEXT',
+ 'READUNCOMMITTED',
+ 'READWRITE',
+ 'REAL',
+ 'REBUILD',
+ 'RECEIVE',
+ 'RECOMPILE',
+ 'RECONFIGURE',
+ 'RECORDREADER',
+ 'RECORDWRITER',
+ 'RECOVERY',
+ 'RECURSIVE',
+ 'RECURSIVE_TRIGGERS',
+ 'REDUCE',
+ 'REFERENCES',
+ 'REGENERATE',
+ 'REGEXP',
+ 'RELATED_CONVERSATION',
+ 'RELATED_CONVERSATION_GROUP',
+ 'RELATIVE',
+ 'RELOAD',
+ 'RELY',
+ 'REMOTE',
+ 'REMOTE_PROC_TRANSACTIONS',
+ 'REMOTE_SERVICE_NAME',
+ 'REMOVE',
+ 'RENAME',
+ 'REORGANIZE',
+ 'REPAIR',
+ 'REPAIR_ALLOW_DATA_LOSS',
+ 'REPAIR_FAST',
+ 'REPAIR_REBUILD',
+ 'REPEATABLE',
+ 'REPEATABLEREAD',
+ 'REPLICA',
+ 'REPLICATION',
+ 'REQUEST_MAX_CPU_TIME_SEC',
+ 'REQUEST_MAX_MEMORY_GRANT_PERCENT',
+ 'REQUEST_MEMORY_GRANT_TIMEOUT_SEC',
+ 'REQUIRED',
+ 'RESAMPLE',
+ 'RESEED',
+ 'RESERVE_DISK_SPACE',
+ 'RESET',
+ 'RESOURCE',
+ 'RESTART',
+ 'RESTORE',
+ 'RESTRICT',
+ 'RESTRICTED_USER',
+ 'RESULT',
+ 'RESUME',
+ 'RETAINDAYS',
+ 'RETENTION',
+ 'RETURN',
+ 'RETURNS',
+ 'REVERT',
+ 'REVOKE',
+ 'REWIND',
+ 'REWINDONLY',
+ 'REWRITE',
+ 'RLIKE',
+ 'ROBUST',
+ 'ROLE',
+ 'ROLES',
+ 'ROLLBACK',
+ 'ROLLUP',
+ 'ROOT',
+ 'ROUTE',
+ 'ROW',
+ 'ROWCOUNT',
+ 'ROWGUIDCOL',
+ 'ROWLOCK',
+ 'ROWS',
+ 'ROWS_PER_BATCH',
+ 'ROWTERMINATOR',
+ 'ROWVERSION',
+ 'RSA_1024',
+ 'RSA_2048',
+ 'RSA_512',
+ 'RULE',
+ 'SAFE',
+ 'SAFETY',
+ 'SAMPLE',
+ 'SAVE',
+ 'SCHEDULER',
+ 'SCHEMA',
+ 'SCHEMAS',
+ 'SCHEMA_AND_DATA',
+ 'SCHEMA_ONLY',
+ 'SCHEMABINDING',
+ 'SCHEME',
+ 'SCROLL',
+ 'SCROLL_LOCKS',
+ 'SEARCH',
+ 'SECOND',
+ 'SECONDARY',
+ 'SECONDARY_ONLY',
+ 'SECONDARY_ROLE',
+ 'SECONDS',
+ 'SECRET',
+ 'SECURITY_LOG',
+ 'SECURITYAUDIT',
+ 'SELECT',
+ 'SELECTIVE',
+ 'SELF',
+ 'SEMI',
+ 'SEND',
+ 'SENT',
+ 'SEQUENCE',
+ 'SERDE',
+ 'SERDEPROPERTIES',
+ 'SERIALIZABLE',
+ 'SERVER',
+ 'SERVICE',
+ 'SERVICE_BROKER',
+ 'SERVICE_NAME',
+ 'SESSION',
+ 'SESSION_TIMEOUT',
+ 'SET',
+ 'SETS',
+ 'SETUSER',
+ 'SHARED',
+ 'SHOW',
+ 'SHOW_DATABASE',
+ 'SHOW_STATISTICS',
+ 'SHOWCONTIG',
+ 'SHOWPLAN',
+ 'SHOWPLAN_ALL',
+ 'SHOWPLAN_TEXT',
+ 'SHOWPLAN_XML',
+ 'SHRINKDATABASE',
+ 'SHRINKFILE',
+ 'SHUTDOWN',
+ 'SID',
+ 'SIGNATURE',
+ 'SIMPLE',
+ 'SINGLE_BLOB',
+ 'SINGLE_CLOB',
+ 'SINGLE_NCLOB',
+ 'SINGLE_USER',
+ 'SINGLETON',
+ 'SIZE',
+ 'SKEWED',
+ 'SKIP',
+ 'SMALLDATETIME',
+ 'SMALLINT',
+ 'SMALLMONEY',
+ 'SNAPSHOT',
+ 'SORT',
+ 'SORTED',
+ 'SORT_IN_TEMPDB',
+ 'SOURCE',
+ 'SPARSE',
+ 'SPATIAL',
+ 'SPATIAL_WINDOW_MAX_CELLS',
+ 'SPECIFICATION',
+ 'SPLIT',
+ 'SQL',
+ 'SQL_VARIANT',
+ 'SQLPERF',
+ 'SSL',
+ 'STANDBY',
+ 'START',
+ 'START_DATE',
+ 'STARTED',
+ 'STARTUP_STATE',
+ 'STAT_HEADER',
+ 'STATE',
+ 'STATEMENT',
+ 'STATIC',
+ 'STATISTICAL_SEMANTICS',
+ 'STATISTICS',
+ 'STATISTICS_INCREMENTAL',
+ 'STATISTICS_NORECOMPUTE',
+ 'STATS',
+ 'STATS_STREAM',
+ 'STATUS',
+ 'STATUSONLY',
+ 'STOP',
+ 'STOP_ON_ERROR',
+ 'STOPAT',
+ 'STOPATMARK',
+ 'STOPBEFOREMARK',
+ 'STOPLIST',
+ 'STOPPED',
+ 'STORED',
+ 'STREAMTABLE',
+ 'STRING',
+ 'STRUCT',
+ 'SUBJECT',
+ 'SUBSCRIPTION',
+ 'SUMMARY',
+ 'SUPPORTED',
+ 'SUSPEND',
+ 'SWITCH',
+ 'SYMMETRIC',
+ 'SYNCHRONOUS_COMMIT',
+ 'SYNONYM',
+ 'SYSNAME',
+ 'SYSTEM',
+ 'TABLE',
+ 'TABLES',
+ 'TABLERESULTS',
+ 'TABLESAMPLE',
+ 'TABLOCK',
+ 'TABLOCKX',
+ 'TAKE',
+ 'TAPE',
+ 'TARGET',
+ 'TARGET_RECOVERY_TIME',
+ 'TB',
+ 'TBLPROPERTIES',
+ 'TCP',
+ 'TEMPORARY',
+ 'TERMINATED',
+ 'TEXT',
+ 'TEXTIMAGE_ON',
+ 'TEXTSIZE',
+ 'THEN',
+ 'THESAURUS',
+ 'THROW',
+ 'TIES',
+ 'TIME',
+ 'TIMEOUT',
+ 'TIMER',
+ 'TIMESTAMP',
+ 'TIMESTAMPTZ',
+ 'TINYINT',
+ 'TO',
+ 'TOP',
+ 'TORN_PAGE_DETECTION',
+ 'TOUCH',
+ 'TRACEOFF',
+ 'TRACEON',
+ 'TRACESTATUS',
+ 'TRACK_CAUSALITY',
+ 'TRACK_COLUMNS_UPDATED',
+ 'TRAN',
+ 'TRANSACTION',
+ 'TRANSACTIONS',
+ 'TRANSFER',
+ 'TRANSFORM',
+ 'TRANSFORM_NOISE_WORDS',
+ 'TRIGGER',
+ 'TRIPLE_DES',
+ 'TRIPLE_DES_3KEY',
+ 'TRUE',
+ 'TRUNCATE',
+ 'TRUNCATEONLY',
+ 'TRUSTWORTHY',
+ 'TRY',
+ 'TSQL',
+ 'TWO_DIGIT_YEAR_CUTOFF',
+ 'TYPE',
+ 'TYPE_WARNING',
+ 'UNARCHIVE',
+ 'UNBOUNDED',
+ 'UNCHECKED',
+ 'UNCOMMITTED',
+ 'UNDEFINED',
+ 'UNDO',
+ 'UNSET',
+ 'UNSIGNED',
+ 'UNIONTYPE',
+ 'UNIQUE',
+ 'UNIQUEIDENTIFIER',
+ 'UNIQUEJOIN',
+ 'UNKNOWN',
+ 'UNLIMITED',
+ 'UNLOAD',
+ 'UNLOCK',
+ 'UNSAFE',
+ 'UPDATE',
+ 'UPDATETEXT',
+ 'UPDATEUSAGE',
+ 'UPDLOCK',
+ 'URI',
+ 'URL',
+ 'USE',
+ 'USED',
+ 'USER',
+ 'USEROPTIONS',
+ 'USING',
+ 'UTC',
+ 'UTC_TMESTAMP',
+ 'UTCTIMESTAMP',
+ 'VALID_XML',
+ 'VALIDATE',
+ 'VALIDATION',
+ 'VALUE',
+ 'VALUE_TYPE',
+ 'VALUES',
+ 'VARBINARY',
+ 'VARCHAR',
+ 'VARYING',
+ 'VECTORIZATION',
+ 'VERIFYONLY',
+ 'VERSION',
+ 'VIEW',
+ 'VIEW_METADATA',
+ 'VIEWS',
+ 'VISIBILITY',
+ 'WAIT_AT_LOW_PRIORITY',
+ 'WAITFOR',
+ 'WEEK',
+ 'WEEKS',
+ 'WEIGHT',
+ 'WELL_FORMED_XML',
+ 'WHEN',
+ 'WHERE',
+ 'WHILE',
+ 'WINDOW',
+ 'WINDOWS',
+ 'WITH',
+ 'WITHIN',
+ 'WITHOUT',
+ 'WITNESS',
+ 'WORK',
+ 'WORKLOAD',
+ 'WRITE',
+ 'WRITETEXT',
+ 'XACT_ABORT',
+ 'XLOCK',
+ 'XMAX',
+ 'XMIN',
+ 'XML',
+ 'XMLDATA',
+ 'XMLNAMESPACES',
+ 'XMLSCHEMA',
+ 'XQUERY',
+ 'XSINIL',
+ 'YEAR',
+ 'YEARS',
+ 'YMAX',
+ 'YMIN',
+ 'ZONE',
+ ],
+ operators: [
+ // Logical
+ 'ALL',
+ 'AND',
+ 'ANY',
+ 'BETWEEN',
+ 'EXISTS',
+ 'IN',
+ 'LIKE',
+ 'NOT',
+ 'OR',
+ 'SOME',
+ // Set
+ 'EXCEPT',
+ 'INTERSECT',
+ 'UNION',
+ // Join
+ 'APPLY',
+ 'CROSS',
+ 'FULL',
+ 'INNER',
+ 'JOIN',
+ 'LEFT',
+ 'OUTER',
+ 'RIGHT',
+ // Predicates
+ 'CONTAINS',
+ 'FREETEXT',
+ 'IS',
+ 'NULL',
+ // Pivoting
+ 'PIVOT',
+ 'UNPIVOT',
+ // Merging
+ 'MATCHED',
+ ],
+ builtinFunctions: [
+ // Aggregate
+ 'AVG',
+ 'CHECKSUM_AGG',
+ 'COUNT',
+ 'COUNT_BIG',
+ 'GROUPING',
+ 'GROUPING_ID',
+ 'MAX',
+ 'MIN',
+ 'SUM',
+ 'STDEV',
+ 'STDEVP',
+ 'VAR',
+ 'VARP',
+ // Analytic
+ 'CUME_DIST',
+ 'FIRST_VALUE',
+ 'LAG',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'PERCENTILE_CONT',
+ 'PERCENTILE_DISC',
+ 'PERCENT_RANK',
+ // Collation
+ 'COLLATE',
+ 'COLLATIONPROPERTY',
+ 'TERTIARY_WEIGHTS',
+ // Azure
+ 'FEDERATION_FILTERING_VALUE',
+ // Conversion
+ 'CAST',
+ 'CONVERT',
+ 'PARSE',
+ 'TRY_CAST',
+ 'TRY_CONVERT',
+ 'TRY_PARSE',
+ // Cryptographic
+ 'ASYMKEY_ID',
+ 'ASYMKEYPROPERTY',
+ 'CERTPROPERTY',
+ 'CERT_ID',
+ 'CRYPT_GEN_RANDOM',
+ 'DECRYPTBYASYMKEY',
+ 'DECRYPTBYCERT',
+ 'DECRYPTBYKEY',
+ 'DECRYPTBYKEYAUTOASYMKEY',
+ 'DECRYPTBYKEYAUTOCERT',
+ 'DECRYPTBYPASSPHRASE',
+ 'ENCRYPTBYASYMKEY',
+ 'ENCRYPTBYCERT',
+ 'ENCRYPTBYKEY',
+ 'ENCRYPTBYPASSPHRASE',
+ 'HASHBYTES',
+ 'IS_OBJECTSIGNED',
+ 'KEY_GUID',
+ 'KEY_ID',
+ 'KEY_NAME',
+ 'SIGNBYASYMKEY',
+ 'SIGNBYCERT',
+ 'SYMKEYPROPERTY',
+ 'VERIFYSIGNEDBYCERT',
+ 'VERIFYSIGNEDBYASYMKEY',
+ // Cursor
+ 'CURSOR_STATUS',
+ // Datatype
+ 'DATALENGTH',
+ 'IDENT_CURRENT',
+ 'IDENT_INCR',
+ 'IDENT_SEED',
+ 'IDENTITY',
+ 'SQL_VARIANT_PROPERTY',
+ // Datetime
+ 'CURRENT_TIMESTAMP',
+ 'DATEADD',
+ 'DATEDIFF',
+ 'DATEFROMPARTS',
+ 'DATENAME',
+ 'DATEPART',
+ 'DATETIME2FROMPARTS',
+ 'DATETIMEFROMPARTS',
+ 'DATETIMEOFFSETFROMPARTS',
+ 'DAY',
+ 'EOMONTH',
+ 'GETDATE',
+ 'GETUTCDATE',
+ 'ISDATE',
+ 'MONTH',
+ 'SMALLDATETIMEFROMPARTS',
+ 'SWITCHOFFSET',
+ 'SYSDATETIME',
+ 'SYSDATETIMEOFFSET',
+ 'SYSUTCDATETIME',
+ 'TIMEFROMPARTS',
+ 'TODATETIMEOFFSET',
+ 'YEAR',
+ // Logical
+ 'CHOOSE',
+ 'COALESCE',
+ 'IIF',
+ 'NULLIF',
+ // Mathematical
+ 'ABS',
+ 'ACOS',
+ 'ASIN',
+ 'ATAN',
+ 'ATN2',
+ 'CEILING',
+ 'COS',
+ 'COT',
+ 'DEGREES',
+ 'EXP',
+ 'FLOOR',
+ 'LOG',
+ 'LOG10',
+ 'PI',
+ 'POWER',
+ 'RADIANS',
+ 'RAND',
+ 'ROUND',
+ 'SIGN',
+ 'SIN',
+ 'SQRT',
+ 'SQUARE',
+ 'TAN',
+ // Metadata
+ 'APP_NAME',
+ 'APPLOCK_MODE',
+ 'APPLOCK_TEST',
+ 'ASSEMBLYPROPERTY',
+ 'COL_LENGTH',
+ 'COL_NAME',
+ 'COLUMNPROPERTY',
+ 'DATABASE_PRINCIPAL_ID',
+ 'DATABASEPROPERTYEX',
+ 'DB_ID',
+ 'DB_NAME',
+ 'FILE_ID',
+ 'FILE_IDEX',
+ 'FILE_NAME',
+ 'FILEGROUP_ID',
+ 'FILEGROUP_NAME',
+ 'FILEGROUPPROPERTY',
+ 'FILEPROPERTY',
+ 'FULLTEXTCATALOGPROPERTY',
+ 'FULLTEXTSERVICEPROPERTY',
+ 'INDEX_COL',
+ 'INDEXKEY_PROPERTY',
+ 'INDEXPROPERTY',
+ 'OBJECT_DEFINITION',
+ 'OBJECT_ID',
+ 'OBJECT_NAME',
+ 'OBJECT_SCHEMA_NAME',
+ 'OBJECTPROPERTY',
+ 'OBJECTPROPERTYEX',
+ 'ORIGINAL_DB_NAME',
+ 'PARSENAME',
+ 'SCHEMA_ID',
+ 'SCHEMA_NAME',
+ 'SCOPE_IDENTITY',
+ 'SERVERPROPERTY',
+ 'STATS_DATE',
+ 'TYPE_ID',
+ 'TYPE_NAME',
+ 'TYPEPROPERTY',
+ // Ranking
+ 'DENSE_RANK',
+ 'NTILE',
+ 'RANK',
+ 'ROW_NUMBER',
+ // Replication
+ 'PUBLISHINGSERVERNAME',
+ // Rowset
+ 'OPENDATASOURCE',
+ 'OPENQUERY',
+ 'OPENROWSET',
+ 'OPENXML',
+ // Security
+ 'CERTENCODED',
+ 'CERTPRIVATEKEY',
+ 'CURRENT_USER',
+ 'HAS_DBACCESS',
+ 'HAS_PERMS_BY_NAME',
+ 'IS_MEMBER',
+ 'IS_ROLEMEMBER',
+ 'IS_SRVROLEMEMBER',
+ 'LOGINPROPERTY',
+ 'ORIGINAL_LOGIN',
+ 'PERMISSIONS',
+ 'PWDENCRYPT',
+ 'PWDCOMPARE',
+ 'SESSION_USER',
+ 'SESSIONPROPERTY',
+ 'SUSER_ID',
+ 'SUSER_NAME',
+ 'SUSER_SID',
+ 'SUSER_SNAME',
+ 'SYSTEM_USER',
+ 'USER',
+ 'USER_ID',
+ 'USER_NAME',
+ // String
+ 'ASCII',
+ 'CHAR',
+ 'CHARINDEX',
+ 'CONCAT',
+ 'DIFFERENCE',
+ 'FORMAT',
+ 'LEFT',
+ 'LEN',
+ 'LOWER',
+ 'LTRIM',
+ 'NCHAR',
+ 'PATINDEX',
+ 'QUOTENAME',
+ 'REPLACE',
+ 'REPLICATE',
+ 'REVERSE',
+ 'RIGHT',
+ 'RTRIM',
+ 'SOUNDEX',
+ 'SPACE',
+ 'STR',
+ 'STUFF',
+ 'SUBSTRING',
+ 'UNICODE',
+ 'UPPER',
+ // System
+ 'BINARY_CHECKSUM',
+ 'CHECKSUM',
+ 'CONNECTIONPROPERTY',
+ 'CONTEXT_INFO',
+ 'CURRENT_REQUEST_ID',
+ 'ERROR_LINE',
+ 'ERROR_NUMBER',
+ 'ERROR_MESSAGE',
+ 'ERROR_PROCEDURE',
+ 'ERROR_SEVERITY',
+ 'ERROR_STATE',
+ 'FORMATMESSAGE',
+ 'GETANSINULL',
+ 'GET_FILESTREAM_TRANSACTION_CONTEXT',
+ 'HOST_ID',
+ 'HOST_NAME',
+ 'ISNULL',
+ 'ISNUMERIC',
+ 'MIN_ACTIVE_ROWVERSION',
+ 'NEWID',
+ 'NEWSEQUENTIALID',
+ 'ROWCOUNT_BIG',
+ 'XACT_STATE',
+ // TextImage
+ 'TEXTPTR',
+ 'TEXTVALID',
+ // Trigger
+ 'COLUMNS_UPDATED',
+ 'EVENTDATA',
+ 'TRIGGER_NESTLEVEL',
+ 'UPDATE',
+ // ChangeTracking
+ 'CHANGETABLE',
+ 'CHANGE_TRACKING_CONTEXT',
+ 'CHANGE_TRACKING_CURRENT_VERSION',
+ 'CHANGE_TRACKING_IS_COLUMN_IN_MASK',
+ 'CHANGE_TRACKING_MIN_VALID_VERSION',
+ // FullTextSearch
+ 'CONTAINSTABLE',
+ 'FREETEXTTABLE',
+ // SemanticTextSearch
+ 'SEMANTICKEYPHRASETABLE',
+ 'SEMANTICSIMILARITYDETAILSTABLE',
+ 'SEMANTICSIMILARITYTABLE',
+ // FileStream
+ 'FILETABLEROOTPATH',
+ 'GETFILENAMESPACEPATH',
+ 'GETPATHLOCATOR',
+ 'PATHNAME',
+ // ServiceBroker
+ 'GET_TRANSMISSION_STATUS',
+ ],
+ builtinVariables: [
+ // Configuration
+ '@@DATEFIRST',
+ '@@DBTS',
+ '@@LANGID',
+ '@@LANGUAGE',
+ '@@LOCK_TIMEOUT',
+ '@@MAX_CONNECTIONS',
+ '@@MAX_PRECISION',
+ '@@NESTLEVEL',
+ '@@OPTIONS',
+ '@@REMSERVER',
+ '@@SERVERNAME',
+ '@@SERVICENAME',
+ '@@SPID',
+ '@@TEXTSIZE',
+ '@@VERSION',
+ // Cursor
+ '@@CURSOR_ROWS',
+ '@@FETCH_STATUS',
+ // Datetime
+ '@@DATEFIRST',
+ // Metadata
+ '@@PROCID',
+ // System
+ '@@ERROR',
+ '@@IDENTITY',
+ '@@ROWCOUNT',
+ '@@TRANCOUNT',
+ // Stats
+ '@@CONNECTIONS',
+ '@@CPU_BUSY',
+ '@@IDLE',
+ '@@IO_BUSY',
+ '@@PACKET_ERRORS',
+ '@@PACK_RECEIVED',
+ '@@PACK_SENT',
+ '@@TIMETICKS',
+ '@@TOTAL_ERRORS',
+ '@@TOTAL_READ',
+ '@@TOTAL_WRITE',
+ ],
+ pseudoColumns: ['$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'],
+ tokenizer: {
+ root: [
+ { include: '@comments' },
+ { include: '@whitespace' },
+ { include: '@pseudoColumns' },
+ { include: '@numbers' },
+ { include: '@strings' },
+ { include: '@complexIdentifiers' },
+ { include: '@scopes' },
+ [/[;,.]/, 'delimiter'],
+ [/[()]/, '@brackets'],
+ [
+ /[\w@#$]+/,
+ {
+ cases: {
+ '@keywords': 'keyword',
+ '@operators': 'operator',
+ '@builtinVariables': 'predefined',
+ '@builtinFunctions': 'predefined',
+ '@default': 'identifier',
+ },
+ },
+ ],
+ [/[<>=!%&+\-*/|~^]/, 'operator'],
+ ],
+ whitespace: [[/\s+/, 'white']],
+ comments: [
+ [/--+.*/, 'comment'],
+ [/\/\*/, { token: 'comment.quote', next: '@comment' }],
+ ],
+ comment: [
+ [/[^*/]+/, 'comment'],
+ // Not supporting nested comments, as nested comments seem to not be standard?
+ // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic
+ // [/\/\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(
+ [/\*\//, { token: 'comment.quote', next: '@pop' }],
+ [/./, 'comment'],
+ ],
+ pseudoColumns: [
+ [
+ /[$][A-Za-z_][\w@#$]*/,
+ {
+ cases: {
+ '@pseudoColumns': 'predefined',
+ '@default': 'identifier',
+ },
+ },
+ ],
+ ],
+ numbers: [
+ [/0[xX][0-9a-fA-F]*/, 'number'],
+ [/[$][+-]*\d*(\.\d*)?/, 'number'],
+ [/((\d+(\.\d*)?)|(\.\d+))([eE][-+]?\d+)?/, 'number'],
+ ],
+ strings: [
+ [/N'/, { token: 'string', next: '@string' }],
+ [/'/, { token: 'string', next: '@string' }],
+ ],
+ string: [
+ [/[^']+/, 'string'],
+ [/''/, 'string'],
+ [/'/, { token: 'string', next: '@pop' }],
+ ],
+ complexIdentifiers: [
+ [/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
+ [/"/, { token: 'identifier.quote', next: '@quotedIdentifier' }],
+ ],
+ bracketedIdentifier: [
+ [/[^\]]+/, 'identifier'],
+ [/]]/, 'identifier'],
+ [/]/, { token: 'identifier.quote', next: '@pop' }],
+ ],
+ quotedIdentifier: [
+ [/[^"]+/, 'identifier'],
+ [/""/, 'identifier'],
+ [/"/, { token: 'identifier.quote', next: '@pop' }],
+ ],
+ scopes: [
+ [/BEGIN\s+(DISTRIBUTED\s+)?TRAN(SACTION)?\b/i, 'keyword'],
+ [/BEGIN\s+TRY\b/i, { token: 'keyword.try' }],
+ [/END\s+TRY\b/i, { token: 'keyword.try' }],
+ [/BEGIN\s+CATCH\b/i, { token: 'keyword.catch' }],
+ [/END\s+CATCH\b/i, { token: 'keyword.catch' }],
+ [/(BEGIN|CASE)\b/i, { token: 'keyword.block' }],
+ [/END\b/i, { token: 'keyword.block' }],
+ [/WHEN\b/i, { token: 'keyword.choice' }],
+ [/THEN\b/i, { token: 'keyword.choice' }],
+ ],
+ },
+};
+
+export default {
+ config: richLanguageConfiguration,
+ definition: langDefinition,
+ register(monaco) {
+ monaco.languages.register({ id: 'hql' });
+ monaco.languages.setLanguageConfiguration(
+ 'hql',
+ richLanguageConfiguration,
+ );
+ monaco.languages.setMonarchTokensProvider('hql', langDefinition);
+
+ // handle formatting(处理格式化)
+ monaco.languages.registerDocumentFormattingEditProvider('hql', {
+ provideDocumentFormattingEdits: function (model) {
+ let range = model.getFullModelRange();
+ let value = model.getValue();
+ let newValue = sqlFormatter.format(value);
+ return [
+ {
+ range: range,
+ text: newValue,
+ },
+ ];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/languages/log.ts b/linkis-web-next/src/components/editor/languages/log.ts
new file mode 100644
index 0000000000..6e8b7706c6
--- /dev/null
+++ b/linkis-web-next/src/components/editor/languages/log.ts
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ register(monaco: typeof import('monaco-editor')) {
+ monaco.languages.register({ id: 'log' });
+
+ monaco.languages.setMonarchTokensProvider('log', {
+ tokenizer: {
+ root: [
+ [/(^[=a-zA-Z].*|\d\s.*)/, 'log-normal'],
+ [/\sERROR\s.*/, 'log-error'],
+ [/\sWARN\s.*/, 'log-warn'],
+ [/\sINFO\s.*/, 'log-info'],
+ [
+ /^([0-9]{4}||[0-9]{2})-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]{3})?/,
+ 'log-date',
+ ],
+ [
+ /^[0-9]{2}\/[0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]{3})?/,
+ 'log-date',
+ ],
+ [/(^\*\*Waiting queue:.*)/, 'log-info'],
+ [/(^\*\*result tips:.*)/, 'log-info'],
+ ],
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/languages/out.ts b/linkis-web-next/src/components/editor/languages/out.ts
new file mode 100644
index 0000000000..70569b51b4
--- /dev/null
+++ b/linkis-web-next/src/components/editor/languages/out.ts
@@ -0,0 +1,1570 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const richLanguageConfiguration = {
+ comments: {
+ lineComment: '--',
+ blockComment: ['/*', '*/'],
+ },
+ brackets: [
+ ['{', '}'],
+ ['[', ']'],
+ ['(', ')'],
+ ],
+ autoClosingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ ],
+ surroundingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ ],
+};
+
+const langDefinition = {
+ defaultToken: '',
+ tokenPostfix: '.out',
+ ignoreCase: true,
+
+ brackets: [
+ { open: '[', close: ']', token: 'delimiter.square' },
+ { open: '(', close: ')', token: 'delimiter.parenthesis' },
+ ],
+
+ keywords: [
+ 'ABORT_AFTER_WAIT',
+ 'ABSENT',
+ 'ABSOLUTE',
+ 'ABORT',
+ 'ACCENT_SENSITIVITY',
+ 'ACTION',
+ 'ACTIVATION',
+ 'ACTIVE',
+ 'ADD',
+ 'ADDRESS',
+ 'ADMIN',
+ 'AES',
+ 'AES_128',
+ 'AES_192',
+ 'AES_256',
+ 'AFFINITY',
+ 'AFTER',
+ 'AGGREGATE',
+ 'ALGORITHM',
+ 'ALL_CONSTRAINTS',
+ 'ALL_ERRORMSGS',
+ 'ALL_INDEXES',
+ 'ALL_LEVELS',
+ 'ALL_SPARSE_COLUMNS',
+ 'ALLOW_CONNECTIONS',
+ 'ALLOW_MULTIPLE_EVENT_LOSS',
+ 'ALLOW_PAGE_LOCKS',
+ 'ALLOW_ROW_LOCKS',
+ 'ALLOW_SINGLE_EVENT_LOSS',
+ 'ALLOW_SNAPSHOT_ISOLATION',
+ 'ALLOWED',
+ 'ALTER',
+ 'ANALYZE',
+ 'ANONYMOUS',
+ 'ANSI_DEFAULTS',
+ 'ANSI_NULL_DEFAULT',
+ 'ANSI_NULL_DFLT_OFF',
+ 'ANSI_NULL_DFLT_ON',
+ 'ANSI_NULLS',
+ 'ANSI_PADDING',
+ 'ANSI_WARNINGS',
+ 'APPEND',
+ 'APPLICATION',
+ 'APPLICATION_LOG',
+ 'ARCHIVE',
+ 'ARITHABORT',
+ 'ARITHIGNORE',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASSEMBLY',
+ 'ASYMMETRIC',
+ 'ASYNCHRONOUS_COMMIT',
+ 'AT',
+ 'ATOMIC',
+ 'ATTACH',
+ 'ATTACH_REBUILD_LOG',
+ 'AUDIT',
+ 'AUDIT_GUID',
+ 'AUTHENTICATION',
+ 'AUTHORIZATION',
+ 'AUTO',
+ 'AUTOCOMMIT',
+ 'AUTO_CLEANUP',
+ 'AUTO_CLOSE',
+ 'AUTO_CREATE_STATISTICS',
+ 'AUTO_SHRINK',
+ 'AUTO_UPDATE_STATISTICS',
+ 'AUTO_UPDATE_STATISTICS_ASYNC',
+ 'AUTOMATED_BACKUP_PREFERENCE',
+ 'AUTOMATIC',
+ 'AVAILABILITY',
+ 'AVAILABILITY_MODE',
+ 'BACKUP',
+ 'BACKUP_PRIORITY',
+ 'BASE64',
+ 'BATCHSIZE',
+ 'BEFORE',
+ 'BEGIN',
+ 'BEGIN_DIALOG',
+ 'BIGINT',
+ 'BINARY',
+ 'BINDING',
+ 'BIT',
+ 'BLOCKERS',
+ 'BLOCKSIZE',
+ 'BOOLEAN',
+ 'BOTH',
+ 'BOUNDING_BOX',
+ 'BREAK',
+ 'BROKER',
+ 'BROKER_INSTANCE',
+ 'BROWSE',
+ 'BUCKET',
+ 'BUCKETS',
+ 'BUCKET_COUNT',
+ 'BUFFER',
+ 'BUFFERCOUNT',
+ 'BULK',
+ 'BULK_LOGGED',
+ 'BY',
+ 'CACHE',
+ 'CALL',
+ 'CALLED',
+ 'CALLER',
+ 'CAP_CPU_PERCENT',
+ 'CASCADE',
+ 'CASE',
+ 'CATALOG',
+ 'CATCH',
+ 'CELLS_PER_OBJECT',
+ 'CERTIFICATE',
+ 'CHANGE',
+ 'CHANGE_RETENTION',
+ 'CHANGE_TRACKING',
+ 'CHANGES',
+ 'CHAR',
+ 'CHARACTER',
+ 'CHECK',
+ 'CHECK_CONSTRAINTS',
+ 'CHECK_EXPIRATION',
+ 'CHECK_POLICY',
+ 'CHECKALLOC',
+ 'CHECKCATALOG',
+ 'CHECKCONSTRAINTS',
+ 'CHECKDB',
+ 'CHECKFILEGROUP',
+ 'CHECKIDENT',
+ 'CHECKPOINT',
+ 'CHECKTABLE',
+ 'CLASSIFIER_FUNCTION',
+ 'CLEANTABLE',
+ 'CLEANUP',
+ 'CLEAR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'CLUSTERED',
+ 'CLUSTERSTATUS',
+ 'CODEPAGE',
+ 'COLLATE',
+ 'COLLECTION',
+ 'COLUMN',
+ 'COLUMN_SET',
+ 'COLUMNS',
+ 'COLUMNSTORE',
+ 'COLUMNSTORE_ARCHIVE',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMMITTED',
+ 'COMPACT',
+ 'COMPACTIONS',
+ 'COMPATIBILITY_LEVEL',
+ 'COMPRESSION',
+ 'COMPUTE',
+ 'CONCAT',
+ 'CONCAT_NULL_YIELDS_NULL',
+ 'CONCATENATE',
+ 'CONF',
+ 'CONFIGURATION',
+ 'CONNECT',
+ 'CONSTRAINT',
+ 'CONTAINMENT',
+ 'CONTENT',
+ 'CONTEXT',
+ 'CONTINUE',
+ 'CONTINUE_AFTER_ERROR',
+ 'CONTRACT',
+ 'CONTRACT_NAME',
+ 'CONTROL',
+ 'CONVERSATION',
+ 'COOKIE',
+ 'COPY_ONLY',
+ 'COUNTER',
+ 'CPU',
+ 'CREATE',
+ 'CREATE_NEW',
+ 'CREATION_DISPOSITION',
+ 'CREDENTIAL',
+ 'CRYPTOGRAPHIC',
+ 'CUBE',
+ 'CURRENT',
+ 'CURRENT_DATE',
+ 'CURSOR',
+ 'CURSOR_CLOSE_ON_COMMIT',
+ 'CURSOR_DEFAULT',
+ 'CYCLE',
+ 'DATA',
+ 'DATA_COMPRESSION',
+ 'DATA_PURITY',
+ 'DATABASE',
+ 'DATABASES',
+ 'DATABASE_DEFAULT',
+ 'DATABASE_MIRRORING',
+ 'DATABASE_SNAPSHOT',
+ 'DATAFILETYPE',
+ 'DATE',
+ 'DATE_CORRELATION_OPTIMIZATION',
+ 'DATEFIRST',
+ 'DATEFORMAT',
+ 'DATETIME',
+ 'DATETIME2',
+ 'DATETIMEOFFSET',
+ 'DAY',
+ 'DAYOFWEEK',
+ 'DAYOFYEAR',
+ 'DAYS',
+ 'DB_CHAINING',
+ 'DBCC',
+ 'DBREINDEX',
+ 'DBPROPERTIES',
+ 'DDL_DATABASE_LEVEL_EVENTS',
+ 'DEADLOCK_PRIORITY',
+ 'DEALLOCATE',
+ 'DEC',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECRYPTION',
+ 'DEFAULT',
+ 'DEFAULT_DATABASE',
+ 'DEFAULT_FULLTEXT_LANGUAGE',
+ 'DEFAULT_LANGUAGE',
+ 'DEFAULT_SCHEMA',
+ 'DEFERRED',
+ 'DEFINED',
+ 'DEFINITION',
+ 'DELAY',
+ 'DELAYED_DURABILITY',
+ 'DELETE',
+ 'DELETED',
+ 'DELIMITED',
+ 'DENSITY_VECTOR',
+ 'DENY',
+ 'DEPENDENCY',
+ 'DEPENDENTS',
+ 'DES',
+ 'DESC',
+ 'DESCRIPTION',
+ 'DESCRIBE',
+ 'DESX',
+ 'DETAIL',
+ 'DHCP',
+ 'DIAGNOSTICS',
+ 'DIALOG',
+ 'DIFFERENTIAL',
+ 'DIRECTORIES',
+ 'DIRECTORY',
+ 'DIRECTORY_NAME',
+ 'DISABLE',
+ 'DISABLE_BROKER',
+ 'DISABLED',
+ 'DISK',
+ 'DISTINCT',
+ 'DISTRIBUTE',
+ 'DISTRIBUTED',
+ 'DOCUMENT',
+ 'DOUBLE',
+ 'DOW',
+ 'DROP',
+ 'DROP_EXISTING',
+ 'DROPCLEANBUFFERS',
+ 'DUMP',
+ 'DURABILITY',
+ 'DYNAMIC',
+ 'EDITION',
+ 'ELEMENTS',
+ 'ELEM_TYPE',
+ 'ELSE',
+ 'EMERGENCY',
+ 'EMPTY',
+ 'EMPTYFILE',
+ 'ENABLE',
+ 'ENABLE_BROKER',
+ 'ENABLED',
+ 'ENCRYPTION',
+ 'END',
+ 'ENDPOINT',
+ 'ENDPOINT_URL',
+ 'ERRLVL',
+ 'ERROR',
+ 'ERROR_BROKER_CONVERSATIONS',
+ 'ERRORFILE',
+ 'ESCAPE',
+ 'ESCAPED',
+ 'ESTIMATEONLY',
+ 'EVENT',
+ 'EVENT_RETENTION_MODE',
+ 'EXCHANGE',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTABLE',
+ 'EXECUTE',
+ 'EXIT',
+ 'EXPAND',
+ 'EXPORT',
+ 'EXPIREDATE',
+ 'EXPIRY_DATE',
+ 'EXPLAIN',
+ 'EXPLICIT',
+ 'EXPRESSION',
+ 'EXTENDED',
+ 'EXTENDED_LOGICAL_CHECKS',
+ 'EXTENSION',
+ 'EXTERNAL',
+ 'EXTERNAL_ACCESS',
+ 'EXTRACT',
+ 'FAIL_OPERATION',
+ 'FAILOVER',
+ 'FAILOVER_MODE',
+ 'FAILURE_CONDITION_LEVEL',
+ 'FALSE',
+ 'FAN_IN',
+ 'FAST',
+ 'FAST_FORWARD',
+ 'FETCH',
+ 'FIELDS',
+ 'FIELDTERMINATOR',
+ 'FILE',
+ 'FILEFORMAT',
+ 'FILEGROUP',
+ 'FILEGROWTH',
+ 'FILELISTONLY',
+ 'FILENAME',
+ 'FILEPATH',
+ 'FILESTREAM',
+ 'FILESTREAM_ON',
+ 'FILETABLE_COLLATE_FILENAME',
+ 'FILETABLE_DIRECTORY',
+ 'FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME',
+ 'FILETABLE_NAMESPACE',
+ 'FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME',
+ 'FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME',
+ 'FILLFACTOR',
+ 'FILTERING',
+ 'FIRE_TRIGGERS',
+ 'FIRST',
+ 'FIRSTROW',
+ 'FLOAT',
+ 'FMTONLY',
+ 'FOLLOWING',
+ 'FOR',
+ 'FORCE',
+ 'FORCE_FAILOVER_ALLOW_DATA_LOSS',
+ 'FORCE_SERVICE_ALLOW_DATA_LOSS',
+ 'FORCED',
+ 'FORCEPLAN',
+ 'FORCESCAN',
+ 'FORCESEEK',
+ 'FOREIGN',
+ 'FORMATFILE',
+ 'FORMATTED',
+ 'FORMSOF',
+ 'FORWARD_ONLY',
+ 'FREE',
+ 'FREEPROCCACHE',
+ 'FREESESSIONCACHE',
+ 'FREESYSTEMCACHE',
+ 'FROM',
+ 'FULL',
+ 'FULLSCAN',
+ 'FULLTEXT',
+ 'FUNCTION',
+ 'FUNCTIONS',
+ 'GB',
+ 'GEOGRAPHY_AUTO_GRID',
+ 'GEOGRAPHY_GRID',
+ 'GEOMETRY_AUTO_GRID',
+ 'GEOMETRY_GRID',
+ 'GET',
+ 'GLOBAL',
+ 'GO',
+ 'GOTO',
+ 'GOVERNOR',
+ 'GRANT',
+ 'GRIDS',
+ 'GROUP',
+ 'GROUP_MAX_REQUESTS',
+ 'HADR',
+ 'HASH',
+ 'HASHED',
+ 'HAVING',
+ 'HEADERONLY',
+ 'HEALTH_CHECK_TIMEOUT',
+ 'HELP',
+ 'HIERARCHYID',
+ 'HIGH',
+ 'HINT',
+ 'HISTOGRAM',
+ 'HOLDLOCK',
+ 'HOLD_DDLTIME',
+ 'HONOR_BROKER_PRIORITY',
+ 'HOUR',
+ 'HOURS',
+ 'IDENTITY',
+ 'IDENTITY_INSERT',
+ 'IDENTITY_VALUE',
+ 'IDENTITYCOL',
+ 'IDXPROPERTIES',
+ 'IF',
+ 'IGNORE',
+ 'IGNORE_CONSTRAINTS',
+ 'IGNORE_DUP_KEY',
+ 'IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX',
+ 'IGNORE_TRIGGERS',
+ 'IMAGE',
+ 'IMMEDIATE',
+ 'IMPERSONATE',
+ 'IMPLICIT_TRANSACTIONS',
+ 'IMPORT',
+ 'IMPORTANCE',
+ 'INCLUDE',
+ 'INCREMENT',
+ 'INCREMENTAL',
+ 'INDEX',
+ 'INDEXES',
+ 'INDEXDEFRAG',
+ 'INFINITE',
+ 'INFLECTIONAL',
+ 'INIT',
+ 'INITIATOR',
+ 'INPATH',
+ 'INPUT',
+ 'INPUTDRIVER',
+ 'INPUTFORMAT',
+ 'INPUTBUFFER',
+ 'INSENSITIVE',
+ 'INSERT',
+ 'INSERTED',
+ 'INSTEAD',
+ 'INT',
+ 'INTEGER',
+ 'INTERVAL',
+ 'INTO',
+ 'IO',
+ 'IP',
+ 'ISABOUT',
+ 'ISOLATION',
+ 'ITEMS',
+ 'JAR',
+ 'JOB',
+ 'KB',
+ 'KEEP',
+ 'KEEP_CDC',
+ 'KEEP_NULLS',
+ 'KEEP_REPLICATION',
+ 'KEEPDEFAULTS',
+ 'KEEPFIXED',
+ 'KEEPIDENTITY',
+ 'KEEPNULLS',
+ 'KERBEROS',
+ 'KEY',
+ 'KEY_SOURCE',
+ 'KEY_TYPE',
+ 'KEYS',
+ 'KEYSET',
+ 'KILL',
+ 'KILOBYTES_PER_BATCH',
+ 'LABELONLY',
+ 'LANGUAGE',
+ 'LAST',
+ 'LASTROW',
+ 'LATERAL',
+ 'LESS',
+ 'LEVEL',
+ 'LEVEL_1',
+ 'LEVEL_2',
+ 'LEVEL_3',
+ 'LEVEL_4',
+ 'LIFETIME',
+ 'LIMIT',
+ 'LINENO',
+ 'LINES',
+ 'LIST',
+ 'LISTENER',
+ 'LISTENER_IP',
+ 'LISTENER_PORT',
+ 'LOAD',
+ 'LOADHISTORY',
+ 'LOB_COMPACTION',
+ 'LOCAL',
+ 'LOCAL_SERVICE_NAME',
+ 'LOCATION',
+ 'LOCK',
+ 'LOCKS',
+ 'LOCK_ESCALATION',
+ 'LOCK_TIMEOUT',
+ 'LOGICAL',
+ 'LOGIN',
+ 'LOGSPACE',
+ 'LONG',
+ 'LOOP',
+ 'LOW',
+ 'MACRO',
+ 'MAP',
+ 'MAPJOIN',
+ 'MANUAL',
+ 'MARK',
+ 'MARK_IN_USE_FOR_REMOVAL',
+ 'MASTER',
+ 'MATERIALIZED',
+ 'MAX_CPU_PERCENT',
+ 'MAX_DISPATCH_LATENCY',
+ 'MAX_DOP',
+ 'MAX_DURATION',
+ 'MAX_EVENT_SIZE',
+ 'MAX_FILES',
+ 'MAX_IOPS_PER_VOLUME',
+ 'MAX_MEMORY',
+ 'MAX_MEMORY_PERCENT',
+ 'MAX_QUEUE_READERS',
+ 'MAX_ROLLOVER_FILES',
+ 'MAX_SIZE',
+ 'MAXDOP',
+ 'MAXERRORS',
+ 'MAXLENGTH',
+ 'MAXRECURSION',
+ 'MAXSIZE',
+ 'MAXTRANSFERSIZE',
+ 'MAXVALUE',
+ 'MB',
+ 'MEDIADESCRIPTION',
+ 'MEDIANAME',
+ 'MEDIAPASSWORD',
+ 'MEDIUM',
+ 'MEMBER',
+ 'MEMORY_OPTIMIZED',
+ 'MEMORY_OPTIMIZED_DATA',
+ 'MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT',
+ 'MEMORY_PARTITION_MODE',
+ 'MERGE',
+ 'MESSAGE',
+ 'MESSAGE_FORWARD_SIZE',
+ 'MESSAGE_FORWARDING',
+ 'METADATA',
+ 'MICROSECOND',
+ 'MILLISECOND',
+ 'MIN_CPU_PERCENT',
+ 'MIN_IOPS_PER_VOLUME',
+ 'MIN_MEMORY_PERCENT',
+ 'MINUS',
+ 'MINUTE',
+ 'MINUTES',
+ 'MINVALUE',
+ 'MIRROR',
+ 'MIRROR_ADDRESS',
+ 'MODIFY',
+ 'MONEY',
+ 'MONTH',
+ 'MONTHS',
+ 'MORE',
+ 'MOVE',
+ 'MSCK',
+ 'MULTI_USER',
+ 'MUST_CHANGE',
+ 'NAME',
+ 'NANOSECOND',
+ 'NATIONAL',
+ 'NATIVE_COMPILATION',
+ 'NCHAR',
+ 'NEGOTIATE',
+ 'NESTED_TRIGGERS',
+ 'NEW_ACCOUNT',
+ 'NEW_BROKER',
+ 'NEW_PASSWORD',
+ 'NEWNAME',
+ 'NEXT',
+ 'NO',
+ 'NO_BROWSETABLE',
+ 'NO_CHECKSUM',
+ 'NO_COMPRESSION',
+ 'NO_EVENT_LOSS',
+ 'NO_INFOMSGS',
+ 'NO_TRUNCATE',
+ 'NO_WAIT',
+ 'NOCHECK',
+ 'NOCOUNT',
+ 'NO_DROP',
+ 'NOEXEC',
+ 'NOEXPAND',
+ 'NOFORMAT',
+ 'NOINDEX',
+ 'NOINIT',
+ 'NOLOCK',
+ 'NON',
+ 'NON_TRANSACTED_ACCESS',
+ 'NONCLUSTERED',
+ 'NONE',
+ 'NORECOMPUTE',
+ 'NORECOVERY',
+ 'NORELY',
+ 'NORESEED',
+ 'NORESET',
+ 'NOREWIND',
+ 'NORMAL',
+ 'NOSCAN',
+ 'NOSKIP',
+ 'NOTIFICATION',
+ 'NOTRUNCATE',
+ 'NOUNLOAD',
+ 'NOVALIDATE',
+ 'NOWAIT',
+ 'NTEXT',
+ 'NTLM',
+ 'NULLS',
+ 'NUMANODE',
+ 'NUMERIC',
+ 'NUMERIC_ROUNDABORT',
+ 'NVARCHAR',
+ 'OBJECT',
+ 'OF',
+ 'OFF',
+ 'OFFLINE',
+ 'OFFSET',
+ 'OFFSETS',
+ 'OLD_ACCOUNT',
+ 'OLD_PASSWORD',
+ 'ON',
+ 'ON_FAILURE',
+ 'ONLINE',
+ 'ONLY',
+ 'OPEN',
+ 'OPEN_EXISTING',
+ 'OPENTRAN',
+ 'OPERATOR',
+ 'OPTIMISTIC',
+ 'OPTIMIZE',
+ 'OPTION',
+ 'ORDER',
+ 'OUT',
+ 'OUTPUT',
+ 'OUTPUTDRIVER',
+ 'OUTPUTBUFFER',
+ 'OUTPUTFORMAT',
+ 'OVER',
+ 'OVERRIDE',
+ 'OWNER',
+ 'OWNERSHIP',
+ 'OVERWRITE',
+ 'PAD_INDEX',
+ 'PAGE',
+ 'PAGE_VERIFY',
+ 'PAGECOUNT',
+ 'PAGLOCK',
+ 'PARAMETERIZATION',
+ 'PARSEONLY',
+ 'PARTIAL',
+ 'PARTIALSCAN',
+ 'PARTITION',
+ 'PARTITIONED',
+ 'PARTITIONS',
+ 'PARTNER',
+ 'PASSWORD',
+ 'PATH',
+ 'PER_CPU',
+ 'PER_NODE',
+ 'PERCENT',
+ 'PERMISSION_SET',
+ 'PERSISTED',
+ 'PHYSICAL_ONLY',
+ 'PLAN',
+ 'PLUS',
+ 'POISON_MESSAGE_HANDLING',
+ 'POOL',
+ 'POPULATION',
+ 'PORT',
+ 'PRECEDING',
+ 'PRECISION',
+ 'PRETTY',
+ 'PRESERVE',
+ 'PRIMARY',
+ 'PRIMARY_ROLE',
+ 'PRINT',
+ 'PRIOR',
+ 'PRIORITY',
+ 'PRIORITY_LEVEL',
+ 'PRINCIPALS',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROC',
+ 'PROCCACHE',
+ 'PROCEDURE',
+ 'PROCEDURE_NAME',
+ 'PROCESS',
+ 'PROFILE',
+ 'PROPERTY',
+ 'PROPERTY_DESCRIPTION',
+ 'PROPERTY_INT_ID',
+ 'PROPERTY_SET_GUID',
+ 'PROTECTION',
+ 'PROVIDER',
+ 'PROVIDER_KEY_NAME',
+ 'PUBLIC',
+ 'PURGE',
+ 'PUT',
+ 'QUARTER',
+ 'QUERY',
+ 'QUERY_GOVERNOR_COST_LIMIT',
+ 'QUEUE',
+ 'QUEUE_DELAY',
+ 'QUOTED_IDENTIFIER',
+ 'RAISERROR',
+ 'RANGE',
+ 'RAW',
+ 'RC2',
+ 'RC4',
+ 'RC4_128',
+ 'READ',
+ 'READ_COMMITTED_SNAPSHOT',
+ 'READ_ONLY',
+ 'READ_ONLY_ROUTING_LIST',
+ 'READ_ONLY_ROUTING_URL',
+ 'READ_WRITE',
+ 'READ_WRITE_FILEGROUPS',
+ 'READCOMMITTED',
+ 'READCOMMITTEDLOCK',
+ 'READONLY',
+ 'READPAST',
+ 'READS',
+ 'READTEXT',
+ 'READUNCOMMITTED',
+ 'READWRITE',
+ 'REAL',
+ 'REBUILD',
+ 'RECEIVE',
+ 'RECOMPILE',
+ 'RECONFIGURE',
+ 'RECORDREADER',
+ 'RECORDWRITER',
+ 'RECOVERY',
+ 'RECURSIVE',
+ 'RECURSIVE_TRIGGERS',
+ 'REDUCE',
+ 'REFERENCES',
+ 'REGENERATE',
+ 'REGEXP',
+ 'RELATED_CONVERSATION',
+ 'RELATED_CONVERSATION_GROUP',
+ 'RELATIVE',
+ 'RELOAD',
+ 'RELY',
+ 'REMOTE',
+ 'REMOTE_PROC_TRANSACTIONS',
+ 'REMOTE_SERVICE_NAME',
+ 'REMOVE',
+ 'RENAME',
+ 'REORGANIZE',
+ 'REPAIR',
+ 'REPAIR_ALLOW_DATA_LOSS',
+ 'REPAIR_FAST',
+ 'REPAIR_REBUILD',
+ 'REPEATABLE',
+ 'REPEATABLEREAD',
+ 'REPLICA',
+ 'REPLICATION',
+ 'REQUEST_MAX_CPU_TIME_SEC',
+ 'REQUEST_MAX_MEMORY_GRANT_PERCENT',
+ 'REQUEST_MEMORY_GRANT_TIMEOUT_SEC',
+ 'REQUIRED',
+ 'RESAMPLE',
+ 'RESEED',
+ 'RESERVE_DISK_SPACE',
+ 'RESET',
+ 'RESOURCE',
+ 'RESTART',
+ 'RESTORE',
+ 'RESTRICT',
+ 'RESTRICTED_USER',
+ 'RESULT',
+ 'RESUME',
+ 'RETAINDAYS',
+ 'RETENTION',
+ 'RETURN',
+ 'RETURNS',
+ 'REVERT',
+ 'REVOKE',
+ 'REWIND',
+ 'REWINDONLY',
+ 'REWRITE',
+ 'RLIKE',
+ 'ROBUST',
+ 'ROLE',
+ 'ROLES',
+ 'ROLLBACK',
+ 'ROLLUP',
+ 'ROOT',
+ 'ROUTE',
+ 'ROW',
+ 'ROWCOUNT',
+ 'ROWGUIDCOL',
+ 'ROWLOCK',
+ 'ROWS',
+ 'ROWS_PER_BATCH',
+ 'ROWTERMINATOR',
+ 'ROWVERSION',
+ 'RSA_1024',
+ 'RSA_2048',
+ 'RSA_512',
+ 'RULE',
+ 'SAFE',
+ 'SAFETY',
+ 'SAMPLE',
+ 'SAVE',
+ 'SCHEDULER',
+ 'SCHEMA',
+ 'SCHEMAS',
+ 'SCHEMA_AND_DATA',
+ 'SCHEMA_ONLY',
+ 'SCHEMABINDING',
+ 'SCHEME',
+ 'SCROLL',
+ 'SCROLL_LOCKS',
+ 'SEARCH',
+ 'SECOND',
+ 'SECONDARY',
+ 'SECONDARY_ONLY',
+ 'SECONDARY_ROLE',
+ 'SECONDS',
+ 'SECRET',
+ 'SECURITY_LOG',
+ 'SECURITYAUDIT',
+ 'SELECT',
+ 'SELECTIVE',
+ 'SELF',
+ 'SEMI',
+ 'SEND',
+ 'SENT',
+ 'SEQUENCE',
+ 'SERDE',
+ 'SERDEPROPERTIES',
+ 'SERIALIZABLE',
+ 'SERVER',
+ 'SERVICE',
+ 'SERVICE_BROKER',
+ 'SERVICE_NAME',
+ 'SESSION',
+ 'SESSION_TIMEOUT',
+ 'SET',
+ 'SETS',
+ 'SETUSER',
+ 'SHARED',
+ 'SHOW',
+ 'SHOW_DATABASE',
+ 'SHOW_STATISTICS',
+ 'SHOWCONTIG',
+ 'SHOWPLAN',
+ 'SHOWPLAN_ALL',
+ 'SHOWPLAN_TEXT',
+ 'SHOWPLAN_XML',
+ 'SHRINKDATABASE',
+ 'SHRINKFILE',
+ 'SHUTDOWN',
+ 'SID',
+ 'SIGNATURE',
+ 'SIMPLE',
+ 'SINGLE_BLOB',
+ 'SINGLE_CLOB',
+ 'SINGLE_NCLOB',
+ 'SINGLE_USER',
+ 'SINGLETON',
+ 'SIZE',
+ 'SKEWED',
+ 'SKIP',
+ 'SMALLDATETIME',
+ 'SMALLINT',
+ 'SMALLMONEY',
+ 'SNAPSHOT',
+ 'SORT',
+ 'SORTED',
+ 'SORT_IN_TEMPDB',
+ 'SOURCE',
+ 'SPARSE',
+ 'SPATIAL',
+ 'SPATIAL_WINDOW_MAX_CELLS',
+ 'SPECIFICATION',
+ 'SPLIT',
+ 'SQL',
+ 'SQL_VARIANT',
+ 'SQLPERF',
+ 'SSL',
+ 'STANDBY',
+ 'START',
+ 'START_DATE',
+ 'STARTED',
+ 'STARTUP_STATE',
+ 'STAT_HEADER',
+ 'STATE',
+ 'STATEMENT',
+ 'STATIC',
+ 'STATISTICAL_SEMANTICS',
+ 'STATISTICS',
+ 'STATISTICS_INCREMENTAL',
+ 'STATISTICS_NORECOMPUTE',
+ 'STATS',
+ 'STATS_STREAM',
+ 'STATUS',
+ 'STATUSONLY',
+ 'STOP',
+ 'STOP_ON_ERROR',
+ 'STOPAT',
+ 'STOPATMARK',
+ 'STOPBEFOREMARK',
+ 'STOPLIST',
+ 'STOPPED',
+ 'STORED',
+ 'STREAMTABLE',
+ 'STRING',
+ 'STRUCT',
+ 'SUBJECT',
+ 'SUBSCRIPTION',
+ 'SUMMARY',
+ 'SUPPORTED',
+ 'SUSPEND',
+ 'SWITCH',
+ 'SYMMETRIC',
+ 'SYNCHRONOUS_COMMIT',
+ 'SYNONYM',
+ 'SYSNAME',
+ 'SYSTEM',
+ 'TABLE',
+ 'TABLES',
+ 'TABLERESULTS',
+ 'TABLESAMPLE',
+ 'TABLOCK',
+ 'TABLOCKX',
+ 'TAKE',
+ 'TAPE',
+ 'TARGET',
+ 'TARGET_RECOVERY_TIME',
+ 'TB',
+ 'TBLPROPERTIES',
+ 'TCP',
+ 'TEMPORARY',
+ 'TERMINATED',
+ 'TEXT',
+ 'TEXTIMAGE_ON',
+ 'TEXTSIZE',
+ 'THEN',
+ 'THESAURUS',
+ 'THROW',
+ 'TIES',
+ 'TIME',
+ 'TIMEOUT',
+ 'TIMER',
+ 'TIMESTAMP',
+ 'TIMESTAMPTZ',
+ 'TINYINT',
+ 'TO',
+ 'TOP',
+ 'TORN_PAGE_DETECTION',
+ 'TOUCH',
+ 'TRACEOFF',
+ 'TRACEON',
+ 'TRACESTATUS',
+ 'TRACK_CAUSALITY',
+ 'TRACK_COLUMNS_UPDATED',
+ 'TRAN',
+ 'TRANSACTION',
+ 'TRANSACTIONS',
+ 'TRANSFER',
+ 'TRANSFORM',
+ 'TRANSFORM_NOISE_WORDS',
+ 'TRIGGER',
+ 'TRIPLE_DES',
+ 'TRIPLE_DES_3KEY',
+ 'TRUE',
+ 'TRUNCATE',
+ 'TRUNCATEONLY',
+ 'TRUSTWORTHY',
+ 'TRY',
+ 'TSQL',
+ 'TWO_DIGIT_YEAR_CUTOFF',
+ 'TYPE',
+ 'TYPE_WARNING',
+ 'UNARCHIVE',
+ 'UNBOUNDED',
+ 'UNCHECKED',
+ 'UNCOMMITTED',
+ 'UNDEFINED',
+ 'UNDO',
+ 'UNSET',
+ 'UNSIGNED',
+ 'UNIONTYPE',
+ 'UNIQUE',
+ 'UNIQUEIDENTIFIER',
+ 'UNIQUEJOIN',
+ 'UNKNOWN',
+ 'UNLIMITED',
+ 'UNLOAD',
+ 'UNLOCK',
+ 'UNSAFE',
+ 'UPDATE',
+ 'UPDATETEXT',
+ 'UPDATEUSAGE',
+ 'UPDLOCK',
+ 'URI',
+ 'URL',
+ 'USE',
+ 'USED',
+ 'USER',
+ 'USEROPTIONS',
+ 'USING',
+ 'UTC',
+ 'UTC_TMESTAMP',
+ 'UTCTIMESTAMP',
+ 'VALID_XML',
+ 'VALIDATE',
+ 'VALIDATION',
+ 'VALUE',
+ 'VALUE_TYPE',
+ 'VALUES',
+ 'VARBINARY',
+ 'VARCHAR',
+ 'VARYING',
+ 'VECTORIZATION',
+ 'VERIFYONLY',
+ 'VERSION',
+ 'VIEW',
+ 'VIEW_METADATA',
+ 'VIEWS',
+ 'VISIBILITY',
+ 'WAIT_AT_LOW_PRIORITY',
+ 'WAITFOR',
+ 'WEEK',
+ 'WEEKS',
+ 'WEIGHT',
+ 'WELL_FORMED_XML',
+ 'WHEN',
+ 'WHERE',
+ 'WHILE',
+ 'WINDOW',
+ 'WINDOWS',
+ 'WITH',
+ 'WITHIN',
+ 'WITHOUT',
+ 'WITNESS',
+ 'WORK',
+ 'WORKLOAD',
+ 'WRITE',
+ 'WRITETEXT',
+ 'XACT_ABORT',
+ 'XLOCK',
+ 'XMAX',
+ 'XMIN',
+ 'XML',
+ 'XMLDATA',
+ 'XMLNAMESPACES',
+ 'XMLSCHEMA',
+ 'XQUERY',
+ 'XSINIL',
+ 'YEAR',
+ 'YEARS',
+ 'YMAX',
+ 'YMIN',
+ 'ZONE',
+ ],
+ operators: [
+ // Logical
+ 'ALL',
+ 'AND',
+ 'ANY',
+ 'BETWEEN',
+ 'EXISTS',
+ 'IN',
+ 'LIKE',
+ 'NOT',
+ 'OR',
+ 'SOME',
+ // Set
+ 'EXCEPT',
+ 'INTERSECT',
+ 'UNION',
+ // Join
+ 'APPLY',
+ 'CROSS',
+ 'FULL',
+ 'INNER',
+ 'JOIN',
+ 'LEFT',
+ 'OUTER',
+ 'RIGHT',
+ // Predicates
+ 'CONTAINS',
+ 'FREETEXT',
+ 'IS',
+ 'NULL',
+ // Pivoting
+ 'PIVOT',
+ 'UNPIVOT',
+ // Merging
+ 'MATCHED',
+ ],
+ builtinFunctions: [
+ // Aggregate
+ 'AVG',
+ 'CHECKSUM_AGG',
+ 'COUNT',
+ 'COUNT_BIG',
+ 'GROUPING',
+ 'GROUPING_ID',
+ 'MAX',
+ 'MIN',
+ 'SUM',
+ 'STDEV',
+ 'STDEVP',
+ 'VAR',
+ 'VARP',
+ // Analytic
+ 'CUME_DIST',
+ 'FIRST_VALUE',
+ 'LAG',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'PERCENTILE_CONT',
+ 'PERCENTILE_DISC',
+ 'PERCENT_RANK',
+ // Collation
+ 'COLLATE',
+ 'COLLATIONPROPERTY',
+ 'TERTIARY_WEIGHTS',
+ // Azure
+ 'FEDERATION_FILTERING_VALUE',
+ // Conversion
+ 'CAST',
+ 'CONVERT',
+ 'PARSE',
+ 'TRY_CAST',
+ 'TRY_CONVERT',
+ 'TRY_PARSE',
+ // Cryptographic
+ 'ASYMKEY_ID',
+ 'ASYMKEYPROPERTY',
+ 'CERTPROPERTY',
+ 'CERT_ID',
+ 'CRYPT_GEN_RANDOM',
+ 'DECRYPTBYASYMKEY',
+ 'DECRYPTBYCERT',
+ 'DECRYPTBYKEY',
+ 'DECRYPTBYKEYAUTOASYMKEY',
+ 'DECRYPTBYKEYAUTOCERT',
+ 'DECRYPTBYPASSPHRASE',
+ 'ENCRYPTBYASYMKEY',
+ 'ENCRYPTBYCERT',
+ 'ENCRYPTBYKEY',
+ 'ENCRYPTBYPASSPHRASE',
+ 'HASHBYTES',
+ 'IS_OBJECTSIGNED',
+ 'KEY_GUID',
+ 'KEY_ID',
+ 'KEY_NAME',
+ 'SIGNBYASYMKEY',
+ 'SIGNBYCERT',
+ 'SYMKEYPROPERTY',
+ 'VERIFYSIGNEDBYCERT',
+ 'VERIFYSIGNEDBYASYMKEY',
+ // Cursor
+ 'CURSOR_STATUS',
+ // Datatype
+ 'DATALENGTH',
+ 'IDENT_CURRENT',
+ 'IDENT_INCR',
+ 'IDENT_SEED',
+ 'IDENTITY',
+ 'SQL_VARIANT_PROPERTY',
+ // Datetime
+ 'CURRENT_TIMESTAMP',
+ 'DATEADD',
+ 'DATEDIFF',
+ 'DATEFROMPARTS',
+ 'DATENAME',
+ 'DATEPART',
+ 'DATETIME2FROMPARTS',
+ 'DATETIMEFROMPARTS',
+ 'DATETIMEOFFSETFROMPARTS',
+ 'DAY',
+ 'EOMONTH',
+ 'GETDATE',
+ 'GETUTCDATE',
+ 'ISDATE',
+ 'MONTH',
+ 'SMALLDATETIMEFROMPARTS',
+ 'SWITCHOFFSET',
+ 'SYSDATETIME',
+ 'SYSDATETIMEOFFSET',
+ 'SYSUTCDATETIME',
+ 'TIMEFROMPARTS',
+ 'TODATETIMEOFFSET',
+ 'YEAR',
+ // Logical
+ 'CHOOSE',
+ 'COALESCE',
+ 'IIF',
+ 'NULLIF',
+ // Mathematical
+ 'ABS',
+ 'ACOS',
+ 'ASIN',
+ 'ATAN',
+ 'ATN2',
+ 'CEILING',
+ 'COS',
+ 'COT',
+ 'DEGREES',
+ 'EXP',
+ 'FLOOR',
+ 'LOG',
+ 'LOG10',
+ 'PI',
+ 'POWER',
+ 'RADIANS',
+ 'RAND',
+ 'ROUND',
+ 'SIGN',
+ 'SIN',
+ 'SQRT',
+ 'SQUARE',
+ 'TAN',
+ // Metadata
+ 'APP_NAME',
+ 'APPLOCK_MODE',
+ 'APPLOCK_TEST',
+ 'ASSEMBLYPROPERTY',
+ 'COL_LENGTH',
+ 'COL_NAME',
+ 'COLUMNPROPERTY',
+ 'DATABASE_PRINCIPAL_ID',
+ 'DATABASEPROPERTYEX',
+ 'DB_ID',
+ 'DB_NAME',
+ 'FILE_ID',
+ 'FILE_IDEX',
+ 'FILE_NAME',
+ 'FILEGROUP_ID',
+ 'FILEGROUP_NAME',
+ 'FILEGROUPPROPERTY',
+ 'FILEPROPERTY',
+ 'FULLTEXTCATALOGPROPERTY',
+ 'FULLTEXTSERVICEPROPERTY',
+ 'INDEX_COL',
+ 'INDEXKEY_PROPERTY',
+ 'INDEXPROPERTY',
+ 'OBJECT_DEFINITION',
+ 'OBJECT_ID',
+ 'OBJECT_NAME',
+ 'OBJECT_SCHEMA_NAME',
+ 'OBJECTPROPERTY',
+ 'OBJECTPROPERTYEX',
+ 'ORIGINAL_DB_NAME',
+ 'PARSENAME',
+ 'SCHEMA_ID',
+ 'SCHEMA_NAME',
+ 'SCOPE_IDENTITY',
+ 'SERVERPROPERTY',
+ 'STATS_DATE',
+ 'TYPE_ID',
+ 'TYPE_NAME',
+ 'TYPEPROPERTY',
+ // Ranking
+ 'DENSE_RANK',
+ 'NTILE',
+ 'RANK',
+ 'ROW_NUMBER',
+ // Replication
+ 'PUBLISHINGSERVERNAME',
+ // Rowset
+ 'OPENDATASOURCE',
+ 'OPENQUERY',
+ 'OPENROWSET',
+ 'OPENXML',
+ // Security
+ 'CERTENCODED',
+ 'CERTPRIVATEKEY',
+ 'CURRENT_USER',
+ 'HAS_DBACCESS',
+ 'HAS_PERMS_BY_NAME',
+ 'IS_MEMBER',
+ 'IS_ROLEMEMBER',
+ 'IS_SRVROLEMEMBER',
+ 'LOGINPROPERTY',
+ 'ORIGINAL_LOGIN',
+ 'PERMISSIONS',
+ 'PWDENCRYPT',
+ 'PWDCOMPARE',
+ 'SESSION_USER',
+ 'SESSIONPROPERTY',
+ 'SUSER_ID',
+ 'SUSER_NAME',
+ 'SUSER_SID',
+ 'SUSER_SNAME',
+ 'SYSTEM_USER',
+ 'USER',
+ 'USER_ID',
+ 'USER_NAME',
+ // String
+ 'ASCII',
+ 'CHAR',
+ 'CHARINDEX',
+ 'CONCAT',
+ 'DIFFERENCE',
+ 'FORMAT',
+ 'LEFT',
+ 'LEN',
+ 'LOWER',
+ 'LTRIM',
+ 'NCHAR',
+ 'PATINDEX',
+ 'QUOTENAME',
+ 'REPLACE',
+ 'REPLICATE',
+ 'REVERSE',
+ 'RIGHT',
+ 'RTRIM',
+ 'SOUNDEX',
+ 'SPACE',
+ 'STR',
+ 'STUFF',
+ 'SUBSTRING',
+ 'UNICODE',
+ 'UPPER',
+ // System
+ 'BINARY_CHECKSUM',
+ 'CHECKSUM',
+ 'CONNECTIONPROPERTY',
+ 'CONTEXT_INFO',
+ 'CURRENT_REQUEST_ID',
+ 'ERROR_LINE',
+ 'ERROR_NUMBER',
+ 'ERROR_MESSAGE',
+ 'ERROR_PROCEDURE',
+ 'ERROR_SEVERITY',
+ 'ERROR_STATE',
+ 'FORMATMESSAGE',
+ 'GETANSINULL',
+ 'GET_FILESTREAM_TRANSACTION_CONTEXT',
+ 'HOST_ID',
+ 'HOST_NAME',
+ 'ISNULL',
+ 'ISNUMERIC',
+ 'MIN_ACTIVE_ROWVERSION',
+ 'NEWID',
+ 'NEWSEQUENTIALID',
+ 'ROWCOUNT_BIG',
+ 'XACT_STATE',
+ // TextImage
+ 'TEXTPTR',
+ 'TEXTVALID',
+ // Trigger
+ 'COLUMNS_UPDATED',
+ 'EVENTDATA',
+ 'TRIGGER_NESTLEVEL',
+ 'UPDATE',
+ // ChangeTracking
+ 'CHANGETABLE',
+ 'CHANGE_TRACKING_CONTEXT',
+ 'CHANGE_TRACKING_CURRENT_VERSION',
+ 'CHANGE_TRACKING_IS_COLUMN_IN_MASK',
+ 'CHANGE_TRACKING_MIN_VALID_VERSION',
+ // FullTextSearch
+ 'CONTAINSTABLE',
+ 'FREETEXTTABLE',
+ // SemanticTextSearch
+ 'SEMANTICKEYPHRASETABLE',
+ 'SEMANTICSIMILARITYDETAILSTABLE',
+ 'SEMANTICSIMILARITYTABLE',
+ // FileStream
+ 'FILETABLEROOTPATH',
+ 'GETFILENAMESPACEPATH',
+ 'GETPATHLOCATOR',
+ 'PATHNAME',
+ // ServiceBroker
+ 'GET_TRANSMISSION_STATUS',
+ ],
+ builtinVariables: [
+ // Configuration
+ '@@DATEFIRST',
+ '@@DBTS',
+ '@@LANGID',
+ '@@LANGUAGE',
+ '@@LOCK_TIMEOUT',
+ '@@MAX_CONNECTIONS',
+ '@@MAX_PRECISION',
+ '@@NESTLEVEL',
+ '@@OPTIONS',
+ '@@REMSERVER',
+ '@@SERVERNAME',
+ '@@SERVICENAME',
+ '@@SPID',
+ '@@TEXTSIZE',
+ '@@VERSION',
+ // Cursor
+ '@@CURSOR_ROWS',
+ '@@FETCH_STATUS',
+ // Datetime
+ '@@DATEFIRST',
+ // Metadata
+ '@@PROCID',
+ // System
+ '@@ERROR',
+ '@@IDENTITY',
+ '@@ROWCOUNT',
+ '@@TRANCOUNT',
+ // Stats
+ '@@CONNECTIONS',
+ '@@CPU_BUSY',
+ '@@IDLE',
+ '@@IO_BUSY',
+ '@@PACKET_ERRORS',
+ '@@PACK_RECEIVED',
+ '@@PACK_SENT',
+ '@@TIMETICKS',
+ '@@TOTAL_ERRORS',
+ '@@TOTAL_READ',
+ '@@TOTAL_WRITE',
+ ],
+ pseudoColumns: ['$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'],
+ tokenizer: {
+ root: [
+ { include: '@comments' },
+ { include: '@whitespace' },
+ { include: '@pseudoColumns' },
+ { include: '@numbers' },
+ { include: '@strings' },
+ { include: '@complexIdentifiers' },
+ { include: '@scopes' },
+ [/[;,.]/, 'delimiter'],
+ [/[()]/, '@brackets'],
+ [
+ /[\w@#$]+/,
+ {
+ cases: {
+ '@keywords': 'keyword',
+ '@operators': 'operator',
+ '@builtinVariables': 'predefined',
+ '@builtinFunctions': 'predefined',
+ '@default': 'identifier',
+ },
+ },
+ ],
+ [/[<>=!%&+\-*/|~^]/, 'operator'],
+ ],
+ whitespace: [[/\s+/, 'white']],
+ comments: [
+ [/--+.*/, 'comment'],
+ [/\/\*/, { token: 'comment.quote', next: '@comment' }],
+ ],
+ comment: [
+ [/[^*/]+/, 'comment'],
+ // Not supporting nested comments, as nested comments seem to not be standard?
+ // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic
+ // [/\/\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(
+ [/\*\//, { token: 'comment.quote', next: '@pop' }],
+ [/./, 'comment'],
+ ],
+ pseudoColumns: [
+ [
+ /[$][A-Za-z_][\w@#$]*/,
+ {
+ cases: {
+ '@pseudoColumns': 'predefined',
+ '@default': 'identifier',
+ },
+ },
+ ],
+ ],
+ numbers: [
+ [/0[xX][0-9a-fA-F]*/, 'number'],
+ [/[$][+-]*\d*(\.\d*)?/, 'number'],
+ [/((\d+(\.\d*)?)|(\.\d+))([eE][-+]?\d+)?/, 'number'],
+ ],
+ strings: [
+ [/N'/, { token: 'string', next: '@string' }],
+ [/'/, { token: 'string', next: '@string' }],
+ ],
+ string: [
+ [/[^']+/, 'string'],
+ [/''/, 'string'],
+ [/'/, { token: 'string', next: '@pop' }],
+ ],
+ complexIdentifiers: [
+ [/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
+ [/"/, { token: 'identifier.quote', next: '@quotedIdentifier' }],
+ ],
+ bracketedIdentifier: [
+ [/[^\]]+/, 'identifier'],
+ [/]]/, 'identifier'],
+ [/]/, { token: 'identifier.quote', next: '@pop' }],
+ ],
+ quotedIdentifier: [
+ [/[^"]+/, 'identifier'],
+ [/""/, 'identifier'],
+ [/"/, { token: 'identifier.quote', next: '@pop' }],
+ ],
+ scopes: [
+ [/BEGIN\s+(DISTRIBUTED\s+)?TRAN(SACTION)?\b/i, 'keyword'],
+ [/BEGIN\s+TRY\b/i, { token: 'keyword.try' }],
+ [/END\s+TRY\b/i, { token: 'keyword.try' }],
+ [/BEGIN\s+CATCH\b/i, { token: 'keyword.catch' }],
+ [/END\s+CATCH\b/i, { token: 'keyword.catch' }],
+ [/(BEGIN|CASE)\b/i, { token: 'keyword.block' }],
+ [/END\b/i, { token: 'keyword.block' }],
+ [/WHEN\b/i, { token: 'keyword.choice' }],
+ [/THEN\b/i, { token: 'keyword.choice' }],
+ ],
+ },
+};
+
+export default {
+ config: richLanguageConfiguration,
+ definition: langDefinition,
+ register(monaco) {
+ monaco.languages.register({ id: 'out' });
+ monaco.languages.setLanguageConfiguration(
+ 'out',
+ richLanguageConfiguration,
+ );
+ monaco.languages.setMonarchTokensProvider('out', langDefinition);
+ },
+};
diff --git a/linkis-web-next/src/components/editor/languages/sas.ts b/linkis-web-next/src/components/editor/languages/sas.ts
new file mode 100644
index 0000000000..038f2ea95d
--- /dev/null
+++ b/linkis-web-next/src/components/editor/languages/sas.ts
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import hql from './hql.js';
+import sqlFormatter from '../sqlFormatter/sqlFormatter';
+
+const sasDefinition = {
+ keywords: [
+ '%DO',
+ '%UNTIL',
+ '%TO',
+ '%WHILE',
+ '%END',
+ '%GLOBAL',
+ '%GOTO',
+ '%IF',
+ '%THEN',
+ '%ELSE',
+ '%LABEL',
+ '%LET',
+ '%LOCAL',
+ '%MACRO',
+ '%MEND',
+ ],
+};
+
+export default {
+ register(monaco) {
+ // Inherit and merge hql related keywords(继承和合并hql相关的keyword)
+ const langDefinition = hql.definition;
+ langDefinition.keywords.concat(sasDefinition);
+ monaco.languages.register({ id: 'sas' });
+ monaco.languages.setLanguageConfiguration('sas', hql.config);
+ monaco.languages.setMonarchTokensProvider('sas', langDefinition);
+
+ // handle formatting(处理格式化)
+ monaco.languages.registerDocumentFormattingEditProvider('sas', {
+ provideDocumentFormattingEdits: function(model) {
+ let range = model.getFullModelRange();
+ let value = model.getValue();
+ let newValue = sqlFormatter.format(value);
+ return [
+ {
+ range: range,
+ text: newValue,
+ },
+ ];
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/languages/sh.ts b/linkis-web-next/src/components/editor/languages/sh.ts
new file mode 100644
index 0000000000..823c63c48b
--- /dev/null
+++ b/linkis-web-next/src/components/editor/languages/sh.ts
@@ -0,0 +1,220 @@
+/* eslint-disable quotes */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export const conf = {
+ comments: {
+ lineComment: '#',
+ },
+ brackets: [
+ ['{', '}'],
+ ['[', ']'],
+ ['(', ')'],
+ ],
+ autoClosingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ { open: '`', close: '`' },
+ ],
+ surroundingPairs: [
+ { open: '{', close: '}' },
+ { open: '[', close: ']' },
+ { open: '(', close: ')' },
+ { open: '"', close: '"' },
+ { open: "'", close: "'" },
+ { open: '`', close: '`' },
+ ],
+};
+export const language = {
+ defaultToken: '',
+ ignoreCase: true,
+ tokenPostfix: '.shell',
+ brackets: [
+ { token: 'delimiter.bracket', open: '{', close: '}' },
+ { token: 'delimiter.parenthesis', open: '(', close: ')' },
+ { token: 'delimiter.square', open: '[', close: ']' },
+ ],
+ keywords: [
+ 'if',
+ 'then',
+ 'do',
+ 'else',
+ 'elif',
+ 'while',
+ 'until',
+ 'for',
+ 'in',
+ 'esac',
+ 'fi',
+ 'fin',
+ 'fil',
+ 'done',
+ 'exit',
+ 'set',
+ 'unset',
+ 'export',
+ 'function',
+ ],
+ builtins: [
+ 'ab',
+ 'awk',
+ 'bash',
+ 'beep',
+ 'cat',
+ 'cc',
+ 'cd',
+ 'chown',
+ 'chmod',
+ 'chroot',
+ 'clear',
+ 'cp',
+ 'curl',
+ 'cut',
+ 'diff',
+ 'echo',
+ 'find',
+ 'gawk',
+ 'gcc',
+ 'get',
+ 'git',
+ 'grep',
+ 'hg',
+ 'kill',
+ 'killall',
+ 'ln',
+ 'ls',
+ 'make',
+ 'mkdir',
+ 'openssl',
+ 'mv',
+ 'nc',
+ 'node',
+ 'npm',
+ 'ping',
+ 'ps',
+ 'restart',
+ 'rm',
+ 'rmdir',
+ 'sed',
+ 'service',
+ 'sh',
+ 'shopt',
+ 'shred',
+ 'source',
+ 'sort',
+ 'sleep',
+ 'ssh',
+ 'start',
+ 'stop',
+ 'su',
+ 'sudo',
+ 'svn',
+ 'tee',
+ 'telnet',
+ 'top',
+ 'touch',
+ 'vi',
+ 'vim',
+ 'wall',
+ 'wc',
+ 'wget',
+ 'who',
+ 'write',
+ 'yes',
+ 'zsh',
+ ],
+ // we include these common regular expressions
+ symbols: /[=> {
+ return lang.id === 'hql';
+});
+if (!findLang) {
+ // Register languages(注册languages)
+ hql.register(monaco);
+ log.register(monaco);
+ sas.register(monaco);
+ sh.register(monaco);
+ out.register(monaco);
+ // register theme(注册theme)
+ defaultView.register(monaco);
+ logview.register(monaco);
+
+ // (Register Keyword Prediction)
+ hqlKeyword.register(monaco);
+ pythonKeyword.register(monaco);
+ sasKeyword.register(monaco);
+ shKeyword.register(monaco);
+}
+
+export default monaco;
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/Formatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/Formatter.ts
new file mode 100644
index 0000000000..56c79ae3d7
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/Formatter.ts
@@ -0,0 +1,348 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import trimEnd from 'lodash/trimEnd';
+import tokenTypes from './tokenTypes';
+import Indentation from './Indentation';
+import InlineBlock from './InlineBlock';
+import Params from './Params';
+
+/**
+ *
+ */
+export default class Formatter {
+ /**
+ * @param {Object} cfg
+ * @param {Object} cfg.indent
+ * @param {Object} cfg.params
+ * @param {Tokenizer} tokenizer
+ */
+ constructor(cfg, tokenizer) {
+ this.cfg = cfg || {};
+ this.indentation = new Indentation(this.cfg.indent);
+ this.inlineBlock = new InlineBlock();
+ this.params = new Params(this.cfg.params);
+ this.tokenizer = tokenizer;
+ this.previousReservedWord = {};
+ this.tokens = [];
+ this.index = 0;
+ }
+
+ /**
+ * Formats whitespaces in a SQL string to make it easier to read.
+ *
+ * @param {String} query The SQL query string
+ * @return {String} formatted query
+ */
+ format(query) {
+ this.tokens = this.tokenizer.tokenize(query);
+ const formattedQuery = this.getFormattedQueryFromTokens();
+ return formattedQuery.trim();
+ }
+
+ /**
+ * @return {*}
+ */
+ getFormattedQueryFromTokens() {
+ let formattedQuery = '';
+ this.tokens.forEach((token, index) => {
+ this.index = index;
+ if (token.type === tokenTypes.WHITESPACE) {
+ // ignore (we do our own whitespace formatting)
+ } else if (token.type === tokenTypes.LINE_COMMENT) {
+ formattedQuery = this.formatLineComment(token, formattedQuery);
+ } else if (token.type === tokenTypes.BLOCK_COMMENT) {
+ formattedQuery = this.formatBlockComment(token, formattedQuery);
+ } else if (token.type === tokenTypes.RESERVED_TOPLEVEL) {
+ formattedQuery = this.formatToplevelReservedWord(
+ token,
+ formattedQuery,
+ );
+ this.previousReservedWord = token;
+ } else if (token.type === tokenTypes.RESERVED_NEWLINE) {
+ formattedQuery = this.formatNewlineReservedWord(
+ token,
+ formattedQuery,
+ );
+ this.previousReservedWord = token;
+ } else if (token.type === tokenTypes.RESERVED) {
+ formattedQuery = this.formatWithSpaces(token, formattedQuery);
+ this.previousReservedWord = token;
+ } else if (token.type === tokenTypes.OPEN_PAREN) {
+ formattedQuery = this.formatOpeningParentheses(
+ token,
+ formattedQuery,
+ );
+ } else if (token.type === tokenTypes.CLOSE_PAREN) {
+ formattedQuery = this.formatClosingParentheses(
+ token,
+ formattedQuery,
+ );
+ } else if (token.type === tokenTypes.PLACEHOLDER) {
+ formattedQuery = this.formatPlaceholder(token, formattedQuery);
+ } else if (token.value === ',') {
+ formattedQuery = this.formatComma(token, formattedQuery);
+ } else if (token.value === ':') {
+ formattedQuery = this.formatWithSpaceAfter(
+ token,
+ formattedQuery,
+ );
+ } else if (token.value === '.') {
+ formattedQuery = this.formatWithoutSpaces(
+ token,
+ formattedQuery,
+ );
+ } else if (token.value === ';') {
+ formattedQuery = this.formatQuerySeparator(
+ token,
+ formattedQuery,
+ );
+ } else if (token.value === '$') {
+ formattedQuery = formattedQuery + token.value;
+ } else {
+ formattedQuery = this.formatWithSpaces(token, formattedQuery);
+ }
+ });
+ return formattedQuery;
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatLineComment(token, query) {
+ return this.addNewline(query + token.value);
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatBlockComment(token, query) {
+ return this.addNewline(
+ this.addNewline(query) + this.indentComment(token.value),
+ );
+ }
+
+ /**
+ *
+ * @param {*} comment
+ * @return {*}
+ */
+ indentComment(comment) {
+ return comment.replace(/\n/g, '\n' + this.indentation.getIndent());
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatToplevelReservedWord(token, query) {
+ this.indentation.decreaseTopLevel();
+
+ query = this.addNewline(query);
+
+ this.indentation.increaseToplevel();
+
+ query += this.equalizeWhitespace(token.value);
+ return this.addNewline(query);
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatNewlineReservedWord(token, query) {
+ return (
+ this.addNewline(query) + this.equalizeWhitespace(token.value) + ' '
+ );
+ }
+
+ /**
+ * Replace any sequence of whitespace characters with single space
+ * @param {*} string
+ * @return {*}
+ */
+ equalizeWhitespace(string) {
+ return string.replace(/\s+/g, ' ');
+ }
+
+ /**
+ * Opening parentheses increase the block indent level and start a new line
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatOpeningParentheses(token, query) {
+ // Take out the preceding space unless there was whitespace there in the original query
+ // or another opening parens or line comment
+ const preserveWhitespaceFor = [
+ tokenTypes.WHITESPACE,
+ tokenTypes.OPEN_PAREN,
+ tokenTypes.LINE_COMMENT,
+ ];
+ if (!preserveWhitespaceFor.includes(this.previousToken().type)) {
+ query = trimEnd(query);
+ }
+ query += token.value;
+
+ this.inlineBlock.beginIfPossible(this.tokens, this.index);
+
+ if (!this.inlineBlock.isActive()) {
+ this.indentation.increaseBlockLevel();
+ query = this.addNewline(query);
+ }
+ return query;
+ }
+
+ /**
+ * Closing parentheses decrease the block indent level
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatClosingParentheses(token, query) {
+ if (this.inlineBlock.isActive()) {
+ this.inlineBlock.end();
+ return this.formatWithSpaceAfter(token, query);
+ } else {
+ this.indentation.decreaseBlockLevel();
+ return this.formatWithSpaces(token, this.addNewline(query));
+ }
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatPlaceholder(token, query) {
+ return query + this.params.get(token) + ' ';
+ }
+
+ /**
+ * Commas start a new line (unless within inline parentheses or SQL "LIMIT" clause)
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatComma(token, query) {
+ query = this.trimTrailingWhitespace(query) + token.value + ' ';
+
+ if (this.inlineBlock.isActive()) {
+ return query;
+ } else if (/^LIMIT$/i.test(this.previousReservedWord.value)) {
+ return query;
+ } else {
+ return this.addNewline(query);
+ }
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatWithSpaceAfter(token, query) {
+ return this.trimTrailingWhitespace(query) + token.value + ' ';
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatWithoutSpaces(token, query) {
+ return this.trimTrailingWhitespace(query) + token.value;
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatWithSpaces(token, query) {
+ return query + token.value + ' ';
+ }
+
+ /**
+ *
+ * @param {*} token
+ * @param {*} query
+ * @return {*}
+ */
+ formatQuerySeparator(token, query) {
+ return this.trimTrailingWhitespace(query) + token.value + '\n';
+ }
+
+ /**
+ *
+ * @param {*} query
+ * @return {*}
+ */
+ addNewline(query) {
+ return trimEnd(query) + '\n' + this.indentation.getIndent();
+ }
+
+ /**
+ *
+ * @param {*} query
+ * @return {*}
+ */
+ trimTrailingWhitespace(query) {
+ if (
+ this.previousNonWhitespaceToken().type === tokenTypes.LINE_COMMENT
+ ) {
+ return trimEnd(query) + '\n';
+ } else {
+ return trimEnd(query);
+ }
+ }
+
+ /**
+ *
+ * @return {*}
+ */
+ previousNonWhitespaceToken() {
+ let n = 1;
+ while (this.previousToken(n).type === tokenTypes.WHITESPACE) {
+ n++;
+ }
+ return this.previousToken(n);
+ }
+
+ /**
+ *
+ * @param {*} offset
+ * @return {*}
+ */
+ previousToken(offset = 1) {
+ return this.tokens[this.index - offset] || {};
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/Indentation.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/Indentation.ts
new file mode 100644
index 0000000000..974ad47fc9
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/Indentation.ts
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import repeat from 'lodash/repeat';
+import last from 'lodash/last';
+
+const INDENT_TYPE_TOP_LEVEL = 'top-level';
+const INDENT_TYPE_BLOCK_LEVEL = 'block-level';
+
+/**
+ * Manages indentation levels.
+ *
+ * There are two types of indentation levels:
+ *
+ * - BLOCK_LEVEL : increased by open-parenthesis
+ * - TOP_LEVEL : increased by RESERVED_TOPLEVEL words
+ */
+export default class Indentation {
+ /**
+ * @param {String} indent Indent value, default is " " (2 spaces)
+ */
+ constructor(indent) {
+ this.indent = indent || ' ';
+ this.indentTypes = [];
+ }
+
+ /**
+ * Returns current indentation string.
+ * @return {String}
+ */
+ getIndent() {
+ return repeat(this.indent, this.indentTypes.length);
+ }
+
+ /**
+ * Increases indentation by one top-level indent.
+ */
+ increaseToplevel() {
+ this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);
+ }
+
+ /**
+ * Increases indentation by one block-level indent.
+ */
+ increaseBlockLevel() {
+ this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);
+ }
+
+ /**
+ * Decreases indentation by one top-level indent.
+ * Does nothing when the previous indent is not top-level.
+ */
+ decreaseTopLevel() {
+ if (last(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {
+ this.indentTypes.pop();
+ }
+ }
+
+ /**
+ * Decreases indentation by one block-level indent.
+ * If there are top-level indents within the block-level indent,
+ * throws away these as well.
+ */
+ decreaseBlockLevel() {
+ while (this.indentTypes.length > 0) {
+ const type = this.indentTypes.pop();
+ if (type !== INDENT_TYPE_TOP_LEVEL) {
+ break;
+ }
+ }
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/InlineBlock.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/InlineBlock.ts
new file mode 100644
index 0000000000..f3d6955024
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/InlineBlock.ts
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import tokenTypes from './tokenTypes';
+
+const INLINE_MAX_LENGTH = 50;
+
+/**
+ * Bookkeeper for inline blocks.
+ *
+ * Inline blocks are parenthized expressions that are shorter than INLINE_MAX_LENGTH.
+ * These blocks are formatted on a single line, unlike longer parenthized
+ * expressions where open-parenthesis causes newline and increase of indentation.
+ */
+export default class InlineBlock {
+ /**
+ *
+ */
+ constructor() {
+ this.level = 0;
+ }
+
+ /**
+ * Begins inline block when lookahead through upcoming tokens determines
+ * that the block would be smaller than INLINE_MAX_LENGTH.
+ * @param {Object[]} tokens Array of all tokens
+ * @param {Number} index Current token position
+ */
+ beginIfPossible(tokens, index) {
+ if (this.level === 0 && this.isInlineBlock(tokens, index)) {
+ this.level = 1;
+ } else if (this.level > 0) {
+ this.level++;
+ } else {
+ this.level = 0;
+ }
+ }
+
+ /**
+ * Finishes current inline block.
+ * There might be several nested ones.
+ */
+ end() {
+ this.level--;
+ }
+
+ /**
+ * True when inside an inline block
+ * @return {Boolean}
+ */
+ isActive() {
+ return this.level > 0;
+ }
+
+ /**
+ * Check if this should be an inline parentheses block
+ * Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
+ * @param {*} tokens
+ * @param {*} index
+ * @return {*}
+ */
+ isInlineBlock(tokens, index) {
+ let length = 0;
+ let level = 0;
+
+ for (let i = index; i < tokens.length; i++) {
+ const token = tokens[i];
+ length += token.value.length;
+
+ // Overran max length
+ if (length > INLINE_MAX_LENGTH) {
+ return false;
+ }
+
+ if (token.type === tokenTypes.OPEN_PAREN) {
+ level++;
+ } else if (token.type === tokenTypes.CLOSE_PAREN) {
+ level--;
+ if (level === 0) {
+ return true;
+ }
+ }
+
+ if (this.isForbiddenToken(token)) {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Reserved words that cause newlines, comments and semicolons
+ * are not allowed inside inline parentheses block
+ * @param {*} param0
+ * @return {*}
+ */
+ isForbiddenToken({ type, value }) {
+ return (
+ type === tokenTypes.RESERVED_TOPLEVEL ||
+ type === tokenTypes.RESERVED_NEWLINE ||
+ type === tokenTypes.COMMENT ||
+ type === tokenTypes.BLOCK_COMMENT ||
+ value === ';'
+ );
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/Params.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/Params.ts
new file mode 100644
index 0000000000..ca5b52ab7c
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/Params.ts
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Handles placeholder replacement with given params.
+ */
+export default class Params {
+ /**
+ * @param {Object} params
+ */
+ constructor(params) {
+ this.params = params;
+ this.index = 0;
+ }
+
+ /**
+ * Returns param value that matches given placeholder with param key.
+ * @param {Object} token
+ * @param {String} token.key Placeholder key
+ * @param {String} token.value Placeholder value
+ * @return {String} param or token.value when params are missing
+ */
+ get({ key, value }) {
+ if (!this.params) {
+ return value;
+ }
+ if (key) {
+ return this.params[key];
+ }
+ return this.params[this.index++];
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/Tokenizer.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/Tokenizer.ts
new file mode 100644
index 0000000000..4658a2498d
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/Tokenizer.ts
@@ -0,0 +1,508 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import isEmpty from 'lodash/isEmpty';
+import escapeRegExp from 'lodash/escapeRegExp';
+import tokenTypes from './tokenTypes';
+
+/**
+ *
+ */
+export default class Tokenizer {
+ /**
+ * @param {Object} cfg
+ * @param {String[]} cfg.reservedWords Reserved words in SQL
+ * @param {String[]} cfg.reservedToplevelWords Words that are set to new line separately
+ * @param {String[]} cfg.reservedNewlineWords Words that are set to newline
+ * @param {String[]} cfg.stringTypes String types to enable: "", '', ``, [], N''
+ * @param {String[]} cfg.openParens Opening parentheses to enable, like (, [
+ * @param {String[]} cfg.closeParens Closing parentheses to enable, like ), ]
+ * @param {String[]} cfg.indexedPlaceholderTypes Prefixes for indexed placeholders, like ?
+ * @param {String[]} cfg.namedPlaceholderTypes Prefixes for named placeholders, like @ and :
+ * @param {String[]} cfg.lineCommentTypes Line comments to enable, like # and --
+ * @param {String[]} cfg.specialWordChars Special chars that can be found inside of words, like @ and #
+ */
+ constructor(cfg) {
+ this.WHITESPACE_REGEX = /^(\s+)/;
+ this.NUMBER_REGEX = /^((-\s*)?[0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)\b/;
+ this.OPERATOR_REGEX = /^(!=|<>|==|<=|>=|!<|!>|\|\||::|->>|->|~~\*|~~|!~~\*|!~~|~\*|!~\*|!~|.)/;
+
+ this.BLOCK_COMMENT_REGEX = /^(\/\*[^]*?(?:\*\/|$))/;
+ this.PARAMS_REGEX = cfg.paramsPattern;
+ this.LINE_COMMENT_REGEX = this.createLineCommentRegex(cfg.lineCommentTypes);
+
+ this.RESERVED_TOPLEVEL_REGEX = this.createReservedWordRegex(cfg.reservedToplevelWords);
+ this.RESERVED_NEWLINE_REGEX = this.createReservedWordRegex(cfg.reservedNewlineWords);
+ this.RESERVED_PLAIN_REGEX = this.createReservedWordRegex(cfg.reservedWords);
+
+ this.WORD_REGEX = this.createWordRegex(cfg.specialWordChars);
+ this.STRING_REGEX = this.createStringRegex(cfg.stringTypes);
+
+ this.OPEN_PAREN_REGEX = this.createParenRegex(cfg.openParens);
+ this.CLOSE_PAREN_REGEX = this.createParenRegex(cfg.closeParens);
+
+ this.INDEXED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.indexedPlaceholderTypes, '[0-9]*');
+ this.IDENT_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.namedPlaceholderTypes, '[a-zA-Z0-9._$]+');
+ this.STRING_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(
+ cfg.namedPlaceholderTypes,
+ this.createStringPattern(cfg.stringTypes)
+ );
+ }
+
+ /**
+ *
+ * @param {*} lineCommentTypes
+ * @return {*}
+ */
+ createLineCommentRegex(lineCommentTypes) {
+ return new RegExp(`^((?:${lineCommentTypes.map((c) => escapeRegExp(c)).join('|')}).*?(?:\n|\r\n|$))`);
+ }
+
+ /**
+ *
+ * @param {*} reservedWords
+ * @return {*}
+ */
+ createReservedWordRegex(reservedWords) {
+ const reservedWordsPattern = reservedWords.join('|').replace(/ /g, '\\s+');
+ return new RegExp(`^(${reservedWordsPattern})\\b`, 'i');
+ }
+
+ /**
+ *
+ * @param {*} specialChars
+ * @return {*}
+ */
+ createWordRegex(specialChars = []) {
+ return new RegExp(`^([\\w${specialChars.join('')}]+)`);
+ }
+
+ /**
+ *
+ * @param {*} stringTypes
+ * @return {*}
+ */
+ createStringRegex(stringTypes) {
+ return new RegExp(
+ '^(' + this.createStringPattern(stringTypes) + ')'
+ );
+ }
+
+ /**
+ * This enables the following string patterns:
+ * 1.backtick quoted string using `` to escape
+ * 2.square bracket quoted string (SQL Server) using ]] to escape
+ * 3.double quoted string using "" or \" to escape
+ * 4.single quoted string using '' or \' to escape
+ * 5.national character quoted string using N'' or N\' to escape
+ * @param {*} stringTypes
+ * @return {*}
+ */
+ createStringPattern(stringTypes) {
+ const patterns = {
+ '``': '((`[^`]*($|`))+)',
+ '[]': '((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)',
+ '""': '(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
+ '\'\'': '((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*(\'|$))+)',
+ 'N\'\'': '((N\'[^N\'\\\\]*(?:\\\\.[^N\'\\\\]*)*(\'|$))+)',
+ };
+
+ return stringTypes.map((t) => patterns[t]).join('|');
+ }
+
+ /**
+ *
+ * @param {*} parens
+ * @return {*}
+ */
+ createParenRegex(parens) {
+ return new RegExp(
+ '^(' + parens.map((p) => this.escapeParen(p)).join('|') + ')',
+ 'i'
+ );
+ }
+
+ /**
+ *
+ * @param {*} paren
+ * @return {*}
+ */
+ escapeParen(paren) {
+ if (paren.length === 1) {
+ // A single punctuation character
+ return escapeRegExp(paren);
+ } else {
+ // longer word
+ return '\\b' + paren + '\\b';
+ }
+ }
+
+ /**
+ *
+ * @param {*} types
+ * @param {*} pattern
+ * @return {*}
+ */
+ createPlaceholderRegex(types, pattern) {
+ if (isEmpty(types)) {
+ return false;
+ }
+ const typesRegex = types.map(escapeRegExp).join('|');
+
+ return new RegExp(`^((?:${typesRegex})(?:${pattern}))`);
+ }
+
+ /**
+ * Takes a SQL string and breaks it into tokens.
+ * Each token is an object with type and value.
+ *
+ * @param {String} input The SQL string
+ * @return {Object[]} tokens An array of tokens.
+ * @return {String} token.type
+ * @return {String} token.value
+ */
+ tokenize(input) {
+ const tokens = [];
+ let token;
+
+ // Keep processing the string until it is empty
+ while (input.length) {
+ // Get the next token and the token type
+ token = this.getNextToken(input, token);
+ // Advance the string
+ input = input.substring(token.value.length);
+
+ tokens.push(token);
+ }
+ return tokens;
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @param {*} previousToken
+ * @return {*}
+ */
+ getNextToken(input, previousToken) {
+ return this.getWhitespaceToken(input) ||
+ this.getCommentToken(input) ||
+ this.getStringToken(input) ||
+ this.getOpenParenToken(input) ||
+ this.getCloseParenToken(input) ||
+ this.getParamsToken(input) ||
+ this.getPlaceholderToken(input) ||
+ this.getNumberToken(input) ||
+ this.getReservedWordToken(input, previousToken) ||
+ this.getWordToken(input) ||
+ this.getOperatorToken(input);
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getWhitespaceToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.WHITESPACE,
+ regex: this.WHITESPACE_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getCommentToken(input) {
+ return this.getLineCommentToken(input) || this.getBlockCommentToken(input);
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getLineCommentToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.LINE_COMMENT,
+ regex: this.LINE_COMMENT_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getBlockCommentToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.BLOCK_COMMENT,
+ regex: this.BLOCK_COMMENT_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getStringToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.STRING,
+ regex: this.STRING_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getOpenParenToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.OPEN_PAREN,
+ regex: this.OPEN_PAREN_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getCloseParenToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.CLOSE_PAREN,
+ regex: this.CLOSE_PAREN_REGEX,
+ });
+ }
+
+ getParamsToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.WORD,
+ regex: this.PARAMS_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getPlaceholderToken(input) {
+ return this.getIdentNamedPlaceholderToken(input) ||
+ this.getStringNamedPlaceholderToken(input) ||
+ this.getIndexedPlaceholderToken(input);
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getIdentNamedPlaceholderToken(input) {
+ return this.getPlaceholderTokenWithKey({
+ input,
+ regex: this.IDENT_NAMED_PLACEHOLDER_REGEX,
+ parseKey: (v) => v.slice(1),
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getStringNamedPlaceholderToken(input) {
+ return this.getPlaceholderTokenWithKey({
+ input,
+ regex: this.STRING_NAMED_PLACEHOLDER_REGEX,
+ parseKey: (v) => this.getEscapedPlaceholderKey({
+ key: v.slice(2, -1),
+ quoteChar: v.slice(-1)
+ }),
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getIndexedPlaceholderToken(input) {
+ return this.getPlaceholderTokenWithKey({
+ input,
+ regex: this.INDEXED_PLACEHOLDER_REGEX,
+ parseKey: (v) => v.slice(1),
+ });
+ }
+
+ /**
+ *
+ * @param {*} param0
+ * @return {*}
+ */
+ getPlaceholderTokenWithKey({
+ input,
+ regex,
+ parseKey
+ }) {
+ const token = this.getTokenOnFirstMatch({
+ input,
+ regex,
+ type: tokenTypes.PLACEHOLDER
+ });
+ if (token) {
+ token.key = parseKey(token.value);
+ }
+ return token;
+ }
+
+ /**
+ *
+ * @param {*} param0
+ * @return {*}
+ */
+ getEscapedPlaceholderKey({
+ key,
+ quoteChar
+ }) {
+ return key.replace(new RegExp(escapeRegExp('\\') + quoteChar, 'g'), quoteChar);
+ }
+
+ /**
+ * Decimal, binary, or hex numbers
+ * @param {*} input
+ * @return {*}
+ */
+ getNumberToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.NUMBER,
+ regex: this.NUMBER_REGEX,
+ });
+ }
+
+ /**
+ * Punctuation and symbols
+ * @param {*} input
+ * @return {*}
+ */
+ getOperatorToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.OPERATOR,
+ regex: this.OPERATOR_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @param {*} previousToken
+ * @return {*}
+ */
+ getReservedWordToken(input, previousToken) {
+ // A reserved word cannot be preceded by a "."
+ // this makes it so in "mytable.from", "from" is not considered a reserved word
+ if (previousToken && previousToken.value && previousToken.value === '.') {
+ return;
+ }
+ return this.getToplevelReservedToken(input) || this.getNewlineReservedToken(input) || this.getPlainReservedToken(input);
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getToplevelReservedToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.RESERVED_TOPLEVEL,
+ regex: this.RESERVED_TOPLEVEL_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getNewlineReservedToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.RESERVED_NEWLINE,
+ regex: this.RESERVED_NEWLINE_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getPlainReservedToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.RESERVED,
+ regex: this.RESERVED_PLAIN_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} input
+ * @return {*}
+ */
+ getWordToken(input) {
+ return this.getTokenOnFirstMatch({
+ input,
+ type: tokenTypes.WORD,
+ regex: this.WORD_REGEX,
+ });
+ }
+
+ /**
+ *
+ * @param {*} param0
+ * @return {*}
+ */
+ getTokenOnFirstMatch({
+ input,
+ type,
+ regex
+ }) {
+ const matches = input.match(regex);
+
+ if (matches) {
+ return {
+ type,
+ value: matches[1]
+ };
+ }
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/core/tokenTypes.ts b/linkis-web-next/src/components/editor/sqlFormatter/core/tokenTypes.ts
new file mode 100644
index 0000000000..d4ce6c4b81
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/core/tokenTypes.ts
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Constants for token types
+ */
+export default {
+ WHITESPACE: 'whitespace',
+ WORD: 'word',
+ STRING: 'string',
+ RESERVED: 'reserved',
+ RESERVED_TOPLEVEL: 'reserved-toplevel',
+ RESERVED_NEWLINE: 'reserved-newline',
+ OPERATOR: 'operator',
+ OPEN_PAREN: 'open-paren',
+ CLOSE_PAREN: 'close-paren',
+ LINE_COMMENT: 'line-comment',
+ BLOCK_COMMENT: 'block-comment',
+ NUMBER: 'number',
+ PLACEHOLDER: 'placeholder',
+};
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/languages/Db2Formatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/languages/Db2Formatter.ts
new file mode 100644
index 0000000000..199647b905
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/languages/Db2Formatter.ts
@@ -0,0 +1,601 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Formatter from '../core/Formatter';
+import Tokenizer from '../core/Tokenizer';
+
+const reservedWords = [
+ 'ABS',
+ 'ACTIVATE',
+ 'ALIAS',
+ 'ALL',
+ 'ALLOCATE',
+ 'ALLOW',
+ 'ALTER',
+ 'ANY',
+ 'ARE',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASENSITIVE',
+ 'ASSOCIATE',
+ 'ASUTIME',
+ 'ASYMMETRIC',
+ 'AT',
+ 'ATOMIC',
+ 'ATTRIBUTES',
+ 'AUDIT',
+ 'AUTHORIZATION',
+ 'AUX',
+ 'AUXILIARY',
+ 'AVG',
+ 'BEFORE',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BIGINT',
+ 'BINARY',
+ 'BLOB',
+ 'BOOLEAN',
+ 'BOTH',
+ 'BUFFERPOOL',
+ 'BY',
+ 'CACHE',
+ 'CALL',
+ 'CALLED',
+ 'CAPTURE',
+ 'CARDINALITY',
+ 'CASCADED',
+ 'CASE',
+ 'CAST',
+ 'CCSID',
+ 'CEIL',
+ 'CEILING',
+ 'CHAR',
+ 'CHARACTER',
+ 'CHARACTER_LENGTH',
+ 'CHAR_LENGTH',
+ 'CHECK',
+ 'CLOB',
+ 'CLONE',
+ 'CLOSE',
+ 'CLUSTER',
+ 'COALESCE',
+ 'COLLATE',
+ 'COLLECT',
+ 'COLLECTION',
+ 'COLLID',
+ 'COLUMN',
+ 'COMMENT',
+ 'COMMIT',
+ 'CONCAT',
+ 'CONDITION',
+ 'CONNECT',
+ 'CONNECTION',
+ 'CONSTRAINT',
+ 'CONTAINS',
+ 'CONTINUE',
+ 'CONVERT',
+ 'CORR',
+ 'CORRESPONDING',
+ 'COUNT',
+ 'COUNT_BIG',
+ 'COVAR_POP',
+ 'COVAR_SAMP',
+ 'CREATE',
+ 'CROSS',
+ 'CUBE',
+ 'CUME_DIST',
+ 'CURRENT',
+ 'CURRENT_DATE',
+ 'CURRENT_DEFAULT_TRANSFORM_GROUP',
+ 'CURRENT_LC_CTYPE',
+ 'CURRENT_PATH',
+ 'CURRENT_ROLE',
+ 'CURRENT_SCHEMA',
+ 'CURRENT_SERVER',
+ 'CURRENT_TIME',
+ 'CURRENT_TIMESTAMP',
+ 'CURRENT_TIMEZONE',
+ 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',
+ 'CURRENT_USER',
+ 'CURSOR',
+ 'CYCLE',
+ 'DATA',
+ 'DATABASE',
+ 'DATAPARTITIONNAME',
+ 'DATAPARTITIONNUM',
+ 'DATE',
+ 'DAY',
+ 'DAYS',
+ 'DB2GENERAL',
+ 'DB2GENRL',
+ 'DB2SQL',
+ 'DBINFO',
+ 'DBPARTITIONNAME',
+ 'DBPARTITIONNUM',
+ 'DEALLOCATE',
+ 'DEC',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DEFAULT',
+ 'DEFAULTS',
+ 'DEFINITION',
+ 'DELETE',
+ 'DENSERANK',
+ 'DENSE_RANK',
+ 'DEREF',
+ 'DESCRIBE',
+ 'DESCRIPTOR',
+ 'DETERMINISTIC',
+ 'DIAGNOSTICS',
+ 'DISABLE',
+ 'DISALLOW',
+ 'DISCONNECT',
+ 'DISTINCT',
+ 'DO',
+ 'DOCUMENT',
+ 'DOUBLE',
+ 'DROP',
+ 'DSSIZE',
+ 'DYNAMIC',
+ 'EACH',
+ 'EDITPROC',
+ 'ELEMENT',
+ 'ELSE',
+ 'ELSEIF',
+ 'ENABLE',
+ 'ENCODING',
+ 'ENCRYPTION',
+ 'END',
+ 'END-EXEC',
+ 'ENDING',
+ 'ERASE',
+ 'ESCAPE',
+ 'EVERY',
+ 'EXCEPTION',
+ 'EXCLUDING',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXIT',
+ 'EXP',
+ 'EXPLAIN',
+ 'EXTENDED',
+ 'EXTERNAL',
+ 'EXTRACT',
+ 'FALSE',
+ 'FENCED',
+ 'FETCH',
+ 'FIELDPROC',
+ 'FILE',
+ 'FILTER',
+ 'FINAL',
+ 'FIRST',
+ 'FLOAT',
+ 'FLOOR',
+ 'FOR',
+ 'FOREIGN',
+ 'FREE',
+ 'FULL',
+ 'FUNCTION',
+ 'FUSION',
+ 'GENERAL',
+ 'GENERATED',
+ 'GET',
+ 'GLOBAL',
+ 'GOTO',
+ 'GRANT',
+ 'GRAPHIC',
+ 'GROUP',
+ 'GROUPING',
+ 'HANDLER',
+ 'HASH',
+ 'HASHED_VALUE',
+ 'HINT',
+ 'HOLD',
+ 'HOUR',
+ 'HOURS',
+ 'IDENTITY',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCLUDING',
+ 'INCLUSIVE',
+ 'INCREMENT',
+ 'INDEX',
+ 'INDICATOR',
+ 'INDICATORS',
+ 'INF',
+ 'INFINITY',
+ 'INHERIT',
+ 'INNER',
+ 'INOUT',
+ 'INSENSITIVE',
+ 'INSERT',
+ 'INT',
+ 'INTEGER',
+ 'INTEGRITY',
+ 'INTERSECTION',
+ 'INTERVAL',
+ 'INTO',
+ 'IS',
+ 'ISOBID',
+ 'ISOLATION',
+ 'ITERATE',
+ 'JAR',
+ 'JAVA',
+ 'KEEP',
+ 'KEY',
+ 'LABEL',
+ 'LANGUAGE',
+ 'LARGE',
+ 'LATERAL',
+ 'LC_CTYPE',
+ 'LEADING',
+ 'LEAVE',
+ 'LEFT',
+ 'LIKE',
+ 'LINKTYPE',
+ 'LN',
+ 'LOCAL',
+ 'LOCALDATE',
+ 'LOCALE',
+ 'LOCALTIME',
+ 'LOCALTIMESTAMP',
+ 'LOCATOR',
+ 'LOCATORS',
+ 'LOCK',
+ 'LOCKMAX',
+ 'LOCKSIZE',
+ 'LONG',
+ 'LOOP',
+ 'LOWER',
+ 'MAINTAINED',
+ 'MATCH',
+ 'MATERIALIZED',
+ 'MAX',
+ 'MAXVALUE',
+ 'MEMBER',
+ 'MERGE',
+ 'METHOD',
+ 'MICROSECOND',
+ 'MICROSECONDS',
+ 'MIN',
+ 'MINUTE',
+ 'MINUTES',
+ 'MINVALUE',
+ 'MOD',
+ 'MODE',
+ 'MODIFIES',
+ 'MODULE',
+ 'MONTH',
+ 'MONTHS',
+ 'MULTISET',
+ 'NAN',
+ 'NATIONAL',
+ 'NATURAL',
+ 'NCHAR',
+ 'NCLOB',
+ 'NEW',
+ 'NEW_TABLE',
+ 'NEXTVAL',
+ 'NO',
+ 'NOCACHE',
+ 'NOCYCLE',
+ 'NODENAME',
+ 'NODENUMBER',
+ 'NOMAXVALUE',
+ 'NOMINVALUE',
+ 'NONE',
+ 'NOORDER',
+ 'NORMALIZE',
+ 'NORMALIZED',
+ 'NOT',
+ 'NULL',
+ 'NULLIF',
+ 'NULLS',
+ 'NUMERIC',
+ 'NUMPARTS',
+ 'OBID',
+ 'OCTET_LENGTH',
+ 'OF',
+ 'OFFSET',
+ 'OLD',
+ 'OLD_TABLE',
+ 'ON',
+ 'ONLY',
+ 'OPEN',
+ 'OPTIMIZATION',
+ 'OPTIMIZE',
+ 'OPTION',
+ 'ORDER',
+ 'OUT',
+ 'OUTER',
+ 'OVER',
+ 'OVERLAPS',
+ 'OVERLAY',
+ 'OVERRIDING',
+ 'PACKAGE',
+ 'PADDED',
+ 'PAGESIZE',
+ 'PARAMETER',
+ 'PART',
+ 'PARTITION',
+ 'PARTITIONED',
+ 'PARTITIONING',
+ 'PARTITIONS',
+ 'PASSWORD',
+ 'PATH',
+ 'PERCENTILE_CONT',
+ 'PERCENTILE_DISC',
+ 'PERCENT_RANK',
+ 'PIECESIZE',
+ 'PLAN',
+ 'POSITION',
+ 'POWER',
+ 'PRECISION',
+ 'PREPARE',
+ 'PREVVAL',
+ 'PRIMARY',
+ 'PRIQTY',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROGRAM',
+ 'PSID',
+ 'PUBLIC',
+ 'QUERY',
+ 'QUERYNO',
+ 'RANGE',
+ 'RANK',
+ 'READ',
+ 'READS',
+ 'REAL',
+ 'RECOVERY',
+ 'RECURSIVE',
+ 'REF',
+ 'REFERENCES',
+ 'REFERENCING',
+ 'REFRESH',
+ 'REGR_AVGX',
+ 'REGR_AVGY',
+ 'REGR_COUNT',
+ 'REGR_INTERCEPT',
+ 'REGR_R2',
+ 'REGR_SLOPE',
+ 'REGR_SXX',
+ 'REGR_SXY',
+ 'REGR_SYY',
+ 'RELEASE',
+ 'RENAME',
+ 'REPEAT',
+ 'RESET',
+ 'RESIGNAL',
+ 'RESTART',
+ 'RESTRICT',
+ 'RESULT',
+ 'RESULT_SET_LOCATOR',
+ 'RETURN',
+ 'RETURNS',
+ 'REVOKE',
+ 'RIGHT',
+ 'ROLE',
+ 'ROLLBACK',
+ 'ROLLUP',
+ 'ROUND_CEILING',
+ 'ROUND_DOWN',
+ 'ROUND_FLOOR',
+ 'ROUND_HALF_DOWN',
+ 'ROUND_HALF_EVEN',
+ 'ROUND_HALF_UP',
+ 'ROUND_UP',
+ 'ROUTINE',
+ 'ROW',
+ 'ROWNUMBER',
+ 'ROWS',
+ 'ROWSET',
+ 'ROW_NUMBER',
+ 'RRN',
+ 'RUN',
+ 'SAVEPOINT',
+ 'SCHEMA',
+ 'SCOPE',
+ 'SCRATCHPAD',
+ 'SCROLL',
+ 'SEARCH',
+ 'SECOND',
+ 'SECONDS',
+ 'SECQTY',
+ 'SECURITY',
+ 'SENSITIVE',
+ 'SEQUENCE',
+ 'SESSION',
+ 'SESSION_USER',
+ 'SIGNAL',
+ 'SIMILAR',
+ 'SIMPLE',
+ 'SMALLINT',
+ 'SNAN',
+ 'SOME',
+ 'SOURCE',
+ 'SPECIFIC',
+ 'SPECIFICTYPE',
+ 'SQL',
+ 'SQLEXCEPTION',
+ 'SQLID',
+ 'SQLSTATE',
+ 'SQLWARNING',
+ 'SQRT',
+ 'STACKED',
+ 'STANDARD',
+ 'START',
+ 'STARTING',
+ 'STATEMENT',
+ 'STATIC',
+ 'STATMENT',
+ 'STAY',
+ 'STDDEV_POP',
+ 'STDDEV_SAMP',
+ 'STOGROUP',
+ 'STORES',
+ 'STYLE',
+ 'SUBMULTISET',
+ 'SUBSTRING',
+ 'SUM',
+ 'SUMMARY',
+ 'SYMMETRIC',
+ 'SYNONYM',
+ 'SYSFUN',
+ 'SYSIBM',
+ 'SYSPROC',
+ 'SYSTEM',
+ 'SYSTEM_USER',
+ 'TABLE',
+ 'TABLESAMPLE',
+ 'TABLESPACE',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TO',
+ 'TRAILING',
+ 'TRANSACTION',
+ 'TRANSLATE',
+ 'TRANSLATION',
+ 'TREAT',
+ 'TRIGGER',
+ 'TRIM',
+ 'TRUE',
+ 'TRUNCATE',
+ 'TYPE',
+ 'UESCAPE',
+ 'UNDO',
+ 'UNIQUE',
+ 'UNKNOWN',
+ 'UNNEST',
+ 'UNTIL',
+ 'UPPER',
+ 'USAGE',
+ 'USER',
+ 'USING',
+ 'VALIDPROC',
+ 'VALUE',
+ 'VARCHAR',
+ 'VARIABLE',
+ 'VARIANT',
+ 'VARYING',
+ 'VAR_POP',
+ 'VAR_SAMP',
+ 'VCAT',
+ 'VERSION',
+ 'VIEW',
+ 'VOLATILE',
+ 'VOLUMES',
+ 'WHEN',
+ 'WHENEVER',
+ 'WHILE',
+ 'WIDTH_BUCKET',
+ 'WINDOW',
+ 'WITH',
+ 'WITHIN',
+ 'WITHOUT',
+ 'WLM',
+ 'WRITE',
+ 'XMLELEMENT',
+ 'XMLEXISTS',
+ 'XMLNAMESPACES',
+ 'YEAR',
+ 'YEARS',
+];
+
+const reservedToplevelWords = [
+ 'ADD',
+ 'AFTER',
+ 'ALTER COLUMN',
+ 'ALTER TABLE',
+ 'DELETE FROM',
+ 'EXCEPT',
+ 'FETCH FIRST',
+ 'FROM',
+ 'GROUP BY',
+ 'GO',
+ 'HAVING',
+ 'INSERT INTO',
+ 'INTERSECT',
+ 'LIMIT',
+ 'ORDER BY',
+ 'SELECT',
+ 'SET CURRENT SCHEMA',
+ 'SET SCHEMA',
+ 'SET',
+ 'UNION ALL',
+ 'UPDATE',
+ 'VALUES',
+ 'WHERE',
+];
+
+const reservedNewlineWords = [
+ 'AND',
+ 'CROSS JOIN',
+ 'INNER JOIN',
+ 'JOIN',
+ 'LEFT JOIN',
+ 'LEFT OUTER JOIN',
+ 'OR',
+ 'OUTER JOIN',
+ 'RIGHT JOIN',
+ 'RIGHT OUTER JOIN',
+];
+
+let tokenizer: Tokenizer;
+
+/**
+ *
+ */
+export default class Db2Formatter {
+ /**
+ * @param {Object} cfg Different set of configurations
+ */
+ constructor(cfg: any) {
+ this.cfg = cfg;
+ }
+
+ /**
+ * Formats DB2 query to make it easier to read
+ *
+ * @param {String} query The DB2 query string
+ * @return {String} formatted string
+ */
+ format(query: any) {
+ if (!tokenizer) {
+ tokenizer = new Tokenizer({
+ reservedWords,
+ reservedToplevelWords,
+ reservedNewlineWords,
+ stringTypes: [`""`, "''", '``', '[]'],
+ openParens: ['('],
+ closeParens: [')'],
+ indexedPlaceholderTypes: ['?'],
+ namedPlaceholderTypes: [':'],
+ lineCommentTypes: ['--'],
+ specialWordChars: ['#', '@'],
+ });
+ }
+ return new Formatter(this.cfg, tokenizer).format(query);
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/languages/N1qlFormatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/languages/N1qlFormatter.ts
new file mode 100644
index 0000000000..4b926779b8
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/languages/N1qlFormatter.ts
@@ -0,0 +1,276 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Formatter from '../core/Formatter';
+import Tokenizer from '../core/Tokenizer';
+
+const reservedWords = [
+ 'ALL',
+ 'ALTER',
+ 'ANALYZE',
+ 'AND',
+ 'ANY',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BINARY',
+ 'BOOLEAN',
+ 'BREAK',
+ 'BUCKET',
+ 'BUILD',
+ 'BY',
+ 'CALL',
+ 'CASE',
+ 'CAST',
+ 'CLUSTER',
+ 'COLLATE',
+ 'COLLECTION',
+ 'COMMIT',
+ 'CONNECT',
+ 'CONTINUE',
+ 'CORRELATE',
+ 'COVER',
+ 'CREATE',
+ 'DATABASE',
+ 'DATASET',
+ 'DATASTORE',
+ 'DECLARE',
+ 'DECREMENT',
+ 'DELETE',
+ 'DERIVED',
+ 'DESC',
+ 'DESCRIBE',
+ 'DISTINCT',
+ 'DO',
+ 'DROP',
+ 'EACH',
+ 'ELEMENT',
+ 'ELSE',
+ 'END',
+ 'EVERY',
+ 'EXCEPT',
+ 'EXCLUDE',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXPLAIN',
+ 'FALSE',
+ 'FETCH',
+ 'FIRST',
+ 'FLATTEN',
+ 'FOR',
+ 'FORCE',
+ 'FROM',
+ 'FUNCTION',
+ 'GRANT',
+ 'GROUP',
+ 'GSI',
+ 'HAVING',
+ 'IF',
+ 'IGNORE',
+ 'ILIKE',
+ 'IN',
+ 'INCLUDE',
+ 'INCREMENT',
+ 'INDEX',
+ 'INFER',
+ 'INLINE',
+ 'INNER',
+ 'INSERT',
+ 'INTERSECT',
+ 'INTO',
+ 'IS',
+ 'JOIN',
+ 'KEY',
+ 'KEYS',
+ 'KEYSPACE',
+ 'KNOWN',
+ 'LAST',
+ 'LEFT',
+ 'LET',
+ 'LETTING',
+ 'LIKE',
+ 'LIMIT',
+ 'LSM',
+ 'MAP',
+ 'MAPPING',
+ 'MATCHED',
+ 'MATERIALIZED',
+ 'MERGE',
+ 'MINUS',
+ 'MISSING',
+ 'NAMESPACE',
+ 'NEST',
+ 'NOT',
+ 'NULL',
+ 'NUMBER',
+ 'OBJECT',
+ 'OFFSET',
+ 'ON',
+ 'OPTION',
+ 'OR',
+ 'ORDER',
+ 'OUTER',
+ 'OVER',
+ 'PARSE',
+ 'PARTITION',
+ 'PASSWORD',
+ 'PATH',
+ 'POOL',
+ 'PREPARE',
+ 'PRIMARY',
+ 'PRIVATE',
+ 'PRIVILEGE',
+ 'PROCEDURE',
+ 'PUBLIC',
+ 'RAW',
+ 'REALM',
+ 'REDUCE',
+ 'RENAME',
+ 'RETURN',
+ 'RETURNING',
+ 'REVOKE',
+ 'RIGHT',
+ 'ROLE',
+ 'ROLLBACK',
+ 'SATISFIES',
+ 'SCHEMA',
+ 'SELECT',
+ 'SELF',
+ 'SEMI',
+ 'SET',
+ 'SHOW',
+ 'SOME',
+ 'START',
+ 'STATISTICS',
+ 'STRING',
+ 'SYSTEM',
+ 'THEN',
+ 'TO',
+ 'TRANSACTION',
+ 'TRIGGER',
+ 'TRUE',
+ 'TRUNCATE',
+ 'UNDER',
+ 'UNION',
+ 'UNIQUE',
+ 'UNKNOWN',
+ 'UNNEST',
+ 'UNSET',
+ 'UPDATE',
+ 'UPSERT',
+ 'USE',
+ 'USER',
+ 'USING',
+ 'VALIDATE',
+ 'VALUE',
+ 'VALUED',
+ 'VALUES',
+ 'VIA',
+ 'VIEW',
+ 'WHEN',
+ 'WHERE',
+ 'WHILE',
+ 'WITH',
+ 'WITHIN',
+ 'WORK',
+ 'XOR',
+];
+
+const reservedToplevelWords = [
+ 'DELETE FROM',
+ 'EXCEPT ALL',
+ 'EXCEPT',
+ 'EXPLAIN DELETE FROM',
+ 'EXPLAIN UPDATE',
+ 'EXPLAIN UPSERT',
+ 'FROM',
+ 'GROUP BY',
+ 'HAVING',
+ 'INFER',
+ 'INSERT INTO',
+ 'INTERSECT ALL',
+ 'INTERSECT',
+ 'LET',
+ 'LIMIT',
+ 'MERGE',
+ 'NEST',
+ 'ORDER BY',
+ 'PREPARE',
+ 'SELECT',
+ 'SET CURRENT SCHEMA',
+ 'SET SCHEMA',
+ 'SET',
+ 'UNION ALL',
+ 'UNION',
+ 'UNNEST',
+ 'UPDATE',
+ 'UPSERT',
+ 'USE KEYS',
+ 'VALUES',
+ 'WHERE',
+];
+
+const reservedNewlineWords = [
+ 'AND',
+ 'INNER JOIN',
+ 'JOIN',
+ 'LEFT JOIN',
+ 'LEFT OUTER JOIN',
+ 'OR',
+ 'OUTER JOIN',
+ 'RIGHT JOIN',
+ 'RIGHT OUTER JOIN',
+ 'XOR',
+];
+
+let tokenizer;
+
+/**
+ *
+ */
+export default class N1qlFormatter {
+ /**
+ * @param {Object} cfg Different set of configurations
+ */
+ constructor(cfg) {
+ this.cfg = cfg;
+ }
+
+ /**
+ * Format the whitespace in a N1QL string to make it easier to read
+ *
+ * @param {String} query The N1QL string
+ * @return {String} formatted string
+ */
+ format(query) {
+ if (!tokenizer) {
+ tokenizer = new Tokenizer({
+ reservedWords,
+ reservedToplevelWords,
+ reservedNewlineWords,
+ stringTypes: [`""`, "''", '``'],
+ openParens: ['(', '[', '{'],
+ closeParens: [')', ']', '}'],
+ namedPlaceholderTypes: ['$'],
+ lineCommentTypes: ['#', '--'],
+ });
+ }
+ return new Formatter(this.cfg, tokenizer).format(query);
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/languages/PlSqlFormatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/languages/PlSqlFormatter.ts
new file mode 100644
index 0000000000..5f44d6c698
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/languages/PlSqlFormatter.ts
@@ -0,0 +1,463 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Formatter from '../core/Formatter';
+import Tokenizer from '../core/Tokenizer';
+
+const reservedWords = [
+ 'A',
+ 'ACCESSIBLE',
+ 'AGENT',
+ 'AGGREGATE',
+ 'ALL',
+ 'ALTER',
+ 'ANY',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'AT',
+ 'ATTRIBUTE',
+ 'AUTHID',
+ 'AVG',
+ 'BETWEEN',
+ 'BFILE_BASE',
+ 'BINARY_INTEGER',
+ 'BINARY',
+ 'BLOB_BASE',
+ 'BLOCK',
+ 'BODY',
+ 'BOOLEAN',
+ 'BOTH',
+ 'BOUND',
+ 'BULK',
+ 'BY',
+ 'BYTE',
+ 'C',
+ 'CALL',
+ 'CALLING',
+ 'CASCADE',
+ 'CASE',
+ 'CHAR_BASE',
+ 'CHAR',
+ 'CHARACTER',
+ 'CHARSET',
+ 'CHARSETFORM',
+ 'CHARSETID',
+ 'CHECK',
+ 'CLOB_BASE',
+ 'CLONE',
+ 'CLOSE',
+ 'CLUSTER',
+ 'CLUSTERS',
+ 'COALESCE',
+ 'COLAUTH',
+ 'COLLECT',
+ 'COLUMNS',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMMITTED',
+ 'COMPILED',
+ 'COMPRESS',
+ 'CONNECT',
+ 'CONSTANT',
+ 'CONSTRUCTOR',
+ 'CONTEXT',
+ 'CONTINUE',
+ 'CONVERT',
+ 'COUNT',
+ 'CRASH',
+ 'CREATE',
+ 'CREDENTIAL',
+ 'CURRENT',
+ 'CURRVAL',
+ 'CURSOR',
+ 'CUSTOMDATUM',
+ 'DANGLING',
+ 'DATA',
+ 'DATE_BASE',
+ 'DATE',
+ 'DAY',
+ 'DECIMAL',
+ 'DEFAULT',
+ 'DEFINE',
+ 'DELETE',
+ 'DESC',
+ 'DETERMINISTIC',
+ 'DIRECTORY',
+ 'DISTINCT',
+ 'DO',
+ 'DOUBLE',
+ 'DROP',
+ 'DURATION',
+ 'ELEMENT',
+ 'ELSIF',
+ 'EMPTY',
+ 'ESCAPE',
+ 'EXCEPTIONS',
+ 'EXCLUSIVE',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXIT',
+ 'EXTENDS',
+ 'EXTERNAL',
+ 'EXTRACT',
+ 'FALSE',
+ 'FETCH',
+ 'FINAL',
+ 'FIRST',
+ 'FIXED',
+ 'FLOAT',
+ 'FOR',
+ 'FORALL',
+ 'FORCE',
+ 'FROM',
+ 'FUNCTION',
+ 'GENERAL',
+ 'GOTO',
+ 'GRANT',
+ 'GROUP',
+ 'HASH',
+ 'HEAP',
+ 'HIDDEN',
+ 'HOUR',
+ 'IDENTIFIED',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCLUDING',
+ 'INDEX',
+ 'INDEXES',
+ 'INDICATOR',
+ 'INDICES',
+ 'INFINITE',
+ 'INSTANTIABLE',
+ 'INT',
+ 'INTEGER',
+ 'INTERFACE',
+ 'INTERVAL',
+ 'INTO',
+ 'INVALIDATE',
+ 'IS',
+ 'ISOLATION',
+ 'JAVA',
+ 'LANGUAGE',
+ 'LARGE',
+ 'LEADING',
+ 'LENGTH',
+ 'LEVEL',
+ 'LIBRARY',
+ 'LIKE',
+ 'LIKE2',
+ 'LIKE4',
+ 'LIKEC',
+ 'LIMITED',
+ 'LOCAL',
+ 'LOCK',
+ 'LONG',
+ 'MAP',
+ 'MAX',
+ 'MAXLEN',
+ 'MEMBER',
+ 'MERGE',
+ 'MIN',
+ 'MINUS',
+ 'MINUTE',
+ 'MLSLABEL',
+ 'MOD',
+ 'MODE',
+ 'MONTH',
+ 'MULTISET',
+ 'NAME',
+ 'NAN',
+ 'NATIONAL',
+ 'NATIVE',
+ 'NATURAL',
+ 'NATURALN',
+ 'NCHAR',
+ 'NEW',
+ 'NEXTVAL',
+ 'NOCOMPRESS',
+ 'NOCOPY',
+ 'NOT',
+ 'NOWAIT',
+ 'NULL',
+ 'NULLIF',
+ 'NUMBER_BASE',
+ 'NUMBER',
+ 'OBJECT',
+ 'OCICOLL',
+ 'OCIDATE',
+ 'OCIDATETIME',
+ 'OCIDURATION',
+ 'OCIINTERVAL',
+ 'OCILOBLOCATOR',
+ 'OCINUMBER',
+ 'OCIRAW',
+ 'OCIREF',
+ 'OCIREFCURSOR',
+ 'OCIROWID',
+ 'OCISTRING',
+ 'OCITYPE',
+ 'OF',
+ 'OLD',
+ 'ON',
+ 'ONLY',
+ 'OPAQUE',
+ 'OPEN',
+ 'OPERATOR',
+ 'OPTION',
+ 'ORACLE',
+ 'ORADATA',
+ 'ORDER',
+ 'ORGANIZATION',
+ 'ORLANY',
+ 'ORLVARY',
+ 'OTHERS',
+ 'OUT',
+ 'OVERLAPS',
+ 'OVERRIDING',
+ 'PACKAGE',
+ 'PARALLEL_ENABLE',
+ 'PARAMETER',
+ 'PARAMETERS',
+ 'PARENT',
+ 'PARTITION',
+ 'PASCAL',
+ 'PCTFREE',
+ 'PIPE',
+ 'PIPELINED',
+ 'PLS_INTEGER',
+ 'PLUGGABLE',
+ 'POSITIVE',
+ 'POSITIVEN',
+ 'PRAGMA',
+ 'PRECISION',
+ 'PRIOR',
+ 'PRIVATE',
+ 'PROCEDURE',
+ 'PUBLIC',
+ 'RAISE',
+ 'RANGE',
+ 'RAW',
+ 'READ',
+ 'REAL',
+ 'RECORD',
+ 'REF',
+ 'REFERENCE',
+ 'RELEASE',
+ 'RELIES_ON',
+ 'REM',
+ 'REMAINDER',
+ 'RENAME',
+ 'RESOURCE',
+ 'RESULT_CACHE',
+ 'RESULT',
+ 'RETURN',
+ 'RETURNING',
+ 'REVERSE',
+ 'REVOKE',
+ 'ROLLBACK',
+ 'ROW',
+ 'ROWID',
+ 'ROWNUM',
+ 'ROWTYPE',
+ 'SAMPLE',
+ 'SAVE',
+ 'SAVEPOINT',
+ 'SB1',
+ 'SB2',
+ 'SB4',
+ 'SECOND',
+ 'SEGMENT',
+ 'SELF',
+ 'SEPARATE',
+ 'SEQUENCE',
+ 'SERIALIZABLE',
+ 'SHARE',
+ 'SHORT',
+ 'SIZE_T',
+ 'SIZE',
+ 'SMALLINT',
+ 'SOME',
+ 'SPACE',
+ 'SPARSE',
+ 'SQL',
+ 'SQLCODE',
+ 'SQLDATA',
+ 'SQLERRM',
+ 'SQLNAME',
+ 'SQLSTATE',
+ 'STANDARD',
+ 'START',
+ 'STATIC',
+ 'STDDEV',
+ 'STORED',
+ 'STRING',
+ 'STRUCT',
+ 'STYLE',
+ 'SUBMULTISET',
+ 'SUBPARTITION',
+ 'SUBSTITUTABLE',
+ 'SUBTYPE',
+ 'SUCCESSFUL',
+ 'SUM',
+ 'SYNONYM',
+ 'SYSDATE',
+ 'TABAUTH',
+ 'TABLE',
+ 'TDO',
+ 'THE',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMEZONE_ABBR',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TIMEZONE_REGION',
+ 'TO',
+ 'TRAILING',
+ 'TRANSACTION',
+ 'TRANSACTIONAL',
+ 'TRIGGER',
+ 'TRUE',
+ 'TRUSTED',
+ 'TYPE',
+ 'UB1',
+ 'UB2',
+ 'UB4',
+ 'UID',
+ 'UNDER',
+ 'UNIQUE',
+ 'UNPLUG',
+ 'UNSIGNED',
+ 'UNTRUSTED',
+ 'USE',
+ 'USER',
+ 'USING',
+ 'VALIDATE',
+ 'VALIST',
+ 'VALUE',
+ 'VARCHAR',
+ 'VARCHAR2',
+ 'VARIABLE',
+ 'VARIANCE',
+ 'VARRAY',
+ 'VARYING',
+ 'VIEW',
+ 'VIEWS',
+ 'VOID',
+ 'WHENEVER',
+ 'WHILE',
+ 'WITH',
+ 'WORK',
+ 'WRAPPED',
+ 'WRITE',
+ 'YEAR',
+ 'ZONE',
+];
+
+const reservedToplevelWords = [
+ 'ADD',
+ 'ALTER COLUMN',
+ 'ALTER TABLE',
+ 'BEGIN',
+ 'CONNECT BY',
+ 'DECLARE',
+ 'DELETE FROM',
+ 'DELETE',
+ 'END',
+ 'EXCEPT',
+ 'EXCEPTION',
+ 'FETCH FIRST',
+ 'FROM',
+ 'GROUP BY',
+ 'HAVING',
+ 'INSERT INTO',
+ 'INSERT',
+ 'INTERSECT',
+ 'LIMIT',
+ 'LOOP',
+ 'MODIFY',
+ 'ORDER BY',
+ 'SELECT',
+ 'SET CURRENT SCHEMA',
+ 'SET SCHEMA',
+ 'SET',
+ 'START WITH',
+ 'UNION ALL',
+ 'UNION',
+ 'UPDATE',
+ 'VALUES',
+ 'WHERE',
+];
+
+const reservedNewlineWords = [
+ 'AND',
+ 'CROSS APPLY',
+ 'CROSS JOIN',
+ 'ELSE',
+ 'END',
+ 'INNER JOIN',
+ 'JOIN',
+ 'LEFT JOIN',
+ 'LEFT OUTER JOIN',
+ 'OR',
+ 'OUTER APPLY',
+ 'OUTER JOIN',
+ 'RIGHT JOIN',
+ 'RIGHT OUTER JOIN',
+ 'WHEN',
+ 'XOR',
+];
+
+let tokenizer;
+
+/**
+ *
+ */
+export default class PlSqlFormatter {
+ /**
+ * @param {Object} cfg Different set of configurations
+ */
+ constructor(cfg) {
+ this.cfg = cfg;
+ }
+
+ /**
+ * Format the whitespace in a PL/SQL string to make it easier to read
+ *
+ * @param {String} query The PL/SQL string
+ * @return {String} formatted string
+ */
+ format(query) {
+ if (!tokenizer) {
+ tokenizer = new Tokenizer({
+ reservedWords,
+ reservedToplevelWords,
+ reservedNewlineWords,
+ stringTypes: [`""`, "N''", "''", '``'],
+ openParens: ['(', 'CASE'],
+ closeParens: [')', 'END'],
+ indexedPlaceholderTypes: ['?'],
+ namedPlaceholderTypes: [':'],
+ lineCommentTypes: ['--'],
+ specialWordChars: ['_', '$', '#', '.', '@'],
+ });
+ }
+ return new Formatter(this.cfg, tokenizer).format(query);
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/languages/StandardSqlFormatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/languages/StandardSqlFormatter.ts
new file mode 100644
index 0000000000..2c8629da43
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/languages/StandardSqlFormatter.ts
@@ -0,0 +1,379 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Formatter from '../core/Formatter';
+import Tokenizer from '../core/Tokenizer';
+
+const reservedWords = [
+ 'ACCESSIBLE',
+ 'ACTION',
+ 'AGAINST',
+ 'AGGREGATE',
+ 'ALGORITHM',
+ 'ALL',
+ 'ALTER',
+ 'ANALYSE',
+ 'ANALYZE',
+ 'AS',
+ 'ASC',
+ 'AUTOCOMMIT',
+ 'AUTO_INCREMENT',
+ 'BACKUP',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BINLOG',
+ 'BOTH',
+ 'CASCADE',
+ 'CASE',
+ 'CHANGE',
+ 'CHANGED',
+ 'CHARACTER SET',
+ 'CHARSET',
+ 'CHECK',
+ 'CHECKSUM',
+ 'COLLATE',
+ 'COLLATION',
+ 'COLUMN',
+ 'COLUMNS',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMMITTED',
+ 'COMPRESSED',
+ 'CONCURRENT',
+ 'CONSTRAINT',
+ 'CONTAINS',
+ 'CONVERT',
+ 'CREATE',
+ 'CROSS',
+ 'CURRENT_TIMESTAMP',
+ 'DATABASE',
+ 'DATABASES',
+ 'DAY',
+ 'DAY_HOUR',
+ 'DAY_MINUTE',
+ 'DAY_SECOND',
+ 'DEFAULT',
+ 'DEFINER',
+ 'DELAYED',
+ 'DELETE',
+ 'DESC',
+ 'DESCRIBE',
+ 'DETERMINISTIC',
+ 'DISTINCT',
+ 'DISTINCTROW',
+ 'DIV',
+ 'DO',
+ 'DROP',
+ 'DUMPFILE',
+ 'DUPLICATE',
+ 'DYNAMIC',
+ 'ELSE',
+ 'ENCLOSED',
+ 'END',
+ 'ENGINE',
+ 'ENGINES',
+ 'ENGINE_TYPE',
+ 'ESCAPE',
+ 'ESCAPED',
+ 'EVENTS',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXPLAIN',
+ 'EXTENDED',
+ 'FAST',
+ 'FETCH',
+ 'FIELDS',
+ 'FILE',
+ 'FIRST',
+ 'FIXED',
+ 'FLUSH',
+ 'FOR',
+ 'FORCE',
+ 'FOREIGN',
+ 'FULL',
+ 'FULLTEXT',
+ 'FUNCTION',
+ 'GLOBAL',
+ 'GRANT',
+ 'GRANTS',
+ 'GROUP_CONCAT',
+ 'HEAP',
+ 'HIGH_PRIORITY',
+ 'HOSTS',
+ 'HOUR',
+ 'HOUR_MINUTE',
+ 'HOUR_SECOND',
+ 'IDENTIFIED',
+ 'IF',
+ 'IFNULL',
+ 'IGNORE',
+ 'IN',
+ 'INDEX',
+ 'INDEXES',
+ 'INFILE',
+ 'INSERT',
+ 'INSERT_ID',
+ 'INSERT_METHOD',
+ 'INTERVAL',
+ 'INTO',
+ 'INVOKER',
+ 'IS',
+ 'ISOLATION',
+ 'KEY',
+ 'KEYS',
+ 'KILL',
+ 'LAST_INSERT_ID',
+ 'LEADING',
+ 'LEVEL',
+ 'LIKE',
+ 'LINEAR',
+ 'LINES',
+ 'LOAD',
+ 'LOCAL',
+ 'LOCK',
+ 'LOCKS',
+ 'LOGS',
+ 'LOW_PRIORITY',
+ 'MARIA',
+ 'MASTER',
+ 'MASTER_CONNECT_RETRY',
+ 'MASTER_HOST',
+ 'MASTER_LOG_FILE',
+ 'MATCH',
+ 'MAX_CONNECTIONS_PER_HOUR',
+ 'MAX_QUERIES_PER_HOUR',
+ 'MAX_ROWS',
+ 'MAX_UPDATES_PER_HOUR',
+ 'MAX_USER_CONNECTIONS',
+ 'MEDIUM',
+ 'MERGE',
+ 'MINUTE',
+ 'MINUTE_SECOND',
+ 'MIN_ROWS',
+ 'MODE',
+ 'MODIFY',
+ 'MONTH',
+ 'MRG_MYISAM',
+ 'MYISAM',
+ 'NAMES',
+ 'NATURAL',
+ 'NOT',
+ 'NOW()',
+ 'NULL',
+ 'OFFSET',
+ 'ON DELETE',
+ 'ON UPDATE',
+ 'ON',
+ 'ONLY',
+ 'OPEN',
+ 'OPTIMIZE',
+ 'OPTION',
+ 'OPTIONALLY',
+ 'OUTFILE',
+ 'PACK_KEYS',
+ 'PAGE',
+ 'PARTIAL',
+ 'PARTITION',
+ 'PARTITIONS',
+ 'PASSWORD',
+ 'PRIMARY',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROCESS',
+ 'PROCESSLIST',
+ 'PURGE',
+ 'QUICK',
+ 'RAID0',
+ 'RAID_CHUNKS',
+ 'RAID_CHUNKSIZE',
+ 'RAID_TYPE',
+ 'RANGE',
+ 'READ',
+ 'READ_ONLY',
+ 'READ_WRITE',
+ 'REFERENCES',
+ 'REGEXP',
+ 'RELOAD',
+ 'RENAME',
+ 'REPAIR',
+ 'REPEATABLE',
+ 'REPLACE',
+ 'REPLICATION',
+ 'RESET',
+ 'RESTORE',
+ 'RESTRICT',
+ 'RETURN',
+ 'RETURNS',
+ 'REVOKE',
+ 'RLIKE',
+ 'ROLLBACK',
+ 'ROW',
+ 'ROWS',
+ 'ROW_FORMAT',
+ 'SECOND',
+ 'SECURITY',
+ 'SEPARATOR',
+ 'SERIALIZABLE',
+ 'SESSION',
+ 'SHARE',
+ 'SHOW',
+ 'SHUTDOWN',
+ 'SLAVE',
+ 'SONAME',
+ 'SOUNDS',
+ 'SQL',
+ 'SQL_AUTO_IS_NULL',
+ 'SQL_BIG_RESULT',
+ 'SQL_BIG_SELECTS',
+ 'SQL_BIG_TABLES',
+ 'SQL_BUFFER_RESULT',
+ 'SQL_CACHE',
+ 'SQL_CALC_FOUND_ROWS',
+ 'SQL_LOG_BIN',
+ 'SQL_LOG_OFF',
+ 'SQL_LOG_UPDATE',
+ 'SQL_LOW_PRIORITY_UPDATES',
+ 'SQL_MAX_JOIN_SIZE',
+ 'SQL_NO_CACHE',
+ 'SQL_QUOTE_SHOW_CREATE',
+ 'SQL_SAFE_UPDATES',
+ 'SQL_SELECT_LIMIT',
+ 'SQL_SLAVE_SKIP_COUNTER',
+ 'SQL_SMALL_RESULT',
+ 'SQL_WARNINGS',
+ 'START',
+ 'STARTING',
+ 'STATUS',
+ 'STOP',
+ 'STORAGE',
+ 'STRAIGHT_JOIN',
+ 'STRING',
+ 'STRIPED',
+ 'SUPER',
+ 'TABLE',
+ 'TABLES',
+ 'TEMPORARY',
+ 'TERMINATED',
+ 'THEN',
+ 'TO',
+ 'TRAILING',
+ 'TRANSACTIONAL',
+ 'TRUE',
+ 'TRUNCATE',
+ 'TYPE',
+ 'TYPES',
+ 'UNCOMMITTED',
+ 'UNIQUE',
+ 'UNLOCK',
+ 'UNSIGNED',
+ 'USAGE',
+ 'USE',
+ 'USING',
+ 'VARIABLES',
+ 'VIEW',
+ 'WHEN',
+ 'WITH',
+ 'WORK',
+ 'WRITE',
+ 'YEAR_MONTH',
+];
+
+const reservedToplevelWords = [
+ 'ADD',
+ 'AFTER',
+ 'ALTER COLUMN',
+ 'ALTER TABLE',
+ 'DELETE FROM',
+ 'EXCEPT',
+ 'FETCH FIRST',
+ 'FROM',
+ 'GROUP BY',
+ 'GO',
+ 'HAVING',
+ 'INSERT INTO',
+ 'INSERT',
+ 'INTERSECT',
+ 'LIMIT',
+ 'MODIFY',
+ 'ORDER BY',
+ 'SELECT',
+ 'SET CURRENT SCHEMA',
+ 'SET SCHEMA',
+ 'SET',
+ 'UNION ALL',
+ 'UNION',
+ 'UPDATE',
+ 'VALUES',
+ 'WHERE',
+];
+
+const reservedNewlineWords = [
+ 'AND',
+ 'CROSS APPLY',
+ 'CROSS JOIN',
+ 'ELSE',
+ 'INNER JOIN',
+ 'JOIN',
+ 'LEFT JOIN',
+ 'LEFT OUTER JOIN',
+ 'OR',
+ 'OUTER APPLY',
+ 'OUTER JOIN',
+ 'RIGHT JOIN',
+ 'RIGHT OUTER JOIN',
+ 'WHEN',
+ 'XOR',
+];
+
+let tokenizer;
+
+/**
+ *
+ */
+export default class StandardSqlFormatter {
+ /**
+ * @param {Object} cfg Different set of configurations
+ */
+ constructor(cfg) {
+ this.cfg = cfg;
+ }
+
+ /**
+ * Format the whitespace in a Standard SQL string to make it easier to read
+ *
+ * @param {String} query The Standard SQL string
+ * @return {String} formatted string
+ */
+ format(query) {
+ if (!tokenizer) {
+ tokenizer = new Tokenizer({
+ reservedWords,
+ reservedToplevelWords,
+ reservedNewlineWords,
+ stringTypes: [`""`, "N''", "''", '``', '[]'],
+ openParens: ['(', 'CASE'],
+ closeParens: [')', 'END'],
+ indexedPlaceholderTypes: ['?'],
+ namedPlaceholderTypes: ['@', ':'],
+ lineCommentTypes: ['#', '--'],
+ paramsPattern: /^(\$\{[^\}\r\n]+\})/,
+ });
+ }
+ return new Formatter(this.cfg, tokenizer).format(query);
+ }
+}
diff --git a/linkis-web-next/src/components/editor/sqlFormatter/sqlFormatter.ts b/linkis-web-next/src/components/editor/sqlFormatter/sqlFormatter.ts
new file mode 100644
index 0000000000..780b04badf
--- /dev/null
+++ b/linkis-web-next/src/components/editor/sqlFormatter/sqlFormatter.ts
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Db2Formatter from './languages/Db2Formatter';
+import N1qlFormatter from './languages/N1qlFormatter';
+import PlSqlFormatter from './languages/PlSqlFormatter';
+import StandardSqlFormatter from './languages/StandardSqlFormatter';
+
+export default {
+ /**
+ * Format whitespaces in a query to make it easier to read.
+ *
+ * @param {String} query
+ * @param {Object} cfg
+ * @param {String} cfg.language Query language, default is Standard SQL
+ * @param {String} cfg.indent Characters used for indentation, default is " " (2 spaces)
+ * @param {Object} cfg.params Collection of params for placeholder replacement
+ * @return {String}
+ */
+ format: (query, cfg) => {
+ cfg = cfg || {};
+
+ switch (cfg.language) {
+ case 'db2':
+ return new Db2Formatter(cfg).format(query);
+ case 'n1ql':
+ return new N1qlFormatter(cfg).format(query);
+ case 'pl/sql':
+ return new PlSqlFormatter(cfg).format(query);
+ case 'sql':
+ case undefined:
+ return new StandardSqlFormatter(cfg).format(query);
+ default:
+ throw Error(`Unsupported SQL dialect: ${cfg.language}`);
+ }
+ },
+};
diff --git a/linkis-web-next/src/components/editor/theme/defaultView.ts b/linkis-web-next/src/components/editor/theme/defaultView.ts
new file mode 100644
index 0000000000..9b858e3f7a
--- /dev/null
+++ b/linkis-web-next/src/components/editor/theme/defaultView.ts
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ register(monaco: any) {
+ monaco.editor.defineTheme('defaultview', {
+ base: 'vs',
+ inherit: true,
+ rules: [{ background: '#FFFFFF' }],
+ colors: {
+ 'editor.lineHighlightBackground': '#ffffff',
+ 'editorGutter.background': '#f7f7f7',
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/theme/logView.ts b/linkis-web-next/src/components/editor/theme/logView.ts
new file mode 100644
index 0000000000..285e701d15
--- /dev/null
+++ b/linkis-web-next/src/components/editor/theme/logView.ts
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ register(monaco: typeof import('monaco-editor')) {
+ monaco.editor.defineTheme('logview', {
+ base: 'vs',
+ inherit: true,
+ rules: [
+ { token: 'log-info', foreground: '4b71ca' },
+ { token: 'log-error', foreground: 'ff0000', fontStyle: 'bold' },
+ { token: 'log-warn', foreground: 'FFA500' },
+ { token: 'log-date', foreground: '008800' },
+ { token: 'log-normal', foreground: '808080' },
+ ],
+ colors: {
+ 'editor.lineHighlightBackground': '#ffffff',
+ 'editorGutter.background': '#f7f7f7',
+ },
+ });
+ },
+};
diff --git a/linkis-web-next/src/components/editor/util.ts b/linkis-web-next/src/components/editor/util.ts
new file mode 100644
index 0000000000..ce696fd571
--- /dev/null
+++ b/linkis-web-next/src/components/editor/util.ts
@@ -0,0 +1,69 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
+
+export const useMonaco = (language = 'json') => {
+ let monacoEditor: monaco.editor.IStandaloneCodeEditor | null = null;
+ let initReadOnly = false;
+ const updateVal = async (val: string) => {
+ monacoEditor?.setValue(val);
+ setTimeout(async () => {
+ if (initReadOnly) monacoEditor?.updateOptions({ readOnly: false });
+ await monacoEditor
+ ?.getAction?.('editor.action.formatDocument')
+ ?.run();
+ if (initReadOnly) monacoEditor?.updateOptions({ readOnly: true });
+ }, 100);
+ };
+
+ const createEditor = (
+ el: HTMLElement | null,
+ editorOption: monaco.editor.IStandaloneEditorConstructionOptions = {},
+ ) => {
+ if (monacoEditor) {
+ return;
+ }
+ initReadOnly = !!editorOption.readOnly;
+ monacoEditor =
+ el &&
+ monaco.editor.create(el, {
+ language,
+ minimap: { enabled: false },
+ theme: 'vs-light',
+ multiCursorModifier: 'ctrlCmd',
+ scrollbar: {
+ verticalScrollbarSize: 8,
+ horizontalScrollbarSize: 8,
+ },
+ tabSize: 2,
+ automaticLayout: true, // 自适应宽高
+ ...editorOption,
+ });
+ return monacoEditor;
+ };
+ const onFormatDoc = () => {
+ monacoEditor?.getAction?.('editor.action.formatDocument')?.run();
+ };
+ return {
+ updateVal,
+ getEditor: () => monacoEditor,
+ createEditor,
+ onFormatDoc,
+ };
+};
diff --git a/linkis-web-next/src/components/sidebar/index.less b/linkis-web-next/src/components/sidebar/index.less
new file mode 100644
index 0000000000..49054bafcf
--- /dev/null
+++ b/linkis-web-next/src/components/sidebar/index.less
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.menu-wrapper {
+ width: 200px;
+ height: 100vh;
+}
+
+#menu {
+ padding-top: 16px;
+ height: 100%;
+}
+
+.title-text {
+ display: flex;
+ height: 22px;
+ transform: translateX(40px) translateY(-5px);
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #0F1222;
+ text-align: justify;
+ font-weight: 400;
+}
+:deep(.fes-menu-item-label){
+ height: 54px;
+}
+img{
+ transform: translateX(17px) translateY(20px);
+ width: 14px;
+ height: 14px;
+}
\ No newline at end of file
diff --git a/linkis-web-next/src/components/sidebar/index.vue b/linkis-web-next/src/components/sidebar/index.vue
new file mode 100644
index 0000000000..fe2c2910b3
--- /dev/null
+++ b/linkis-web-next/src/components/sidebar/index.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/config/const.ts b/linkis-web-next/src/config/const.ts
new file mode 100644
index 0000000000..913e8006e8
--- /dev/null
+++ b/linkis-web-next/src/config/const.ts
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const DEVPROCESS = {
+ DEVELOPMENTCENTER: 'dev', // Develop center(开发中心)
+ PRODUCTCENTER: 'prod', // Production center(生产中心)
+};
+
+const ORCHESTRATORMODES = {
+ WORKFLOW: 'pom_work_flow', // Workflow Orchestration(工作流编排)
+ SINGLETASK: 'pom_single_task', // single task scheduling(单任务编排)
+ CONSTSTORCHESTRATOR: 'pom_consist_orchestrator', // Combination arrangement(组合编排)
+};
+export { DEVPROCESS, ORCHESTRATORMODES };
diff --git a/linkis-web-next/src/config/db.ts b/linkis-web-next/src/config/db.ts
new file mode 100644
index 0000000000..4e858e2961
--- /dev/null
+++ b/linkis-web-next/src/config/db.ts
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// What table needs to be built for each application add here(各应用需要建什么表在这里添加)
+export const config = {
+ version: 4,
+ stores: {
+ project: '&projectID',
+ tab: '&id',
+ log: '&tabId',
+ history: '&tabId',
+ result: '&tabId',
+ globalCache: '&key, value',
+ progress: '&tabId',
+ node: '&nodeId',
+ tree: '&treeId',
+ },
+};
diff --git a/linkis-web-next/src/config/scriptis.ts b/linkis-web-next/src/config/scriptis.ts
new file mode 100644
index 0000000000..93206d9f1e
--- /dev/null
+++ b/linkis-web-next/src/config/scriptis.ts
@@ -0,0 +1,343 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default Object.freeze([
+ {
+ rule: /\.(bi)$/i,
+ executable: false,
+ logo: 'fi-bi',
+ color: '#9771E7',
+ isCanBeNew: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.(sql)$/i,
+ lang: 'hql',
+ executable: true,
+ application: 'spark',
+ runType: 'sql',
+ ext: '.sql',
+ scriptType: 'hive',
+ abbr: 'sql',
+ logo: 'fi-spark',
+ color: '#FF9900',
+ isCanBeNew: true,
+ label: 'Sql',
+ isCanBeOpen: true,
+ flowType: 'sql',
+ },
+ {
+ rule: /\.(hql)$/i,
+ lang: 'hql',
+ executable: true,
+ application: 'hive',
+ runType: 'hql',
+ ext: '.hql',
+ scriptType: 'hql',
+ abbr: 'hql',
+ logo: 'fi-hive',
+ color: '#F4CF38',
+ isCanBeNew: true,
+ label: 'Hive',
+ isCanBeOpen: true,
+ flowType: 'hql',
+ },
+ {
+ rule: /\.(out)$/i,
+ lang: 'out',
+ executable: true,
+ application: 'pipeline',
+ runType: 'pipeline',
+ ext: '.out',
+ scriptType: 'storage',
+ abbr: 'stor',
+ logo: 'fi-storage',
+ color: '#4DB091',
+ isCanBeNew: true,
+ label: 'Storage',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.scala$/i,
+ lang: 'java',
+ executable: true,
+ application: 'spark',
+ runType: 'scala',
+ ext: '.scala',
+ scriptType: 'scala',
+ abbr: 'scala',
+ logo: 'fi-scala',
+ color: '#ED4014',
+ isCanBeNew: true,
+ label: 'Scala',
+ isCanBeOpen: true,
+ flowType: 'scala',
+ },
+ {
+ rule: /\.scala$/i,
+ lang: 'java',
+ executable: true,
+ application: 'spark',
+ runType: 'function.mdq',
+ ext: '.scala',
+ scriptType: 'scala',
+ abbr: 'scala',
+ logo: 'fi-scala',
+ color: '#ED4014',
+ isCanBeNew: false,
+ label: 'Scala',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.jdbc$/i,
+ lang: 'hql',
+ executable: true,
+ application: 'jdbc',
+ runType: 'jdbc',
+ ext: '.jdbc',
+ scriptType: 'jdbc',
+ abbr: 'jdbc',
+ logo: 'fi-jdbc',
+ color: '#444444',
+ isCanBeNew: true,
+ label: 'JDBC',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.python$/i,
+ lang: 'python',
+ executable: true,
+ application: 'python',
+ runType: 'python',
+ ext: '.python',
+ scriptType: 'python',
+ abbr: 'py',
+ logo: 'fi-python',
+ color: '#3573A6',
+ isCanBeNew: true,
+ label: 'Python',
+ isCanBeOpen: true,
+ flowType: 'python',
+ },
+ {
+ rule: /\.py$/i,
+ lang: 'python',
+ executable: true,
+ application: 'spark',
+ runType: 'py',
+ ext: '.py',
+ scriptType: 'pythonSpark',
+ abbr: 'py',
+ logo: 'fi-spark-python',
+ color: '#3573A6',
+ isCanBeNew: true,
+ label: 'PythonSpark',
+ isCanBeOpen: true,
+ flowType: 'pyspark',
+ },
+ {
+ rule: /\.r$/i,
+ lang: 'r',
+ executable: true,
+ application: 'spark',
+ runType: 'r',
+ ext: '.r',
+ scriptType: 'r',
+ abbr: 'r',
+ logo: 'fi-r',
+ color: '#2D8CF0',
+ isCanBeNew: true,
+ label: 'R',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.sh$/i,
+ lang: 'sh',
+ executable: true,
+ application: 'shell',
+ runType: 'shell',
+ ext: '.sh',
+ scriptType: 'shell',
+ abbr: 'shell',
+ logo: 'fi-scriptis',
+ color: '#444444',
+ isCanBeNew: false,
+ label: 'Shell',
+ isCanBeOpen: true,
+ flowType: 'shell',
+ },
+ {
+ rule: /\.sh$/i,
+ lang: 'sh',
+ executable: true,
+ application: 'shell',
+ runType: 'sh',
+ ext: '.sh',
+ scriptType: 'shell',
+ abbr: 'shell',
+ logo: 'fi-scriptis',
+ color: '#444444',
+ isCanBeNew: true,
+ label: 'Shell',
+ isCanBeOpen: true,
+ flowType: 'shell',
+ },
+ {
+ rule: /\.qmlsql$/i,
+ lang: 'hql',
+ executable: false,
+ application: 'spark',
+ runType: 'sql',
+ ext: '.qmlsql',
+ scriptType: 'qmlsql',
+ abbr: 'qmlsql',
+ logo: 'fi-spark',
+ color: '#FF9900',
+ isCanBeNew: false,
+ label: 'QMLSQL',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.qmlpy$/i,
+ lang: 'python',
+ executable: false,
+ application: 'spark',
+ runType: 'python',
+ ext: '.qmlpy',
+ scriptType: 'qmlpy',
+ abbr: 'qmlpy',
+ logo: 'fi-python',
+ color: '#3573A6',
+ isCanBeNew: false,
+ label: 'QMLPy',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.txt$/i,
+ lang: 'text',
+ executable: false,
+ application: null,
+ runType: null,
+ ext: '.txt',
+ scriptType: 'txt',
+ abbr: '',
+ logo: 'fi-txt',
+ color: '#444444',
+ isCanBeNew: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.log$/i,
+ lang: 'text',
+ executable: false,
+ application: null,
+ runType: null,
+ ext: '.log',
+ scriptType: 'txt',
+ abbr: '',
+ logo: 'fi-log',
+ color: '#444444',
+ isCanBeNew: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\."flowexecution"$/i,
+ lang: 'text',
+ executable: false,
+ application: 'flowexecution',
+ runType: 'json',
+ ext: '.txt',
+ scriptType: 'json',
+ abbr: '',
+ logo: 'fi-workflow',
+ color: '#444444',
+ isCanBeNew: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\."appjoint"$/i,
+ lang: 'text',
+ executable: false,
+ application: 'appjoint',
+ runType: null,
+ ext: '.txt',
+ scriptType: 'json',
+ abbr: '',
+ logo: 'fi-workflow',
+ color: '#444444',
+ isCanBeNew: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /\.xls$/i,
+ logo: 'fi-xls',
+ color: '#36AF47',
+ isCanBeNew: false,
+ isCanBeOpen: false,
+ },
+ {
+ rule: /\.xlsx$/i,
+ logo: 'fi-xlsx',
+ color: '#36AF47',
+ isCanBeNew: false,
+ isCanBeOpen: false,
+ },
+ {
+ rule: /\.csv$/i,
+ logo: 'fi-csv',
+ color: '#36AF47',
+ isCanBeNew: false,
+ isCanBeOpen: false,
+ },
+ {
+ rule: /\.jar$/i,
+ logo: 'fi-jar',
+ color: '#E45F3D',
+ isCanBeNew: false,
+ isCanBeOpen: false,
+ },
+ {
+ rule: /\.ngql$/i,
+ lang: 'hql',
+ executable: true,
+ application: 'nebula',
+ runType: 'nebula',
+ ext: '.ngql',
+ scriptType: 'Nebula',
+ abbr: 'nebula',
+ logo: 'fi-txt',
+ color: '#3573A6',
+ isCanBeNew: true,
+ label: 'Nebula',
+ isCanBeOpen: true,
+ },
+ {
+ rule: /(表详情)|(Table\sdetails)/,
+ executable: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /(建表向导)|(Table\screation\sguide)/,
+ executable: false,
+ isCanBeOpen: true,
+ },
+ {
+ rule: /(库详情)|(Db\sdetails)/,
+ executable: false,
+ isCanBeOpen: true,
+ },
+]);
diff --git a/linkis-web-next/src/dss/assets/images/Linkis.svg b/linkis-web-next/src/dss/assets/images/Linkis.svg
new file mode 100644
index 0000000000..c31bb40ce1
--- /dev/null
+++ b/linkis-web-next/src/dss/assets/images/Linkis.svg
@@ -0,0 +1,23 @@
+
+
+
+ logo
+
+
+
+
diff --git a/linkis-web-next/src/dss/assets/images/loginbgc.svg b/linkis-web-next/src/dss/assets/images/loginbgc.svg
new file mode 100644
index 0000000000..800af4d038
--- /dev/null
+++ b/linkis-web-next/src/dss/assets/images/loginbgc.svg
@@ -0,0 +1,1947 @@
+
+
+
+
+ 编组 7
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/assets/styles/app.less b/linkis-web-next/src/dss/assets/styles/app.less
new file mode 100644
index 0000000000..4395560da5
--- /dev/null
+++ b/linkis-web-next/src/dss/assets/styles/app.less
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// @import '@/common/style/variables.scss';
+// @import 'normalize.scss';
+
+// * {
+// box-sizing: border-box;
+// -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+// }
+// *:before,
+// *:after {
+// box-sizing: border-box;
+// }
+// body{
+// font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif,
+// "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+// font-variant-numeric: tabular-nums;
+// font-size: $font-size-small;
+// color: $text-color;
+// line-height: $line-height-base;
+// }
+// .layout {
+// position: $absolute;
+// left: 0;
+// right: 0;
+// top: 0;
+// bottom: 0;
+// background-color: $body-background;
+// }
+// .layout-content {
+// height: 100%;
+// }
+// .layout-body{
+// width: 100%;
+// height: 100%;
+// box-sizing: border-box;
+// // padding: 54px 0 0;
+// position: $relative;
+// }
+// .layout-top {
+// padding: 54px 0 0;
+// }
+// .ivu-message {
+// z-index: 2000 !important;
+// }
+// // Set the style of the scrollbar(设置滚动条的样式)
+// ::-webkit-scrollbar {
+// width: 8px;
+// height: 8px;
+// }
+// //rolling groove(滚动槽)
+// ::-webkit-scrollbar-track {
+// box-shadow: inset 0 0 2px $shadow-color;
+// -webkit-box-shadow: inset 0 0 2px $shadow-color;
+// border-radius: $border-radius-large;
+// -webkit-border-radius: $border-radius-large;
+// -moz-border-radius: $border-radius-large;
+// -ms-border-radius: $border-radius-large;
+// -o-border-radius: $border-radius-large;
+// }
+// //scroll bar slider(滚动条滑块)
+// ::-webkit-scrollbar-thumb {
+// box-shadow: inset 0 0 2px $shadow-color;
+// border-radius: $border-radius-large;
+// background: $scrollbar-color;
+// -webkit-box-shadow: inset 0 0 2px $shadow-color;
+// -webkit-border-radius: $border-radius-large;
+// -moz-border-radius: $border-radius-large;
+// -ms-border-radius: $border-radius-large;
+// -o-border-radius: $border-radius-large;
+// }
+// ::-webkit-scrollbar-thumb:window-inactive {
+// background: $scrollbar-color;
+// }
+// .we-editor .monaco-editor .margin {
+// background-color: #f2f3f6;
+// }
diff --git a/linkis-web-next/src/dss/assets/styles/normalize.less b/linkis-web-next/src/dss/assets/styles/normalize.less
new file mode 100644
index 0000000000..eb4e5552ad
--- /dev/null
+++ b/linkis-web-next/src/dss/assets/styles/normalize.less
@@ -0,0 +1,387 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
+/**
+ * 1. Change the default font family in all browsers (opinionated).
+ * 2. Correct the line height in all browsers.
+ * 3. Prevent adjustments of font size after orientation changes in
+ * IE on Windows Phone and in iOS.
+ */
+/* Document
+ ========================================================================== */
+html {
+ font-family: sans-serif; /* 1 */
+ line-height: 1.15; /* 2 */
+ -ms-text-size-adjust: 100%; /* 3 */
+ -webkit-text-size-adjust: 100%; /* 3 */
+}
+/* Sections
+ ========================================================================== */
+/**
+ * Remove the margin in all browsers (opinionated).
+ */
+body {
+ margin: 0;
+}
+/**
+ * Add the correct display in IE 9-.
+ */
+article,
+aside,
+footer,
+header,
+nav,
+section {
+ display: block;
+}
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+/* Grouping content
+ ========================================================================== */
+/**
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in IE.
+ */
+figcaption,
+figure,
+main { /* 1 */
+ display: block;
+}
+/**
+ * Add the correct margin in IE 8.
+ */
+figure {
+ margin: 1em 40px;
+}
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+/* Text-level semantics
+ ========================================================================== */
+/**
+ * 1. Remove the gray background on active links in IE 10.
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+ */
+a {
+ background-color: transparent; /* 1 */
+ -webkit-text-decoration-skip: objects; /* 2 */
+}
+/**
+ * Remove the outline on focused links when they are also active or hovered
+ * in all browsers (opinionated).
+ */
+a:active,
+a:hover {
+ outline-width: 0;
+}
+/**
+ * 1. Remove the bottom border in Firefox 39-.
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+}
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+b,
+strong {
+ font-weight: inherit;
+}
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+b,
+strong {
+ font-weight: bolder;
+}
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+code,
+kbd,
+samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+/**
+ * Add the correct font style in Android 4.3-.
+ */
+dfn {
+ font-style: italic;
+}
+/**
+ * Add the correct background and color in IE 9-.
+ */
+mark {
+ background-color: #ff0;
+ color: #000;
+}
+/**
+ * Add the correct font size in all browsers.
+ */
+small {
+ font-size: 80%;
+}
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sub {
+ bottom: -0.25em;
+}
+sup {
+ top: -0.5em;
+}
+/* Embedded content
+ ========================================================================== */
+/**
+ * Add the correct display in IE 9-.
+ */
+audio,
+video {
+ display: inline-block;
+}
+/**
+ * Add the correct display in iOS 4-7.
+ */
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+/**
+ * Remove the border on images inside links in IE 10-.
+ */
+img {
+ border-style: none;
+}
+/**
+ * Hide the overflow in IE.
+ */
+svg:not(:root) {
+ overflow: hidden;
+}
+/* Forms
+ ========================================================================== */
+/**
+ * 1. Change the font styles in all browsers (opinionated).
+ * 2. Remove the margin in Firefox and Safari.
+ */
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: sans-serif; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+button,
+input { /* 1 */
+ overflow: visible;
+}
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+button,
+select { /* 1 */
+ text-transform: none;
+}
+/**
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+ * controls in Android 4.
+ * 2. Correct the inability to style clickable types in iOS and Safari.
+ */
+button,
+html [type="button"], /* 1 */
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+}
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+/**
+ * Change the border, margin, and padding in all browsers (opinionated).
+ */
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+/**
+ * 1. Add the correct display in IE 9-.
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+progress {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+textarea {
+ overflow: auto;
+}
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+/**
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+ */
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+/* Interactive
+ ========================================================================== */
+/*
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ */
+details, /* 1 */
+menu {
+ display: block;
+}
+/*
+ * Add the correct display in all browsers.
+ */
+summary {
+ display: list-item;
+}
+/* Scripting
+ ========================================================================== */
+/**
+ * Add the correct display in IE 9-.
+ */
+canvas {
+ display: inline-block;
+}
+/**
+ * Add the correct display in IE.
+ */
+template {
+ display: none;
+}
+/* Hidden
+ ========================================================================== */
+/**
+ * Add the correct display in IE 10-.
+ */
+[hidden] {
+ display: none;
+}
+ul,
+ol {
+ list-style: none;
+}
diff --git a/linkis-web-next/src/dss/dssRouter.ts b/linkis-web-next/src/dss/dssRouter.ts
new file mode 100644
index 0000000000..ad0cfccc6c
--- /dev/null
+++ b/linkis-web-next/src/dss/dssRouter.ts
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default [
+ // log view(日志查看)
+ {
+ path: '/log',
+ name: 'log',
+ meta: {
+ title: 'Log',
+ publicPage: true,
+ },
+ component: () => import('./view/logPage/index.vue'),
+ },
+ {
+ path: '/commonIframe',
+ name: 'commonIframe',
+ meta: {
+ title: 'DSS Component',
+ publicPage: true,
+ },
+ component: () => import('./view/commonIframe/index.vue'),
+ },
+ {
+ path: '/login',
+ name: 'login',
+ meta: {
+ title: 'Login',
+ publicPage: true,
+ },
+ component: () => import('./view/login/index.vue'),
+ },
+ // Public pages, not subject to permission control(公用页面,不受权限控制)
+ {
+ path: '/500',
+ name: 'serverErrorPage',
+ meta: {
+ title: '服务器错误',
+ publicPage: true,
+ },
+ component: () => import('./view/500.vue'),
+ },
+ {
+ path: '/404',
+ name: 'pageNotFound',
+ meta: {
+ title: '404',
+ publicPage: true,
+ },
+ component: () => import('./view/404.vue'),
+ },
+ {
+ path: '/403',
+ name: 'pageForbidden',
+ meta: {
+ title: '403',
+ publicPage: true,
+ },
+ component: () => import('./view/403.vue'),
+ },
+ // svg available icon preview(svg可用图标预览)
+ {
+ path: '/icon',
+ name: 'icon',
+ meta: {
+ title: 'icon',
+ publicPage: true,
+ },
+ component: () => import('./view/icon.vue'),
+ },
+ {
+ path: '/:catchAll(.*)',
+ meta: {
+ title: 'Linkis',
+ publicPage: true,
+ },
+ component: () => import('./view/404.vue'),
+ },
+];
diff --git a/linkis-web-next/src/dss/view/403.vue b/linkis-web-next/src/dss/view/403.vue
new file mode 100644
index 0000000000..927c3c7fb6
--- /dev/null
+++ b/linkis-web-next/src/dss/view/403.vue
@@ -0,0 +1,23 @@
+
+
+
+
+ 403 😈
+ 无权访问 👮
+
+
diff --git a/linkis-web-next/src/dss/view/404.vue b/linkis-web-next/src/dss/view/404.vue
new file mode 100644
index 0000000000..176a540961
--- /dev/null
+++ b/linkis-web-next/src/dss/view/404.vue
@@ -0,0 +1,31 @@
+
+
+
+
+ 404
+ 抱歉,你所访问的页面不存在
+
+
+
diff --git a/linkis-web-next/src/dss/view/500.vue b/linkis-web-next/src/dss/view/500.vue
new file mode 100644
index 0000000000..5396a70619
--- /dev/null
+++ b/linkis-web-next/src/dss/view/500.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/app.vue b/linkis-web-next/src/dss/view/app.vue
new file mode 100644
index 0000000000..3fbca9e61b
--- /dev/null
+++ b/linkis-web-next/src/dss/view/app.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/commonIframe/index.vue b/linkis-web-next/src/dss/view/commonIframe/index.vue
new file mode 100644
index 0000000000..7ac99d6a09
--- /dev/null
+++ b/linkis-web-next/src/dss/view/commonIframe/index.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/icon.vue b/linkis-web-next/src/dss/view/icon.vue
new file mode 100644
index 0000000000..71435a8766
--- /dev/null
+++ b/linkis-web-next/src/dss/view/icon.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/layout.vue b/linkis-web-next/src/dss/view/layout.vue
new file mode 100644
index 0000000000..18708ff908
--- /dev/null
+++ b/linkis-web-next/src/dss/view/layout.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/logPage/index.vue b/linkis-web-next/src/dss/view/logPage/index.vue
new file mode 100644
index 0000000000..c0f870c224
--- /dev/null
+++ b/linkis-web-next/src/dss/view/logPage/index.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/dss/view/login/index.vue b/linkis-web-next/src/dss/view/login/index.vue
new file mode 100644
index 0000000000..2cc27ec129
--- /dev/null
+++ b/linkis-web-next/src/dss/view/login/index.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.common.login.loginTitle') }}
+
+
+
+
+
+
+ {{ $t('message.linkis.userName') }}
+
+
+
+
+
+
+
+
+ {{ $t('message.linkis.password') }}
+
+
+
+
+
+ {{ $t('message.common.login.remenber') }}
+
+
+
+ {{ $t('message.common.login.login') }}
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/env.d.ts b/linkis-web-next/src/env.d.ts
new file mode 100644
index 0000000000..2810fc9a95
--- /dev/null
+++ b/linkis-web-next/src/env.d.ts
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+declare module '*.vue' {
+ import type { DefineComponent } from 'vue';
+
+ const vueComponent: DefineComponent;
+ export default vueComponent;
+}
diff --git a/linkis-web-next/src/helper/clickoutside.js b/linkis-web-next/src/helper/clickoutside.js
new file mode 100644
index 0000000000..6a9fedad57
--- /dev/null
+++ b/linkis-web-next/src/helper/clickoutside.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+let cache = {};
+let key = 1;
+export default {
+ inserted(el, binding) {
+ el.outsideKey = key++;
+ const self = {};
+ self.documentHandler = (e) => {
+ if (el.contains(e.target)) {
+ return false;
+ }
+ if (binding.value) {
+ binding.value(e);
+ }
+ return true;
+ };
+ cache[el.outsideKey] = self;
+ document.addEventListener('click', self.documentHandler);
+ },
+ unbind(el) {
+ const self = cache[el.outsideKey];
+ document.removeEventListener('click', self.documentHandler);
+ delete cache[el.outsideKey];
+ },
+};
diff --git a/linkis-web-next/src/helper/db.ts b/linkis-web-next/src/helper/db.ts
new file mode 100644
index 0000000000..ea49f61922
--- /dev/null
+++ b/linkis-web-next/src/helper/db.ts
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Dexie from 'dexie';
+/**
+ * wrap db operator
+ * @class DB
+ */
+export default class DB {
+ db: Dexie;
+ whereClause: any;
+ collection: any;
+ errHandler: any;
+ /**
+ * Creates an instance of DB.
+ * @param {*} name
+ * @param {Object} stores
+ * @param {Number} version
+ * @memberof DB
+ */
+ constructor(name: string, stores: any, version = 1) {
+ this.db = new Dexie(name);
+ this.db.version(version).stores(stores);
+ }
+ /**
+ *
+ * @param {*} stores
+ * @param {*} version
+ * @memberof DB
+ */
+ updateVersion(stores: any, version: number) {
+ try {
+ this.db.version(version).stores(stores);
+ } catch (e) {
+ this._errorCatch(e);
+ }
+ }
+ /**
+ * wrap put method
+ * If an object with the same primary key already exists,
+ * it will be replaced with the given object.
+ * If it does not exist, it will be added.
+ * @param {String} table
+ * @param {Object | Array} fields
+ * @param {*} id
+ * @memberof DB
+ */
+ async put(table, fields) {
+ const promiseArr = [];
+ if (Array.isArray(fields)) {
+ fields.forEach((item) => {
+ promiseArr.push(this.db[table].put(item));
+ });
+ } else {
+ promiseArr.push(this.db[table].put(fields));
+ }
+ try {
+ return await Promise.all(promiseArr);
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ * wrap get method
+ * @param {String} table
+ * @param {Array} keys
+ * @memberof DB
+ */
+ async get(table, keys) {
+ const promiseArr = [];
+ if (Array.isArray(keys)) {
+ keys.forEach((item) => {
+ promiseArr.push(this.db[table].get(item));
+ });
+ } else {
+ promiseArr.push(this.db[table].get(keys));
+ }
+ try {
+ return await Promise.all(promiseArr);
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ *
+ * @param {*} table
+ * @param {String | Object} clause
+ * @memberof DB
+ * @return {this}
+ */
+ where(table, clause) {
+ this.whereClause = this.db[table].where(clause);
+ return this;
+ }
+ /**
+ *
+ * @param {*} table
+ * @param {*} key
+ * @param {*} changes
+ * @return {updated}
+ * @memberof DB
+ */
+ async update(table, key, changes) {
+ try {
+ return await this.db[table].update(key, changes);
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ *
+ * @param {String | Object} clause
+ * @memberof DB
+ * @return {this}
+ */
+ equals(clause) {
+ this.collection = this.whereClause.where(clause);
+ return this;
+ }
+ /**
+ *
+ * @param {String | Array} clause
+ * @memberof DB
+ * @return {this}
+ */
+ anyOf(clause) {
+ this.collection = this.whereClause.where(clause);
+ return this;
+ }
+ /**
+ *
+ * @param {Function} cb
+ * @memberof DB
+ * @return {Promise}
+ */
+ async first(cb) {
+ try {
+ return await this.collection.first(cb);
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ * db or table or collection delete
+ * @memberof DB
+ * @return {Promise}
+ */
+ async delete(...args) {
+ const len = args.length;
+ const table = args[0];
+ let key = args[1];
+ try {
+ if (len === 0) {
+ return await this.collection.delete();
+ } else if (len === 2) {
+ return await this.db[table].delete(key);
+ }
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ * @param {*} table
+ * @memberof DB
+ * @return {Promise}
+ */
+ async toArray(table) {
+ try {
+ if (table) {
+ this.collection = this.db[table];
+ }
+ return await this.collection.toArray();
+ } catch (e) {
+ return this._errorCatch(e);
+ }
+ }
+ /**
+ * wrap catch error
+ * @param {*} e
+ * @memberof DB
+ * @return {Promise}
+ */
+ _errorCatch(e: any) {
+ this.errHandler && this.errHandler(e.message);
+ return Promise.resolve(null);
+ }
+}
diff --git a/linkis-web-next/src/helper/elementResizeEvent.js b/linkis-web-next/src/helper/elementResizeEvent.js
new file mode 100644
index 0000000000..f9f33e6da2
--- /dev/null
+++ b/linkis-web-next/src/helper/elementResizeEvent.js
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+let requestFrame = (function() {
+ let raf = window.requestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ function fallbackRAF(func) {
+ return window.setTimeout(func, 20);
+ };
+ return function requestFrameFunction(func) {
+ return raf(func);
+ };
+})();
+
+let cancelFrame = (function() {
+ let cancel = window.cancelAnimationFrame ||
+ window.mozCancelAnimationFrame ||
+ window.webkitCancelAnimationFrame ||
+ window.clearTimeout;
+ return function cancelFrameFunction(id) {
+ return cancel(id);
+ };
+})();
+
+/**
+ *Monitor size changes(监听大小改变)
+ * @param {*} e
+ */
+function resizeListener(e) {
+ let win = e.target || e.srcElement;
+ if (win.__resizeRAF__) {
+ cancelFrame(win.__resizeRAF__);
+ }
+ win.__resizeRAF__ = requestFrame(function() {
+ let trigger = win.__resizeTrigger__;
+ let listeners = trigger && trigger.__resizeListeners__;
+ if (listeners) {
+ listeners.forEach(function(fn) {
+ fn.call(trigger, e);
+ });
+ }
+ });
+}
+
+let bind = function(element, fn) {
+ let document = window.document;
+ let attachEvent = document.attachEvent;
+
+ /**
+ *
+ */
+ function objectLoad() {
+ this.contentDocument.defaultView.__resizeTrigger__ = this.__resizeElement__;
+ this.contentDocument.defaultView.addEventListener('resize', resizeListener);
+ this.contentDocument.defaultView.dispatchEvent(new Event('resize'));
+ }
+
+ if (!element.__resizeListeners__) {
+ element.__resizeListeners__ = [];
+ if (attachEvent) {
+ element.__resizeTrigger__ = element;
+ element.attachEvent('onresize', resizeListener);
+ } else {
+ if (getComputedStyle(element).position === 'static') {
+ element.style.position = 'relative';
+ }
+ let obj = (element.__resizeTrigger__ = document.createElement('object'));
+ obj.setAttribute(
+ 'style',
+ 'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1; opacity: 0;'
+ );
+ obj.setAttribute('class', 'resize-sensor');
+ obj.__resizeElement__ = element;
+ obj.onload = objectLoad;
+ obj.type = 'text/html';
+ obj.data = 'about:blank';
+ element.appendChild(obj);
+ }
+ }
+ element.__resizeListeners__.push(fn);
+};
+
+let unbind = function(element, fn) {
+ let attachEvent = document.attachEvent;
+ let listeners = element.__resizeListeners__ || [];
+ if (fn) {
+ let index = listeners.indexOf(fn);
+ if (index !== -1) {
+ listeners.splice(index, 1);
+ }
+ } else {
+ listeners = element.__resizeListeners__ = [];
+ }
+ if (!listeners.length) {
+ if (attachEvent) {
+ element.detachEvent('onresize', resizeListener);
+ } else if (element.__resizeTrigger__) {
+ if (element.__resizeTrigger__.contentDocument) {
+ element.__resizeTrigger__.contentDocument.defaultView.removeEventListener(
+ 'resize',
+ resizeListener
+ );
+ delete element.__resizeTrigger__.contentDocument.defaultView.__resizeTrigger__;
+ }
+ element.__resizeTrigger__ = !element.removeChild(
+ element.__resizeTrigger__
+ );
+ }
+ delete element.__resizeListeners__;
+ }
+};
+
+export default {
+ bind: typeof window === 'undefined' ? bind : bind.bind(window),
+ unbind,
+ requestAnimationFrame: requestFrame,
+ cancelAnimationFrame: cancelFrame
+};
diff --git a/linkis-web-next/src/helper/emitter.js b/linkis-web-next/src/helper/emitter.js
new file mode 100644
index 0000000000..aaf285b6eb
--- /dev/null
+++ b/linkis-web-next/src/helper/emitter.js
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * brocast event to component
+ * @param {*} componentName
+ * @param {*} eventName
+ * @param {*} params
+ */
+function broadcast(componentName, eventName, params) {
+ this.$children.forEach((child) => {
+ const name = child.$options.name;
+
+ if (name === componentName) {
+ child.$emit(...[eventName].concat(params));
+ } else {
+ // todo if params is an empty array, it will be undefined(todo 如果 params 是空数组,接收到的会是 undefined)
+ broadcast.apply(child, [componentName, eventName].concat([params]));
+ }
+ });
+}
+export default {
+ methods: {
+ dispatch(componentName, eventName, params) {
+ let parent = this.$parent || this.$root;
+ let name = parent.$options.name;
+
+ while (parent && (!name || name !== componentName)) {
+ parent = parent.$parent;
+
+ if (parent) {
+ name = parent.$options.name;
+ }
+ }
+ if (parent) {
+ parent.$emit(...[eventName].concat(params));
+ }
+ },
+ broadcast(componentName, eventName, params) {
+ broadcast.call(this, componentName, eventName, params);
+ },
+ },
+};
diff --git a/linkis-web-next/src/helper/eventbus.js b/linkis-web-next/src/helper/eventbus.js
new file mode 100644
index 0000000000..cbb2dc13b4
--- /dev/null
+++ b/linkis-web-next/src/helper/eventbus.js
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * 事件bus
+ */
+class Eventbus {
+ /**
+ * Constructor(构造器)
+ */
+ constructor() {
+ this.storage = {};
+ }
+
+ /**
+ *
+ * @param {*} arr
+ * @param {*} x
+ * @return {Object}
+ */
+ findIndex(arr, x) {
+ return arr.findIndex((item) => item === x);
+ }
+
+ /**
+ * Registration issue(注册事件)
+ * @param {*} name
+ * @param {*} fn
+ * @return {undefined}
+ */
+ on(name, fn) {
+ if (Object.prototype.toString.call(this.storage[name]) === '[object Array]') {
+ this.storage[name].push(fn);
+ } else {
+ this.storage[name] = [fn];
+ }
+ }
+
+ /**
+ * delete event(删除事件)
+ * @param {*} name
+ * @param {*} fn
+ * @return {undefined}
+ */
+ off(name, fn) {
+ if (this.storage[name]) {
+ let i = this.findIndex(this.storage[name], fn);
+ if (i !== -1) this.storage[name].splice(i, 1);
+ }
+ }
+
+ /**
+ * Clear all events of the specified name(清空指定name的所有事件)
+ * @param {*} name
+ * @return {Object}
+ */
+ clear(name) {
+ if (name) {
+ this.storage[name] = [];
+ } else {
+ this.storage = {};
+ }
+ return this.storage;
+ }
+
+ /**
+ * trigger event(触发事件)
+ * @param {*} name
+ * @param {*} payload parameter(参数)
+ * @param {*} cb Callback( 回调函数)
+ * @return {undefined}
+ */
+ emit(name, payload, cb) {
+ let fns = this.storage[name];
+ if (fns) {
+ if (fns.length > 1) {
+ let arr = [];
+ this.storage[name].forEach((f) => {
+ arr.push(Promise.resolve(f(payload, cb)));
+ });
+ return Promise.all(arr);
+ } else if (fns.length === 1) {
+ return Promise.resolve(fns[0](payload, cb));
+ }
+ }
+ }
+}
+
+let eventbus = new Eventbus();
+
+
+export {
+ eventbus as
+ default,
+ eventbus,
+ Eventbus,
+};
diff --git a/linkis-web-next/src/helper/fesx.js b/linkis-web-next/src/helper/fesx.js
new file mode 100644
index 0000000000..655b2213c1
--- /dev/null
+++ b/linkis-web-next/src/helper/fesx.js
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * global state management(全局状态管理)
+ */
+import Vue from 'vue';
+import util from '../util';
+// import storage from './storage';
+// import util from '../util';
+
+/**
+ * state management container(状态管理容器)
+ */
+class Fesx {
+ /**
+ * Constructor(构造器)
+ * @param {*} name
+ * @param {Object} data
+ */
+ constructor(name, data) {
+ Object.defineProperty(this, 'name', {
+ value: name,
+ enumerable: false,
+ });
+ Object.defineProperty(this, 'pre', {
+ value: 'FesFesx_' + this.name + '_',
+ enumerable: false,
+ });
+ if (util.isPlainObject(data)) {
+ for (let p in data) {
+ if (Object.prototype.hasOwnProperty.call(data, p)) {
+ Vue.set(this, p, data[p]);
+ }
+ }
+ }
+ // let keys = Object.keys(sessionStorage)
+ // let len = keys.length
+ // for (let i = 0; i < len; i++) {
+ // let key = keys[i];
+ // if (key.indexOf(this.pre) === 0) {
+ // Vue.set(this, key.slice(this.pre.length), storage.get(key));
+ // }
+ // }
+ }
+ /**
+ * Get the corresponding state according to the prop(根据prop拿到对应的状态)
+ * @param {*} prop
+ * @return {*}
+ */
+ get(prop) {
+ // if (!this[prop]) {
+ // this.set(prop, storage.get(this.pre + prop))
+ // }
+ return this[prop];
+ }
+ /**
+ * Get the corresponding state according to the prop(根据prop拿到对应的状态)
+ * @param {*} prop
+ * @param {*} value
+ * @return {*}
+ */
+ set(prop, value) {
+ Vue.set(this, prop, value);
+ // if (!util.isFunction(value)) {
+ // storage.set(this.pre + prop, value);
+ // }
+ return this;
+ }
+ /**
+ * empty the current container(清空当前容器)
+ */
+ clear() {
+ for (let p in this) {
+ if (Object.prototype.hasOwnProperty.call(this, p)) {
+ Vue.set(this, p, undefined);
+ }
+ }
+ // let keys = Object.keys(sessionStorage)
+ // let len = keys.length
+ // for (let i = 0; i < len; i++) {
+ // let key = keys[i];
+ // if (key.indexOf(this.pre) === 0) {
+ // storage.remove(key);
+ // }
+ // }
+ }
+}
+
+export default Fesx;
diff --git a/linkis-web-next/src/helper/storage.ts b/linkis-web-next/src/helper/storage.ts
new file mode 100644
index 0000000000..3dbfd38869
--- /dev/null
+++ b/linkis-web-next/src/helper/storage.ts
@@ -0,0 +1,245 @@
+/* eslint-disable */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* \
+|*|
+|*| :: cookies.js ::
+|*|
+|*| A complete cookies reader/writer framework with full unicode support.
+|*|
+|*| https://developer.mozilla.org/en-US/docs/DOM/document.cookie
+|*|
+|*| This framework is released under the GNU Public License, version 3 or later.
+|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html
+|*|
+|*| Syntaxes:
+|*|
+|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])
+|*| * docCookies.getItem(name)
+|*| * docCookies.removeItem(name[, path], domain)
+|*| * docCookies.hasItem(name)
+|*| * docCookies.keys()
+|*|
+\ */
+
+/**
+ * 操作cookie、sessionStorage、localStorage、缓存
+ */
+
+const SESSION = 'session';
+const LOCAL = 'local';
+const COOKIE = 'cookie';
+const isProd = process.env.NODE_ENV === 'production';
+
+const docCookies = {
+ getItem: function (sKey: string) {
+ return (
+ decodeURIComponent(
+ document.cookie.replace(
+ new RegExp(
+ '(?:(?:^|.*;)\\s*' +
+ encodeURIComponent(sKey).replace(
+ /[\-\.\+\*]/g,
+ '\\$&',
+ ) +
+ '\\s*\\=\\s*([^;]*).*$)|^.*$',
+ ),
+ '$1',
+ ),
+ ) || null
+ );
+ },
+ setItem: function (
+ sKey: string,
+ sValue: string,
+ vEnd?: boolean,
+ sPath?: string,
+ sDomain?: string,
+ bSecure?: string,
+ ) {
+ if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) {
+ return false;
+ }
+ let sExpires = '';
+ if (vEnd) {
+ switch (vEnd.constructor) {
+ case Number:
+ sExpires =
+ vEnd === Infinity
+ ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'
+ : '; max-age=' + vEnd;
+ break;
+ case String:
+ sExpires = '; expires=' + vEnd;
+ break;
+ case Date:
+ sExpires = '; expires=' + vEnd.toUTCString();
+ break;
+ }
+ }
+ document.cookie =
+ encodeURIComponent(sKey) +
+ '=' +
+ encodeURIComponent(sValue) +
+ sExpires +
+ (sDomain ? '; domain=' + sDomain : '') +
+ (sPath ? '; path=' + sPath : '') +
+ (bSecure ? '; secure' : '');
+ return true;
+ },
+ removeItem: function (sKey: string, sPath?: string, sDomain?: string) {
+ if (!sKey || !this.hasItem(sKey)) {
+ return false;
+ }
+ document.cookie =
+ encodeURIComponent(sKey) +
+ '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +
+ (sDomain ? '; domain=' + sDomain : '') +
+ (sPath ? '; path=' + sPath : '');
+ return true;
+ },
+ hasItem: function (sKey: string) {
+ return new RegExp(
+ '(?:^|;\\s*)' +
+ encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, '\\$&') +
+ '\\s*\\=',
+ ).test(document.cookie);
+ },
+ keys: /* optional method: you can safely remove it! */ function () {
+ let aKeys = document.cookie
+ .replace(
+ /((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g,
+ '',
+ )
+ .split(/\s*(?:\=[^;]*)?;\s*/);
+ for (let nIdx = 0; nIdx < aKeys.length; nIdx++) {
+ aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);
+ }
+ return aKeys;
+ },
+};
+
+export const storageManager = {
+ set: function (key: string, value: string, storage: string) {
+ try {
+ window[storage].setItem(key, JSON.stringify(value));
+ } catch (e) {
+ !isProd && window.console.error(e);
+ }
+ },
+ get: function (key: string, storage: string) {
+ try {
+ if (window[storage].getItem(key)) {
+ return JSON.parse(window[storage].getItem(key));
+ } else {
+ return window[storage].getItem(key);
+ }
+ } catch (e) {
+ !isProd && window.console.error(e, key);
+ }
+ },
+ clear: function (storage: string) {
+ window[storage].clear();
+ },
+ remove: function (key: string, storage: string) {
+ window[storage].removeItem(key);
+ },
+};
+
+export const cookieManager = {
+ set: function (key: string, value: string, expired: boolean) {
+ if (expired) docCookies.setItem(key, value, expired);
+ else docCookies.setItem(key, value);
+ },
+ get: function (key: string) {
+ return docCookies.getItem(key);
+ },
+ clear: function () {
+ docCookies.keys().forEach((key) => {
+ docCookies.removeItem(key);
+ });
+ },
+ remove: function (key: string) {
+ docCookies.removeItem(key);
+ },
+};
+
+export default {
+ set: function (
+ key: string,
+ value: string,
+ category = SESSION,
+ expired = false,
+ ) {
+ let { storage, isWebStorage = true } = this._map(category);
+
+ if (isWebStorage) {
+ storageManager.set(key, value, storage);
+ } else {
+ cookieManager.set(key, value, expired);
+ }
+ },
+ get: function (key: string, category = SESSION) {
+ let { storage, isWebStorage = true } = this._map(category);
+
+ if (isWebStorage) {
+ return storageManager.get(key, storage);
+ } else {
+ return cookieManager.get(key);
+ }
+ },
+ clear: function (category = SESSION) {
+ let { storage, isWebStorage = true } = this._map(category);
+
+ if (isWebStorage) {
+ storageManager.clear(storage);
+ } else {
+ cookieManager.clear();
+ }
+ },
+ remove: function (key: string, category = SESSION) {
+ let { storage, isWebStorage = true } = this._map(category);
+
+ if (isWebStorage) {
+ storageManager.remove(key, storage);
+ } else {
+ cookieManager.remove(key);
+ }
+ },
+ _map(category: string) {
+ let isWebStorage = true;
+ let storage;
+
+ switch (true) {
+ case category === SESSION:
+ storage = 'sessionStorage';
+ break;
+ case category === LOCAL:
+ storage = 'localStorage';
+ break;
+ case category === COOKIE:
+ storage = 'cookie';
+ isWebStorage = false;
+ break;
+ default:
+ storage = 'sessionStorage';
+ }
+
+ return { isWebStorage, storage };
+ },
+};
diff --git a/linkis-web-next/src/index.d.ts b/linkis-web-next/src/index.d.ts
new file mode 100644
index 0000000000..7f3a51c686
--- /dev/null
+++ b/linkis-web-next/src/index.d.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export {};
+
+declare global {
+ interface Window {
+ debug_log: boolean;
+ console: Record unknown>;
+ [key: string]: any;
+ }
+}
diff --git a/linkis-web-next/src/layout.vue b/linkis-web-next/src/layout.vue
new file mode 100644
index 0000000000..301cf22665
--- /dev/null
+++ b/linkis-web-next/src/layout.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/locales/en.ts b/linkis-web-next/src/locales/en.ts
new file mode 100644
index 0000000000..1ffeb7ade5
--- /dev/null
+++ b/linkis-web-next/src/locales/en.ts
@@ -0,0 +1,1087 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ message: {
+ common: {
+ statisticsTime: 'Time Range',
+ fullScreen: 'FullScreen',
+ log: 'Log',
+ diagnosis: 'Intelligent Diagnosis',
+ watermaskText:
+ 'Generated by DataWorkShop. For internal references only',
+ filter: 'Filter',
+ saveToWidget: 'Save widget to solution',
+ script: 'Script',
+ refresh: 'Refresh',
+ download: 'Download',
+ submit: 'Submit',
+ saveSuccess: 'Successfully saved',
+ detail: 'Details',
+ FAQ: 'FAQ',
+ clearCache: 'Clear Cache',
+ logOut: 'Log out',
+ action: 'Action',
+ path: 'Please choose the path',
+ resultList: 'Resultset',
+ process: 'Execution Time:',
+ ok: 'OK',
+ cancel: 'Cancel',
+ delete: 'Delete',
+ failedNotice: 'Invalid items found, please check and then retry!',
+ logoName: 'Linkis',
+ home: 'Home',
+ management: 'Console',
+ feedback: 'Feedback',
+ bbs: 'BBS',
+ exceptionTips:
+ 'Background interface exception, please contact development processing!',
+ separator: {
+ comma: 'Comma(,)',
+ tab: 'Tab(\\t)',
+ semicolon: 'Semicolon(;)',
+ space: 'Space()',
+ vertical: 'Vertical bar(|)',
+ },
+ tabs: {
+ progress: 'Progress',
+ result: 'Execution Result',
+ log: 'Execution Log',
+ history: 'History',
+ diagnosis: 'Intelligent Diagnosis',
+ },
+ notice: {
+ unsave: {
+ title: 'Notice',
+ desc: 'Your temporary script has been updated, please mind to save!',
+ },
+ sendStart: {
+ title: 'Execution Notice',
+ render: 'Start to execute the script',
+ },
+ querySuccess: {
+ title: 'Execution Result Notice',
+ render: 'Successfully executed script, time elapsed:',
+ },
+ notice: {
+ title: 'Execution Result Notice',
+ },
+ kill: {
+ title: 'Execution Notice',
+ desc: 'Stopped executing this script',
+ },
+ },
+ steps: {
+ title: 'Job Status',
+ stepsInfo: {
+ Submitted: 'Submitted',
+ Inited: 'waiting',
+ Scheduled: 'Applying Resources',
+ Running: 'Running',
+ Succeed: 'Succeeded',
+ ResultLoading: 'Loading Result',
+ Completed: 'Completed',
+ Failed: 'Failed',
+ Cancelled: 'Canceled',
+ FailedToGetResult: 'Failed to request result set',
+ FailedToGetResultPath: 'Failed to request result set path',
+ FailedToGetResultList: 'Failed to request result set list',
+ FailedToGetResultFirst:
+ 'Failed to request the first result set',
+ WaitForRetry: 'Waiting for retry',
+ FailedToApply: 'Failed to apply resources',
+ FailedToExecute: 'Execution Failed',
+ notResult: 'No Result Set Generated',
+ },
+ hoverList: {
+ first: '1.Successfully requested result set path...',
+ second: '2.Successfully requested result set list...',
+ },
+ },
+ resultsExport: {
+ header: 'Export Result Set',
+ formItems: {
+ name: {
+ label: 'Name',
+ placeholder: 'Please enter the name exported as……',
+ title: 'The suffix to export as can be configured in Control Panel-Settings-Application Level-PipeLine!',
+ },
+ path: {
+ label: 'Storage Path',
+ title: 'Export Result Set',
+ isSheet:
+ 'Whether to import multiple results Group into different sheets of export!',
+ },
+ },
+ rules: {
+ name: {
+ required: 'Please enter the name',
+ lengthLimit: 'Length between 1 to 200 characters',
+ letterTypeLimit:
+ 'Only Chinese characters, alphanumeric characters and underscore are allowed',
+ },
+ path: {
+ required: 'Please choose the path to export!',
+ },
+ },
+ },
+ progress: {
+ title: 'Execution Progress',
+ watingList: '{num} jobs wating in front',
+ columns: {
+ id: {
+ title: 'Name',
+ },
+ progress: {
+ title: 'Progress Bar',
+ },
+ taskNum: {
+ title: 'Number of Tasks',
+ status: {
+ running: 'Running',
+ success: 'Succeeded',
+ fail: 'Failed',
+ totalTasks: 'Total Number of Tasks',
+ },
+ },
+ },
+ },
+ execute: {
+ waitingQueue: '{num} jobs wating in front',
+ error: {
+ getResultList:
+ 'Failed to request result set, please contact the admin!',
+ queryTimeout: 'Query timeout, please execute again!',
+ noResultList: 'No result set generated by this script!',
+ errorLog:
+ 'Failed to request result set, please contact the admin!',
+ failed: 'Failed to execute, please check logs for the reason, or feedback the key information in your execution history to admin!',
+ canceled: 'Execution already canceled!',
+ executeTimeout:
+ 'Execution timeout, please check logs for the reason, or feedback the key information in your execution history to admin!',
+ },
+ success: {
+ getResultList: ' Successfully requested result set!',
+ stateEnd:
+ 'Successfully executed task, requesting result set in progress!',
+ },
+ },
+ functionView: {
+ formItems: {
+ name: 'Funtion Name',
+ createUser: 'Creator/Department',
+ updateTime: 'Updated at',
+ useFormat: 'Using Format',
+ description: 'Funtion Description',
+ },
+ },
+ navBar: {
+ addTitle: 'New Directory',
+ dataStudio: {
+ outTable: 'Export Table',
+ importHive: 'Import to Hive',
+ addTitle: 'New directory',
+ searchPlaceholder:
+ 'Please enter file or directory name to search',
+ },
+ workSpace: {
+ searchPlaceholder:
+ 'Please enter file or directory name to search',
+ },
+ database: {
+ searchPlaceholder:
+ 'Please enter database or table name to search',
+ },
+ fnSideBar: {
+ searchPlaceholder:
+ 'Please enter directory or function name to search',
+ },
+ hdfs: {
+ searchPlaceholder:
+ 'Please enter directory or function name to search',
+ },
+ },
+ monacoMenu: {
+ YXJB: 'Run Script',
+ GSH: 'Format',
+ CZ: 'Search',
+ TH: 'Replace',
+ HZS: 'Line Comment',
+ ZT: 'Paste',
+ HBQWJCFZWB:
+ 'Sorry, no copied text detected by IDE, if you performed the copy operation outside IDE, please use ctrl+v to paste!',
+ TDZDH: 'Jump to Line',
+ GBYFJC: 'Close Syntax Check',
+ DKYFJC: 'Open Syntax Check',
+ GYFSYGWYF:
+ 'This is highly dangerous syntax, please be cautious!',
+ },
+ resourceSimple: {
+ YS: 'Scriptis',
+ FL: 'Category',
+ ZH: 'Visualis',
+ FLOW1: 'Flowexecution',
+ FLOW2: 'Scheduler',
+ ZWSJ: 'No data yet',
+ KX: 'Idle',
+ FM: 'Busy',
+ QD: 'Starting',
+ LX: 'By Category',
+ AZT: 'By Status',
+ DDJK: 'Waiting for API response!',
+ QDYQWFJS: 'Cannot shut down an engine with starting status!',
+ WXZYQ: 'No engine selected!',
+ RWGLQ: 'Task Management',
+ YQGLQ: 'Engine Management',
+ DLGLQ: 'Queue Management',
+ QX: 'Select All',
+ QXQX: 'Deselect All',
+ SX: 'Refresh',
+ JSRW: 'Cancel Task',
+ JSYQ: 'Shut Down Engine',
+ PDZ: 'Queueing',
+ ZYSQ: 'Applying Resources',
+ YX: 'Running',
+ YQ: 'Engine',
+ RW: 'Task',
+ WZJBMC: 'Unknown Script Name',
+ ZHJB: 'Visualis Script',
+ GZLJB: 'Workflow Script',
+ YQRW: 'Engine and Task',
+ JSYQRW: 'Terminate Engine and Tasks',
+ CKJBXX: 'View Script Information',
+ FZJBXX: 'Copy Script Information',
+ QXZYTJL: 'Please choose a record!',
+ WHQD: 'The task is initializing. The end operation cannot be performed. Please wait until the task initialization is complete',
+ WHQDENGINE:
+ 'Failed to get engineInstance, please contact admin for investigation or waiting!',
+ YXTS: 'Execution Hints',
+ YJTZZXJB: 'Stopped Executing Script',
+ JSYQHRWCG: 'Successfully Terminated Engine and Tasks',
+ DKCG: 'Successfully Open',
+ JBFZDZTRB:
+ 'Copied script information to clipboard, please use ctrl+v to paste!',
+ XZDL: 'Please choose a queue',
+ ZYSYL: 'Resource Consumption Rate',
+ H: 'Cores',
+ NC: 'Memory',
+ ZYSYPHB: 'Ranking of Resource Consumption',
+ ZW: 'No data yet',
+ },
+ headerNavBar: {
+ Workflow: 'Workflow Development',
+ Exchangis: 'Data Exchange Component',
+ Scriptis: 'Data Development Component',
+ Qualitis: 'Data Governance Component',
+ Visualis: 'Data Visualization Component',
+ Schedulis: 'Workflow Schedule Component',
+ LinkisConsole: 'Linkis Console',
+ },
+ userMenu: {
+ title: 'Warning',
+ content:
+ 'This operation will clear the local database cache, leading to loose your script logs, history and result set information, please confirm whether there are scripts unsaved!
Click OK button to continue?
',
+ clearCacheSuccess: 'Successfully cleared local cache!',
+ comingSoon: 'Planning in progress, please stay tuned!',
+ },
+ login: {
+ loginTitle: 'Welcome to Linkis Console!',
+ userName: 'Please enter your username',
+ remenber: 'Remember me',
+ login: 'Login',
+ passwordHint: 'Please enter your password',
+ password: 'Please enter password!',
+ loginSuccess: 'Login Success',
+ haveLogin:
+ 'You have already logged in, please do not login repeatedly',
+ vaildFaild: 'Authentication failed!',
+ toRegister: 'No account? Create one',
+ selectProxyTip: 'No select proxy',
+ },
+ dynamicForm: {
+ rule: {
+ emptyKey: 'key is empty',
+ lengthLimit: 'Length exceeds 128 characters',
+ nameVaild:
+ 'Starts with alphabetic characters; Space and Chinese characters are not allowed',
+ emptyValue: 'value is empty',
+ },
+ namePlaceholder: 'Please enter {title} name',
+ placeholderInput: 'Please enter the value',
+ someKey: 'Duplicated key found',
+ },
+ deleteDialog: {
+ waring: 'Warning',
+ action: 'Yes',
+ isNext: 'Continue or not?',
+ overThe: 'Stop this',
+ engine: 'Engine',
+ task: 'Task',
+ engineAndTask: 'Engine and task',
+ },
+ toolbar: {
+ replace: 'Please choose the empty value to replace:',
+ emptyString: 'Empty string',
+ analysis: 'Visualization',
+ window: 'Visualization window',
+ export: 'Export',
+ format: 'Please choose the download format:',
+ exportFormat: 'Format:',
+ coding: 'Please choose the encoding:',
+ model: 'Please choose the model:',
+ graphAnalysis: 'Graph Analysis',
+ excelAnalysis: 'Excel Analysis',
+ lineFilter: 'Line Filter',
+ resultGroupLineFilter: 'Result Group Line Filter',
+ resultGroup: 'Result Group',
+ all: 'all',
+ autoFormat: 'Auto Format',
+ downloadMode: 'Download Mode :',
+ deepAnalysis: 'Deep Analysis',
+ success: {
+ download:
+ 'Successfully downloaded, please check from the local download directory!',
+ },
+ rowToColumn: 'Switch row to column',
+ rowToColumnTitle: 'View current row details',
+ selectSeparator: 'Please select a custom separator:',
+ },
+ tableRow: {
+ detail: 'Details of the selected row',
+ search: 'Search……',
+ columnName: 'Column name',
+ value: 'Value',
+ dataType: 'Data type',
+ },
+ statusType: {
+ all: 'All',
+ inited: 'Waiting',
+ running: 'Running',
+ succeed: 'Succeeded',
+ cancelled: 'Canceled',
+ failed: 'Failed',
+ scheduled: 'Applying Resources',
+ timeout: 'Timeout',
+ retry: 'Retry',
+ unknown: 'Unknown',
+ },
+ countList: {
+ all: 'Total',
+ succeed: 'Succeed',
+ inited: 'Inited',
+ running: 'Running',
+ failed: 'Failed',
+ others: 'Others',
+ },
+ time: {
+ MIN: 'MIN',
+ HOUR: 'HOUR',
+ DAY: 'DAY',
+ WEEK: 'WEEK',
+ MONTH: 'MONTH',
+ YEAR: 'YEAR',
+ Mon: 'Mon',
+ Tue: 'Tue',
+ Wed: 'Wed',
+ Thu: 'Thu',
+ Fri: 'Fri',
+ Sat: 'Sat',
+ Sun: 'Sun',
+ second: 'Second',
+ minute: 'Minute',
+ hour: 'Hour',
+ day: 'Day',
+ },
+ warning: {
+ api: 'Requesting API, please hold on!',
+ data: 'Requesting data, please hold on!',
+ waiting: 'Please wait for API response!',
+ biLoading: 'Connecting with Visualis, please hold on!',
+ comingSoon: 'New version is being integrated, so stay tuned !',
+ GJZ: 'Open source co-construction is in progress, so stay tuned!',
+ },
+ },
+ linkis: {
+ sourceInfo: 'Source Info',
+ refresh: 'Refresh',
+ engineConfig: 'Engines',
+ applicationDesc: 'Desc',
+ applicationName: 'Name',
+ addApplicationAndEngine: 'ADD',
+ applicationAndEngine: 'Manage',
+ globalTaskQuery: 'GlobalTaskQuery',
+ confirmToStop: 'Confirm',
+ noDescription: 'No description',
+ placeholderZip:
+ 'Please enter the workspace Python package path (only zip is supported)!',
+ emptyString: 'Empty String',
+ description: 'Description',
+ name: 'Name',
+ order: 'Order',
+ addParameterConfig: 'Add Parameter Configuration',
+ addEngineType: 'Add Engine Type',
+ editDescriptionEngineConfig: 'Edit Description Engine Config',
+ addAppType: 'Add Application Type',
+ editContents: 'Add Contents',
+ ConfirmEdit: 'Done',
+ serviceRegistryCenter: 'Service Registry Center',
+ addTags: 'Add Tags',
+ unfold: 'Unfold',
+ fold: 'Fold',
+ jumpPage: 'Please check in the jump page...',
+ initiator: 'Created From',
+ inputOwnerHint: 'Please input owner',
+ find: 'Find',
+ errorCode: 'Error Code',
+ errorDescription: 'Error Description',
+ notLog: 'Log not obtained!',
+ editedSuccess: 'Edited success!',
+ stopEngineTip: 'Are you sure you want to stop the current engine?',
+ addVariable: 'Add Variable',
+ defaultValue: 'Default',
+ noDefaultValue: 'No default value',
+ stop: 'Stop',
+ tip: 'Tip',
+ serverTip: 'No Results(resultLocation:null)',
+ log: 'Task Log',
+ detail: 'Task Detail',
+ result: 'Task Result',
+ startUp: 'Start-up',
+ tagEdit: 'Edit',
+ tipForKill:
+ 'The unlock engines of ECM [{instance}}] will be killed',
+ killAll: 'Kill Unlock Engine',
+ allEngine: 'Include Multiple User Engine?',
+ killFinishedInfo:
+ 'Expected to stop {killEngineNum} engines, will release ECM {cores}cores,{memory}G resources',
+ yes: 'Yes',
+ no: 'No',
+ noDataTextBeforeSearch: 'Please input the execution code for query',
+ noDataTextAfterSearch: 'No data yet',
+ rename: 'Rename',
+ instanceNum: 'Instance Number',
+ keyTip: 'The key cannot be empty',
+ instanceName: 'Instance Name',
+ resources: 'Resources',
+ reset: 'Reset',
+ clearSearch: 'Clear',
+ showOperations: 'Show Operations',
+ hide: 'Hide',
+ resetAll: 'Reset All',
+ remove: 'Remove',
+ submit: 'Submit',
+ search: 'Search',
+ save: 'Save',
+ edit: 'Edit',
+ cancel: 'Cancel',
+ create: 'Create',
+ noDataText: 'No data yet',
+ jobId: 'JobID',
+ userName: 'Username',
+ password: 'Password',
+ unselect: 'Please select task',
+ noselection: 'Please select first',
+ searchName: 'Please enter username to search',
+ generalView: 'Switch to the Common View',
+ manageView: 'Switch to the Admin View',
+ back: 'Back',
+ prev: 'Previous Step',
+ complete: 'Complete',
+ close: 'Close',
+ udfName: 'UDF Name',
+ udfType: 'UDF Type',
+ nextPage: 'Next Page',
+ previousPage: 'Previous Page',
+ all: 'All',
+ common: 'Common',
+ tenant: 'Tenant',
+ inputTenant: 'Please Input Tenant',
+ globalSettings: 'GlobalSettings',
+ resultSet: {
+ prefixText:
+ 'Because your result set is large, for a better experience, ',
+ linkText: 'View result set',
+ largeResultTips:
+ 'The front end displays only 5000 pieces of data',
+ },
+ needPre: 'Need to select category and input username before',
+ warning: {
+ api: 'Requesting API, please hold on!',
+ data: 'Requesting data, please hold on!',
+ waiting: 'Please wait for API response!',
+ biLoading: 'Connecting with Visualis, please hold on!',
+ comingSoon: 'New version is being integrated, so stay tuned !',
+ GJZ: 'Open source co-construction is in progress, so stay tuned!',
+ },
+ resourceManagement: {
+ resourceUsage: 'Resource usage',
+ applicationList: 'Applications',
+ },
+ time: {
+ second: 'Second',
+ minute: 'Minute',
+ hour: 'Hour',
+ day: 'Day',
+ },
+ tableColumns: {
+ instanceName: 'Instance Name',
+ initiator: 'Initiator',
+ engineInstance: 'Engine Instance',
+ engineType: 'Engine Type',
+ serveType: 'Serve Type',
+ appType: 'App Type',
+ taskID: 'JobID',
+ fileName: 'Source',
+ executionCode: 'Execution Code',
+ status: 'Status',
+ label: 'Label',
+ engineVersion: 'Engine Version',
+ engineVersionCannotBeNull: 'Engine Version Cannot Be Null',
+ addEngineRules:
+ 'Engine Name Cannot Have Special Symbols And Spaces',
+ lockedResource: 'Locked Resources',
+ usedResources: 'Used Resources',
+ maximumAvailableResources: 'Maximum Available Resources',
+ minimumAvailableResources: 'Minimum Available Resources',
+ startTime: 'Start Time',
+ costTime: 'Time Elapsed',
+ executeApplicationName: 'Execution Engine',
+ creator: 'Created From',
+ user: 'User',
+ createdTime: 'Created at',
+ updateTime: 'Update Time',
+ failedReason: 'Key Information',
+ control: {
+ title: 'Handle',
+ label: 'View',
+ },
+ queenRemain: 'Queen Remain',
+ queueUsed: 'Queue Used',
+ queueTop: 'Queue Max',
+ engineRemain: 'Engine Remain',
+ engineUsed: 'Engine Used',
+ engineTop: 'Engine Max',
+ versioTips:
+ 'If no engine version is available, check whether the engine materials of the corresponding version are installed',
+ applicationRole: 'Application role',
+ },
+ logLoading: 'Requesting logs, please hold on',
+ title: 'Linkis Control Panel',
+ info: '{num} new messages',
+ hint: 'Please view in the redirected page……',
+ sideNavList: {
+ news: {
+ name: 'Latest Activities',
+ children: {
+ daily: 'Daily Operation Report',
+ },
+ },
+ function: {
+ name: 'Frequently Used',
+ children: {
+ globalHistory: 'Global History',
+ resource: 'Resource Management',
+ resourceEngineConnList: 'History Engine',
+ setting: 'Settings',
+ dateReport: 'Global Variables',
+ globalValiable: 'Frequently Asked',
+ microserviceManage: 'Microservice Management',
+ ECMManage: 'ECM Management',
+ udfFunctionTitle: 'UDF Function',
+ udfFunctionManage: 'UDF Management',
+ dataSourceManage: 'DataSource Management',
+ userResourceManagement: 'User Resource Management',
+ tenantTagManagement: 'Tenant Tag Management',
+ ipListManagement: 'White List Management',
+ errorCode: 'Error Manage',
+ gatewayAuthToken: 'Token Manage',
+ engineConfigurationTemplate:
+ 'Engine Configuration Template',
+ rmExternalResourceProvider:
+ 'External Resource Provider Manage',
+ udfManager: 'UDF User Manage',
+ udfTree: 'UDF Tree',
+ datasourceAccess: 'Data source access permissions',
+ datasourceEnv: 'DataSource Environment',
+ datasourceType: 'DataSource Type',
+ datasourceTypeKey: 'Datasource Config Options',
+ EnginePluginManagement: 'Engine Plugin Management',
+ basedataManagement: 'Basic Data Management',
+ codeQuery: 'Code Retrieval',
+ EngineConnList: 'Engine Conn List',
+ },
+ },
+ },
+ modal: {
+ modalTitle: 'Prompt message ',
+ modalDelete: 'Confirm whether to delete the [{name} option?',
+ modalDeleteRecord: 'Confirm whether to delete the record?',
+ modalDeleteTask: 'Confirm whether to stop the selected task?',
+ modalDeleteInstance:
+ 'Determines whether to stop the current selected instance?',
+ modalDeleteSuccess: 'Deleted successfully',
+ modalDeleteFail: 'Delete failed',
+ },
+ formItems: {
+ id: {
+ placeholder: 'Please search by entering the ID',
+ },
+ date: {
+ label: ' Start Date',
+ placeholder: 'Please choose the start date',
+ },
+ instance: {
+ label: 'Instance',
+ placeholder: 'Please search by entering the instance',
+ },
+ creator: {
+ label: 'Creator',
+ placeholder: 'Please search by entering the creator',
+ },
+ engine: {
+ label: 'Engine',
+ },
+ status: {
+ label: 'Status',
+ },
+ appType: 'App Type',
+ engineType: 'Engine',
+ },
+ columns: {
+ taskID: 'Task ID',
+ fileName: 'Script Name',
+ executionCode: 'Execution Code',
+ status: 'Status',
+ costTime: 'Time Elapsed',
+ executeApplicationName: 'Execution Engine',
+ requestApplicationName: 'Created From',
+ progress: 'Progress',
+ createdTime: 'Created at',
+ updatedTime: 'Updated at',
+ control: {
+ title: 'Handle',
+ label: 'View',
+ },
+ moduleName: 'Module Name',
+ totalResource: 'Total Resources',
+ usedResource: 'Used Resources',
+ initializingResource: 'Initing Resources',
+ memory: 'Memory',
+ engineInstance: 'Engine Instance',
+ applicationName: 'Application Name',
+ usedTime: 'Started at',
+ engineStatus: 'Status',
+ username: 'Username',
+ },
+ shortcuts: {
+ week: '1Week',
+ month: '1Month',
+ threeMonths: '3Months',
+ },
+ statusType: {
+ all: 'All',
+ inited: 'Waiting',
+ running: 'Running',
+ succeed: 'Succeeded',
+ cancelled: 'Canceled',
+ failed: 'Failed',
+ scheduled: 'Applying Resources',
+ timeout: 'Timeout',
+ retry: 'Retry',
+ unknown: 'Unknown',
+ },
+ engineTypes: {
+ all: 'All',
+ },
+ header: 'Resource Manager',
+ tabs: {
+ first: 'User Sessions',
+ second: 'User Resources',
+ third: 'Server Resources',
+ },
+ noLimit: 'Unlimited',
+ core: 'Cores',
+ row: {
+ applicationName: 'Application Name',
+ usedTime: 'Started at',
+ engineStatus: 'Status',
+ engineInstance: 'Engine Instance',
+ queueName: 'Queue Name',
+ user: 'User',
+ cpu: 'Used server CPU resources',
+ memory: 'Used server memory resources',
+ queueCpu: 'Used Yarn queue CPU resources',
+ queueMemory: 'Used Yarn queue memory resources',
+ },
+ setting: {
+ global: 'Global',
+ globalSetting: 'Global Settings',
+ hide: 'Hide',
+ show: 'Show',
+ advancedSetting: 'Advanced Settings',
+ dataDev: 'Data Development',
+ },
+ globalValiable: 'Global Variables',
+ rules: {
+ first: {
+ required: 'The key of variable {text} is empty',
+ lengthLimit: 'Length between 1 to 128 characters',
+ letterTypeLimit:
+ 'Started with alphabetic characters, spance and Chinese characters are not allowed',
+ placeholder: 'Please enter the variable name',
+ },
+ second: {
+ required: 'The value of variable {text} is empty',
+ lengthLimit: 'Length between 1 to 128 characters',
+ placeholder: 'Please enter the variable value',
+ },
+ },
+ addArgs: 'New argument',
+ emptyDataText: 'No global variable data yet',
+ sameName: 'Duplicated key',
+ error: {
+ validate: 'Invalid items found, please check and then retry!',
+ },
+ success: {
+ update: 'Successfully updated global variables!',
+ },
+ searchAppType: 'Please enter App Type',
+ resetTip: 'Are you sure to reset the resource?',
+ resetAllTip:
+ 'Whether to reset all user resources (this operation will only clean up user resource records, not the resources that have been generated)?',
+ viewlog: 'View Log',
+ datasource: {
+ pleaseUpload: 'Please upload',
+ pleaseInput: 'Please input',
+ datasourceSrc: 'DataSource',
+ connectTest: 'Test Connection',
+ sourceName: 'DataSource Name',
+ sourceDec: 'DataSource Description',
+ sourceType: 'DataSource Type',
+ creator: 'Creator',
+ create: 'Add Source',
+ exports: 'Export Sources',
+ imports: 'Importing Sources',
+ overdue: 'Expire',
+ versionList: 'Version list',
+ dataSourceName: 'DataSource Name',
+ dataSourceType: 'DataSource Type',
+ createSystem: 'Create System',
+ dataSourceEnv: 'Available Space',
+ status: 'Status',
+ permissions: 'Permissions',
+ label: 'Label',
+ version: 'Version',
+ desc: 'Description',
+ action: 'Action',
+ createUser: 'Create User',
+ createTime: 'Create Time',
+ versionDec: 'Version Description',
+ watch: 'View',
+ rollback: 'Rollback',
+ publish: 'Publish',
+ initVersion: 'Initial Version',
+ updateVersion: 'Version Update',
+ published: 'Published',
+ unpublish: 'Unpublished',
+ cannotPublish: 'Cannot publish',
+ used: 'Available',
+ commentValue: 'Roll back from version {text}',
+ undefinedVersion: 'Cannot find the version of DataSource',
+ },
+ tenantTagManagement: {
+ userName: 'User Name',
+ appName: 'Application Name',
+ tenantTag: 'Tenant Tag',
+ search: 'Search',
+ clear: 'Clear',
+ create: 'Create',
+ userCreator: 'User-Creator',
+ createUser: 'Create User',
+ createTime: 'Create Time',
+ desc: 'Description',
+ inputUser: 'Please Input User',
+ inputApp: 'Please Input Application',
+ inputTenant: 'Please Input Tenant Tag',
+ inputDesc: 'Please Input Description',
+ inputCreateUser: 'Please Input Creare User',
+ yourTagMapping: 'Your Tag Mapping',
+ notEmpty: 'Cannot be empty',
+ maxLen: 'A maximum of 100 characters is allowed',
+ contentError: 'English, numbers, asterisk and underline only',
+ contentError1: 'English, numbers and underline only',
+ contentError2: 'English, numbers, underscores and dashes only',
+ check: 'Check',
+ OK: 'OK',
+ Cancel: 'Cancel',
+ action: 'Action',
+ edit: 'Edit',
+ delete: 'Delete',
+ userIsExisted: 'User Tag Already Exists',
+ addSuccessful: 'Successfully Addded',
+ editSuccessful: 'Successfully edited',
+ confirmDel: 'Confirm Deletion',
+ isConfirmDel:
+ 'Are you sure you want to delete this tag({name})',
+ },
+ ipListManagement: {
+ userName: 'User Name',
+ appName: 'Application Name',
+ ipList: 'IP List',
+ search: 'Search',
+ clear: 'Clear',
+ create: 'Create',
+ userCreator: 'User-Creator',
+ createUser: 'Create User',
+ createTime: 'Create Time',
+ desc: 'Description',
+ inputUser: 'Please Input User',
+ inputApp: 'Please Input Application',
+ inputIpList: 'Please Input IP List',
+ inputDesc: 'Please Input Description',
+ inputCreateUser: 'Please Input Creare User',
+ yourTagMapping: 'Your Tag Mapping',
+ notEmpty: 'Cannot be empty',
+ maxLen: 'A maximum of 100 characters is allowed',
+ contentError: 'English, numbers, asterisk and underline only',
+ contentError1: 'English, numbers and underline only',
+ contentError2: 'English, numbers, underscores and dashes only',
+ ipContentError:
+ 'Please enter IP addresses in correct format.(Multiple IP addresses pass through, separate)',
+ check: 'Check',
+ OK: 'OK',
+ Cancel: 'Cancel',
+ action: 'Action',
+ edit: 'Edit',
+ delete: 'Delete',
+ userIsExisted: 'User Tag Already Exists',
+ addSuccessful: 'Successfully Addded',
+ editSuccessful: 'Successfully edited',
+ confirmDel: 'Confirm Deletion',
+ isConfirmDel:
+ 'Are you sure you want to delete this tag({name})',
+ },
+ codeQuery: {
+ executionCode: 'Execution Code',
+ dateRange: 'Date Range',
+ placeholder: {
+ executionCode: 'Please input execution code',
+ dateRange: 'Please select date range',
+ status: 'Please select status',
+ },
+ inputCode: 'Please input execution code',
+ id: 'ID',
+ code: 'Code',
+ check: 'View',
+ search: 'Search',
+ clear: 'Clear',
+ status: 'Status',
+ submitUser: 'Submit User',
+ createdTime: 'Created Time',
+ searchRange: 'Only T-1 history code can be queried',
+ },
+ basedataManagement: {
+ add: 'Add',
+ remove: 'Remove',
+ edit: 'Edit',
+ searchLabel: 'Fuzzy Search:',
+ searchPlaceholder: 'Please enter your search',
+ search: 'Search',
+ action: 'Action',
+ categoryMaxLength: 'The length cannot exceed 100',
+ modal: {
+ confirm: 'Confirm',
+ cancel: 'Cancel',
+ modalTitle: 'Info',
+ modalFormat: 'Confirm deleting the {0} record?',
+ modalDelete1:
+ 'Confirm that the record [{name}] should be deleted?',
+ modalDelete:
+ 'Confirm that the record [{name}] should be deleted?',
+ modalDeleteSuccess: 'Successfully delete',
+ modalDeleteFail: 'Fail to delete',
+ modalAddSuccess: 'Successfully added',
+ modalAddFail: 'Fail to add',
+ modalEditSuccess: 'Edit successful',
+ modalEditFail: 'Edit failure',
+ },
+ addUDFAdmin: 'Add UDF administrator',
+ engineConfigurationTemplate: {
+ engineLabelId: 'Engine Label Id',
+ advanced: 'Advanced',
+ defaultValue: 'Default Value',
+ description: 'Description',
+ engineConnType: 'Engine Type',
+ key: 'Key',
+ level: 'Level',
+ name: 'Name',
+ treeName: 'Tree Name',
+ validateRange: 'Validate Range',
+ validateType: 'Validate Type',
+ hidden: 'hidden',
+ id: 'ID',
+ engineLabelList: 'Engine Label List',
+ yes: 'yes',
+ no: 'no',
+ delSuccess: 'Deletion succeeded',
+ delFail: 'Deletion failed',
+ ModSuccess: 'Modification succeeded',
+ ModFail: 'Modification failed',
+ edit: 'edit',
+ },
+ gatewayAuthToken: {
+ tokenName: 'Token Name',
+ legalUsers: 'Legal Users',
+ legalHosts: 'Legal Hosts',
+ elapseDay: 'Elapse Day',
+ permanentlyValid: 'Permanently Valid',
+ businessOwner: 'Owner',
+ createTime: 'Create Time',
+ updateTime: 'Update Time',
+ updateBy: 'Update By',
+ searchPlaceholder: 'TokenName/Users/Hosts',
+ info: 'Elapse Day: -1 means permanent',
+ legalUsersInfo:
+ '* Allow all users; Multi-user use, separated, for example :user1,user2',
+ legalUsersValidate: {
+ empty: 'Please enter the Users',
+ },
+ legalHostsInfo:
+ '* Allow all hosts; Use multiple hosts, separated, for example :host1,host2',
+ legalHostsInfoValidate: {
+ empty: 'Please enter the Hosts',
+ },
+ elapseDayValidate: {
+ size: 'The Elapse Day cannot be less than -1',
+ empty: 'Please enter the elapse day',
+ GT0: 'Valid days must be greater than 0',
+ },
+ },
+ errorCode: {
+ errorCode: 'Code',
+ errorDesc: 'Desc',
+ errorRegex: 'Regex',
+ searchPlaceholder: 'Code/Desc/Regex',
+ },
+ rmExternalResourceProvider: {
+ resourceType: 'Resource Type',
+ name: 'Name',
+ labels: 'Labels',
+ config: 'Config',
+ searchPlaceholder: 'Name/Labels/Config',
+ },
+ udfManager: {
+ userName: 'User Name',
+ searchPlaceholder: 'UserName',
+ userNameValidate: {
+ size: 'Usernames cannot be longer than 20 characters',
+ empty: 'Please enter your username',
+ },
+ },
+ udfTree: {
+ name: 'Name',
+ category: 'Category',
+ userName: 'User Name',
+ description: 'Description',
+ parent: 'Parent',
+ createTime: 'Create Time',
+ updateTime: 'Update Time',
+ searchPlaceholder: 'Name/Category/Desc/UserName',
+ parentInfo:
+ 'Parent classification, Root is the root directory',
+ },
+ datasourceEnv: {
+ envName: 'Env Name',
+ envDesc: 'Env Desc',
+ name: 'Name',
+ datasourceType: 'Datasource Type',
+ keytab: 'Kerboros',
+ parameter: 'Parameter',
+ createTime: 'Create Time',
+ createUser: 'Create User',
+ updateTime: 'Update Time',
+ modifyUser: 'Modify User',
+ searchPlaceholder: 'EnvName/EnvDesc/Param',
+ },
+ datasourceType: {
+ name: 'Name',
+ description: 'Description',
+ option: 'Option',
+ classifier: 'Classifier',
+ icon: 'Icon',
+ layers: 'Layers',
+ searchPlaceholder: 'Name/Desc/Classifier',
+ layersValidate: {
+ range: 'The minimum is 0',
+ },
+ },
+ datasourceTypeKey: {
+ key: 'Key',
+ dataSourceType: 'Datasource Type',
+ name: 'Name(Chinese)',
+ nameEn: 'Name',
+ valueType: 'Value Type',
+ scope: 'Scope',
+ require: 'Require',
+ defaultValue: 'Default Value',
+ description: 'Description(Chinese)',
+ descriptionEn: 'Description',
+ valueRegex: 'Value Regex',
+ createTime: 'Create Time',
+ updateTime: 'Update Time',
+ searchPlaceholder: 'Name',
+ searchName: '名称',
+ searchType: '类型',
+ all: 'All',
+ },
+ },
+ basedata: {
+ add: 'Add',
+ remove: 'Remove',
+ edit: 'Edit',
+ addUDFAdmin: 'Add UDF Administrator',
+ search: 'Search',
+ envName: 'Environment Name',
+ envDesc: 'Environment Description',
+ dataSourceName: 'DataSource Name',
+ parameter: 'Parameter',
+ createTime: 'Create Time',
+ creator: 'Creator',
+ modifyUser: 'Modify User',
+ updateTime: 'Update Time',
+ action: 'Action',
+ Reset: 'Reset',
+ delete: 'Delete',
+ update: 'Update',
+ updateFileOnly: 'Update',
+ resourceVersion: 'Resource Version',
+ user: 'User',
+ deleteCurrentbml: 'Delete',
+ versionList: 'Version List',
+ rollback: 'Rollback',
+ checkEngineConnTypeAndVersion:
+ 'Please select the engine type and version',
+ upload: 'Please click the button to upload the engine plugin',
+ },
+ task: {
+ projectName: 'Project Name',
+ workflowName: 'Workflow Name',
+ workflowIp: 'Workflow IP',
+ },
+ },
+ },
+};
diff --git a/linkis-web-next/src/locales/index.ts b/linkis-web-next/src/locales/index.ts
new file mode 100644
index 0000000000..863a838652
--- /dev/null
+++ b/linkis-web-next/src/locales/index.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import en from './en';
+import zh from './zh';
+
+export default {
+ zh,
+ en,
+};
diff --git a/linkis-web-next/src/locales/zh.ts b/linkis-web-next/src/locales/zh.ts
new file mode 100644
index 0000000000..45addfb112
--- /dev/null
+++ b/linkis-web-next/src/locales/zh.ts
@@ -0,0 +1,1045 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ message: {
+ common: {
+ statisticsTime: '数据统计时间',
+ fullScreen: '全屏',
+ log: '日志',
+ diagnosis: '智能诊断',
+ watermaskText: '由DataWorkShop生成,仅供内部参考,严禁对外分享',
+ filter: '过滤',
+ saveToWidget: '保存widget到解决方案',
+ script: '脚本',
+ refresh: '刷新',
+ download: '下载',
+ submit: '确定',
+ saveSuccess: '保存成功',
+ detail: '详情',
+ FAQ: '常见问题',
+ clearCache: '清理缓存',
+ logOut: '退出登录',
+ action: '操作',
+ path: '请选择路径',
+ resultList: '结果集',
+ process: '任务ID',
+ ok: '确认',
+ cancel: '取消',
+ delete: '删除',
+ failedNotice: '验证项未通过,请检查后再试!',
+ logoName: 'Linkis',
+ project: '工程',
+ home: '首页',
+ management: '管理台',
+ bbs: '论坛',
+ feedback: '反馈',
+ exceptionTips: '后台接口异常,请联系开发处理!',
+ separator: {
+ comma: '逗号(,)',
+ tab: 'tab键(\\t)',
+ semicolon: '分号(;)',
+ space: '空格()',
+ vertical: '竖线(|)',
+ },
+ tabs: {
+ progress: '进度',
+ result: '运行结果',
+ log: '运行日志',
+ history: '历史',
+ diagnosis: '智能诊断',
+ },
+ notice: {
+ unsave: {
+ title: '提醒',
+ desc: '您的临时脚本已修改,请注意保存!',
+ },
+ sendStart: {
+ title: '运行提示',
+ render: '开始执行脚本',
+ },
+ querySuccess: {
+ title: '执行结果提示',
+ render: '脚本执行成功,共耗时',
+ },
+ notice: {
+ title: '执行结果提示',
+ },
+ kill: {
+ title: '运行提示',
+ desc: '已经停止执行脚本',
+ },
+ },
+ steps: {
+ title: 'Job状态',
+ stepsInfo: {
+ Submitted: '任务已提交',
+ Inited: '排队中',
+ Scheduled: '资源申请中',
+ Running: '脚本运行中',
+ Succeed: '成功',
+ ResultLoading: '读取结果集中',
+ Completed: '完成',
+ Failed: '执行失败',
+ Cancelled: '已取消',
+ FailedToGetResult: '获取结果集失败',
+ FailedToGetResultPath: '获取结果集路径失败',
+ FailedToGetResultList: '获取结果集列表失败',
+ FailedToGetResultFirst: '获取第一个结果集失败',
+ WaitForRetry: '等待重试',
+ FailedToApply: '申请资源失败',
+ FailedToExecute: '执行失败',
+ notResult: '未生成结果集',
+ },
+ hoverList: {
+ first: '1.获取结果集路径成功...',
+ second: '2.获取结果集列表成功...',
+ },
+ },
+ resultsExport: {
+ header: '结果集导出',
+ formItems: {
+ name: {
+ label: '导出名称',
+ placeholder: '请输入导出名称……',
+ title: '导出后缀可在管理台-常用功能-设置-应用级-pipeline中设置!',
+ },
+ path: {
+ label: '存储路径',
+ title: '结果集导出',
+ isSheet: '是否将多个结果集导出到excel的不同sheet',
+ },
+ },
+ rules: {
+ name: {
+ required: '请输入名称',
+ lengthLimit: '长度在1到200个字符',
+ letterTypeLimit: '仅支持中文、大小写字母、数字和下划线',
+ },
+ path: {
+ required: '请选择导出路径!',
+ },
+ },
+ },
+ progress: {
+ title: '运行进度',
+ watingList: '前面还有 {num} 个job在等待',
+ columns: {
+ id: {
+ title: '名称',
+ },
+ progress: {
+ title: '进度条',
+ },
+ taskNum: {
+ title: '任务数',
+ status: {
+ running: '运行中',
+ success: '成功',
+ fail: '失败',
+ totalTasks: '总任务',
+ },
+ },
+ },
+ },
+ execute: {
+ waitingQueue: '前面还有 {num} 个job',
+ error: {
+ getResultList: '获取结果集失败,请联系管理员!',
+ queryTimeout: '查询超时,请重新执行!',
+ noResultList: '脚本未生成结果集!',
+ errorLog: '获取结果集失败,请联系管理员!',
+ failed: '执行失败,请到日志中查看错误原因,或将历史中的关键信息反馈给管理员!',
+ canceled: '查询已被取消!',
+ executeTimeout:
+ '查询超时,请到日志中查看错误原因,或将历史中的关键信息反馈给管理员!',
+ },
+ success: {
+ getResultList: '获取结果集成功!',
+ stateEnd: '任务执行完成,正在获取结果集!',
+ },
+ },
+ functionView: {
+ formItems: {
+ name: '函数名称',
+ createUser: '创建人/部门',
+ updateTime: '修改时间',
+ useFormat: '使用格式',
+ description: '函数描述',
+ },
+ },
+ navBar: {
+ addTitle: '新建目录',
+ dataStudio: {
+ outTable: '导出表',
+ importHive: '导入hive',
+ addTitle: '新建目录',
+ searchPlaceholder: '请输入文件夹或文件名搜索',
+ },
+ workSpace: {
+ searchPlaceholder: '请输入文件夹或文件名搜索',
+ },
+ database: {
+ searchPlaceholder: '请输入数据库或表名搜索',
+ },
+ fnSideBar: {
+ searchPlaceholder: '请输入文件夹或函数名称搜索',
+ },
+ hdfs: {
+ searchPlaceholder: '请输入文件夹或函数名称搜索',
+ },
+ },
+ monacoMenu: {
+ YXJB: '运行脚本',
+ GSH: '格式化',
+ CZ: '查找',
+ TH: '替换',
+ HZS: '行注释',
+ ZT: '粘贴',
+ HBQWJCFZWB:
+ '很抱歉,IDE未监控到复制文本,如果您是在IDE系统外执行的复制操作,请使用ctrl+v组合键进行粘贴!',
+ TDZDH: '跳到指定行',
+ GBYFJC: '关闭语法检查',
+ DKYFJC: '打开语法检查',
+ GYFSYGWYF: '该语法属于高危语法,请谨慎操作!',
+ },
+ resourceSimple: {
+ YS: 'Scriptis',
+ FL: '分类',
+ ZH: 'Visualis',
+ FLOW1: '实时工作流',
+ FLOW2: '调度系统',
+ ZWSJ: '暂无数据',
+ KX: '空闲',
+ FM: '繁忙',
+ QD: '启动',
+ LX: '按类别',
+ AZT: '按状态',
+ DDJK: '请等待接口返回!',
+ QDYQWFJS: '启动状态引擎无法结束!',
+ WXZYQ: '未选中引擎!',
+ RWGLQ: '任务管理器',
+ YQGLQ: '引擎管理器',
+ DLGLQ: '队列管理器',
+ QX: '全选',
+ QXQX: '取消全选',
+ SX: '刷新',
+ JSRW: '结束任务',
+ JSYQ: '结束引擎',
+ PDZ: '排队中',
+ ZYSQ: '资源申请中',
+ YX: '运行',
+ YQ: '引擎',
+ RW: '任务',
+ WZJBMC: '未知脚本名称',
+ ZHJB: '知画脚本',
+ GZLJB: '工作流脚本',
+ YQRW: '引擎和任务',
+ JSYQRW: '结束引擎和任务',
+ CKJBXX: '查看脚本信息',
+ FZJBXX: '复制脚本信息',
+ QXZYTJL: '请选择一条记录!',
+ WHQD: '任务正在初始化,暂不能进行kill,请等候任务初始化完成',
+ WHQDENGINE: '未获取到engineInstance,请联系管理员查看!',
+ YXTS: '运行提示',
+ YJTZZXJB: '已经停止执行脚本',
+ JSYQHRWCG: '结束引擎和任务成功',
+ DKCG: '打开成功',
+ JBFZDZTRB: '脚本信息已复制到粘贴板,请使用ctrl+v组合键粘贴!',
+ XZDL: '请选择队列',
+ ZYSYL: '资源使用率',
+ H: '核',
+ NC: '内存',
+ ZYSYPHB: '资源使用排行榜',
+ ZW: '暂无',
+ },
+ headerNavBar: {
+ Workflow: '工作流开发',
+ Exchangis: '数据交换组件',
+ Scriptis: '数据开发组件',
+ Qualitis: '数据治理组件',
+ Visualis: '可视化组件',
+ Schedulis: '工作流调度组件',
+ LinkisConsole: 'Linkis 管理台',
+ },
+ userMenu: {
+ title: '警告',
+ content:
+ '此操作将清空本地数据库缓存,这样会丢失您的脚本日志、历史和结果集等相关信息,请确认是否有未保存的脚本!
点击确认按钮继续操作?
',
+ clearCacheSuccess: '清除本地数据缓存成功!',
+ comingSoon: '尚未开源,敬请期待!',
+ },
+ login: {
+ loginTitle: '欢迎登录Linkis系统!',
+ userName: '请输入用户名',
+ remenber: '记住当前用户',
+ login: '登录',
+ passwordHint: '请输入密码!',
+ loginSuccess: '登录成功',
+ haveLogin: '您已经登录,请不要重复登录',
+ vaildFaild: '验证未通过!',
+ selectProxyTip: '用户代理未选择!',
+ },
+ dynamicForm: {
+ rule: {
+ emptyKey: 'key为空',
+ lengthLimit: '长度超过128字符',
+ nameVaild: '仅支持以字母开头,且不得存在空格和中文',
+ emptyValue: 'value为空',
+ },
+ namePlaceholder: '请输入{title}名称',
+ placeholderInput: '请输入值',
+ someKey: '存在同名key',
+ },
+ deleteDialog: {
+ waring: '警告',
+ action: '是',
+ isNext: '是否继续?',
+ overThe: '结束该',
+ engine: '引擎',
+ task: '任务',
+ engineAndTask: '引擎和任务',
+ },
+ tableRow: {
+ detail: '选中行详情',
+ search: '搜索……',
+ columnName: '列名',
+ value: '值',
+ dataType: '数据类型',
+ },
+ toolbar: {
+ replace: '请选择替换空值:',
+ emptyString: '空字符串',
+ analysis: '可视化',
+ window: '可视化窗口',
+ export: '导出',
+ format: '请选择下载格式:',
+ exportFormat: '导出格式:',
+ coding: '请选择编码:',
+ model: '请选择分析模式',
+ graphAnalysis: '图表分析',
+ excelAnalysis: 'Excel分析',
+ lineFilter: '列筛选',
+ resultGroupLineFilter: '对结果集的列进行筛选',
+ resultGroup: '结果集',
+ all: '是否全量',
+ autoFormat: '自动格式化',
+ downloadMode: '下载方式:',
+ deepAnalysis: '分 析 进 阶',
+ success: {
+ download: '下载成功,请到本地的download文件夹查看!',
+ },
+ rowToColumn: '行转列',
+ rowToColumnTitle: '查看当前行详情',
+ selectSeparator: '请选择自定义分隔符:',
+ },
+ statusType: {
+ all: '全部',
+ inited: '排队中',
+ running: '运行',
+ succeed: '成功',
+ cancelled: '取消',
+ failed: '失败',
+ scheduled: '资源申请中',
+ timeout: '超时',
+ retry: '重试',
+ unknown: '未知',
+ },
+ time: {
+ MIN: ' 分钟',
+ HOUR: ' 小时',
+ DAY: ' 日',
+ WEEK: ' 周',
+ MONTH: ' 月',
+ YEAR: ' 年',
+ Mon: '星期一',
+ Tue: '星期二',
+ Wed: '星期三',
+ Thu: '星期四',
+ Fri: '星期五',
+ Sat: '星期六',
+ Sun: '星期日',
+ second: '秒',
+ minute: '分钟',
+ hour: '小时',
+ day: '天',
+ },
+ warning: {
+ api: '接口请求中,请稍候!',
+ data: '数据请求中,请稍候!',
+ waiting: '请等待接口返回!',
+ biLoading: '正在和Visualis系统通讯,请稍候!',
+ comingSoon: '尚未开源,敬请期待!',
+ },
+ },
+ linkis: {
+ sourceInfo: '来源信息',
+ refresh: '刷新',
+ engineConfig: '引擎配置',
+ applicationDesc: '应用描述',
+ applicationName: '应用名称',
+ applicationAndEngine: '应用及引擎管理',
+ addApplicationAndEngine: '添加应用及引擎',
+ globalTaskQuery: '全局任务查询',
+ batchStopping: '批量停止',
+ confirmToStop: '确定停止',
+ placeholderZip: '请输入工作空间python包路径(只支持zip)!',
+ emptyString: '空字符串',
+ addAppType: '新增应用类型',
+ editContents: '编辑目录',
+ ConfirmEdit: '完成编辑',
+ serviceRegistryCenter: '服务注册中心',
+ addParameterConfig: '新增参数配置',
+ addEngineType: '新增引擎类型',
+ editDescriptionEngineConfig: '编辑引擎配置',
+ name: '名称',
+ order: '顺序',
+ description: '描述',
+ noDescription: '暂无描述',
+ addTags: '添加标签',
+ find: '查询',
+ initiator: '创建者',
+ inputOwnerHint: '请输入创建者',
+ jumpPage: '请在跳转页面查看……',
+ editedSuccess: '修改成功',
+ errorCode: '错误码',
+ errorDescription: '错误描述',
+ notLog: '未获取到日志!',
+ unfold: '展开',
+ fold: '收起',
+ addVariable: '新增变量',
+ defaultValue: '默认值',
+ noDefaultValue: '无默认值',
+ stop: '停止',
+ tip: '提示',
+ serverTip: '无结果集(resultLocation:null)',
+ stopEngineTip: '请问确认要停止当前引擎?',
+ log: '任务日志',
+ detail: '任务详情',
+ result: '任务结果',
+ startUp: '启动',
+ tagEdit: '编辑',
+ tipForKill: '将要停止此ECM实例 【{instance}】上的空闲引擎',
+ killAll: '停止空闲引擎',
+ allEngine: '包含多用户引擎?',
+ killFinishedInfo:
+ '预计停止{killEngineNum}个引擎, 将释放 ECM {cores}cores,{memory}G 资源',
+ noDataTextBeforeSearch: '请输入执行代码进行查询',
+ noDataTextAfterSearch: '暂无数据',
+ yes: '是',
+ no: '否',
+ keyTip: '不能为空',
+ rename: '重命名',
+ resources: '资源',
+ instanceNum: '实例数',
+ instanceName: '实例名称',
+ reset: '重置',
+ clearSearch: '清空',
+ showOperations: '显示操作',
+ hide: '隐藏操作',
+ resetAll: '全部重置',
+ remove: '移除',
+ submit: '确定',
+ search: '搜索',
+ save: '保存',
+ edit: '编辑',
+ cancel: '取消',
+ create: '新建',
+ noDataText: '暂无数据',
+ jobId: '任务ID',
+ userName: '用户名',
+ password: '密码',
+ unselect: '请选择',
+ noselection: '请先选择',
+ searchName: '请输入用户名搜索',
+ generalView: '切换普通视图',
+ manageView: '切换管理员视图',
+ back: '返回',
+ prev: '上一步',
+ complete: '完成',
+ close: '关闭',
+ udfName: 'UDF名称',
+ udfType: 'UDF类型',
+ nextPage: '下一页',
+ previousPage: '上一页',
+ all: '全部',
+ common: '通用',
+ tenant: '租户标签',
+ inputTenant: '请输入租户标签',
+ globalSettings: '全局设置',
+ resultSet: {
+ prefixText: '因为您的结果集较大,为了更好的体验,',
+ linkText: '点击查看结果集',
+ largeResultTips: '前端只展示5000条数据',
+ },
+ needPre: '需要先选择分类和输入用户名',
+ warning: {
+ api: '接口请求中,请稍候!',
+ data: '数据请求中,请稍候!',
+ waiting: '请等待接口返回!',
+ biLoading: '正在和Visualis系统通讯,请稍候!',
+ comingSoon: '尚未开源,敬请期待!',
+ },
+ resourceManagement: {
+ resourceUsage: '资源使用情况',
+ applicationList: '应用列表',
+ },
+ time: {
+ second: '秒',
+ minute: '分钟',
+ hour: '小时',
+ day: '天',
+ },
+ tableColumns: {
+ // instanceName: '实例名称',
+ taskID: '任务ID',
+ taskName: '任务名',
+ status: '状态',
+ costTime: '已耗时',
+ executionCode: '查询语句',
+ failedReason: '关键信息',
+ application: '应用',
+ engine: '引擎',
+ creator: '创建人',
+ createdTime: '创建时间',
+ control: {
+ title: '操作',
+ label: '查看',
+ },
+ initiator: '启动者',
+ engineInstance: '引擎实例',
+ engineType: '引擎类型',
+ serveType: '服务类型',
+ appType: '应用类型',
+ fileName: '来源',
+ label: '标签',
+ engineVersion: '引擎版本',
+ engineVersionCannotBeNull: '引擎版本不能为空',
+ addEngineRules: '应用名称不能有特殊符号和空格',
+ usedResources: '已用资源',
+ lockedResource: '上锁资源',
+ maximumAvailableResources: '最大可用资源',
+ minimumAvailableResources: '最小可用资源',
+ startTime: '启动时间',
+ executeApplicationName: '执行引擎',
+ user: '用户',
+ updateTime: '更新时间',
+ queenRemain: '队列剩余资源',
+ queueUsed: '队列已用资源',
+ queueTop: '队列上限资源',
+ engineRemain: '引擎剩余资源',
+ engineUsed: '引擎已用资源',
+ engineTop: '引擎上限资源',
+ versioTips:
+ '如果没有对应的版本,请确认是否已安装对应的版本引擎物料',
+ applicationRole: '应用方',
+ },
+ logLoading: '日志请求中,请稍后',
+ title: 'Linkis管理台',
+ info: '{num} 条新消息',
+ hint: '请在跳转页面查看……',
+ sideNavList: {
+ news: {
+ name: '最新动态',
+ children: {
+ daily: '运营日报',
+ },
+ },
+ function: {
+ name: '常用功能',
+ children: {
+ globalHistory: '任务概览',
+ resource: '资源管理',
+ resourceEngineConnList: '历史引擎',
+ setting: '参数配置',
+ dateReport: '全局变量',
+ globalValiable: '常见问题',
+ ECMManage: 'ECM管理',
+ microserviceManage: '微服务管理',
+ udfFunctionTitle: 'UDF函数',
+ udfFunctionManage: 'UDF管理',
+ functionManagement: '函数管理',
+ dataSourceManage: '数据源管理',
+ userResourceManagement: '用户资源管理',
+ tenantTagManagement: '租户标签管理',
+ ipListManagement: '白名单管理',
+ errorCode: '错误码管理',
+ gatewayAuthToken: '令牌管理',
+ rmExternalResourceProvider: '扩展资源管理',
+ udfManager: '用户管理',
+ udfTree: 'UDF分类',
+ datasourceAccess: '数据源权限',
+ datasourceEnv: '数据源环境',
+ datasourceType: '数据源分类',
+ datasourceTypeKey: '数据源配置项',
+ EnginePluginManagement: '引擎物料管理',
+ basedataManagement: '基础数据管理',
+ codeQuery: '代码检索',
+ engineConfigurationTemplate: '引擎配置模板',
+ EngineConnList: '引擎列表',
+ },
+ },
+ },
+ modal: {
+ modalTitle: '提示信息',
+ modalDelete: '确认是否删除[{name}]项?',
+ modalDeleteRecord: '确认是否删除该记录?',
+ modalDeleteTask: '确认是否停止当前选择任务?',
+ modalDeleteInstance: '确认是否停止当前选择实例?',
+ modalDeleteSuccess: '删除成功',
+ modalDeleteFail: '删除失败',
+ },
+ formItems: {
+ id: {
+ placeholder: '请输入ID搜索',
+ },
+ date: {
+ label: '起始时间',
+ placeholder: '请选择起始日期',
+ },
+ instance: {
+ label: '实例',
+ placeholder: '请输入实例',
+ },
+ creator: {
+ label: '应用',
+ placeholder: '请输入应用搜索',
+ },
+ engine: {
+ label: '引擎',
+ },
+ status: {
+ label: '状态',
+ },
+ appType: '应用类型',
+ engineType: '引擎类型',
+ },
+ columns: {
+ taskID: '任务ID',
+ fileName: '脚本名称',
+ executionCode: '查询语句',
+ status: '状态',
+ costTime: '已耗时',
+ executeApplicationName: '执行引擎',
+ requestApplicationName: '创建者',
+ progress: '进度',
+ createdTime: '创建时间',
+ updatedTime: '最后更新时间',
+ control: {
+ title: '操作',
+ label: '查看',
+ },
+ moduleName: '模块名称',
+ totalResource: '总资源',
+ usedResource: '已用资源',
+ initializingResource: '初始化中资源',
+ memory: '内存',
+ engineInstance: '引擎实例',
+ applicationName: '应用名称',
+ usedTime: '开始时间',
+ engineStatus: '状态',
+ username: '用户名',
+ },
+ shortcuts: {
+ week: '最近一周',
+ month: '最近一个月',
+ threeMonths: '最近三个月',
+ },
+ statusType: {
+ all: '全部',
+ inited: '排队中',
+ running: '运行中',
+ succeed: '运行成功',
+ cancelled: '取消',
+ failed: '失败',
+ scheduled: '资源申请中',
+ timeout: '超时',
+ retry: '重试',
+ unknown: '未知',
+ },
+ countList: {
+ all: '任务总数',
+ succeed: '成功',
+ inited: '排队中',
+ running: '运行中',
+ failed: '失败',
+ others: '其他',
+ },
+ engineTypes: {
+ all: '全部',
+ },
+ header: '资源管理器',
+ tabs: {
+ first: '用户会话',
+ second: '用户资源',
+ third: '服务器资源',
+ },
+ noLimit: '无限制',
+ core: '核',
+ row: {
+ applicationName: '应用名称',
+ usedTime: '开始时间',
+ engineStatus: '状态',
+ engineInstance: '引擎实例',
+ queueName: '队列名称',
+ user: '用户',
+ cpu: '已用的服务器CPU资源',
+ memory: '已用的服务器内存资源',
+ queueCpu: '已用的Yarn队列CPU资源',
+ queueMemory: '已用的Yarn队列内存资源',
+ },
+ setting: {
+ global: '全局',
+ globalSetting: '通用设置',
+ hide: '隐藏',
+ show: '显示',
+ advancedSetting: '高级设置',
+ dataDev: '数据开发',
+ },
+ globalValiable: '全局变量',
+ rules: {
+ first: {
+ required: '变量 {text} 的key为空',
+ lengthLimit: '长度应为 1 至 128 个字符',
+ letterTypeLimit: '仅支持以字母开头,且不得存在空格和中文',
+ placeholder: '请输入变量名',
+ },
+ second: {
+ required: '变量 {text} 的value为空',
+ lengthLimit: '长度应为 1 至 128 个字符',
+ placeholder: '请输入变量值',
+ },
+ },
+ addArgs: '增加参数',
+ emptyDataText: '暂无全局变量数据',
+ sameName: '存在同名key',
+ error: {
+ validate: '有验证项未通过,请检查后再试!',
+ },
+ success: {
+ update: '全局变量更新成功!',
+ },
+ searchAppType: '请输入应用类型',
+ resetTip: '是否确认重置该资源?',
+ resetAllTip:
+ '是否重置全部用户资源(该操作只会清理用户资源记录,不清理已经产生的资源)',
+ viewlog: '查看日志',
+ datasource: {
+ pleaseInput: '请输入',
+ pleaseUpload: '请上传',
+ datasourceSrc: '数据源',
+ connectTest: '测试连接',
+ sourceName: '数据源名称',
+ sourceDec: '数据源描述',
+ sourceType: '数据源类型',
+ creator: '创建人',
+ create: '新增数据源',
+ exports: '批量导出数据源',
+ imports: '批量导入数据源',
+ overdue: '过期',
+ versionList: '版本列表',
+ dataSourceName: '数据源名称',
+ dataSourceType: '数据源类型',
+ createSystem: '创建系统',
+ dataSourceEnv: '可用集群',
+ status: '状态',
+ permissions: '权限',
+ label: '标签',
+ version: '版本',
+ desc: '描述',
+ action: '操作',
+ createUser: '创建人',
+ createTime: '创建时间',
+ versionDec: '版本描述',
+ watch: '查看',
+ rollback: '回滚',
+ publish: '发布',
+ initVersion: '初始化版本',
+ updateVersion: '版本更新',
+ published: '已发布',
+ unpublish: '未发布',
+ cannotPublish: '不可发布',
+ used: '可用',
+ commentValue: '从版本 {text} 回滚',
+ },
+ tenantTagManagement: {
+ userName: '用户名',
+ appName: '应用名',
+ tenantTag: '租户标签',
+ search: '搜索',
+ clear: '清空',
+ create: '新增',
+ userCreator: '用户-应用',
+ createUser: '创建人',
+ createTime: '创建时间',
+ desc: '业务来源',
+ inputUser: '请输入用户名',
+ inputApp: '请输入应用名',
+ inputTenant: '请输入租户标签',
+ inputDesc: '请输入业务来源',
+ inputCreateUser: '请输入创建者',
+ yourTagMapping: '您的标签映射',
+ notEmpty: '不能为空',
+ maxLen: '长度不能超过100',
+ contentError: '仅限英文、数字、星号和下划线',
+ contentError1: '仅限英文、数字和下划线',
+ contentError2: '仅限英文、数字、下划线和横线',
+ check: '检查',
+ OK: '确定',
+ Cancel: '取消',
+ action: '操作',
+ edit: '编辑',
+ delete: '删除',
+ userIsExisted: '用户标签已存在',
+ addSuccessful: '添加成功',
+ confirmDel: '确认删除',
+ isConfirmDel: '确定要删除这条数据吗({name})',
+ },
+ ipListManagement: {
+ userName: '用户名',
+ appName: '应用名',
+ ipList: 'IP列表',
+ search: '搜索',
+ clear: '清空',
+ create: '新增',
+ userCreator: '用户-应用',
+ createUser: '创建人',
+ createTime: '创建时间',
+ desc: '业务来源',
+ inputUser: '请输入用户名',
+ inputApp: '请输入应用名',
+ inputIpList: '请输入IP列表',
+ inputDesc: '请输入业务来源',
+ inputCreateUser: '请输入创建者',
+ yourTagMapping: '您的标签映射',
+ notEmpty: '不能为空',
+ maxLen: '长度不能超过100',
+ contentError: '仅限英文、数字、星号和下划线',
+ contentError1: '仅限英文、数字和下划线',
+ contentError2: '仅限英文、数字、下划线和横线',
+ ipContentError: '请输入正确格式的IP地址(多个IP地址通过,分隔)',
+ check: '检查',
+ OK: '确定',
+ Cancel: '取消',
+ action: '操作',
+ edit: '编辑',
+ delete: '删除',
+ userIsExisted: '用户标签已存在',
+ addSuccessful: '添加成功',
+ confirmDel: '确认删除',
+ isConfirmDel: '确定要删除这条数据吗({name})',
+ },
+ basedataManagement: {
+ add: '新增',
+ addUDFAdmin: '新增UDF管理员',
+ remove: '删除',
+ edit: '编辑',
+ searchLabel: '模糊搜索:',
+ searchPlaceholder: '请输入搜索内容',
+ search: '搜索',
+ action: '操作',
+ categoryMaxLength: '分类名长度不能超过100',
+ modal: {
+ confirm: '确定',
+ cancel: '取消',
+ modalTitle: '提示信息',
+ modalFormat: '确定删除 {0} 这条记录?',
+ modalDelete1: '确认是否删除[{name}]该记录?',
+ modalDelete: '确认是否删除[{name}]该记录?',
+ modalDeleteSuccess: '删除成功',
+ modalDeleteFail: '删除失败',
+ modalAddSuccess: '添加成功',
+ modalAddFail: '添加失败',
+ modalEditSuccess: '编辑成功',
+ modalEditFail: '编辑失败',
+ },
+ gatewayAuthToken: {
+ tokenName: '名称',
+ legalUsers: '用户',
+ legalHosts: '主机',
+ elapseDay: '有效天数',
+ permanentlyValid: '永久有效',
+ businessOwner: '所属者',
+ createTime: '创建时间',
+ updateTime: '更新时间',
+ updateBy: '更新人',
+ searchPlaceholder: '令牌名称/用户/主机',
+ info: '有效天数: -1 表示永久',
+ legalUsersInfo:
+ '*允许所有用户;多用户使用,隔开,例如:user1,user2',
+ legalUsersValidate: {
+ empty: '请填写用户',
+ format: '格式不正确,使用*或使用,分割,例如:user1,user2',
+ },
+ legalHostsInfo:
+ '*允许所有主机;多主机使用,隔开,例如:host1,host2',
+ legalHostsInfoValidate: {
+ empty: '请填写主机',
+ },
+ elapseDayValidate: {
+ format: '格式不正确,使用*或使用,分割,例如:host1,host2',
+ empty: '请填写有效天数',
+ GT0: '有效天数必须大于0',
+ },
+ },
+ errorCode: {
+ errorCode: '错误代码',
+ errorDesc: '错误描述',
+ errorRegex: '错误正则',
+ searchPlaceholder: '代码/描述/正则',
+ },
+ rmExternalResourceProvider: {
+ resourceType: '资源类型',
+ name: '名称',
+ labels: '标签',
+ config: '配置信息',
+ searchPlaceholder: '名称/标签/配置',
+ },
+ udfManager: {
+ userName: '用户名',
+ searchPlaceholder: '用户名',
+ userNameValidate: {
+ size: '用户名长度不能超过20个字符',
+ empty: '请输入用户名',
+ },
+ },
+ udfTree: {
+ name: '名称',
+ category: '分类',
+ userName: '用户名',
+ description: '描述',
+ parent: '父级',
+ createTime: '创建时间',
+ updateTime: '更新时间',
+ searchPlaceholder: '名称/分类/描述/用户名',
+ parentInfo: '父级分类,Root为根目录',
+ },
+ datasourceEnv: {
+ envName: '环境名称',
+ envDesc: '环境描述',
+ name: '数据源名称',
+ datasourceType: '数据源类型',
+ keytab: 'kerboros认证',
+ parameter: '参数',
+ createTime: '创建时间',
+ createUser: '创建者',
+ updateTime: '更新时间',
+ modifyUser: '更新者',
+ searchPlaceholder: '环境名称/环境描述/参数',
+ },
+ engineConfigurationTemplate: {
+ engineLabelId: '引擎类型ID',
+ advanced: '是否优先',
+ defaultValue: '默认值',
+ description: '描述',
+ engineConnType: '引擎类型',
+ key: '键值',
+ level: '等级',
+ name: '名称',
+ treeName: '树名称',
+ validateRange: '验证范围',
+ validateType: '验证类型',
+ hidden: '隐藏',
+ id: 'ID',
+ engineLabelList: '引擎类型列表',
+ yes: '是',
+ no: '否',
+ delSuccess: '删除成功',
+ delFail: '删除失败',
+ edit: '编辑',
+ },
+ datasourceType: {
+ name: '名称',
+ description: '描述',
+ option: '选项',
+ classifier: '分类',
+ icon: '图标',
+ layers: '层级',
+ searchPlaceholder: '名称/描述/分类',
+ layersValidate: {
+ range: '最小为0',
+ },
+ },
+ datasourceTypeKey: {
+ key: '键名',
+ dataSourceType: '数据源类型',
+ name: '名称',
+ nameEn: '名称(英文)',
+ valueType: '值类型',
+ defaultValue: '默认值',
+ scope: '范围',
+ require: '必要字段',
+ description: '描述',
+ descriptionEn: '描述(英文)',
+ valueRegex: '值校验规则',
+ createTime: '创建时间',
+ updateTime: '更新时间',
+ searchPlaceholder: '名称',
+ searchName: '名称',
+ searchType: '类型',
+ all: '全部',
+ },
+ },
+ EnginePluginManagement: {
+ engineConnType: '引擎类型',
+ engineConnVersion: '引擎版本',
+ create: '新增引擎插件',
+ fileName: '文件名称',
+ fileSize: '文件大小',
+ lastModified: '文件更新时间',
+ bmlResourceId: '物料资源Id',
+ bmlResourceVersion: '物料资源版本',
+ lastUpdateTime: '更新时间',
+ createTime: '创建时间',
+ Reset: '重置',
+ delete: '删除已选物料的版本',
+ update: '更新引擎插件',
+ updateFileOnly: '更新',
+ resourceVersion: '引擎物料bml版本',
+ user: '所属人',
+ deleteCurrentbml: '删除',
+ versionList: '版本列表',
+ rollback: '回滚',
+ action: '操作',
+ },
+ codeQuery: {
+ executionCode: '执行代码',
+ dateRange: '时间范围',
+ placeholder: {
+ executionCode: '请输入执行代码',
+ dateRange: '时间范围',
+ status: '状态',
+ },
+ inputCode: '请输入执行代码',
+ id: '任务ID',
+ code: '代码',
+ check: '查看',
+ search: '搜索',
+ clear: '清空',
+ status: '状态',
+ submitUser: '提交用户',
+ createdTime: '创建时间',
+ searchRange: '仅可查询T-1的历史代码',
+ },
+ task: {
+ projectName: '项目名称',
+ workflowName: '工作流名称',
+ workflowIp: '工作流IP',
+ },
+ },
+ },
+};
diff --git a/linkis-web-next/src/main.ts b/linkis-web-next/src/main.ts
new file mode 100644
index 0000000000..71883ebf57
--- /dev/null
+++ b/linkis-web-next/src/main.ts
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createApp } from 'vue';
+import { createI18n } from 'vue-i18n';
+import '@/style/style.less';
+import {
+ FTabs,
+ FSwitch,
+ FCheckbox,
+ FModal,
+ FSpin,
+ FButton,
+ FInput,
+ FInputNumber,
+ FForm,
+ FTag,
+ FSelect,
+ FTable,
+ FPagination,
+ FDatePicker,
+ FDropdown,
+ FDrawer,
+ FCheckboxGroup,
+ FSelectTree,
+ FSelectCascader,
+ FTooltip,
+ FSpace,
+ FRadio,
+ FRadioGroup,
+ FEllipsis,
+ FMenu,
+ FLayout,
+ FTimePicker,
+ FCard,
+ FDivider,
+} from '@fesjs/fes-design';
+import App from '@/App.vue';
+import router from '@/router/index';
+import messages from '@/locales';
+
+const i18n = createI18n({
+ locale: 'zh',
+ fallbackLocale: 'en',
+ legacy: false,
+ messages,
+});
+
+const app = createApp(App);
+app.use(i18n);
+app.use(router).mount('#app');
+app.use(FButton);
+app.use(FTabs);
+app.use(FSelect);
+app.use(FSwitch);
+app.use(FCheckbox);
+app.use(FCheckboxGroup);
+app.use(FModal);
+app.use(FInput);
+app.use(FInputNumber);
+app.use(FForm);
+app.use(FTag);
+app.use(FSpin);
+app.use(FTable);
+app.use(FPagination);
+app.use(FDatePicker);
+app.use(FDropdown);
+app.use(FDrawer);
+app.use(FSelectTree);
+app.use(FSelectCascader);
+app.use(FEllipsis);
+app.use(FSpace);
+app.use(FTooltip);
+app.use(FRadioGroup);
+app.use(FRadio);
+app.use(FLayout);
+app.use(FMenu);
+app.use(FTimePicker);
+app.use(FCard);
+app.use(FDivider);
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/count.vue b/linkis-web-next/src/pages/globalHistoryManagement/count.vue
new file mode 100644
index 0000000000..7484df6327
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/count.vue
@@ -0,0 +1,135 @@
+
+
+
+
+ {{ $t('message.common.statisticsTime') }}:
+
+ -
+
+
+
+
+
+
{{ $t(item.title) }}
+
+ {{ item.number }}
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/drawer.vue b/linkis-web-next/src/pages/globalHistoryManagement/drawer.vue
new file mode 100644
index 0000000000..de82917948
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/drawer.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+ {{ $t('message.linkis.jobId') }}:{{ tableRawData?.taskID }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/filter.vue b/linkis-web-next/src/pages/globalHistoryManagement/filter.vue
new file mode 100644
index 0000000000..63e39bb869
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/filter.vue
@@ -0,0 +1,339 @@
+
+
+
+ {{ $t('message.linkis.globalTaskQuery') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ {{ $t('message.linkis.find') }}
+
+
+ {{ $t('message.linkis.EnginePluginManagement.Reset') }}
+
+
+ {{ $t('message.linkis.batchStopping') }}
+
+
+
+
+
+
+
+ {{ $t('message.linkis.confirmToStop') }}
+
+
+ {{ $t('message.linkis.cancel') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/index.less b/linkis-web-next/src/pages/globalHistoryManagement/index.less
new file mode 100644
index 0000000000..e1d6beb929
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/index.less
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.label {
+ font-family: PingFangSC-Medium;
+ font-size: 14px;
+ color: #0f1222;
+ line-height: 22px;
+ font-weight: 600;
+ margin-bottom: 16px;
+}
+
+.pairs {
+ display: flex;
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ letter-spacing: 0;
+ line-height: 22px;
+ font-weight: 400;
+
+ .left {
+ color: #63656F;
+ margin-right: 16px;
+ }
+
+ .right {
+ color: #0F1222;
+ }
+}
\ No newline at end of file
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/index.vue b/linkis-web-next/src/pages/globalHistoryManagement/index.vue
new file mode 100644
index 0000000000..6d57aa0496
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/index.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/table.vue b/linkis-web-next/src/pages/globalHistoryManagement/table.vue
new file mode 100644
index 0000000000..c5e776d89f
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/table.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/tooltipText.vue b/linkis-web-next/src/pages/globalHistoryManagement/tooltipText.vue
new file mode 100644
index 0000000000..100e58a8a6
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/tooltipText.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+ {{ props.text }}
+
+
+ {{ props.tipTitle }}
+
+
+
+
+ {{ props.tipContent }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/globalHistoryManagement/type.ts b/linkis-web-next/src/pages/globalHistoryManagement/type.ts
new file mode 100644
index 0000000000..1309fbe631
--- /dev/null
+++ b/linkis-web-next/src/pages/globalHistoryManagement/type.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export type CheckedRow = {
+ taskID: string | number;
+ instance: any;
+ strongerExecId: number | string;
+};
+
+export type CheckedRows = Array;
diff --git a/linkis-web-next/src/pages/login/index.vue b/linkis-web-next/src/pages/login/index.vue
new file mode 100644
index 0000000000..f63c4c87c4
--- /dev/null
+++ b/linkis-web-next/src/pages/login/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/card.vue b/linkis-web-next/src/pages/parameterConfig/card.vue
new file mode 100644
index 0000000000..b7f7f7c7f5
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/card.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ dataItem.name }}
+
+ {{ dataItem.description }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ dataItem.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/drawer.vue b/linkis-web-next/src/pages/parameterConfig/drawer.vue
new file mode 100644
index 0000000000..b701230b7f
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/drawer.vue
@@ -0,0 +1,512 @@
+
+
+
+
+
+
+
+
+ <
+
+
+ {{ $t('message.linkis.applicationAndEngine') }}
+
+
+
+
+
+ {{ $t('message.linkis.addApplicationAndEngine') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('message.linkis.engineConfig') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加引擎
+
+
+
+
+
+
+
+
+
+ {{
+ $t('message.common.submit')
+ }}
+ {{
+ $t('message.common.cancel')
+ }}
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/handleChange.ts b/linkis-web-next/src/pages/parameterConfig/handleChange.ts
new file mode 100644
index 0000000000..56fcc172f1
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/handleChange.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { reactive } from 'vue';
+import { data, currentData } from './drawer.vue';
+
+export const handleChange = (currentPage, pageSize) => {
+const temp = data.slice((currentPage - 1) * pageSize, currentPage * pageSize);
+currentData = reactive(temp);
+};
diff --git a/linkis-web-next/src/pages/parameterConfig/ide/index.vue b/linkis-web-next/src/pages/parameterConfig/ide/index.vue
new file mode 100644
index 0000000000..956779620c
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/ide/index.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/index.less b/linkis-web-next/src/pages/parameterConfig/index.less
new file mode 100644
index 0000000000..99999efe79
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/index.less
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.list-wrapper {
+ height: 100%;
+ .line {
+ display: flex;
+ height: 42px;
+ justify-content: space-between;
+ align-items: center;
+ .text {
+ .title {
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #0f1222;
+ line-height: 22px;
+ font-weight: 400;
+ }
+ .description {
+ font-family: PingFangSC-Regular;
+ font-size: 12px;
+ color: #93949b;
+ line-height: 20px;
+ font-weight: 400;
+ }
+ }
+ }
+}
diff --git a/linkis-web-next/src/pages/parameterConfig/index.vue b/linkis-web-next/src/pages/parameterConfig/index.vue
new file mode 100644
index 0000000000..c79d09a747
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/index.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/list.vue b/linkis-web-next/src/pages/parameterConfig/list.vue
new file mode 100644
index 0000000000..7c158528a2
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/list.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
{{ dataItem.name }}
+
+ {{ dataItem.description }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ dataItem.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/modal.vue b/linkis-web-next/src/pages/parameterConfig/modal.vue
new file mode 100644
index 0000000000..af31e44c70
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/modal.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ 全局配置
+
+
+
+
+
+
+
{{ dataItem.name }}
+
+ {{ dataItem.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/scripts/index.vue b/linkis-web-next/src/pages/parameterConfig/scripts/index.vue
new file mode 100644
index 0000000000..350e7598ec
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/scripts/index.vue
@@ -0,0 +1,20 @@
+
+
+scripts
+
+
diff --git a/linkis-web-next/src/pages/parameterConfig/tableauServer/index.vue b/linkis-web-next/src/pages/parameterConfig/tableauServer/index.vue
new file mode 100644
index 0000000000..6327750c29
--- /dev/null
+++ b/linkis-web-next/src/pages/parameterConfig/tableauServer/index.vue
@@ -0,0 +1,20 @@
+
+
+123
+
+
diff --git a/linkis-web-next/src/pages/resource/history/index.less b/linkis-web-next/src/pages/resource/history/index.less
new file mode 100644
index 0000000000..e0ccf0488f
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/history/index.less
@@ -0,0 +1,17 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
diff --git a/linkis-web-next/src/pages/resource/history/index.vue b/linkis-web-next/src/pages/resource/history/index.vue
new file mode 100644
index 0000000000..f40aa981bb
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/history/index.vue
@@ -0,0 +1,18 @@
+
+
+history
diff --git a/linkis-web-next/src/pages/resource/index.less b/linkis-web-next/src/pages/resource/index.less
new file mode 100644
index 0000000000..e0ccf0488f
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/index.less
@@ -0,0 +1,17 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
diff --git a/linkis-web-next/src/pages/resource/index.vue b/linkis-web-next/src/pages/resource/index.vue
new file mode 100644
index 0000000000..698363e84e
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linkis-web-next/src/pages/resource/manage/index.less b/linkis-web-next/src/pages/resource/manage/index.less
new file mode 100644
index 0000000000..e0ccf0488f
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/manage/index.less
@@ -0,0 +1,17 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
diff --git a/linkis-web-next/src/pages/resource/manage/index.vue b/linkis-web-next/src/pages/resource/manage/index.vue
new file mode 100644
index 0000000000..a4a28968d0
--- /dev/null
+++ b/linkis-web-next/src/pages/resource/manage/index.vue
@@ -0,0 +1,18 @@
+
+
+manage
diff --git a/linkis-web-next/src/router/index.ts b/linkis-web-next/src/router/index.ts
new file mode 100644
index 0000000000..dbee719eb7
--- /dev/null
+++ b/linkis-web-next/src/router/index.ts
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
+import dssRouter from '@/dss/dssRouter';
+
+// 设置路由规则
+const routes: Array = [
+ {
+ path: '/',
+ name: 'layout',
+ redirect: '/console/globalHistoryManagement',
+ component: () => import('@/layout.vue'),
+ meta: {
+ title: 'Linkis',
+ publicPage: true, // Permission disclosure(权限公开)
+ },
+ children: [
+ {
+ name: 'globalHistoryManagement',
+ path: '/console/globalHistoryManagement',
+ component: () =>
+ import('@/pages/globalHistoryManagement/index.vue'),
+ meta: {
+ title: 'Global History Management',
+ publicPage: true,
+ },
+ },
+ {
+ name: 'resource',
+ path: '/console/resource',
+ redirect: '/console/resource/manage',
+ component: () => import('@/pages/resource/index.vue'),
+ meta: {
+ title: 'resource',
+ publicPage: true,
+ },
+ children: [
+ {
+ name: 'history',
+ path: '/console/resource/history',
+ component: () =>
+ import('@/pages/resource/history/index.vue'),
+ meta: {
+ title: 'Resource History',
+ publicPage: true,
+ },
+ },
+ {
+ name: 'manage',
+ path: '/console/resource/manage',
+ component: () =>
+ import('@/pages/resource/manage/index.vue'),
+ meta: {
+ title: 'Resource Manage',
+ publicPage: true,
+ },
+ },
+ ],
+ },
+
+ {
+ name: 'parameterConfig',
+ path: '/console/parameterConfig',
+ redirect: '/console/parameterConfig/ide',
+ component: () => import('@/pages/parameterConfig/index.vue'),
+ meta: {
+ title: 'parameterConfig',
+ publicPage: true,
+ },
+ children: [
+ {
+ name: 'ide',
+ path: '/console/parameterConfig/ide',
+ component: () =>
+ import('@/pages/parameterConfig/ide/index.vue'),
+ meta: {
+ title: 'setting ide',
+ publicPage: true,
+ },
+ },
+ {
+ name: 'scripts',
+ path: '/console/parameterConfig/scripts',
+ component: () =>
+ import('@/pages/parameterConfig/scripts/index.vue'),
+ meta: {
+ title: 'setting scripts',
+ publicPage: true,
+ },
+ },
+ {
+ name: 'tableauServer',
+ path: '/console/parameterConfig/tableauServer',
+ component: () =>
+ import(
+ '@/pages/parameterConfig/tableauServer/index.vue'
+ ),
+ meta: {
+ title: 'setting tableau server',
+ publicPage: true,
+ },
+ },
+ ],
+ },
+ ],
+ },
+ ...dssRouter,
+];
+
+// 设置路由
+const router = createRouter({
+ routes,
+ history: createWebHashHistory(),
+});
+
+// 导出路由
+export default router;
diff --git a/linkis-web-next/src/scriptis/module/webSocket/index.js b/linkis-web-next/src/scriptis/module/webSocket/index.js
new file mode 100644
index 0000000000..c4ed216c41
--- /dev/null
+++ b/linkis-web-next/src/scriptis/module/webSocket/index.js
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// a web app only has a socket
+import Socket from '@/common/service/socket';
+const manager = {
+ timer: null,
+ socket: null,
+ interval: 100,
+ retryInterval: 1000,
+ retryTimer: null,
+ retryCounter: 3,
+ errCode: 0,
+ delayCounter: 0,
+};
+const module = {
+ name: 'WebSocket',
+ events: [],
+ dispatchs: ['Workbench:socket'],
+ methods: {
+ init() {
+ if (manager.socket) {
+ if (manager.socket.readyState === 3) {
+ manager.retryCounter = 3;
+ return module.methods.reconnect();
+ }
+ return;
+ }
+ manager.socket = new Socket({
+ url: `ws://${process.env.VUE_APP_HOST || window.location.host}${process.env.VUE_APP_MN_CONFIG_SOCKET}`,
+ errHandler: () => {
+ // window.$Wa.log(JSON.stringify(e));
+ },
+ });
+ manager.socket.on('inconnect', () => {
+ module.methods.downgrade();
+ window.console.warn('socket连接失败,后续请求将使用http');
+ });
+ manager.socket.on('close', (e) => {
+ module.methods.clearTimer();
+ manager.errCode = e.code;
+ if (e.code != 1001 && e.code != 1005) {
+ manager.retryTimer = setTimeout(() => {
+ module.methods.reconnect(null, e.code);
+ }, manager.retryInterval);
+ } else {
+ manager.retryCounter = 3;
+ }
+ });
+ manager.socket.on('data', (data) => {
+ module.dispatch('Workbench:socket', {
+ type: 'data',
+ data,
+ });
+ });
+ manager.socket.on('dataError', (data) => {
+ module.dispatch('Workbench:socket', {
+ type: 'dataError',
+ data,
+ });
+ });
+ },
+ close() {
+ manager.socket && manager.socket.close(1000);
+ },
+ send(data) {
+ // handle socket disconnect while
+ if (!manager.socket) {
+ module.methods.downgrade(data);
+ // handle idle, socket will not connect immediately insteads while sending data
+ } else if (manager.socket.readyState === 0) {
+ module.methods.delaySend(data);
+ } else if (manager.socket.readyState === 1) {
+ manager.socket.send(data);
+ } else if (manager.errCode === 1001) {
+ module.methods.reconnect(data, 1001);
+ module.methods.reSend(data);
+ } else {
+ window.console.warn(`socket readystate${manager.socket.readyState}:本次请求将使用http`);
+ module.methods.downgrade(data);
+ }
+ },
+ delaySend(data) {
+ if (manager.delayCounter > 10) {
+ manager.delayCounter = 0;
+ window.console.warn(`socket readystate重试多次不为open:本次请求将使用http`);
+ return module.methods.downgrade(data);
+ }
+ module.methods.reSend(data);
+ manager.delayCounter++;
+ },
+ downgrade(data) {
+ if (data) {
+ module.methods.clearResendTimer();
+ }
+ module.methods.clearTimer();
+ manager.retryCounter = 1;
+ module.dispatch('Workbench:socket', {
+ type: 'downgrade',
+ data,
+ });
+ },
+ reconnect(data = null, code) {
+ module.methods.clearTimer();
+ if (--manager.retryCounter > 0) {
+ manager.socket.reconnect(data);
+ } else {
+ module.methods.downgrade(data);
+ window.console.warn(`错误码${code}:本次请求将使用http`);
+ }
+ },
+ reSend(data) {
+ module.methods.clearResendTimer();
+ manager.timer = setTimeout(() => {
+ module.methods.send(data);
+ }, manager.interval);
+ },
+ clearTimer() {
+ clearTimeout(manager.retryTimer);
+ },
+ clearResendTimer() {
+ clearTimeout(manager.timer);
+ },
+ },
+}
+;
+// Close the socket first and register(先关socket全局注册)
+// export default module;
+export default { name: 'WebSocket' }
diff --git a/linkis-web-next/src/scriptis/service/db/globalcache.js b/linkis-web-next/src/scriptis/service/db/globalcache.js
new file mode 100644
index 0000000000..ca9d8623f0
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/globalcache.js
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { isNil, remove } from 'lodash';
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class Globalcache
+ * @extends {Basic}
+ */
+class Globalcache extends Basic {
+ /**
+ *Creates an instance of Globalcache.
+ * @param {*} table
+ * @param {*} db
+ * @memberof Globalcache
+ */
+ constructor(table) {
+ super(table);
+ }
+
+ /**
+ * @param {*} args
+ * @return {*}
+ */
+ async setCache(args) {
+ let cache = await this.getCache(args.key);
+ let cacheToUpdate = args;
+ if (!isNil(cache)) {
+ cacheToUpdate = { _id: cache._id, ...cacheToUpdate };
+ }
+ return this.add(cacheToUpdate);
+ }
+
+ /**
+ * @param {*} key
+ * @return {*}
+ */
+ async getCache(key) {
+ let caches = await this.get(key) || [];
+ return caches[0];
+ }
+
+ /**
+ * @param {*} args
+ * @return {*}
+ */
+ async removeCache(args) {
+ let cache = await this.getCache(args.id);
+ let tabList = [];
+ if (!isNil(cache)) {
+ tabList = cache.tabList;
+ remove(tabList, (n) => n === args.tabId);
+ }
+ return this.update(args.id, { key: args.id, tabList: tabList });
+ }
+
+ /**
+ * @param {*} args
+ * @return {*}
+ */
+ async updateCache(args) {
+ if (args.work) {
+ let cache = await this.getCache(args.id);
+ const id = args.work.id;
+ let tabList = [];
+ if (!isNil(cache)) {
+ tabList = cache.tabList;
+ if (cache.tabList.indexOf(id) === -1) {
+ tabList.push(id);
+ }
+ } else {
+ tabList.push(id);
+ }
+ return this.update(args.id, { key: args.id, tabList: tabList });
+ }
+ if (args.fnList) {
+ this.update(args.id, { key: args.id, fnList: args.fnList });
+ }
+ if (args.variableList) {
+ this.update(args.id, { key: args.id, variableList: args.variableList });
+ }
+ return;
+ }
+}
+const globalcache = new Globalcache('globalCache');
+
+export default globalcache;
diff --git a/linkis-web-next/src/scriptis/service/db/history.js b/linkis-web-next/src/scriptis/service/db/history.js
new file mode 100644
index 0000000000..43b48decfd
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/history.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class History
+ * @extends {Basic}
+ */
+class History extends Basic {
+ /**
+ *Creates an instance of History.
+ * @param {*} table
+ * @memberof History
+ */
+ constructor(table) {
+ super(table);
+ }
+}
+const history = new History('history');
+
+export default history;
diff --git a/linkis-web-next/src/scriptis/service/db/log.js b/linkis-web-next/src/scriptis/service/db/log.js
new file mode 100644
index 0000000000..c63110eaa1
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/log.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class Log
+ * @extends {Basic}
+ */
+class Log extends Basic {
+ /**
+ *Creates an instance of Log.
+ * @param {*} table
+ * @memberof Log
+ */
+ constructor(table) {
+ super(table);
+ }
+}
+const log = new Log('log');
+
+export default log;
diff --git a/linkis-web-next/src/scriptis/service/db/progress.js b/linkis-web-next/src/scriptis/service/db/progress.js
new file mode 100644
index 0000000000..3adaa51772
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/progress.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class progress
+ * @extends {Basic}
+ */
+class Progress extends Basic {
+ /**
+ *Creates an instance of progress.
+ * @param {*} table
+ * @memberof progress
+ */
+ constructor(table) {
+ super(table);
+ }
+}
+const progress = new Progress('progress');
+
+export default progress;
diff --git a/linkis-web-next/src/scriptis/service/db/result.js b/linkis-web-next/src/scriptis/service/db/result.js
new file mode 100644
index 0000000000..14c2195429
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/result.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class Result
+ * @extends {Basic}
+ */
+class Result extends Basic {
+ /**
+ *Creates an instance of Result.
+ * @param {*} table
+ * @memberof Result
+ */
+ constructor(table) {
+ super(table);
+ }
+}
+const result = new Result('result');
+
+export default result;
diff --git a/linkis-web-next/src/scriptis/service/db/tab.ts b/linkis-web-next/src/scriptis/service/db/tab.ts
new file mode 100644
index 0000000000..b32fd01d02
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/tab.ts
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Basic } from '@/service/db';
+/**
+ * @class Tab
+ * @extends {Basic}
+ */
+class Tab extends Basic {
+ /**
+ *Creates an instance of Tab.
+ * @param {*} table
+ * @memberof Tab
+ */
+ constructor(table: any) {
+ super(table);
+ }
+}
+const tab = new Tab('tab');
+
+export default tab;
diff --git a/linkis-web-next/src/scriptis/service/db/tree.js b/linkis-web-next/src/scriptis/service/db/tree.js
new file mode 100644
index 0000000000..d78fe9f666
--- /dev/null
+++ b/linkis-web-next/src/scriptis/service/db/tree.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Basic } from '@/common/service/db/index.js';
+/**
+ * @class Tab
+ * @extends {Basic}
+ */
+class Tree extends Basic {
+ /**
+ *Creates an instance of Tab.
+ * @param {*} table
+ * @memberof Tree
+ */
+ constructor(table) {
+ super(table);
+ }
+}
+const tree = new Tree('tree');
+
+export default tree;
diff --git a/linkis-web-next/src/service/api.ts b/linkis-web-next/src/service/api.ts
new file mode 100644
index 0000000000..6b9c546ab1
--- /dev/null
+++ b/linkis-web-next/src/service/api.ts
@@ -0,0 +1,420 @@
+/* eslint-disable */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Manipulate APIs(操作Api)
+ */
+import { FMessage } from '@fesjs/fes-design';
+import axios from 'axios';
+import { h } from 'vue';
+import util from '@/util';
+import cache from './apiCache';
+
+// what an array is used to store the cancel function and id for each request(一个用于存储每个请求的取消函数和标识的数组数组)
+const pending: Array<{ u: string; f: (message?: string) => unknown }> = [];
+let cancelConfig: any = null;
+const { CancelToken } = axios;
+const removePending = (config: Record) => {
+ for (let p = 0; p < pending.length; p++) {
+ const params = JSON.stringify(config.params);
+ // Cancel if it exists(如果存在则执行取消操作)
+ if (pending[p].u === `${config.url}&${config.method}&${params}`) {
+ // pending[p].f();// perform cancellation(执行取消操作)
+ pending.splice(p, 1); // remove record(移除记录)
+ }
+ }
+};
+
+const cutReq = (config: Record) => {
+ for (let p = 0; p < pending.length; p++) {
+ const params = JSON.stringify(config.params);
+ if (pending[p].u === `${config.url}&${config.method}&${params}`) {
+ return true;
+ }
+ }
+};
+
+const instance = axios.create({
+ baseURL:
+ import.meta.env.VUE_APP_MN_CONFIG_PREFIX ||
+ `${window.location.protocol}//${window.location.host}/api/rest_j/v1/`,
+ timeout: 600000,
+ withCredentials: true,
+ headers: { 'Content-Type': 'application/json;charset=UTF-8' },
+});
+
+instance.interceptors.request.use(
+ (config) => {
+ // Add internationalization parameters(增加国际化参数)
+ config.headers['Content-language'] =
+ localStorage.getItem('locale') || 'zh-CN';
+ const flag = cutReq(config);
+ // The second same request cannot be made when the last same request is not completed(当上一次相同请求未完成时,无法进行第二次相同请求)
+ if (flag === true) {
+ removePending(config);
+ return config;
+ } else {
+ const params = JSON.stringify(config.params);
+ // It is used to remove when there is an error in the normal request(用于正常请求出现错误时移除)
+ cancelConfig = config;
+ config.cancelToken = new CancelToken((c) => {
+ // Add identity and cancel functions(添加标识和取消函数)
+ pending.push({
+ u: `${config.url}&${config.method}&${params}`,
+ f: c,
+ });
+ });
+ return config;
+ }
+ },
+ (error) => {
+ Promise.reject(error);
+ },
+);
+
+instance.interceptors.response.use(
+ (response) => {
+ // Perform the cancellation operation after an ajax response is successful, and remove the completed request from the pending(在一个ajax响应成功后再执行取消操作,把已完成的请求从pending中移除)
+ removePending(response.config);
+ return response;
+ },
+ (error) => {
+ // Judgment when an interface exception or timeout occurs(出现接口异常或者超时时的判断)
+ if (
+ (error.message && error.message.indexOf('timeout') >= 0) ||
+ (error.request && error.request.status !== 200)
+ ) {
+ for (const p in pending) {
+ if (
+ pending[p].u ===
+ `${cancelConfig.url}&${
+ cancelConfig.method
+ }&${JSON.stringify(cancelConfig.params)}`
+ ) {
+ pending.splice(p, 1); // remove record(移除记录)
+ }
+ }
+ // The error information returned by the background is returned first, followed by the interface return(优先返回后台返回的错误信息,其次是接口返回)
+ return error.response || error;
+ } else if (axios.Cancel) {
+ // If it is in pengding state, a prompt will pop up!(如果是pengding状态,弹出提示!)
+ return {
+ // data: { message: 'Interface requesting! please wait……' }(data: { message: '接口请求中!请稍后……' })
+ };
+ } else {
+ return error;
+ }
+ },
+);
+
+interface Response {
+ data: {
+ enableSSO: boolean;
+ SSOURL: string | URL;
+ };
+ config: {
+ url: string | URL;
+ data: string;
+ };
+}
+
+interface API {
+ instance: typeof instance;
+ error: Record<
+ string,
+ (res: Response, ...args: unknown[]) => unknown | void
+ >;
+ constructionOfResponse: {
+ codePath: string;
+ successCode: string;
+ messagePath: string;
+ resultPath: string;
+ };
+ fetch?: any;
+ option?: any;
+ setError?: any;
+ setResponse?: any;
+}
+
+const api: API = {
+ instance,
+ error: {
+ '-1': function (res: Response) {
+ if (res.data && res.data.enableSSO && res.data.SSOURL) {
+ return window.location.replace(res.data.SSOURL);
+ }
+
+ const isLoginPath = window.location.hash === '#/login';
+ if (!isLoginPath) {
+ window.location.hash = '#/login';
+ throw new Error('您尚未登录,请先登录!');
+ }
+ },
+ },
+ constructionOfResponse: {
+ codePath: 'status',
+ successCode: '0',
+ messagePath: 'message',
+ resultPath: 'data',
+ },
+};
+
+const getData = function (data: any) {
+ const _arr = ['codePath', 'messagePath', 'resultPath'];
+ const res = {};
+ _arr.forEach((item) => {
+ const pathArray = api.constructionOfResponse[item].split('.');
+ let result =
+ pathArray.length === 1 && pathArray[0] === '*'
+ ? data
+ : data[pathArray[0]];
+ for (let j = 1; j < pathArray.length; j++) {
+ result = result[pathArray[j]];
+ if (!result) {
+ if (j < pathArray.length - 1) {
+ window.console.error(
+ `【FEX】ConstructionOfResponse配置错误:${item}拿到的值是undefined,请检查配置`,
+ );
+ }
+ break;
+ }
+ }
+ res[item] = result;
+ });
+ return res;
+};
+
+const success = function (response: any) {
+ if (
+ util.isNull(api.constructionOfResponse.codePath) ||
+ util.isNull(api.constructionOfResponse.successCode) ||
+ util.isNull(api.constructionOfResponse.messagePath) ||
+ util.isNull(api.constructionOfResponse.resultPath)
+ ) {
+ window.console.error(
+ '【FEX】Api配置错误: 请调用setConstructionOfResponse来设置API的响应结构',
+ );
+ return;
+ }
+ let data;
+ if (response) {
+ const linkis_errorMsgTip = (
+ sessionStorage.getItem('linkis.errorMsgTip') || ''
+ ).replace(/%s/g, response.config.url);
+ if (util.isString(response.data)) {
+ data = JSON.parse(response.data);
+ } else if (util.isObject(response.data)) {
+ data = response.data;
+ } else {
+ throw new Error(
+ linkis_errorMsgTip || tt('message.common.exceptionTips'),
+ );
+ }
+ const res: any = getData(data);
+ const code = res.codePath;
+ const message = res.messagePath;
+ const result = res.resultPath;
+ const errorMsgTip = result ? result.errorMsgTip : '';
+ if (errorMsgTip) {
+ sessionStorage.setItem('linkis.errorMsgTip', errorMsgTip);
+ }
+ if (code != api.constructionOfResponse.successCode) {
+ if (api.error[code]) {
+ api.error[code](response);
+ throw new Error('');
+ } else {
+ throw new Error(
+ message ||
+ linkis_errorMsgTip ||
+ t('message.common.exceptionTips'),
+ );
+ }
+ }
+ if (result) {
+ let len = 0;
+ const hasBigData = Object.values(result).some((item) => {
+ if (Array.isArray(item)) {
+ len = item.length > len ? item.length : len;
+ return len > 200;
+ }
+ });
+ if (hasBigData) {
+ window.console.log(response.data, '潜在性能问题大数据量', len);
+ }
+ }
+
+ return result || {};
+ }
+};
+
+const fail = function (error: any, t: (str: string) => string) {
+ let _message = '';
+ const { response } = error;
+ if (response && api.error[response.status]) {
+ api.error[response.status].forEach((fn) => fn(response));
+ } else {
+ _message = t('message.common.exceptionTips');
+ if (response && response.config)
+ _message =
+ (sessionStorage.getItem('linkis.errorMsgTip') || '').replace(
+ /%s/g,
+ response.config.url,
+ ) || t('message.common.exceptionTips');
+ if (response && response.data) {
+ let data;
+ if (util.isString(response.data)) {
+ data = JSON.parse(response.data);
+ } else if (util.isObject(response.data)) {
+ data = response.data;
+ }
+ if (data) {
+ const res = getData(data);
+ _message = res.messagePath;
+ }
+ }
+ }
+ error.message = _message;
+ throw error;
+};
+
+const param = function (url, data, option) {
+ const method = 'post';
+ if (util.isNull(url)) {
+ return window.console.error('请传入URL');
+ } else if (!util.isNull(url) && util.isNull(data) && util.isNull(option)) {
+ option = {
+ method,
+ };
+ } else if (!util.isNull(url) && !util.isNull(data) && util.isNull(option)) {
+ option = {
+ method,
+ };
+ if (util.isString(data)) {
+ option.method = data;
+ } else if (util.isObject(data)) {
+ option.data = data;
+ }
+ } else if (
+ !util.isNull(url) &&
+ !util.isNull(data) &&
+ !util.isNull(option)
+ ) {
+ if (!util.isObject(data)) {
+ data = {};
+ }
+ if (util.isString(option)) {
+ option = {
+ method: option,
+ };
+ } else if (util.isObject(option)) {
+ option.method = option.method || method;
+ } else {
+ option = {
+ method,
+ };
+ }
+ if (
+ option.method === 'get' ||
+ option.method === 'delete' ||
+ option.method === 'head' ||
+ option.method === 'options'
+ ) {
+ option.params = data;
+ }
+ if (
+ option.method === 'post' ||
+ option.method === 'put' ||
+ option.method === 'patch'
+ ) {
+ option.data = data;
+ }
+ }
+ // cacheOptions interface data cache {time} When the time is 0, the data cached in the memory will not be cleaned up after the request(cacheOptions接口数据缓存 {time} time为0则请求之后缓存在内存里的数据不清理)
+ if (option.cacheOptions) {
+ option.adapter = cache(option.cacheOptions);
+ }
+ option.url = url;
+
+ return instance.request(option);
+};
+
+const action = function (url: string | URL, data, option) {
+ return param(url, data, option)
+ .then(success, fail)
+ .then((response: unknown) => response)
+ .catch((error: Error) => {
+ if (error.message) {
+ const urlReg =
+ /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/g;
+ const result = error.message.match(urlReg);
+ result
+ ? FMessage.error({
+ content: () => {
+ const context = error.message.split(result[0]);
+ return h('span', [
+ context[0],
+ h(
+ 'a',
+ {
+ domProps: {
+ href: result?.[0],
+ target: '_blank',
+ },
+ },
+ result?.[0],
+ ),
+ context[1],
+ ]);
+ },
+ })
+ : FMessage.error({
+ duration: 1.5,
+ content: error.message,
+ });
+ }
+ throw error;
+ });
+};
+
+api.fetch = action;
+
+api.option = function (option: Record) {
+ if (option?.root) {
+ instance.defaults.baseURL = option.root;
+ }
+ if (option.timeout && util.isNumber(option.timeout)) {
+ instance.defaults.timeout = option.timeout;
+ }
+ if (option.config && util.isObject(option.config)) {
+ Object.keys(option.config).forEach((key) => {
+ instance.defaults[key] = option.config[key];
+ });
+ }
+};
+
+api.setError = function (option: unknown) {
+ if (option && util.isObject(option)) {
+ util.merge(api.error, option);
+ }
+};
+
+api.setResponse = function (constructionOfResponse: any) {
+ this.constructionOfResponse = constructionOfResponse;
+};
+
+export default api;
diff --git a/linkis-web-next/src/service/apiCache.ts b/linkis-web-next/src/service/apiCache.ts
new file mode 100644
index 0000000000..5cac6f177e
--- /dev/null
+++ b/linkis-web-next/src/service/apiCache.ts
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import axios from 'axios'
+
+// data storage(数据存储)
+export const cache = {
+ data: {},
+ set(key, data) {
+ this.data[key] = data
+ },
+ get(key) {
+ return this.data[key]
+ },
+ clear(key) {
+ delete this.data[key]
+ }
+}
+
+// Create a unique key value(建立唯一的key值)
+export const buildUniqueUrl = (url, method, params = {}, data = {}) => {
+ const paramStr = (obj) => {
+ if (toString.call(obj) === '[object Object]') {
+ return JSON.stringify(Object.keys(obj).sort().reduce((result, key) => {
+ result[key] = obj[key]
+ return result
+ }, {}))
+ } else {
+ return JSON.stringify(obj)
+ }
+ }
+ url += `?${paramStr(params)}&${paramStr(data)}&${method}`
+ return url
+}
+
+// prevent duplicate requests(防止重复请求)
+export default (options = {}) => async config => {
+ const defaultOptions = {
+ time: 0, // Set to 0, do not clear the cache(设置为0,不清除缓存)
+ ...options
+ }
+ const index = buildUniqueUrl(config.url, config.method, config.params, config.data)
+ let responsePromise = cache.get(index)
+ if (!responsePromise) {
+ responsePromise = (async () => {
+ try {
+ const response = await axios.defaults.adapter(config)
+ return Promise.resolve(response)
+ } catch (reason) {
+ cache.clear(index)
+ return Promise.reject(reason)
+ }
+ })()
+ cache.set(index, responsePromise)
+ if (defaultOptions.time !== 0) {
+ setTimeout(() => {
+ cache.clear(index)
+ }, defaultOptions.time)
+ }
+ }
+ return responsePromise.then(data => JSON.parse(JSON.stringify(data))) // To prevent data source pollution(为防止数据源污染)
+}
diff --git a/linkis-web-next/src/service/db/index.ts b/linkis-web-next/src/service/db/index.ts
new file mode 100644
index 0000000000..7d13bf77c5
--- /dev/null
+++ b/linkis-web-next/src/service/db/index.ts
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import DB from '@/helper/db';
+import { config } from '@/config/db';
+// To update the schema please use db.updateVersion(stores, version)(更新schema请用db.updateVersion(stores, version))
+const db = new DB('bdp-ide', config.stores, config.version);
+// To change the primary key, you must delete the original store before it can be updated. For other non-primary key modifications, call updateVersion directly.(更改主键要先删掉原来的store才能更新,其他非主键修改直接调用updateVersion)
+// db.updateVersion(Object.assign({}, config.stores), config.version + 1);
+/**
+ * @class basic
+ */
+class Basic {
+ table: any;
+ /**
+ *Creates an instance of basic.
+ * @memberof basic
+ * @param {*} table
+ */
+ constructor(table: any) {
+ this.table = table;
+ }
+
+ /**
+ * @param {Tab} tab
+ * @param {*} id
+ * @memberof Tab
+ * @return {promise}
+ */
+ add(tab: any) {
+ return db.put(this.table, tab);
+ }
+ /**
+ * @param {string}key
+ * @return {promise} tabList or query tab by key
+ * @memberof Tab
+ */
+ get(key?: any) {
+ if (key) {
+ return db.get(this.table, key);
+ }
+ return db.toArray(this.table);
+ }
+ /**
+ *
+ *
+ * @param {*} key
+ * @return {promise}
+ * @memberof basic
+ */
+ remove(key: any) {
+ return db.delete(this.table, key);
+ }
+ /**
+ * @param {*} key
+ * @param {*} changes
+ * @return {*}
+ */
+ update(key: any, changes: any) {
+ return db.update(this.table, key, changes);
+ }
+ /**
+ *
+ * @param {*} oldKey
+ * @param {*} newKey
+ */
+ async modifyPrimaryKey(oldKey: string, newKey: string) {
+ let object = await db.get(this.table, oldKey);
+ if (object && object[0]) {
+ await db.delete(this.table, oldKey);
+ if (this.table === 'tab') {
+ object[0].id = newKey;
+ object = Object.assign(object, { id: newKey });
+ } else {
+ object[0].tabId = newKey;
+ object = Object.assign(object, { tabId: newKey });
+ }
+ return db.put(this.table, object);
+ }
+ }
+}
+export { db, Basic };
diff --git a/linkis-web-next/src/service/execute.js b/linkis-web-next/src/service/execute.js
new file mode 100644
index 0000000000..53837edee3
--- /dev/null
+++ b/linkis-web-next/src/service/execute.js
@@ -0,0 +1,679 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import api from '@/common/service/api';
+import router from '@/router';
+import storage from '@/common/helper/storage';
+import Vue from 'vue';
+import axios from 'axios';
+import { Message } from 'iview';
+import i18n from '@/common/i18n'
+
+/**
+ * Provide script running related methods, including execution methods, status polling, log reception, and obtaining results, etc.(提供脚本运行相关方法,包括执行方法,状态轮询,日志接收,获取结果等)
+ * * 1. By default, socket communication is used. If the socket connection fails, the http method is used.(默认使用socket方式通信,若socket连接失败则使用http方式)
+ * * 2. Click Execute to call the start method, and enter the executing state after receiving the taskID(点击执行调用start方法,收到taskID后进入执行中状态)
+ * * 3.The task in execution closes the script tab, and needs to restore the state when reopening(执行中任务关闭脚本tab,重新打开时需要恢复状态)
+ * * 4.After the task socket is downgraded to http, call queryStatus to poll the progress, log(执行中任务socket降级http之后调用queryStatus轮询进度,日志)
+ * ! 5.This method is a public method that is reused during script execution and workflow node execution.(本方法是script执行、工作流节点执行时复用的公共方法)
+ * @param { Object } data 待执行脚本信息
+ */
+function Execute(data) {
+ this.executeTimout = null;
+ this.statusTimeout = null;
+ this.diagnosisTimeout = null;
+ this.diagnosisTimer = 300;
+ this.beginTime = Date.now();
+ this.progress = 0;
+ this.id = null;
+ this.status = null;
+ // Only used by the /api/jobhistory/${id}/get interface(仅/api/jobhistory/${id}/get接口使用)
+ this.taskID = null;
+ this.postType = process.env.NODE_ENV === 'sandbox' ? 'http' : (data.data.postType || 'socket');
+ delete data.data.postType;
+ this.data = data;
+ this.executionCode = null;
+ this.model = 'normal';
+ this.fromLine = data.fromLine || 1;
+ this.runType = data.data.runType;
+ this.event = new Vue();
+ this.run = false;
+ // Store the relevant information of the result set, use the log and result path inside(存储结果集的相关信息,用到里面的日志和结果路径)
+ this.resultsetInfo = null;
+ // Stores all information in the result set directory, which can be used to get a single result set(存储结果集目录下的所有信息,可用于拿到单个结果集)
+ this.resultList = [];
+ // the path of the current result set(当前结果集的path)
+ this.currentResultPath = '';
+ this.isDiagnosisFailed = false;
+ // Used to control the url to get the result set(用来控制获取结果集的url)
+ this.getResultUrl = data.getResultUrl || 'filesystem',
+ this.on('execute', () => {
+ this.run = true;
+ // The comment is reserved for when the request is initiated, when the first interface is not returned for a long time(注释是留作发起请求时,长时间没返回第一个接口时)
+ // timeoutCheck(this);
+ });
+ this.on('execute:queryState', () => {
+ this.queryStatus({ isKill: false });
+ this.queryProgress();
+ });
+ this.on('stateEnd', () => {
+ this.getResultPath();
+ });
+ this.on('getResultList', () => {
+ this.getResultList();
+ });
+ this.on('getResult', () => {
+ this.getFirstResult();
+ });
+ this.on('stop', () => {
+ clearTimeout(this.executeTimout);
+ clearTimeout(this.statusTimeout);
+ this.run = false;
+ });
+ this.on('kill', () => {
+ if (this.postType === 'http') {
+ this.queryStatus({ isKill: true });
+ }
+ });
+ // data is the return data of the interface(data是接口的返回数据)
+ // execute.data is the request data sent from the foreground to the background(execute.data是前台发送至后台的请求数据)
+ this.on('data', ({ data, execute }) => {
+ if (execute.postType !== 'socket') return;
+ // Here, we judge the situation that the first interface execute of websocket will directly return errorMsg(这里对websocket第一个接口execute直接会返回errorMsg的情况进行判断)
+ if (Object.prototype.hasOwnProperty.call(data.data, 'errorMsg')) {
+ execute.trigger('stop');
+ execute.trigger('error');
+ return;
+ }
+ const method = execute.data.method;
+ if (!execute.taskID) {
+ const socketTag = data.data && data.data.websocketTag;
+ if (execute.data.websocketTag === socketTag && data.method === method) {
+ // clearTimeout(execute.executeTimout);
+ timeoutCheck(execute);
+ api.fetch('/jobhistory/list', {
+ pageSize: 100,
+ status: 'Running,Inited,Scheduled',
+ }, 'get').then((rst) => {
+ execute.trigger('updateResource', rst.tasks.length);
+ });
+ deconstructExecute(execute, data.data);
+ this.trigger('steps', 'Inited');
+ }
+ } else {
+ const id = data.data && data.data.taskID;
+ let prefix = method.slice(0, method.lastIndexOf('/') + 1);
+ if (execute.taskID !== id) {
+ // For the case where the expired data is not updated when the temporary script is right-clicked multiple times(针对临时脚本多次右键点击的,过期数据不更新的情况)
+ if (data.data.status) {
+ return execute.trigger('updateExpireHistory', data.data);
+ }
+ return;
+ }
+ if (data.method === prefix + `${execute.id}/status`) {
+ reawakening(execute);
+ deconstructStatus(execute, data.data);
+ } else if (data.method === prefix + `${execute.id}/progressWithResource`) {
+ reawakening(execute);
+ execute.trigger('progress', data.data);
+ } else if (data.method === prefix + `${execute.id}/log`) {
+ reawakening(execute);
+ execute.trigger('log', data.data.log);
+ } else if (data.method === prefix + `${execute.id}/waitingSize`) {
+ const log = `**Waiting queue:${i18n.t('message.common.execute.waitingQueue', { num: data.data.waitingSize })}`;
+ execute.trigger('log', log);
+ execute.trigger('progress', { progress: 0, progressInfo: [], waitingSize: data.data.waitingSize });
+ clearTimeout(execute.executeTimout);
+ clearTimeout(execute.statusTimeout);
+ } else if (data.method === prefix + `${execute.id}/runtimeTuning`) {
+ execute.trigger('diagnosis', data.data.diagnosticInfo);
+ } else {
+ if (data.data.status) {
+ execute.trigger('updateExpireHistory', data.data);
+ }
+ clearTimeout(execute.executeTimout);
+ clearTimeout(execute.statusTimeout);
+ }
+ }
+ });
+ this.on('downgrade', ({ execute }) => {
+ execute.postType = 'http';
+ // When the script is running, if the socket is downgraded to http, the http interface is used to poll the progress(脚本运行中,由socket降级成http则使用http接口轮询进度)
+ // There are two possibilities when the websocket is downgraded, 1. The task has been started and the connection is disconnected before returning the id, 2. One is that the connection is lost before starting(当websocket降级时有两种可能,1,,任务已经启动,在返回id前就断了连接, 2.一种是在启动前就失去连接)
+ if (execute.run) {
+ if (this.id && this.taskID) {
+ execute.queryStatus({isKill: false});
+ } else {
+ // run the task again(重新跑任务)
+ console.warn('[websocket降级没有获取到taskID]');
+ // this.execute(); // Do not actively help users start tasks(不主动帮用户启动任务)
+ }
+ }
+ });
+ this.on('dataError', ({ data, execute }) => {
+ execute.run = false;
+ if (data.data.status === -1) {
+ router.push('/login');
+ Message.warning(data.message);
+ } else {
+ this.trigger('notice', {
+ type: 'warning',
+ msg: data.message,
+ autoJoin: false,
+ });
+ }
+ });
+}
+
+Execute.prototype.start = function() {
+ setTimeout(() => {
+ this.execute();
+ }, 0);
+};
+
+Execute.prototype.restore = function({ execID, taskID }) {
+ this.id = execID;
+ this.taskID = taskID;
+ this.run = true;
+ this.postType = 'http';
+ this.trigger('execute:queryState');
+};
+
+Execute.prototype.halfExecute = function({ execID, taskID }) {
+ this.id = execID;
+ this.taskID = taskID;
+ this.run = true;
+ this.postType = 'http';
+ this.trigger('execute:queryState');
+};
+
+Execute.prototype.on = function(name, cb) {
+ this.event.$on(name, cb);
+};
+Execute.prototype.off = function() {
+ this.event.$off();
+};
+Execute.prototype.once = function(name, cb) {
+ this.event.$once(name, cb);
+};
+Execute.prototype.trigger = function(name, data) {
+ this.event.$emit(name, data);
+};
+
+Execute.prototype.execute = function() {
+ this.trigger('execute');
+ if (this.postType === 'http') {
+ return this.httpExecute();
+ }
+ this.trigger('WebSocket:send', this.data);
+};
+
+Execute.prototype.httpExecute = function() {
+ this.trigger('execute');
+ const method = this.data.method.slice(this.data.method.indexOf('entrance'), this.data.method.length);
+ api.fetch(method, this.data.data)
+ .then((ret) => {
+ deconstructExecute(this, ret);
+ this.trigger('execute:queryState');
+ this.trigger('steps', 'Inited');
+ })
+ .catch(() => {
+ this.trigger('stop');
+ this.trigger('error', 'execute');
+ });
+};
+
+Execute.prototype.outer = function(outerUrl, ret) {
+ axios.put(
+ outerUrl, {
+ need_repair: true,
+ task_id: ret.id,
+ }, {
+ withCredentials: true,
+ }
+ );
+};
+
+Execute.prototype.queryStatus = function({ isKill }) {
+ const requestStatus = (ret) => {
+ if (isKill) {
+ deconstructStatusIfKill(this, ret);
+ } else {
+ deconstructStatus(this, ret);
+ }
+ };
+ api.fetch(`/entrance/${this.id}/status`, {taskID: this.taskID}, 'get')
+ .then((ret) => {
+ this.status = ret.status;
+ requestStatus(ret);
+ })
+ .catch(() => {
+ requestStatus({
+ status: this.status
+ });
+ });
+};
+
+Execute.prototype.queryProgress = function() {
+ api.fetch(`/entrance/${this.id}/progressWithResource`, 'get')
+ .then((rst) => {
+ this.trigger('progress', { progress: rst.progress, progressInfo: rst.progressInfo });
+ });
+};
+
+Execute.prototype.queryLog = function() {
+ return api.fetch(`/entrance/${this.id}/log`, {
+ fromLine: this.fromLine,
+ size: -1,
+ }, 'get')
+ .then((rst) => {
+ this.fromLine = rst.fromLine;
+ this.trigger('log', rst.log);
+ return Promise.resolve();
+ }).catch(() => {
+ return Promise.resolve();
+ });
+};
+
+Execute.prototype.getResultPath = function() {
+ this.trigger('steps', 'ResultLoading');
+ // api执行时的路径不一样
+ const taskUrl = this.getResultUrl !== 'filesystem' ? this.getResultUrl : 'jobhistory';
+ api.fetch(`/${taskUrl}/${this.taskID}/get`, 'get')
+ .then((rst) => {
+ if (rst.task) {
+ this.resultsetInfo = rst.task;
+ this.trigger('querySuccess', {
+ type: '执行',
+ task: rst.task,
+ });
+ this.trigger('getResultList');
+ this.updateLastHistory(rst.task);
+ } else {
+ throw new Error('task null');
+ }
+ })
+ .catch((err) => {
+ this.trigger('steps', 'FailedToGetResultPath');
+ logError(err, this);
+ });
+};
+
+Execute.prototype.getResultList = function() {
+ if (this.resultsetInfo && this.resultsetInfo.resultLocation) {
+ let params = {
+ path: `${this.resultsetInfo.resultLocation}`,
+ }
+ // If it is api execution, you need to bring taskId(如果是api执行需要带上taskId)
+ if (this.getResultUrl !== 'filesystem') {
+ params.taskId = this.taskID
+ }
+ api.fetch(
+ `/${this.getResultUrl}/getDirFileTrees`, params,
+ 'get'
+ )
+ .then((rst) => {
+ // The order of the result set in the background is sorted by string according to the name of the result set. When displaying, there will be a problem that the result set cannot be matched, so add sorting(后台的结果集顺序是根据结果集名称按字符串排序的,展示时会出现结果集对应不上的问题,所以加上排序)
+ if(rst.dirFileTrees && rst.dirFileTrees.children) {
+ this.resultList = rst.dirFileTrees.children.sort((a, b) => {
+ const slice = (name) => {
+ return Number(name.slice(1, name.lastIndexOf('.')));
+ }
+ return slice(a.name) - slice(b.name);
+ });
+ }
+ this.trigger('getResult');
+ })
+ .catch((err) => {
+ this.trigger('steps', 'FailedToGetResultList');
+ logError(err, this);
+ });
+ } else {
+ this.trigger('notice', {
+ type: 'error',
+ msg: i18n.t('message.common.execute.error.getResultList'),
+ autoJoin: true,
+ });
+ }
+};
+
+Execute.prototype.getFirstResult = function() {
+ if (this.resultList.length < 1 ) {
+ const log = '**result tips: empty!';
+ this.trigger('log', log);
+ this.trigger('steps', 'Completed');
+ this.run = false;
+ } else { // Get the first result set(获取第一个结果集)
+ this.currentResultPath = this.resultList[0].path;
+ // The log path needs to be provided to download the log(需要提供日志路径,用于下载日志)
+ this.trigger('history', {
+ execID: this.id,
+ logPath: this.resultsetInfo.logPath,
+ taskID: this.taskID,
+ status: this.status,
+ });
+ let params = {
+ path: this.currentResultPath,
+ pageSize,
+ }
+ // If it is api execution, you need to bring taskId(如果是api执行需要带上taskId)
+ if (this.getResultUrl !== 'filesystem') {
+ params.taskId = this.taskID
+ }
+ const url = `/${this.getResultUrl}/openFile`;
+ const pageSize = 5000;
+ api.fetch(url, params, 'get')
+ .then((rst) => {
+ this.trigger('result', rst);
+ const log = `**result tips: ${i18n.t('message.common.execute.success.getResultList')}`;
+ this.trigger('log', log);
+ this.trigger('steps', 'Completed');
+ this.run = false;
+ })
+ .catch((err) => {
+ this.trigger('steps', 'FailedToGetResultFirst');
+ logError(err, this);
+ });
+ }
+};
+
+// Get error reason and update history(获取错误原因,并更新历史)
+Execute.prototype.updateLastHistory = function(option, cb) {
+ if (option) {
+ return this.trigger('history', {
+ taskID: option.taskID,
+ execID: '',
+ createDate: option.createdTime,
+ runningTime: option.costTime,
+ status: option.status,
+ failedReason: '',
+ });
+ }
+ // The path when the api is executed is different(api执行时的路径不一样)
+ const taskUrl = this.getResultUrl !== 'filesystem' ? this.getResultUrl : 'jobhistory';
+ api.fetch(`/${taskUrl}/${this.taskID}/get`, 'get')
+ .then((res) => {
+ const task = res.task;
+ if (cb) {
+ cb(task);
+ }
+ this.executionCode = task.executionCode;
+ this.trigger('history', {
+ taskID: task.taskID,
+ execID: '',
+ createDate: task.createdTime,
+ runningTime: task.costTime,
+ // This is changed to the status of execute because the state may not be flipped in the case of a large result set in the database, but the state pushed by the websocket is correct(这里改成使用execute的status是因为数据库中在大结果集的情况下可能会发生状态不翻转的情况,但websocket推送的状态是对的)
+ status: this.status,
+ failedReason: task.errCode && task.errDesc ? task.errCode + task.errDesc : task.errCode || task.errDesc || ''
+ });
+ if (task.progress === 1) {
+ this.trigger('costTime', task.costTime);
+ }
+ }).catch(() => {
+ this.trigger('history', {
+ taskID: this.taskID,
+ status: this.status,
+ isPartialUpdate: true,
+ });
+ });
+};
+
+/**
+ * When killing, go to poll to get the canceled status(kill的时候去轮询获取cancelled状态)
+ * @param {*} execute
+ * @param {*} ret
+ */
+function deconstructStatusIfKill(execute, ret) {
+ if (ret.status !== 'Cancelled') {
+ setTimeout(() => {
+ execute.queryStatus({ isKill: true });
+ }, 5000);
+ } else {
+ const msg = '查询已被取消';
+ queryException(execute, 'warning', msg);
+ }
+}
+
+/**
+ * poll status(轮询状态)
+ * @param {*} execute
+ * @param {*} ret
+ */
+function deconstructStatus(execute, ret) {
+ clearTimeout(execute.executeTimout);
+ execute.status = ret.status;
+ execute.trigger('steps', ret.status);
+ execute.trigger('status', ret.status);
+ switch (ret.status) {
+ case 'Inited': case 'Scheduled': case 'Running':
+ // Update history when state changes(在状态发生改变的时候更新历史)
+ execute.updateLastHistory();
+ if (execute.postType !== 'socket') {
+ // Send a request every 5 seconds(5秒发送一次请求)
+ if (!execute.run) return;
+ setTimeout(() => {
+ execute.queryStatus({ isKill: false });
+ execute.queryProgress();
+ execute.queryLog();
+ }, 5000);
+ }
+ break;
+ case 'Succeed':
+ if ((!execute.fromLine || execute.fromLine === 1) && execute.postType !== 'socket') {
+ execute.queryLog().then(() => {
+ whenSuccess(execute);
+ });
+ break;
+ }
+ whenSuccess(execute);
+ break;
+ default:
+ if ((!execute.fromLine || execute.fromLine === 1) && execute.postType !== 'socket') {
+ execute.queryLog().then(() => {
+ whenException(execute, ret);
+ });
+ break;
+ }
+ whenException(execute, ret);
+ break;
+ }
+}
+
+/**
+ * Logic to execute when the status is successful(当状态为成功时执行的逻辑)
+ * @param {*} execute
+ */
+function whenSuccess(execute) {
+ if (execute.runType !== 'pipeline') {
+ // stateEnd needs to obtain the result set, and the history will be updated when the result set is obtained(stateEnd是需要获取结果集的,获取结果集的同时会更新历史)
+ execute.trigger('stateEnd');
+ const log = `**result tips: ${i18n.t('message.common.execute.success.stateEnd')}`;
+ execute.trigger('log', log);
+ } else {
+ // Import and export do not need to request the result set, but need to update the history, otherwise there will be a problem that the state is not flipped.(导入导出不需要请求结果集,但需要更新历史,否则会出现状态未翻转的问题。)
+ const log = `**result tips: ${i18n.t('message.common.execute.error.noResultList')}`;
+ execute.trigger('log', log);
+ execute.trigger('steps', 'Completed');
+ execute.updateLastHistory('', (task) => {
+ execute.trigger('querySuccess', {
+ type: '导入/导出',
+ task,
+ });
+ });
+ }
+ execute.trigger('stop');
+}
+
+/**
+ * Logic to execute when the state is abnormal(当状态为异常状态时执行的逻辑)
+ * @param {*} execute
+ * @param {*} ret
+ */
+function whenException(execute, ret) {
+ if (ret.status === 'Failed') {
+ const msg = i18n.t('message.common.execute.error.failed');
+ queryException(execute, 'error', msg);
+ }
+ if (ret.status === 'Cancelled') {
+ const msg = i18n.t('message.common.execute.error.canceled');
+ queryException(execute, 'warning', msg);
+ }
+ if (ret.status === 'Timeout') {
+ const msg = i18n.t('message.common.execute.error.executeTimeout');
+ queryException(execute, 'error', msg);
+ clearInterval(execute.diagnosisTimeout);
+ }
+}
+
+/**
+ * inner helper
+ * @param {*} execute
+ * @param {*} ret
+ */
+function deconstructExecute(execute, ret) {
+ if (Object.prototype.hasOwnProperty.call(ret, 'errorMsg')) {
+ execute.updateLastHistory();
+ execute.trigger('stop');
+ execute.trigger('error');
+ execute.trigger('notice', {
+ type: 'error',
+ msg: ret.errorMsg.desc,
+ autoJoin: false,
+ });
+ } else {
+ execute.id = ret.execID;
+ execute.taskID = ret.taskID;
+ const flag = ['qmlsql', 'qmlpy'].includes(execute.runType);
+ const outerUrl = storage.get('outerUrl');
+ if (flag && outerUrl) {
+ execute.outer(outerUrl, ret);
+ }
+ execute.trigger('history', {
+ taskID: ret.taskID,
+ execID: ret.execID,
+ createDate: execute.beginTime,
+ runningTime: 0,
+ status: 'Inited',
+ failedReason: '',
+ });
+ setModelAndGetCode(execute, execute.data.method).then((code) => {
+ execute.trigger('sendStart', code);
+ });
+ }
+}
+
+/**
+ * More than one minute does not return,then terminate the request.
+ * @param {*} execute
+ */
+function timeoutCheck(execute) {
+ const timeout = 1000 * 60;
+ clearTimeout(execute.executeTimout);
+ execute.executeTimout = setTimeout(() => {
+ execute.trigger('stop');
+ execute.trigger('error');
+ execute.trigger('notice', {
+ type: 'error',
+ msg: i18n.t('message.common.execute.error.executeTimeout'),
+ autoJoin: true,
+ });
+ }, timeout);
+}
+
+/**
+ * When the websocket request has not returned for more than 1 minute, send a status request to wake up again.(当websocket请求超过1分钟未返回时,发送一个status请求重新唤醒.)
+ * @param {*} execute
+ */
+function reawakening(execute) {
+ const timeout = 1000 * 60;
+ clearTimeout(execute.statusTimeout);
+ execute.statusTimeout = setTimeout(() => {
+ // http方式
+ // api.fetch(`/entrance/${execute.id}/status`, 'get')
+ // .then((ret) => {
+ // execute.status = ret.status;
+ // });
+ // websocket方式
+ const data = {
+ method: `/api/rest_j/v1/entrance/${execute.id}/status`,
+ };
+ execute.trigger('WebSocket:send', data);
+ }, timeout);
+}
+
+/**
+ *
+ * @param {*} err
+ * @param {*} that
+ */
+function logError(err, that) {
+ that.run = false;
+ const notResultLog = `**result tips: ${i18n.t('message.common.execute.error.noResultList')}`;
+ const errorLog = `**result tips: ${err},${i18n.t('message.common.execute.error.errorLog')}`;
+ const notResult = err.message === `Cannot read property 'children' of null`;
+ const log = notResult ? notResultLog : errorLog;
+ that.trigger('log', log);
+ if (notResult) {
+ that.trigger('steps', 'Completed');
+ }
+}
+
+/**
+ * Action when query is abnormal(查询异常时的操作)
+ * @param {*} execute the current object(execute 当前的对象)
+ * @param {*} type notice的类型(type notice的类型)
+ * @param {*} The prompt text of msg notice(msg notice的提示文本)
+ */
+function queryException(execute, type, msg) {
+ clearInterval(execute.diagnosisTimeout);
+ execute.updateLastHistory();
+ execute.trigger('stop');
+ execute.trigger('error');
+ execute.trigger('notice', {
+ type,
+ msg,
+ autoJoin: true,
+ });
+}
+
+/**
+ * When webscoket is in background mode, when receiving the execute interface, the get request or the script content spliced in the background is called;(webscoket为background模式时,在接收execute接口时调用get请求或者后台拼接的脚本内容;)
+ * @param {*} execute
+ * @param {*} method
+ * @return {*}
+ */
+function setModelAndGetCode(execute, method) {
+ return new Promise((resolve) => {
+ const model = method.slice(method.lastIndexOf('/') + 1, method.length);
+ if (model === 'backgroundservice') {
+ execute.model = 'background';
+ api.fetch(`/jobhistory/${execute.taskID}/get`, 'get').then((res) => {
+ execute.executionCode = res.task.executionCode;
+ resolve(execute.executionCode);
+ }).catch(() => {
+ execute.executionCode = null;
+ });
+ } else if (model === 'execute') {
+ execute.model = 'normal';
+ resolve('');
+ }
+ });
+}
+
+export default Execute;
diff --git a/linkis-web-next/src/service/layoutMixin.js b/linkis-web-next/src/service/layoutMixin.js
new file mode 100644
index 0000000000..58c5186ef8
--- /dev/null
+++ b/linkis-web-next/src/service/layoutMixin.js
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import storage from '@/common/helper/storage';
+import tree from '@/apps/scriptis/service/db/tree.js';
+export default {
+ data() {
+ return {}
+ },
+
+ created() {
+ // Refreshing the page still needs to clear the cache, because the number structure in scriptis is cached. If it is not clear, the background update will not be able to see the refresh page(刷新页面还是需要清缓存的,因为scriptis里的数结构都是缓存,如果不清,后台更新了刷新页面也看不到)
+ this.clearSession();
+ },
+ mounted() {
+ document.addEventListener('copy', this.copyAction, false);
+ },
+ beforeDestroy() {
+ document.removeEventListener('copy', this.copyAction, false);
+ },
+ methods: {
+ copyAction(event) {
+ // The clipboardData object in Google Chrome exists in the event event, which is used to obtain the data in the clipboard, which can only be monitored during the copy operation.(谷歌浏览器中的clipboardData对象存在event事件里,用于获取剪贴板中的数据,只有在复制操作过程中才能监听到)
+ const string = event.clipboardData.getData('text/plain') || event.target.value || event.target.outerText;
+ storage.set('copyString', string);
+ },
+ clearSession() {
+ tree.remove('scriptTree');
+ tree.remove('hdfsTree');
+ storage.set('shareRootPath', '');
+ storage.set('hdfsRootPath', '');
+ tree.remove('hiveTree');
+ tree.remove('udfTree');
+ tree.remove('functionTree');
+ storage.set('copyString', '');
+ // Refresh basic user information without clearing the login(刷新不用清登录的用户基础信息)
+ // storage.set('baseInfo', '');
+ },
+ }
+}
diff --git a/linkis-web-next/src/service/mixin.js b/linkis-web-next/src/service/mixin.js
new file mode 100644
index 0000000000..4eb679742c
--- /dev/null
+++ b/linkis-web-next/src/service/mixin.js
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import storage from '@/common/helper/storage';
+import SUPPORTED_LANG_MODES from '@/common/config/scriptis';
+
+export default {
+ data: function () {
+ return {
+ SUPPORTED_LANG_MODES,
+ };
+ },
+
+ created: function () {},
+ mounted: function () {},
+ beforeDestroy: function () {},
+ destroyed: function () {},
+ methods: {
+ getVsBiUrl(name = 'visualis') {
+ const baseInfo = storage.get('baseInfo', 'local');
+ if (!baseInfo) return;
+ const vsBi = baseInfo.applications.find((item) => item.name === name) || {};
+ return vsBi.url;
+ },
+ getProjectJsonResult(key, name = 'visualis') {
+ window.console.log(key,name)
+ // Used to determine what return value to return(用于判断返回什么样的返回值)
+ const baseInfo = storage.get('baseInfo', 'local');
+ if (!baseInfo) {
+ // When linkis is deployed alone, there is no baseinfo, no restrictions(linkis单独部署的时候没有baseinfo, 不用限制)
+ return true;
+ } else {
+ return baseInfo.resultSetExportEnable;
+ }
+ },
+ getFAQUrl() {
+ const baseInfo = storage.get('baseInfo', 'local');
+ if (!baseInfo) return;
+ const url = baseInfo.DWSParams.faq;
+ return url;
+ },
+ getSupportModes() {
+ return this.SUPPORTED_LANG_MODES;
+ },
+ async gotoCommonIframe(type, query = {}) {
+ const baseInfo = storage.get('baseInfo', 'local');
+ if (!baseInfo) return;
+ const info = baseInfo.applications.find((item) => item.name === type) || {};
+ // According to whether there is a projectid to determine whether to go to the home page or the engineering page(根据是否有projectid来确定是走首页还是工程页)
+ let url = '';
+ if (!query.projectID) {
+ localStorage.removeItem('appJointProjectId')
+ url = info.homepageUrl
+ }
+ // If the user is not prompted, the function has not yet been developed(如果没有提示用户功能暂未开发)
+ if (Object.keys(info).length === 0) {
+ this.$Message.warning(this.$t('message.common.warning.comingSoon'));
+ } else {
+ if (!info.ifIframe) {
+ this.$router.push({
+ path: url,
+ query
+ });
+ } else {
+ this.$router.push({
+ name: 'commonIframe',
+ query: {
+ ...query,
+ url,
+ type
+ }
+ })
+ }
+ }
+ },
+ getUserName() {
+ return storage.get("userName") || null;
+ },
+ },
+};
diff --git a/linkis-web-next/src/service/moduleMixin.js b/linkis-web-next/src/service/moduleMixin.js
new file mode 100644
index 0000000000..079bbe02d7
--- /dev/null
+++ b/linkis-web-next/src/service/moduleMixin.js
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Global mixin Dispatch processing events, global mixin(全局混入Dispatch处理事件,全局mixin)
+ */
+import util from '@/common/util';
+import eventbus from '@/common/helper/eventbus';
+import storage from '@/common/helper/storage';
+
+let module = function(config) {
+ if (!config.name) {
+ return window.console.error('请配置独一无二的ModuleName');
+ }
+ // Control events thrown out(控制对外抛出的事件)
+ let dispatchs = config.dispatchs || [];
+ if (util.isPlainObject(dispatchs)) {
+ let arr = [];
+ for (let p in dispatchs) {
+ if (util.isArray(dispatchs[p])) {
+ dispatchs[p].forEach((item) => {
+ arr.push(`${p}:${item}`);
+ });
+ }
+ }
+ dispatchs = arr;
+ }
+ // processing module methods(处理模块 methods)
+ if (config.methods) {
+ let methods = Object.keys(config.methods);
+ if (methods.length > 0) {
+ methods.forEach((name) => {
+ let method = config.methods[name];
+ if (method) {
+ eventbus.on(`${config.name}:${name}`, method.bind(config));
+ }
+ });
+ }
+ }
+ /**
+ * Mount dispatch to empty module(挂载dispatch到空模块)
+ * @param {*} name
+ * @param {*} param
+ * @param {*} [cb=new Function()]
+ * @return {Promise}
+ */
+ config.dispatch = function(name, param, cb = new Function()) {
+ let result;
+ if (util.isArray(dispatchs) && dispatchs.indexOf(name) != -1) {
+ result = eventbus.emit(name, param, cb);
+ }
+ return Promise.resolve(result);
+ };
+
+ return {
+ data: function() {
+ let data = {
+ };
+ return data;
+ },
+ created() {
+ // Component monitoring under the processing module(处理模块下的组件监听)
+ if (config.events) {
+ let events = config.events;
+ if (util.isArray(events) && events.length > 0) {
+ events.forEach((name) => {
+ let method = this[name];
+ if (method) {
+ eventbus.on(`${name}`, method);
+ }
+ });
+ }
+ }
+ },
+ beforeDestroy: function() {
+ if (config.events) {
+ let events = config.events;
+ if (util.isArray(events) && events.length > 0) {
+ events.forEach((name) => {
+ let method = this[name];
+ if (method) {
+ eventbus.off(name, method);
+ }
+ });
+ }
+ }
+ },
+ methods: {
+ // trigger event(触发事件)
+ dispatch: config.dispatch,
+ getUserName() {
+ return storage.get("baseInfo", 'local') ? storage.get("baseInfo", 'local').username : null;
+ },
+ // Get the current orchestration environment(获取当前编排的环境)
+ getCurrentDsslabels() {
+ return storage.get("currentDssLabels") ? storage.get("currentDssLabels") : null;
+ }
+ },
+ };
+};
+
+let modules = {}
+/**
+ * Provide Dispatch method to unify event handling(提供Dispatch方法统一事件处理方式)
+ */
+export default function mixinDispatch (requireComponent, requireComponentVue) {
+ if (requireComponent) {
+ requireComponent.keys().forEach((fileName) => {
+ // Get component configuration(获取组件配置)
+ let moduleConfig = requireComponent(fileName);
+ moduleConfig = moduleConfig.default || moduleConfig;
+ moduleConfig.mixin = module(moduleConfig);
+ modules[fileName] = moduleConfig;
+ });
+ }
+
+ if (requireComponentVue) {
+ requireComponentVue.keys().forEach((fileName) => {
+ // Get component configuration(获取组件配置)
+ let vueConfig = requireComponentVue(fileName);
+ vueConfig = vueConfig.default || vueConfig;
+ let indexPath = './' + fileName.split('/')[1] + '/index.js';
+ let moduleConfig = modules[indexPath];
+ let mixin = moduleConfig && moduleConfig.mixin;
+ if (!vueConfig.mixins) {
+ vueConfig.mixins = [mixin];
+ } else {
+ if (vueConfig.mixins.indexOf(mixin) == -1) {
+ vueConfig.mixins.push(mixin);
+ }
+ }
+ });
+ }
+}
diff --git a/linkis-web-next/src/service/socket.js b/linkis-web-next/src/service/socket.js
new file mode 100644
index 0000000000..910d0895fe
--- /dev/null
+++ b/linkis-web-next/src/service/socket.js
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import { Eventbus } from '@/common/helper/eventbus';
+/**
+ *
+ * @class Socket
+ * @extends {Eventbus}
+ */
+class Socket extends Eventbus {
+ /**
+ *Creates an instance of Socket.
+ * @param {*} options
+ * @memberof Socket
+ */
+ constructor(options) {
+ super();
+ this.options = options;
+ this.errHandler = options.errHandler;
+ this.init();
+ }
+ /**
+ *get current state
+ * @readonly
+ * @memberof Socket
+ */
+ get readyState() {
+ return this.ws.readyState;
+ }
+ /**
+ * init event
+ * @memberof Socket
+ */
+ init() {
+ try {
+ this.ws = new WebSocket(this.options.url);
+ this.ws.debug = true;
+ } catch (e) {
+ this.emit('inconnect', {
+ type: 'inconnect',
+ message: 'socket连接失败',
+ });
+ }
+ this._onError();
+ this._onClose();
+ this._onOpen();
+ this._onMessage();
+ }
+ /**
+ *
+ * @param {*} options
+ * @memberof Socket
+ */
+ send(options) {
+ if (this._validState('send')) {
+ this.ws.send(JSON.stringify(options));
+ }
+ }
+ /**
+ * @param {*} code
+ * @memberof Socket
+ */
+ close(code) {
+ this.ws.close(code);
+ }
+ /**
+ * @return {this}
+ * @memberof Socket
+ */
+ reconnect() {
+ this.init();
+ return this;
+ }
+ /**
+ * onMessage
+ * @memberof Socket
+ */
+ _onMessage() {
+ let instance = this;
+ this.ws.onmessage = (event = {}) => {
+ if (event.data) {
+ let msg = JSON.parse(event.data);
+ let result = instance._validMessage(msg);
+ if(result) {
+ instance.emit('data', result);
+ }
+ } else {
+ instance.errHandler && instance.errHandler({
+ type: 'message',
+ msg: '接收到无效数据',
+ });
+ }
+ };
+ }
+
+ /**
+ * onOpen
+ * @memberof Socket
+ */
+ _onOpen() {
+ this.ws.onopen = () => {
+ this.connected = true;
+ this.emit('open', {
+ msg: '连接成功',
+ });
+ };
+ }
+ /**
+ *
+ * @param {*} e
+ * @memberof Socket
+ */
+ _onError() {
+ this.ws.onerror = (e) => {
+ let data = {
+ type: 'socket listening error',
+ msg: e,
+ };
+ this.errHandler && this.errHandler(data);
+ };
+ }
+ /**
+ * onClose
+ * @memberof Socket
+ */
+ _onClose() {
+ this.ws.onclose = (e) => {
+ let code = e.code;
+ let reason = e.reason;
+ let data = {
+ msg: 'socket close tips',
+ reason,
+ code,
+ };
+ this.connected = false;
+ this.errHandler && this.errHandler(data);
+ this.emit('close', data);
+ };
+ }
+ /**
+ * @param {*} type
+ * @memberof Socket
+ * @return {Boolean} valid
+ */
+ _validState(type) {
+ let state = this.ws.readyState;
+ let stateMap = {
+ 0: '正在连接',
+ 1: '成功',
+ 2: '正在关闭',
+ 3: '连接已经关闭或打开连接失败',
+ };
+ if (state === 2 || state === 3) {
+ let error = {
+ type,
+ msg: stateMap[state],
+ };
+ this.errHandler && this.errHandler(error);
+ }
+ return state === 1;
+ }
+ /**
+ * @param {*} data
+ * @memberof Socket
+ * @return {*} data
+ */
+ _validMessage(data = {}) {
+ let msgData = data.data;
+ let method = data.method;
+ // Ignore duplicate push data without log information(忽略无日志信息的重复推送数据)
+ let notEmpty = msgData && Array.isArray(msgData.log) ? msgData.log.some((it) => it.length > 0) : msgData.log;
+ if (/\/log$/.test(method) && !notEmpty ) {
+ return
+ }
+ if (!(data instanceof Object)) return;
+ if (data.status !== 0) {
+ this.emit('dataError', {
+ type: 'network',
+ message: data.message,
+ data,
+ });
+ }
+ return data;
+ }
+}
+export default Socket;
diff --git a/linkis-web-next/src/service/timeToCronMixin.js b/linkis-web-next/src/service/timeToCronMixin.js
new file mode 100644
index 0000000000..c6a7704ef0
--- /dev/null
+++ b/linkis-web-next/src/service/timeToCronMixin.js
@@ -0,0 +1,246 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/common/i18n'
+const DATELANG = {
+ "MIN": i18n.t('message.common.time.MIN'),
+ "HOUR": i18n.t('message.common.time.HOUR'),
+ "DAY": i18n.t('message.common.time.DAY'),
+ "WEEK": i18n.t('message.common.time.WEEK'),
+ "MONTH": i18n.t('message.common.time.MONTH'),
+ "YEAR": i18n.t('message.common.time.YEAR'),
+ "Mon": i18n.t('message.common.time.Mon'),
+ "Tue": i18n.t('message.common.time.Tue'),
+ "Wed": i18n.t('message.common.time.Wed'),
+ "Thu": i18n.t('message.common.time.Thu'),
+ "Fri": i18n.t('message.common.time.Fri'),
+ "Sat": i18n.t('message.common.time.Sat'),
+ "Sun": i18n.t('message.common.time.Sun')
+}
+const TIMEDATA = {
+ zeroList: [],
+ minuesList: [],
+ hourList: [],
+ weekList: [
+ {value: '2', label: DATELANG.Mon},
+ {value: '3', label: DATELANG.Tue},
+ {value: '4', label: DATELANG.Wed},
+ {value: '5', label: DATELANG.Thu},
+ {value: '6', label: DATELANG.Fri},
+ {value: '7', label: DATELANG.Sat},
+ {value: '1', label: DATELANG.Sun}
+ ],
+ monthList: [],
+ dayList: [],
+ dayNum: {},
+ selectType: [
+ {value: 'MIN', label: DATELANG.MIN},
+ {value: 'HOUR', label: DATELANG.HOUR},
+ {value: 'DAY', label: DATELANG.DAY},
+ {value: 'WEEK', label: DATELANG.WEEK},
+ {value: 'MONTH', label: DATELANG.MONTH},
+ {value: 'YEAR', label: DATELANG.YEAR}]
+}
+const baseMonthsDay = [31,29,31,30,31,30,31,31,30,31,30,31];//各月天数
+for(let i = 0; i < 60; i++) {
+ TIMEDATA.zeroList.push({value: i, label: i < 10 ? '0' + i : String(i)})
+}
+for(let i = 0; i < 60; i++) {
+ TIMEDATA.minuesList.push({value: i, label: i < 10 ? '0' + i + DATELANG.MIN : String(i) + DATELANG.MIN})
+}
+for(let i = 0; i < 24; i++) {
+ TIMEDATA.hourList.push({value: i, label: i < 10 ? '0' + i + DATELANG.HOUR : String(i) + DATELANG.HOUR})
+}
+for(let i = 1; i <= 12; i++) {
+ TIMEDATA.monthList.push({value: i, label: i < 10 ? '0' + i + DATELANG.MONTH: String(i) + DATELANG.MONTH})
+}
+for(let i = 1; i <= 31; i++) {
+ TIMEDATA.dayList.push({value: i, label: i < 10 ? '0' + i + DATELANG.DAY: String(i) + DATELANG.DAY})
+}
+for (let i = 1; i <= 12; i++) {
+ let dayNum = [];
+ for (let j = 1; j <= baseMonthsDay[i-1]; j++) {
+ dayNum.push({value: j, label: j < 10 ? '0' + j + DATELANG.DAY : String(j) + DATELANG.DAY})
+ }
+ TIMEDATA.dayNum[i] = dayNum
+
+}
+import { debounce } from 'lodash';
+export default {
+ data() {
+ return {
+ zeroSelect: 0,
+ oneSelect: 'MIN',
+ towSelect: DATELANG.MIN,
+ threeSelect: '',
+ fourSelect: '',
+ fiveSelect: '',
+ zeroList: TIMEDATA.zeroList,
+ oneList: TIMEDATA.selectType,
+ towList: [
+ ],
+ threeList: [],
+ fourList: TIMEDATA.hourList,
+ fiveList: TIMEDATA.minuesList,
+ selectHourAndMinues: false,
+ }
+ },
+ computed: {
+ timeToCron() {
+ // Convert selected time to cron format(将所选时间转换成cron格式)
+ // Still have to determine what is the first choice to decide how to write the expression(还是得先确定第一个选择的是什么来决定表达是怎么写)
+ if (this.oneSelect === 'MIN') {
+ return `0 0/${this.zeroSelect} * * * ?`;
+ } else if (this.oneSelect === 'HOUR') {
+ return `0 ${this.towSelect} 0/1 * * ?`;
+ } else if (this.oneSelect === 'DAY') {
+ return `0 ${this.fiveSelect} ${this.fourSelect} 1/1 * ?`;
+ } else if (this.oneSelect === 'WEEK') {
+ return `0 ${this.fiveSelect} ${this.fourSelect} ? * ${this.towSelect}`;
+ } else if (this.oneSelect === 'MONTH') {
+ return `0 ${this.fiveSelect} ${this.fourSelect} ${this.threeSelect} * ?`
+ } else if (this.oneSelect === 'YEAR') {
+ return `0 ${this.fiveSelect} ${this.fourSelect} ${this.threeSelect} ${this.towSelect} ? *`
+ } else {
+ return ''
+ }
+ }
+ },
+ watch: {
+ timeToCron(val) {
+ this.scheduleParams.scheduleTime = val;
+ const emitFun = debounce(() => {
+ this.$emit('change-schedule', this.scheduleParams);
+ }, 1000);
+ emitFun(this);
+ },
+ towSelect(val) {
+ if(this.isSelectYear) {
+ this.threeList = TIMEDATA.dayNum[val];
+ }
+ }
+ },
+ methods: {
+ selectOneChange(value) {
+ if (value === 'MIN') {
+ this.zeroSelect = this.zeroList[0].value;
+ this.towList = [];
+ this.threeList = [];
+ this.selectHourAndMinues = false;
+ this.isSelectYear = false;
+ } else if (value === 'HOUR') {
+ this.towList = TIMEDATA.minuesList;
+ this.isSelectYear = false;
+ this.towSelect = this.towList[0].value;
+ this.selectHourAndMinues = false;
+ } else if (value === 'DAY') {// If you choose the day two and three selection boxes not to be displayed, display the fourth and fifth selection boxes(如果选择天二三选择框不用展示,展示四五选择框)
+ this.selectHourAndMinues = true;
+ this.isSelectYear = false;
+ this.towList = [];
+ this.threeList = [];
+ this.fourSelect = this.fourList[0].value;
+ this.fiveSelect = this.fiveList[0].value;
+ } else if (value === 'WEEK') {
+ this.selectHourAndMinues = true;
+ this.isSelectYear = false;
+ this.towList = TIMEDATA.weekList;
+ this.threeList = [];
+ this.towSelect = this.towList[0].value;
+ this.fourSelect = this.fourList[0].value;
+ this.fiveSelect = this.fiveList[0].value;
+ } else if (value === 'MONTH') {
+ this.selectHourAndMinues = true;
+ this.isSelectYear = false;
+ this.towList = [];
+ this.threeList = TIMEDATA.dayList;
+ this.threeSelect = this.threeList[0].value;
+ this.fourSelect = this.fourList[0].value;
+ this.fiveSelect = this.fiveList[0].value;
+ } else if (value === 'YEAR') {
+ this.selectHourAndMinues = true;
+ this.isSelectYear = true;
+ this.towList = TIMEDATA.monthList;
+ this.threeList = TIMEDATA.dayNum[1];
+ this.towSelect = this.towList[0].value;
+ this.threeSelect = this.threeList[0].value;
+ this.fourSelect = this.fourList[0].value;
+ this.fiveSelect = this.fiveList[0].value;
+ }
+ },
+ alarmUserChange() {
+ if (/^[a-zA-Z0-9_@]+$/.test(this.scheduleParams.alarmUserEmails)) {
+ const emitFun = debounce(() => {
+ this.$emit('change-schedule', this.scheduleParams);
+ }, 500);
+ emitFun(this);
+ }
+ },
+ selectLevelChange() {
+ this.$emit('change-schedule', this.scheduleParams);
+ },
+ cronToTime() {
+ if (Object.keys(this.scheduleParams).length > 0 && this.scheduleParams.scheduleTime) {
+ // Convert corn format to time format 0 2 2 3 * * ?(将corn格式转换成时间格式0 2 2 3 * * ?)
+ const tepArr = this.scheduleParams.scheduleTime.split(' ');
+ // First determine whether to choose the year(先判断是否选的年)
+ if (tepArr.length >= 7) {
+ this.oneSelect = 'YEAR';
+ this.selectHourAndMinues = true;
+ this.isSelectYear = true;
+ this.towList = TIMEDATA.monthList;
+ this.threeList = TIMEDATA.dayNum[Number(tepArr[4])];
+ this.towSelect = Number(tepArr[4]);
+ this.threeSelect = Number(tepArr[3]);
+ this.fourSelect = Number(tepArr[2]);
+ this.fiveSelect = Number(tepArr[1]);
+ } else if (tepArr[4] === '*' && tepArr[3] !== "*" && tepArr[3] !== "1/1" && tepArr[5] === '?') {
+ this.selectHourAndMinues = true;
+ this.oneSelect = 'MONTH';
+ this.towList = [];
+ this.threeList = TIMEDATA.dayList;
+ this.threeSelect = Number(tepArr[3]);
+ this.fourSelect = Number(tepArr[2]);
+ this.fiveSelect = Number(tepArr[1]);
+ } else if (tepArr[5] !== '?') {
+ this.oneSelect = 'WEEK';
+ this.selectHourAndMinues = true;
+ this.towList = TIMEDATA.weekList;
+ this.threeList = [];
+ this.towSelect = tepArr[5];
+ this.fourSelect = Number(tepArr[2]);
+ this.fiveSelect = Number(tepArr[1]);
+ } else if (tepArr[4] === '*' && tepArr[3] === '1/1' && tepArr[2] !== "*" && tepArr[2] !== '0/1') {
+ this.oneSelect = 'DAY';
+ this.selectHourAndMinues = true;
+ this.towList = [];
+ this.threeList = [];
+ this.fourSelect = Number(tepArr[2]);
+ this.fiveSelect = Number(tepArr[1]);
+ } else if (tepArr[4] === '*' && tepArr[3] === '*' && tepArr[2] === '0/1') {
+ this.oneSelect = 'HOUR';
+ this.towList = TIMEDATA.minuesList;
+ this.towSelect = Number(tepArr[1]);
+ } else if (tepArr[4] === '*' && tepArr[3] === '*' && tepArr[2] === '*') {
+ this.zeroSelect = Number(tepArr[1].substring(2));
+ this.oneSelect = 'MIN';
+ this.threeList = [];
+ this.selectHourAndMinues = false;
+ }
+ }
+ }
+ }
+}
diff --git a/linkis-web-next/src/style/style.less b/linkis-web-next/src/style/style.less
new file mode 100644
index 0000000000..73011abf6b
--- /dev/null
+++ b/linkis-web-next/src/style/style.less
@@ -0,0 +1,645 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@import './variable.less';
+* {
+ box-sizing: border-box;
+}
+html {
+ height: 100%;
+}
+body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ color: #0f1222;
+ font-size: 14px;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p {
+ margin: 0;
+ padding: 0;
+}
+
+a {
+ text-decoration: none;
+ color: var(--blue-color);
+}
+
+ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+#app {
+ height: 100%;
+}
+
+.wd-table-operate-btns {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ .btn-item {
+ margin-right: 16px;
+ cursor: pointer;
+ color: var(--blue-color);
+ &:last-of-type {
+ margin-right: 0;
+ }
+ &.red {
+ color: var(--red-color);
+ }
+ &.disabled {
+ color: #b7b7bc;
+ cursor: not-allowed;
+ }
+ }
+ .fes-btn {
+ margin-right: 8px;
+ }
+}
+
+.wd-page {
+ height: 100%;
+ background: #f7f8fa;
+ .wd-side-menus {
+ flex: 0 0 220px;
+ }
+}
+// 有些样式需要抽离出来
+.project-tags {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: -8px;
+ .tags-item {
+ padding: 0 6px;
+ margin-right: 8px;
+ margin-bottom: 8px;
+ height: 24px;
+ line-height: 22px;
+ font-size: 12px;
+ color: #000;
+ background: #f7f7f8;
+ border: 1px solid #cfd0d3;
+ border-radius: 2px;
+ }
+}
+.wd-content {
+ flex: 1;
+ padding: 16px 16px 32px;
+ overflow-y: auto;
+ .wd-content-title {
+ margin-bottom: 16px;
+ font-size: 24px;
+ line-height: 32px;
+ }
+ .wd-content-body {
+ position: relative;
+ padding: 24px;
+ margin-bottom: 16px;
+ background: #ffffff;
+ border-radius: 4px;
+ .wd-body-title {
+ margin-bottom: 24px;
+ font-size: 16px;
+ line-height: 24px;
+ color: #0f1222;
+ .upstream-switch {
+ margin-left: 222px;
+ font-size: 14px;
+ font-weight: normal;
+ color: #646670;
+ }
+ }
+ .wd-table-list {
+ .wd-table-row {
+ display: flex;
+ margin-bottom: 16px;
+ font-weight: 400;
+ .wd-table-header {
+ width: 72px;
+ color: #646670;
+ }
+ .wd-table-detail {
+ .wd-table-input {
+ width: 300px;
+ }
+ }
+ }
+ }
+ .wd-body-menus {
+ position: absolute;
+ display: flex;
+ top: 24px;
+ right: 24px;
+ z-index: 10;
+ .wd-body-menu-item {
+ display: flex;
+ align-items: center;
+ color: var(--blue-color);
+ line-height: 22px;
+ padding-left: 16px;
+ cursor: pointer;
+ user-select: none;
+ &::after {
+ content: '';
+ display: block;
+ margin-left: 16px;
+ width: 1px;
+ height: 14px;
+ background: #cfd0d3;
+ }
+ &:last-child {
+ &::after {
+ display: none;
+ }
+ }
+ }
+ }
+ }
+ .wd-project-header {
+ display: flex;
+ align-items: center;
+ padding-bottom: 16px;
+ .back,
+ .edit {
+ color: #93949b;
+ height: 24px;
+ width: 24px;
+ transform: scale(1.8);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .name-ctn {
+ // flex: 1;
+ // //通过设置宽度为0让整个name容器的宽度由flex自己分配控制
+ // width: 0;
+ min-width: 0;
+ }
+ .name {
+ font-size: 24px;
+ color: #0f1222;
+ margin: 0 12px;
+ // width: 600px;
+ }
+ }
+}
+
+.rule-detail-form {
+ margin-bottom: 24px;
+ .form-edit-input {
+ display: none;
+ }
+ .fes-select,
+ .fes-input,
+ .fes-textarea {
+ max-width: 290px;
+ }
+ .fes-form .fes-form-item.is-required .fes-form-item-label::before {
+ display: none;
+ }
+ .fes-tabs {
+ &.validation-tabs {
+ position: relative;
+ padding-top: 31px;
+ flex: 1 1 100%;
+ .fes-tabs-nav {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ .fes-tabs-tab {
+ border: 1px solid #cfd0d3;
+ background-color: rgba(15, 18, 34, 0.03);
+ &.fes-tabs-tab-active {
+ margin-bottom: 0;
+ border-bottom: 1px solid #fff;
+ background-color: #fff;
+ .fes-tabs-tab-label {
+ color: #5384ff;
+ }
+ }
+ }
+ .fes-tabs-tab-pad {
+ min-width: 8px;
+ background-color: #cfd0d3;
+ border: none;
+ }
+ .fes-tabs-nav-suffix {
+ position: relative;
+ padding: 0 0 0 8px;
+ border: none;
+ .fes-btn {
+ margin-bottom: 0;
+ height: 32px;
+ color: #0f1222;
+ background-color: rgba(15, 18, 34, 0.03);
+ border: 1px solid #cfd0d3;
+ border-bottom: none;
+ border-radius: 4px 4px 0 0;
+ }
+ }
+ }
+ .fes-tabs-tab-pane-wrapper {
+ padding: 16px;
+ border: 1px solid #cfd0d3;
+ border-radius: 0 4px 4px 4px;
+ }
+ }
+ }
+ .rule-sql-preview {
+ width: 100%;
+ min-height: 30px;
+ padding: 8px 16px;
+ background: rgba(15, 18, 34, 0.03);
+ border-radius: 4px;
+ line-height: 24px;
+ }
+ .fes-form .fes-form-item {
+ margin-bottom: 16px;
+ }
+ .rule-config-preview {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-column-gap: 16px;
+ .rule-form-config {
+ min-width: 400px;
+ padding: 16px 0 0 16px;
+ background: rgba(15, 18, 34, 0.03);
+ border-radius: 4px;
+ .hint {
+ position: absolute;
+ top: 50%;
+ right: 10px;
+ margin-top: -7px;
+ color: #646670;
+ }
+ &:last-child {
+ margin-right: 0;
+ }
+ &.edit {
+ background: transparent;
+ padding: 16px 26px 0 16px;
+ border: 1px solid #eee;
+ .hint {
+ right: -20px;
+ }
+ }
+ }
+ }
+ .form-preview-label {
+ word-break: break-word;
+ &.inline {
+ display: inline;
+ }
+ }
+ .rule-detail-sub-form {
+ padding: 8px;
+ background: rgba(15, 18, 34, 0.03);
+ border-radius: 4px;
+ margin-bottom: 16px;
+ &:last-of-type {
+ margin-bottom: 0;
+ }
+ .fes-form-item {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ .fes-form-item-label,
+ .input-preview-label {
+ color: #646670;
+ }
+ // 预览的时候不能显示错误信息
+ .fes-form-item-error {
+ display: none;
+ }
+ &.edit {
+ .fes-form-item-error {
+ display: block;
+ }
+ .rule-detail-sub-form {
+ padding: 0;
+ background: none;
+ }
+ .form-preview-label {
+ display: none;
+ }
+ .form-edit-input {
+ display: flex;
+ &.full {
+ width: 100%;
+ }
+ }
+ .fes-form .fes-form-item.is-required .fes-form-item-label::before {
+ display: inline-block;
+ }
+ .fes-form .fes-form-item {
+ margin-bottom: 22px;
+ }
+ }
+}
+
+.rule-form-table {
+ flex: 1;
+ flex-wrap: wrap;
+ color: #0f1222;
+ .form-table {
+ width: 100%;
+ border: 0;
+ border-collapse: collapse;
+ margin-bottom: 16px;
+ .table-header > th,
+ .table-row > td {
+ padding: 16px;
+ line-height: 22px;
+ &:nth-child(1),
+ &:nth-child(2) {
+ width: 40%;
+ }
+ &:last-child {
+ width: 20%;
+ }
+ }
+ .table-header {
+ text-align: center;
+ background: #f7f7f8;
+ > th {
+ font-weight: normal;
+ }
+ }
+ .table-row {
+ border-bottom: 1px solid #f0f0f0;
+ > td {
+ text-align: center;
+ .form-edit-input {
+ max-width: 100%;
+ }
+ .btn {
+ margin-right: 16px;
+ &:last-child {
+ margin-right: 0;
+ }
+ &.del {
+ color: #f75f56;
+ }
+ }
+ }
+ }
+ &.cross-table {
+ .table-header > th,
+ .table-row > td {
+ &:nth-child(1) {
+ width: 30%;
+ }
+ &:nth-child(2) {
+ width: 20%;
+ }
+ &:nth-child(3) {
+ width: 30%;
+ }
+ }
+ }
+ }
+ .table-operation {
+ width: 100%;
+ text-align: center;
+ &.empty {
+ text-align: left;
+ }
+ &.cross-table {
+ padding-bottom: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ }
+ }
+}
+
+.table-pagination-container {
+ padding-top: 16px;
+ .fes-pagination {
+ display: flex;
+ justify-content: flex-end;
+ }
+}
+
+.btn-file-input {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ cursor: pointer;
+}
+
+.fes-spin {
+ &[fixed] {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+}
+
+.btn-list {
+ display: flex;
+ align-items: center;
+ & > .btn-item {
+ margin-right: 16px;
+ &:last-of-type {
+ margin-right: 0;
+ }
+ }
+}
+
+.my-project {
+ .my-project-header {
+ margin-bottom: 8px;
+ }
+}
+
+.table-container {
+ margin-top: 24px;
+ .btn-delete {
+ color: var(red-color);
+ }
+}
+
+.page-header-condition {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 24px;
+ border-bottom: 1px solid var(--f-border-color-split);
+ .condition-item {
+ align-items: center;
+ padding-right: 22px;
+ padding-bottom: 24px;
+ &:last-child {
+ padding-right: 0;
+ }
+ &.white {
+ color: #ffffff;
+ }
+ .condition-label {
+ padding-right: 16px;
+ font-size: 14px;
+ color: #0f1222;
+ }
+ .condition-value {
+ margin-right: 16px;
+ }
+ .fes-input,
+ .fes-select {
+ width: 160px;
+ }
+ }
+ .selected-count {
+ background: rgba(83, 132, 255, 0.06);
+ border: 1px solid #5384ff;
+ color: #5384ff;
+ }
+}
+
+.loading-block {
+ width: 100%;
+ height: 400px;
+ background: url('@/assets/images/icons/loading.gif') center no-repeat;
+}
+
+.empty-block {
+ .empty-data {
+ width: 100%;
+ height: 200px;
+ margin-top: 150px;
+ background: url('@/assets/images/emptyData.svg') center no-repeat;
+ }
+ .table-empty-tips {
+ margin-top: 23px;
+ margin-bottom: 155px;
+ height: 26px;
+ font-size: 18px;
+ color: #93949b;
+ text-align: center;
+ line-height: 26px;
+ }
+
+ .empty-query-result {
+ width: 100%;
+ height: 200px;
+ margin-top: 150px;
+ background: url('@/assets/images/emptyQueryResult.svg') center no-repeat;
+ }
+}
+
+.long-string-label {
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ &.single {
+ -webkit-line-clamp: 1;
+ white-space: normal;
+ }
+}
+.long-string-content {
+ max-width: 360px;
+ word-break: break-all;
+}
+.index-detail-form .fes-form-item {
+ margin-bottom: 8px;
+}
+.index-detail-form .fes-form-item-content {
+ overflow: hidden;
+ word-wrap: break-word;
+ word-break: break-all;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ color: #0f1222;
+}
+.a-link {
+ cursor: pointer;
+}
+.fes-popper {
+ .a-link {
+ color: var(--f-white);
+ }
+}
+.fes-tooltip-text {
+ max-width: 100vw;
+ word-break: break-all;
+}
+.fes-ellipsis {
+ .a-link {
+ color: var(--blue-color);
+ }
+}
+.project-template-style {
+ padding-top: 0;
+ margin-right: -24px;
+ margin-left: -24px;
+ :deep(.card) {
+ &.isEmbed {
+ margin: 16px 8px;
+ }
+ }
+}
+.execution-parameters-style {
+ .fes-modal-header {
+ font-weight: 700;
+ }
+}
+
+// 解决弹窗中英文字符连续过长时不会换行导致内容溢出弹窗的问题
+.fes-modal-body {
+ word-break: break-all;
+}
+
+// 删除按钮样式
+.del-btn {
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #93949b;
+ letter-spacing: 0;
+ line-height: 22px;
+ font-weight: 400;
+ display: flex;
+ align-items: center;
+ margin-right: 16px;
+ justify-content: space-between;
+ cursor: pointer;
+ width: 50px;
+ .del-text {
+ display: inline-block;
+ }
+}
+
+// 在button中使用fes-icon时样式
+.button-icon {
+ margin-right: 4px;
+ height: 14px;
+ width: 14px;
+}
diff --git a/linkis-web-next/src/style/variable.less b/linkis-web-next/src/style/variable.less
new file mode 100644
index 0000000000..8ccec093aa
--- /dev/null
+++ b/linkis-web-next/src/style/variable.less
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+:root {
+ // 黑色
+ --black-color: #0f1222;
+ // 蓝色
+ --blue-color: #5384ff;
+ // 红色
+ --red-color: #f75f56;
+ // 橙色
+ --orange-color: #ff9540;
+ // 黄色
+ --yellow-color: #fbc731;
+ // 绿色
+ --green-color: #00cb91;
+ // 提示文案颜色
+ --tips-color: rgba(15, 18, 34, 0.3);
+ // 禁用色
+ --disabled-color: rgba(15, 18, 34, 0.65);
+ // 占位符字体颜色
+ --placeholder-color: #cfd0d3;
+ // 表单label颜色
+ --label-color: #646670;
+
+ // 成功的颜色
+ --success-color: --green-color;
+ // 警告的颜色
+ --warn-color: #ff953b;
+ // 失败的颜色
+ --fail-color: --red-color;
+
+ // 字体大小
+
+ // 常规
+ --font-regular-size: 14px;
+
+ // 字体粗细
+
+ // 常规
+ --font-regular-weight: 400;
+}
diff --git a/linkis-web-next/src/util/convert.ts b/linkis-web-next/src/util/convert.ts
new file mode 100644
index 0000000000..980a6cedd1
--- /dev/null
+++ b/linkis-web-next/src/util/convert.ts
@@ -0,0 +1,251 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*eslint-disable */
+import dayjs from 'dayjs';
+import { isPlainObject, forEach, forIn } from 'lodash';
+/**
+ *
+ * conversion log(转换日志)
+ *
+ * @return {Object}
+ */
+function convertLog(logs: string | Array) {
+ let logMap = {
+ all: '',
+ error: '',
+ warning: '',
+ info: '',
+ };
+ let newMap: Record = {};
+ if (typeof logs === 'string') {
+ newMap = {
+ all: logs,
+ };
+ } else if (Array.isArray(logs)) {
+ let keysArr = ['error', 'warning', 'info', 'all'];
+ logs.forEach((log, index) => {
+ newMap[keysArr[index] as string] = log;
+ });
+ } else if (isPlainObject(logs)) {
+ newMap = logs;
+ }
+
+ return Object.assign(logMap, newMap);
+}
+
+/**
+ * Convert Timestamp Difference(转换时间戳差值)
+ * @param {*} runningTime
+ * @return {*}
+ */
+function convertTimestamp(runningTime: number, t: (msg: string) => string) {
+ // const time = Math.floor(runningTime / 1000);
+ const time = +(runningTime / 1000).toFixed(1);
+ if (time <= 0) {
+ return `0${t('message.common.time.second')}`;
+ } else if (time < 60) {
+ return `${time}${t('message.common.time.second')}`;
+ } else if (time < 3600) {
+ return `${(time / 60).toFixed(2)}${t('message.common.time.minute')}`;
+ } else if (time < 86400) {
+ return `${(time / 3600).toFixed(2)}${t('message.common.time.hour')}`;
+ }
+ return `${(time / 86400).toFixed(2)}${t('message.common.time.day')}`;
+}
+
+/**
+ * sort(排序)
+ * @param {*} a first parameter(第一个参数)
+ * @param {*} b second parameter(第两个参数)
+ * @param {*} type ,possibly desc and asc(类型,可能是desc和asc)
+ */
+function sort(a: any, b: any, type: 'desc' | unknown) {
+ const sortString = (a: string, b: string, type: 'desc' | unknown) => {
+ for (let i = 0; i < a.length; i++) {
+ if (a[i] !== b[i]) {
+ const aAcsii = a.charCodeAt(i);
+ const bAcsii = b.charCodeAt(i);
+ const returnS =
+ type === 'desc' ? bAcsii - aAcsii : aAcsii - bAcsii;
+ return returnS;
+ }
+ }
+ };
+ const fa = parseInt(a, 10);
+ const fb = parseInt(b, 10);
+ if (!isNaN(fa) && !isNaN(fb)) {
+ if (
+ fa.toString().length === a.toString().length &&
+ fb.toString().length === b.toString().length
+ ) {
+ return type === 'desc' ? b - a : a - b;
+ } else if (!isNaN(Number(a)) && !isNaN(Number(b))) {
+ return type === 'desc' ? b - a : a - b;
+ } else {
+ return sortString(a, b, type);
+ }
+ } else {
+ return sortString(a, b, type);
+ }
+}
+
+/**
+ * Convert array to object key:value form(转换数组为对象key:value形式)
+ * @param {*} arr
+ * @return {*}
+ */
+function convertArrayToObject(arr: any[]) {
+ const obj: Record = {};
+ forEach(arr, (item: { key: string; value: any }) => {
+ obj[item.key] = item.value;
+ });
+ return obj;
+}
+
+/**
+ * Convert object to array form(转换对象为数组形式)
+ * @param {*} obj
+ */
+function convertObjectToArray(obj: Record) {
+ const arr: any[] = [];
+ forIn(obj, (value, key) => {
+ arr.push({
+ key,
+ value,
+ });
+ });
+ return arr;
+}
+
+/**
+ * Convert the array to an array of the form [{key1:value1},{key2,value2}](转换数组为数组[{key1:value1},{key2,value2}]形式)
+ * @param {*} arr
+ * @return {*}
+ */
+function convertArrayToMap(arr: any[]) {
+ const tmp: any[] = [];
+ forEach(arr, (item: { key: string; value: any }) => {
+ const obj: Record = {};
+ obj[item.key] = item.value;
+ tmp.push(obj);
+ });
+ return tmp;
+}
+const convertList = {
+ lifecycle: [
+ {
+ value: 0,
+ label: '永久',
+ },
+ {
+ value: 1,
+ label: '当天有效',
+ },
+ {
+ value: 2,
+ label: '一周有效',
+ },
+ {
+ value: 3,
+ label: '一月有效',
+ },
+ {
+ value: 4,
+ label: '半年有效',
+ },
+ ],
+ modelLevel: [
+ {
+ value: 0,
+ label: 'ODS(原始数据层)',
+ },
+ {
+ value: 1,
+ label: 'DWD(明细数据层)',
+ },
+ {
+ value: 2,
+ label: 'DWS(汇总数据层)',
+ },
+ {
+ value: 3,
+ label: 'ADS(应用数据层)',
+ },
+ ],
+ useWay: [
+ {
+ value: 0,
+ label: '一次写多次读',
+ },
+ {
+ value: 1,
+ label: '增删改查',
+ },
+ {
+ value: 2,
+ label: '多次覆盖写',
+ },
+ {
+ value: 3,
+ label: '一次写偶尔读',
+ },
+ ],
+};
+
+/**
+ * format value(格式化值)
+ * @param {*} item
+ * @param {*} field
+ * @return {*} return
+ */
+function formatValue(item: any, field: { key: string; type: string }) {
+ const value = item[field.key];
+ let formatted = value;
+ switch (field.type) {
+ case 'boolean':
+ formatted = value ? '是' : '否';
+ break;
+ case 'timestramp':
+ formatted =
+ value == '0' || !value
+ ? 0
+ : dayjs.unix(value).format('YYYY-MM-DD HH:mm:ss');
+ break;
+ case 'convert':
+ if (!item[field.key] && item[field.key] !== 0) {
+ return value;
+ }
+ const convertItem = (convertList as Record)[field.key];
+ formatted = convertItem[item[field.key]].label;
+ break;
+ case 'booleanString':
+ formatted = value === 'Y' ? '是' : '否';
+ break;
+ }
+ return formatted;
+}
+
+export default {
+ formatValue,
+ convertArrayToMap,
+ convertObjectToArray,
+ convertArrayToObject,
+ sort,
+ convertTimestamp,
+ convertLog,
+};
diff --git a/linkis-web-next/src/util/currentModules.ts b/linkis-web-next/src/util/currentModules.ts
new file mode 100644
index 0000000000..493e22af7c
--- /dev/null
+++ b/linkis-web-next/src/util/currentModules.ts
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*eslint-disable */
+/*
+ * Determine whether the current independent application and environment list(判断当前是否独立应用和环境列表)
+ * @return {Object}
+ */
+const apps = require('dynamic-modules');
+function currentModules() {
+ let obj = {
+ linkisOnly: false,
+ scriptisOnly: false,
+ hasScriptis: false,
+ hasLinkis: false,
+ microModule: false,
+ };
+ if (apps.microModule) {
+ obj.microModule = apps.microModule;
+ }
+ if (apps.modules) {
+ if (apps.modules.includes('linkis')) {
+ obj.hasLinkis = true;
+ obj.linkisOnly = apps.modules.length === 1;
+ }
+ if (apps.modules.includes('scriptis')) {
+ obj.hasScriptis = true;
+ obj.scriptisOnly = apps.modules.length === 1;
+ }
+ }
+ return obj;
+}
+
+export default {
+ currentModules,
+};
diff --git a/linkis-web-next/src/util/debug.ts b/linkis-web-next/src/util/debug.ts
new file mode 100644
index 0000000000..9813576a5e
--- /dev/null
+++ b/linkis-web-next/src/util/debug.ts
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * log output control(日志输出控制)
+ * @param {String|Object} info log output(日志输出)
+ * @param {String} Type console available methods(type console可用方法)
+ */
+function debug_log(
+ type = 'log',
+ ...info: Array | string>
+) {
+ const isDev = process.env.NODE_ENV === 'dev';
+ if (isDev || window.debug_log === true) {
+ if (window.console[type]) {
+ window.console[type](...info);
+ }
+ }
+}
+export default debug_log;
diff --git a/linkis-web-next/src/util/index.ts b/linkis-web-next/src/util/index.ts
new file mode 100644
index 0000000000..dfb5def186
--- /dev/null
+++ b/linkis-web-next/src/util/index.ts
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import qs from 'qs';
+import md5 from 'md5';
+import objectUtil from './object';
+import typeUtil from './type';
+import convertUtil from './convert';
+// import currentModules from './currentModules';
+
+let util = {
+ executeCopy(textValue: string) {
+ const input = document.createElement('textarea');
+ document.body.appendChild(input);
+ input.value = textValue;
+ input.select();
+ document.execCommand('Copy');
+ input.remove();
+ },
+ md5,
+ /**
+ * Replace the parameter placeholders in the format of ${projectId} in the url with real parameters(替换url中 形如 ${projectId} 格式的参数占位符为真实参数)
+ * ! url should be an escaped link address that conforms to the URI specification. If the parameter is not defined in obj, the final address will lose the parameter(url应该是转义过的符合URI规范的链接地址,参数如未在obj定义则最终地址会丢失该参数)
+ */
+ replaceHolder(url: string, obj: Record) {
+ obj = {
+ dssurl: location.origin,
+ cookies: document.cookie,
+ ...obj,
+ };
+ let dist = url.split('?');
+ let params = qs.parse(dist[1]);
+ const holderReg = /\$\{([^}]*)}/g;
+ let result: Record = {};
+ dist[0] = dist[0].replace(holderReg, function (a: unknown, b: string) {
+ return obj[b];
+ });
+ if (dist[1]) {
+ for (let key in params) {
+ const resKey = key.replace(holderReg, function (a, b) {
+ return obj[b];
+ });
+ result[resKey] = (params[key] as string)?.replace(
+ holderReg,
+ function (a: unknown, b: string) {
+ return obj[b];
+ },
+ );
+ }
+ }
+ const distUrl =
+ dist.length > 1 ? `${dist[0]}?${qs.stringify(result)}` : dist[0];
+ return distUrl;
+ },
+ // How to open a new tab browser(打开新tab浏览器也方法)
+ windowOpen(url: string) {
+ const newTab = window.open('about:blank');
+ setTimeout(() => {
+ const reg =
+ /^(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
+ if (process.env.NODE_ENV === 'production') {
+ if (newTab && reg.test(url)) {
+ newTab.location.href = url;
+ }
+ } else {
+ if (newTab) {
+ newTab.location.href = url;
+ }
+ }
+ }, 500);
+ },
+ /**
+ * generate guid(生成guid)
+ */
+ guid() {
+ let key;
+ if (crypto && crypto.getRandomValues) {
+ key = (([1e7] as any) + -1e3 + -4e3 + -8e3 + -1e11).replace(
+ /[018]/g,
+ (c: any) =>
+ (
+ c ^
+ (crypto.getRandomValues(new Uint8Array(1))[0] &
+ (15 >> (c / 4)))
+ ).toString(16),
+ );
+ } else {
+ key = `${new Date().getTime()}.${Math.ceil(Math.random() * 1000)}`;
+ }
+ return key;
+ },
+};
+objectUtil.merge(util, objectUtil, typeUtil, convertUtil);
+
+export default util as typeof util &
+ typeof objectUtil &
+ typeof typeUtil &
+ typeof convertUtil;
+// typeof currentModules;
diff --git a/linkis-web-next/src/util/object.ts b/linkis-web-next/src/util/object.ts
new file mode 100644
index 0000000000..254d52c924
--- /dev/null
+++ b/linkis-web-next/src/util/object.ts
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * will cover(会覆盖)
+ *
+ * @return {Object}
+ */
+function merge(...arg: any[]) {
+ let base = arg[0];
+ if (!base) return;
+ [].forEach.call(arg, function (item, index) {
+ if (index > 0) {
+ for (let attrname in item) {
+ if (Object.prototype.hasOwnProperty.call(item, attrname)) {
+ base[attrname] = item[attrname];
+ }
+ }
+ }
+ });
+ return base;
+}
+
+/**
+ * won't overwrite(不会覆盖)
+ *
+ * @return {Object}
+ */
+function extend(...arg: any[]) {
+ let base = arg[0];
+ if (!base) return;
+ [].forEach.call(arg, function (item, index) {
+ if (index > 0) {
+ for (let attrname in item) {
+ if (Object.prototype.hasOwnProperty.call(item, attrname)) {
+ if (base[attrname] !== undefined) {
+ base[attrname] = item[attrname];
+ }
+ }
+ }
+ }
+ });
+ return base;
+}
+
+export default {
+ merge,
+ extend,
+};
diff --git a/linkis-web-next/src/util/type.ts b/linkis-web-next/src/util/type.ts
new file mode 100644
index 0000000000..09d701cd0a
--- /dev/null
+++ b/linkis-web-next/src/util/type.ts
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const objectToString = Object.prototype.toString;
+const OBJECT_STRING = '[object Object]';
+
+/**
+ * Is it a normal object(是否是普通对象)
+ * @param {any} obj
+ * @return {Boolean}
+ */
+function isPlainObject(obj: Record) {
+ return objectToString.call(obj) === OBJECT_STRING;
+}
+
+/**
+ * Is it a number(是否是数字)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isNumber(value: unknown) {
+ return typeof value === 'number';
+}
+
+/**
+ * Is it a date(是否是日期)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isDate(value: unknown) {
+ return objectToString.call(value) === '[object Date]';
+}
+
+/**
+ * Is it a function(是否是函数)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isFunction(value: unknown) {
+ return typeof value === 'function';
+}
+
+/**
+ * Is it a function(是否是函数)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isObject(value: unknown) {
+ let type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Is it an array(是否是数组)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isArray(value: unknown) {
+ return Array.isArray(value);
+}
+
+/**
+ * Is it like an object(是否像对象)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isObjectLike(value: unknown) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * is it a string(是否是字符串)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isString(value: unknown) {
+ return (
+ typeof value == 'string' ||
+ (!isArray(value) &&
+ isObjectLike(value) &&
+ objectToString.call(value) == '[object String]')
+ );
+}
+
+/**
+ * is it empty(是否是空的)
+ * @param {any} value
+ * @return {Boolean}
+ */
+function isNull(value: unknown) {
+ return value === undefined || value === null || value === '';
+}
+
+export default {
+ isPlainObject,
+ isNumber,
+ isDate,
+ isFunction,
+ isObject,
+ isArray,
+ isObjectLike,
+ isString,
+ isNull,
+};
diff --git a/linkis-web-next/src/vite-env.d.ts b/linkis-web-next/src/vite-env.d.ts
new file mode 100644
index 0000000000..ff9b59ca8a
--- /dev/null
+++ b/linkis-web-next/src/vite-env.d.ts
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+///
diff --git a/linkis-web-next/tsconfig.json b/linkis-web-next/tsconfig.json
new file mode 100644
index 0000000000..dbc4a7a8cb
--- /dev/null
+++ b/linkis-web-next/tsconfig.json
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ES2020",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ },
+
+ /* Bundler mode */
+ "moduleResolution": "Node",
+ "noEmit": true,
+ "allowImportingTsExtensions": true,
+ "allowSyntheticDefaultImports": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": false,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": [
+ "src/**/*.ts",
+ "src/**/*.d.ts",
+ "src/**/*.tsx",
+ "src/**/*.vue",
+ "src/helper/fesx.js"
+ ],
+ "exclude": ["node_modules"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/linkis-web-next/tsconfig.node.json b/linkis-web-next/tsconfig.node.json
new file mode 100644
index 0000000000..0953ff2ffc
--- /dev/null
+++ b/linkis-web-next/tsconfig.node.json
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ES2020",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/linkis-web-next/vite.config.ts b/linkis-web-next/vite.config.ts
new file mode 100644
index 0000000000..863bf6bb5f
--- /dev/null
+++ b/linkis-web-next/vite.config.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { defineConfig, loadEnv } from "vite";
+import vue from "@vitejs/plugin-vue";
+import path from "path";
+// https://vitejs.dev/config/
+export default defineConfig(({ mode }) => {
+ const env = loadEnv(mode, process.cwd());
+
+ return {
+ envPrefix: "VITE_",
+ plugins: [vue()],
+ resolve: {
+ alias: {
+ "@": path.resolve(__dirname, "src"),
+ },
+ },
+ server: {
+ port: 5137,
+ host: "localhost",
+ proxy: {
+ "/api": {
+ target: env.VITE_BACKEND_URL,
+ changeOrigin: true,
+ rewrite: (pth) => pth.replace(/^\/api/, "/api"),
+ },
+ },
+ },
+ };
+});