From 1893ade2cc204d731bbda6942b6688273f46a88b Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 14:25:29 +0800 Subject: [PATCH 1/6] ci: add ci yml --- .github/workflows/CI.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/CI.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..33bb677 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,39 @@ +name: CI + +on: + push: + branches: + - 'master' + pull_request: + branches: + - '*' + +jobs: + setup: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 14 + + - name: Install dependencies + run: yarn + + - name: Run Prettier + run: yarn prettier + + - name: Run Eslint + run: yarn eslint + + - name: Run Stylelint + run: yarn stylelint + + - name: Run check-types + run: yarn check-types + + - name: Run build + run: yarn build From 9fc05fa9a1fe80ca2af7c9593ca8171bd9f5edad Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 14:28:35 +0800 Subject: [PATCH 2/6] ci: fix check-types --- app/web/ typings/global.d.ts | 11 +- app/web/pages/configDetail/index.tsx | 22 +- app/web/pages/mailSign/index.tsx | 3 +- app/web/utils/interceptor.ts | 2 +- package.json | 29 +- tsconfig.json | 3 +- yarn.lock | 537 +++++++++++++++------------ 7 files changed, 325 insertions(+), 282 deletions(-) diff --git a/app/web/ typings/global.d.ts b/app/web/ typings/global.d.ts index ca96c18..8d9eee1 100644 --- a/app/web/ typings/global.d.ts +++ b/app/web/ typings/global.d.ts @@ -9,4 +9,13 @@ declare var process: { interface Window { __INITIAL_STATE__: any; stores: any; -} \ No newline at end of file +} + +declare module '*.png' { + const value: string; + export default value; +} +declare module '*.svg' { + const value: string; + export default value; +} diff --git a/app/web/pages/configDetail/index.tsx b/app/web/pages/configDetail/index.tsx index 7c7709f..9dc56ba 100644 --- a/app/web/pages/configDetail/index.tsx +++ b/app/web/pages/configDetail/index.tsx @@ -34,26 +34,6 @@ const ConfigDetail = (props: any) => { const [errorMessage, setErrorMessage] = useState(''); const [shell, setShell] = useState('#!/bin/bash\n'); const { filename, filePath, hostIp, hostName, username, password, remark }: any = basicInfo; - const getTableColumns = ()=>{ - return [ - { - title: 'url', - key: 'url', - dataIndex: 'url', - render: (text) => (
{text}
) - }, - { - title: '操作', - key: 'id', - dataIndex: 'id', - render: (value) => { - return {delUrl(value)}}> - 删除 - - } - } - ] - } const loadBasicInfoData = useCallback(() => { return API.getConfigDetail({ id @@ -219,4 +199,4 @@ const ConfigDetail = (props: any) => { ); } -export default ConfigDetail; \ No newline at end of file +export default ConfigDetail; diff --git a/app/web/pages/mailSign/index.tsx b/app/web/pages/mailSign/index.tsx index d23c0bf..27c05c6 100644 --- a/app/web/pages/mailSign/index.tsx +++ b/app/web/pages/mailSign/index.tsx @@ -30,6 +30,7 @@ export default class MainSign extends React.PureComponent { } clear() { + // @ts-ignore this.refs.file.value = null this.setState({ previewUrl: null, @@ -125,7 +126,7 @@ export default class MainSign extends React.PureComponent { createImg() { html2canvas(this.el, { allowTaint: true, - timeout: 1000 + imageTimeout: 1000 }).then((canvas: any) => { let copy: any; try { diff --git a/app/web/utils/interceptor.ts b/app/web/utils/interceptor.ts index 1c1a7f5..e7b8abd 100644 --- a/app/web/utils/interceptor.ts +++ b/app/web/utils/interceptor.ts @@ -37,7 +37,7 @@ export function authBeforeRes(response: any) { a.click(); window.URL.revokeObjectURL(downUrl); }); - return data; + return response; } else { switch (response.status) { case 200: diff --git a/package.json b/package.json index 35dfb35..0e01c3f 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "server:test": "egg-scripts start --port=7002 --env=test --daemon --workers=2", "dingBot": "node DingBot.js", "stop": "egg-scripts stop", - "lint": "eslint .", - "fix": "eslint --fix .", + "check-types": "tsc --skipLibCheck", "release": "./scripts/release.sh", "ii": "npm install --registry https://registry.npm.taobao.org", "log": "conventional-changelog --config ./node_modules/vue-cli-plugin-commitlint/lib/log -i CHANGELOG.md -s -r 0", @@ -23,18 +22,8 @@ }, "dependencies": { "@ant-design/icons": "4.5.0", - "@types/classnames": "^2.2.11", - "@types/file-saver": "^2.0.1", - "@types/html2canvas": "^0.0.36", - "@types/js-cookie": "^2.2.6", - "@types/react": "^17.0.3", - "@types/react-color": "^3.0.4", - "@types/react-dom": "^17.0.2", - "@types/react-redux": "^7.1.16", - "@types/react-router-config": "^5.0.2", - "@types/react-router-dom": "^5.1.7", "ant-design-dtinsight-theme": "1.1.3", - "antd": "4.13.1", + "antd": "4.22.5", "await-stream-ready": "^1.0.1", "babel-eslint": "^10.1.0", "babel-plugin-transform-decorators-legacy": "^1.3.5", @@ -64,7 +53,7 @@ "mysql2": "^1.6.5", "node-schedule": "^2.0.0", "node-ssh": "^6.0.0", - "react": "^16.9.0", + "react": "16.9.0", "react-codemirror2": "^7.2.1", "react-color": "^2.19.3", "react-dom": "^16.9.0", @@ -89,6 +78,16 @@ "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@commitlint/config-conventional": "^8.2.0", "@hot-loader/react-dom": "^17.0.1", + "@types/classnames": "^2.2.11", + "@types/file-saver": "^2.0.1", + "@types/html2canvas": "^0.0.36", + "@types/js-cookie": "^2.2.6", + "@types/react": "18.0.25", + "@types/react-color": "^3.0.4", + "@types/react-dom": "^18.0.0", + "@types/react-redux": "^7.1.16", + "@types/react-router-config": "^5.0.2", + "@types/react-router-dom": "^5.1.7", "babel-preset-stage-0": "^6.24.1", "babel-preset-stage-2": "^6.24.1", "commitizen": "^4.0.3", @@ -125,7 +124,7 @@ } }, "engines": { - "node": ">=8.0.0" + "node": "14" }, "ci": { "version": "8, 9" diff --git a/tsconfig.json b/tsconfig.json index 5af8b8f..9ed5288 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "noEmit": true, "baseUrl": ".", + "resolveJsonModule": true, "experimentalDecorators": true, "noImplicitAny": false, "esModuleInterop": true, @@ -30,4 +31,4 @@ "include": [ "./app/web/**/*" ], -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 3f673ef..d83289d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,11 +37,16 @@ "@ant-design/colors" "^3.1.0" babel-runtime "^6.26.0" -"@ant-design/icons-svg@^4.0.0", "@ant-design/icons-svg@^4.2.1": +"@ant-design/icons-svg@^4.0.0": version "4.2.1" resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== +"@ant-design/icons-svg@^4.3.0": + version "4.4.2" + resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" + integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== + "@ant-design/icons@4.5.0": version "4.5.0" resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.5.0.tgz#dc5ceff85503932265143dc5c3013167daa3f754" @@ -54,15 +59,16 @@ insert-css "^2.0.0" rc-util "^5.0.1" -"@ant-design/icons@^4.5.0": - version "4.8.0" - resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.8.0.tgz#3084e2bb494cac3dad6c0392f77c1efc90ee1fa4" - integrity sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg== +"@ant-design/icons@^4.7.0": + version "4.8.3" + resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.8.3.tgz#41555408ed5e9b0c3d53f3f24fe6a73abfcf4000" + integrity sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw== dependencies: "@ant-design/colors" "^6.0.0" - "@ant-design/icons-svg" "^4.2.1" + "@ant-design/icons-svg" "^4.3.0" "@babel/runtime" "^7.11.2" classnames "^2.2.6" + lodash "^4.17.15" rc-util "^5.9.4" "@ant-design/icons@~2.1.1": @@ -70,16 +76,16 @@ resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a" integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w== -"@ant-design/react-slick@~0.28.1": - version "0.28.4" - resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.28.4.tgz#8b296b87ad7c7ae877f2a527b81b7eebd9dd29a9" - integrity sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg== +"@ant-design/react-slick@~0.29.1": + version "0.29.2" + resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-0.29.2.tgz#53e6a7920ea3562eebb304c15a7fc2d7e619d29c" + integrity sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA== dependencies: "@babel/runtime" "^7.10.4" classnames "^2.2.5" json2mq "^0.2.0" lodash "^4.17.21" - resize-observer-polyfill "^1.5.0" + resize-observer-polyfill "^1.5.1" "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" @@ -233,13 +239,20 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.10" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.0", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.0", "@babel/runtime@^7.9.2": version "7.20.1" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== dependencies: regenerator-runtime "^0.13.10" +"@babel/runtime@^7.18.0", "@babel/runtime@^7.20.7": + version "7.26.0" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.npmmirror.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" @@ -681,6 +694,11 @@ dependencies: defer-to-connect "^1.0.1" +"@testing-library/user-event@^14.4.2": + version "14.5.2" + resolved "https://registry.npmmirror.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -1016,12 +1034,12 @@ "@types/react" "*" "@types/reactcss" "*" -"@types/react-dom@^17.0.2": - version "17.0.18" - resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-17.0.18.tgz#8f7af38f5d9b42f79162eea7492e5a1caff70dc2" - integrity sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw== +"@types/react-dom@^18.0.0": + version "18.3.1" + resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: - "@types/react" "^17" + "@types/react" "*" "@types/react-redux@^7.1.16", "@types/react-redux@^7.1.20": version "7.1.24" @@ -1066,7 +1084,7 @@ dependencies: "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@18.0.25": version "18.0.25" resolved "https://registry.npmmirror.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== @@ -1075,15 +1093,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^17", "@types/react@^17.0.3": - version "17.0.52" - resolved "https://registry.npmmirror.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b" - integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/reactcss@*": version "1.2.6" resolved "https://registry.npmmirror.com/@types/reactcss/-/reactcss-1.2.6.tgz#133c1e7e896f2726370d1d5a26bf06a30a038bcc" @@ -1855,53 +1864,56 @@ antd@3.26.13: shallowequal "^1.1.0" warning "~4.0.3" -antd@4.13.1: - version "4.13.1" - resolved "https://registry.npmmirror.com/antd/-/antd-4.13.1.tgz#27454403832c4533df3e297b63a859b323ee5f5c" - integrity sha512-KaveTRGKOFrbas3FO0ktXaZrSMDpDWz3FpuLbafV7R973BNz2yo+IG8ia2KPEfpRtGYUvpnKlDUNQZWhotoYhQ== +antd@4.22.5: + version "4.22.5" + resolved "https://registry.npmmirror.com/antd/-/antd-4.22.5.tgz#4617a12dee3a427fc82e5d15bfb9232025622e05" + integrity sha512-+qIEyzsenM9bllZHfE6ueZbI9EWulCIWeQhUeiIC6p8J2+M8w2tG2t6anbxxsOb5FnmML60ipVLL/rbm+oFKyw== dependencies: "@ant-design/colors" "^6.0.0" - "@ant-design/icons" "^4.5.0" - "@ant-design/react-slick" "~0.28.1" - "@babel/runtime" "^7.12.5" - array-tree-filter "^2.1.0" + "@ant-design/icons" "^4.7.0" + "@ant-design/react-slick" "~0.29.1" + "@babel/runtime" "^7.18.3" + "@ctrl/tinycolor" "^3.4.0" + "@testing-library/user-event" "^14.4.2" classnames "^2.2.6" copy-to-clipboard "^3.2.0" - lodash "^4.17.20" - moment "^2.25.3" - rc-cascader "~1.4.0" + lodash "^4.17.21" + memoize-one "^6.0.0" + moment "^2.29.2" + rc-cascader "~3.6.0" rc-checkbox "~2.3.0" - rc-collapse "~3.1.0" - rc-dialog "~8.5.1" - rc-drawer "~4.3.0" - rc-dropdown "~3.2.0" - rc-field-form "~1.19.0" - rc-image "~5.2.3" - rc-input-number "~7.0.0-alpha.4" - rc-mentions "~1.5.0" - rc-menu "~8.10.0" - rc-motion "^2.4.0" - rc-notification "~4.5.2" - rc-pagination "~3.1.2" - rc-picker "~2.5.1" - rc-progress "~3.1.0" + rc-collapse "~3.3.0" + rc-dialog "~8.9.0" + rc-drawer "~5.1.0" + rc-dropdown "~4.0.0" + rc-field-form "~1.27.0" + rc-image "~5.7.0" + rc-input "~0.0.1-alpha.5" + rc-input-number "~7.3.5" + rc-mentions "~1.9.1" + rc-menu "~9.6.0" + rc-motion "^2.6.1" + rc-notification "~4.6.0" + rc-pagination "~3.1.17" + rc-picker "~2.6.10" + rc-progress "~3.3.2" rc-rate "~2.9.0" - rc-resize-observer "^1.0.0" - rc-select "~12.1.0" - rc-slider "~9.7.1" + rc-resize-observer "^1.2.0" + rc-segmented "~2.1.0" + rc-select "~14.1.1" + rc-slider "~10.0.0" rc-steps "~4.1.0" rc-switch "~3.2.0" - rc-table "~7.13.0" - rc-tabs "~11.7.0" + rc-table "~7.25.3" + rc-tabs "~11.16.0" rc-textarea "~0.3.0" - rc-tooltip "~5.1.0" - rc-tree "~4.1.0" - rc-tree-select "~4.3.0" - rc-trigger "^5.2.1" - rc-upload "~4.0.0-alpha.6" - rc-util "^5.8.1" + rc-tooltip "~5.2.0" + rc-tree "~5.6.5" + rc-tree-select "~5.4.0" + rc-trigger "^5.2.10" + rc-upload "~4.3.0" + rc-util "^5.22.5" scroll-into-view-if-needed "^2.2.25" - warning "^4.0.3" any-promise@^1.0.0, any-promise@^1.1.0, any-promise@^1.3.0: version "1.3.0" @@ -2221,10 +2233,10 @@ async-limiter@~1.0.0: resolved "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-validator@^3.0.3: - version "3.5.2" - resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" - integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ== +async-validator@^4.1.0: + version "4.2.5" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== async-validator@~1.11.3: version "1.11.5" @@ -11231,6 +11243,11 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + memoizee@^0.4.14: version "0.4.15" resolved "https://registry.npmmirror.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" @@ -11472,14 +11489,6 @@ mini-store@^2.0.0: react-lifecycles-compat "^3.0.4" shallowequal "^1.0.2" -mini-store@^3.0.1: - version "3.0.6" - resolved "https://registry.npmmirror.com/mini-store/-/mini-store-3.0.6.tgz#44b86be5b2877271224ce0689b3a35a2dffb1ca9" - integrity sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ== - dependencies: - hoist-non-react-statics "^3.3.2" - shallowequal "^1.0.2" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -11640,11 +11649,16 @@ moment-timezone@^0.5.14, moment-timezone@^0.5.31: dependencies: moment ">= 2.9.0" -moment@2.x, "moment@>= 2.9.0", moment@^2.17.1, moment@^2.20.0, moment@^2.22.2, moment@^2.23.0, moment@^2.24.0, moment@^2.25.3: +moment@2.x, "moment@>= 2.9.0", moment@^2.17.1, moment@^2.20.0, moment@^2.22.2, moment@^2.23.0, moment@^2.24.0: version "2.29.4" resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moment@^2.29.2: + version "2.30.1" + resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + morgan@~1.6.1: version "1.6.1" resolved "https://registry.npmmirror.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" @@ -13849,16 +13863,17 @@ rc-cascader@~0.17.4: shallow-equal "^1.0.0" warning "^4.0.1" -rc-cascader@~1.4.0: - version "1.4.3" - resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-1.4.3.tgz#d91b0dcf8157b60ebe9ec3e58b4db054d5299464" - integrity sha512-Q4l9Mv8aaISJ+giVnM9IaXxDeMqHUGLvi4F+LksS6pHlaKlN4awop/L+IMjIXpL+ug/ojaCyv/ixcVopJYYCVA== +rc-cascader@~3.6.0: + version "3.6.2" + resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.6.2.tgz#2b5c108807234898cd9a0366d0626f786b7b5622" + integrity sha512-sf2otpazlROTzkD3nZVfIzXmfBLiEOBTXA5wxozGXBpS902McDpvF0bdcYBu5hN+rviEAm6Mh9cLXNQ1Ty8wKQ== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" - rc-trigger "^5.0.4" - rc-util "^5.0.1" - warning "^4.0.1" + classnames "^2.3.1" + rc-select "~14.1.0" + rc-tree "~5.6.3" + rc-util "^5.6.1" rc-checkbox@~2.1.6: version "2.1.8" @@ -13891,10 +13906,10 @@ rc-collapse@~1.11.3: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-collapse@~3.1.0: - version "3.1.4" - resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.1.4.tgz#063e33fcc427a378e63da757898cd1fba6269679" - integrity sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A== +rc-collapse@~3.3.0: + version "3.3.1" + resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.3.1.tgz#fc66d4c9cfeaf41e932b2de6da2d454874aee55a" + integrity sha512-cOJfcSe3R8vocrF8T+PgaHDrgeA1tX+lwfhwSj60NX9QVRidsILIbRNDLD6nAzmcvVC5PWiIRiR4S1OobxdhCg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -13911,25 +13926,15 @@ rc-dialog@~7.6.0: rc-animate "2.x" rc-util "^4.16.1" -rc-dialog@~8.5.1: - version "8.5.3" - resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.5.3.tgz#84fb1f7637dd8aadd709ba905eac2a3a2e07d21b" - integrity sha512-zoamT8L6+rBwnwjPlrZRxiHCHQXrTcWZD3a6ruoqEdUKP1KgO0eSjMDH9WlF3WEPYMVnb2G5SrjHrhnwgPDu5w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-motion "^2.3.0" - rc-util "^5.6.1" - -rc-dialog@~8.6.0: - version "8.6.0" - resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.6.0.tgz#3b228dac085de5eed8c6237f31162104687442e7" - integrity sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ== +rc-dialog@~8.9.0: + version "8.9.0" + resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-8.9.0.tgz#04dc39522f0321ed2e06018d4a7e02a4c32bd3ea" + integrity sha512-Cp0tbJnrvPchJfnwIvOMWmJ4yjX3HWFatO6oBFD1jx8QkgsQCR0p8nUWAKdd3seLJhEC39/v56kZaEjwp9muoQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" rc-motion "^2.3.0" - rc-util "^5.6.1" + rc-util "^5.21.0" rc-drawer@~3.1.1: version "3.1.3" @@ -13940,24 +13945,15 @@ rc-drawer@~3.1.1: rc-util "^4.16.1" react-lifecycles-compat "^3.0.4" -rc-drawer@~4.3.0: - version "4.3.1" - resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-4.3.1.tgz#356333a7af01b777abd685c96c2ce62efb44f3f3" - integrity sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-util "^5.7.0" - -rc-dropdown@^3.1.3: - version "3.6.2" - resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-3.6.2.tgz#d23b8b2762941ac39e665673946f67ca9c39118f" - integrity sha512-Wsw7GkVbUXADEs8FPL0v8gd+3mWQiydPFXBlr2imMScQaf8hh79pG9KrBc1DwK+nqHmYOpQfK2gn6jG2AQw9Pw== +rc-drawer@~5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-5.1.0.tgz#c1b8a46e5c064ba46a16233fbcfb1ccec6a73c10" + integrity sha512-pU3Tsn99pxGdYowXehzZbdDVE+4lDXSGb7p8vA9mSmr569oc2Izh4Zw5vLKSe/Xxn2p5MSNbLVqD4tz+pK6SOw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" - rc-trigger "^5.0.4" - rc-util "^5.17.0" + rc-motion "^2.6.1" + rc-util "^5.21.2" rc-dropdown@~2.4.1: version "2.4.1" @@ -13970,14 +13966,15 @@ rc-dropdown@~2.4.1: rc-trigger "^2.5.1" react-lifecycles-compat "^3.0.2" -rc-dropdown@~3.2.0: - version "3.2.5" - resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-3.2.5.tgz#c211e571d29d15e7f725b5a75fc8c7f371fc3348" - integrity sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA== +rc-dropdown@~4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68" + integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.18.3" classnames "^2.2.6" - rc-trigger "^5.0.4" + rc-trigger "^5.3.1" + rc-util "^5.17.0" rc-editor-core@~0.8.3: version "0.8.10" @@ -14006,13 +14003,13 @@ rc-editor-mention@^1.1.13: rc-animate "^2.3.0" rc-editor-core "~0.8.3" -rc-field-form@~1.19.0: - version "1.19.0" - resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.19.0.tgz#2e69862d70f2196c30af503601d25098c5db5f20" - integrity sha512-FZFyE6FmhR4xGO3MVo86J2sHIM6t/W4UqN94nVqZC/9PLhzSaKuM0i9UfwFMtuENP2hxFANEQZMBrD/2Zd43pg== +rc-field-form@~1.27.0: + version "1.27.4" + resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.27.4.tgz#53600714af5b28c226c70d34867a8c52ccd64d44" + integrity sha512-PQColQnZimGKArnOh8V2907+VzDCXcqtFvHgevDLtqWc/P7YASb/FqntSmdS8q3VND5SHX3Y1vgMIzY22/f/0Q== dependencies: - "@babel/runtime" "^7.8.4" - async-validator "^3.0.3" + "@babel/runtime" "^7.18.0" + async-validator "^4.1.0" rc-util "^5.8.0" rc-form@^2.4.10: @@ -14039,14 +14036,14 @@ rc-hammerjs@~0.6.0: hammerjs "^2.0.8" prop-types "^15.5.9" -rc-image@~5.2.3: - version "5.2.5" - resolved "https://registry.npmmirror.com/rc-image/-/rc-image-5.2.5.tgz#44e6ffc842626827960e7ab72e1c0d6f3a8ce440" - integrity sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw== +rc-image@~5.7.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/rc-image/-/rc-image-5.7.1.tgz#678dc014845954c30237808c00c7b12e5f2a0b07" + integrity sha512-QyMfdhoUfb5W14plqXSisaYwpdstcLYnB0MjX5ccIK2rydQM9sDPuekQWu500DDGR2dBaIF5vx9XbWkNFK17Fg== dependencies: "@babel/runtime" "^7.11.2" classnames "^2.2.6" - rc-dialog "~8.6.0" + rc-dialog "~8.9.0" rc-util "^5.0.6" rc-input-number@~4.5.0: @@ -14060,14 +14057,23 @@ rc-input-number@~4.5.0: rc-util "^4.5.1" rmc-feedback "^2.0.0" -rc-input-number@~7.0.0-alpha.4: - version "7.0.6" - resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.0.6.tgz#26ab51f28215abef8df0bd99ec5facb884480abc" - integrity sha512-J5DIoCKIunoPb16FEghaEOyNDuZXD5F9LxLNcqd31z/0e37XtuHgo4QF/TonKLsESwdg7UAzWhiD0K6PPrN3YQ== +rc-input-number@~7.3.5: + version "7.3.11" + resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.3.11.tgz#c7089705a220e1a59ba974fabf89693e00dd2442" + integrity sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" - rc-util "^5.9.8" + rc-util "^5.23.0" + +rc-input@~0.0.1-alpha.5: + version "0.0.1-alpha.7" + resolved "https://registry.npmmirror.com/rc-input/-/rc-input-0.0.1-alpha.7.tgz#53e3f13871275c21d92b51f80b698f389ad45dd3" + integrity sha512-eozaqpCYWSY5LBMwlHgC01GArkVEP+XlJ84OMvdkwUnJBSv83Yxa15pZpn7vACAj84uDC4xOA2CoFdbLuqB08Q== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.18.1" rc-mentions@~0.4.0: version "0.4.2" @@ -14081,17 +14087,17 @@ rc-mentions@~0.4.0: rc-util "^4.6.0" react-lifecycles-compat "^3.0.4" -rc-mentions@~1.5.0: - version "1.5.3" - resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.5.3.tgz#b92bebadf8ad9fb3586ba1af922d63b49d991c67" - integrity sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ== +rc-mentions@~1.9.1: + version "1.9.2" + resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-1.9.2.tgz#f264ebc4ec734dad9edc8e078b65ab3586d94a7b" + integrity sha512-uxb/lzNnEGmvraKWNGE6KXMVXvt8RQv9XW8R0Dqi3hYsyPiAZeHRCHQKdLARuk5YBhFhZ6ga55D/8XuY367g3g== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" - rc-menu "^8.0.1" + rc-menu "~9.6.0" rc-textarea "^0.3.0" rc-trigger "^5.0.4" - rc-util "^5.0.1" + rc-util "^5.22.5" rc-menu@^7.3.0, rc-menu@^7.4.22, rc-menu@~7.5.1: version "7.5.5" @@ -14108,21 +14114,20 @@ rc-menu@^7.3.0, rc-menu@^7.4.22, rc-menu@~7.5.1: resize-observer-polyfill "^1.5.0" shallowequal "^1.1.0" -rc-menu@^8.0.1, rc-menu@^8.6.1, rc-menu@~8.10.0: - version "8.10.8" - resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-8.10.8.tgz#c3eb2158b3983e42a67192babad9c8128755d26a" - integrity sha512-0gnSR0nmR/60NnK+72EGd+QheHyPSQ3wYg1TwX1zl0JJ9Gm0purFFykCXVv/G0Jynpt0QySPAos+bpHpjMZdoQ== +rc-menu@~9.6.0: + version "9.6.4" + resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.6.4.tgz#033e7b8848c17a09a81b68b8d4c3fa457605f4f6" + integrity sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - mini-store "^3.0.1" - rc-motion "^2.0.1" + rc-motion "^2.4.3" + rc-overflow "^1.2.0" rc-trigger "^5.1.2" - rc-util "^5.7.0" - resize-observer-polyfill "^1.5.0" + rc-util "^5.12.0" shallowequal "^1.1.0" -rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.0: +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4: version "2.6.2" resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.6.2.tgz#3d31f97e41fb8e4f91a4a4189b6a98ac63342869" integrity sha512-4w1FaX3dtV749P8GwfS4fYnFG4Rb9pxvCYPc/b2fw1cmlHJWNNgOFIz7ysiD+eOrzJSvnLJWlNQQncpNMXwwpg== @@ -14131,6 +14136,15 @@ rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motio classnames "^2.2.1" rc-util "^5.21.0" +rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1: + version "2.9.3" + resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.3.tgz#b1bdaf816f1ccb3e4b3b0c531c3037a59286379e" + integrity sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.43.0" + rc-notification@~3.3.1: version "3.3.1" resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-3.3.1.tgz#0baa3e70f8d40ab015ce8fa78c260c490fc7beb4" @@ -14142,15 +14156,15 @@ rc-notification@~3.3.1: rc-animate "2.x" rc-util "^4.0.4" -rc-notification@~4.5.2: - version "4.5.7" - resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-4.5.7.tgz#265e6e6a0c1a0fac63d6abd4d832eb8ff31522f1" - integrity sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw== +rc-notification@~4.6.0: + version "4.6.1" + resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-4.6.1.tgz#068e8674f4bd7926a447eca512915d4b41b15c91" + integrity sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.2.0" - rc-util "^5.0.1" + rc-util "^5.20.1" rc-overflow@^1.0.0: version "1.2.8" @@ -14162,6 +14176,16 @@ rc-overflow@^1.0.0: rc-resize-observer "^1.0.0" rc-util "^5.19.2" +rc-overflow@^1.2.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz#72ee49e85a1308d8d4e3bd53285dc1f3e0bcce2c" + integrity sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.37.0" + rc-pagination@~1.20.11: version "1.20.15" resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-1.20.15.tgz#ccb4cd0e9bd4e47f72f29ea432c0350bf7b3d807" @@ -14172,7 +14196,7 @@ rc-pagination@~1.20.11: prop-types "^15.5.7" react-lifecycles-compat "^3.0.4" -rc-pagination@~3.1.2: +rc-pagination@~3.1.17: version "3.1.17" resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.1.17.tgz#91e690aa894806e344cea88ea4a16d244194a1bd" integrity sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ== @@ -14180,10 +14204,10 @@ rc-pagination@~3.1.2: "@babel/runtime" "^7.10.1" classnames "^2.2.1" -rc-picker@~2.5.1: - version "2.5.19" - resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.5.19.tgz#73d07546fac3992f0bfabf2789654acada39e46f" - integrity sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA== +rc-picker@~2.6.10: + version "2.6.11" + resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-2.6.11.tgz#d4a55e46480517cd1bfea5f5acd28b1d6be232d2" + integrity sha512-INJ7ULu+Kj4UgqbcqE8Q+QpMw55xFf9kkyLBHJFk0ihjJpAV4glialRfqHE7k4KX2BWYPQfpILwhwR14x2EiRQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" @@ -14202,13 +14226,14 @@ rc-progress@~2.5.0: babel-runtime "6.x" prop-types "^15.5.8" -rc-progress@~3.1.0: - version "3.1.4" - resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.1.4.tgz#66040d0fae7d8ced2b38588378eccb2864bad615" - integrity sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q== +rc-progress@~3.3.2: + version "3.3.3" + resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.3.3.tgz#eb9bffbacab1534f2542f9f6861ce772254362b1" + integrity sha512-MDVNVHzGanYtRy2KKraEaWeZLri2ZHWIRyaE1a9MQ2MuJ09m+Wxj5cfcaoaR6z5iRpHpA59YeUxAlpML8N4PJw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" + rc-util "^5.16.1" rc-rate@~2.5.0: version "2.5.1" @@ -14248,17 +14273,37 @@ rc-resize-observer@^1.0.0: rc-util "^5.15.0" resize-observer-polyfill "^1.5.1" -rc-select@^12.0.0, rc-select@~12.1.0: - version "12.1.13" - resolved "https://registry.npmmirror.com/rc-select/-/rc-select-12.1.13.tgz#c33560ccb9339d30695b52458f55efc35af35273" - integrity sha512-cPI+aesP6dgCAaey4t4upDbEukJe+XN0DK6oO/6flcCX5o28o7KNZD7JAiVtC/6fCwqwI/kSs7S/43dvHmBl+A== +rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz#7bba61e6b3c604834980647cce6451914750d0cc" + integrity sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q== + dependencies: + "@babel/runtime" "^7.20.7" + classnames "^2.2.1" + rc-util "^5.38.0" + resize-observer-polyfill "^1.5.1" + +rc-segmented@~2.1.0: + version "2.1.2" + resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.1.2.tgz#14c9077a1dae9c2ccb2ef5fbc5662c1c48c7ce8e" + integrity sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-motion "^2.4.4" + rc-util "^5.17.0" + +rc-select@~14.1.0, rc-select@~14.1.1: + version "14.1.18" + resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.1.18.tgz#f1d95233132cda9c1485963254255b83e97a37a9" + integrity sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.0.1" rc-overflow "^1.0.0" rc-trigger "^5.0.4" - rc-util "^5.9.8" + rc-util "^5.16.1" rc-virtual-list "^3.2.0" rc-select@~9.2.0: @@ -14279,6 +14324,16 @@ rc-select@~9.2.0: react-lifecycles-compat "^3.0.2" warning "^4.0.2" +rc-slider@~10.0.0: + version "10.0.1" + resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-10.0.1.tgz#7058c68ff1e1aa4e7c3536e5e10128bdbccb87f9" + integrity sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.18.1" + shallowequal "^1.1.0" + rc-slider@~8.7.1: version "8.7.1" resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42" @@ -14293,17 +14348,6 @@ rc-slider@~8.7.1: shallowequal "^1.1.0" warning "^4.0.3" -rc-slider@~9.7.1: - version "9.7.5" - resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" - integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-tooltip "^5.0.1" - rc-util "^5.16.1" - shallowequal "^1.1.0" - rc-steps@~3.5.0: version "3.5.0" resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-3.5.0.tgz#36b2a7f1f49907b0d90363884b18623caf9fb600" @@ -14355,26 +14399,26 @@ rc-table@~6.10.5: react-lifecycles-compat "^3.0.2" shallowequal "^1.0.2" -rc-table@~7.13.0: - version "7.13.3" - resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.13.3.tgz#25d5f5ec47ee2d8a293aff18c4c4b8876f78c22b" - integrity sha512-oP4fknjvKCZAaiDnvj+yzBaWcg+JYjkASbeWonU1BbrLcomkpKvMUgPODNEzg0QdXA9OGW0PO86h4goDSW06Kg== +rc-table@~7.25.3: + version "7.25.3" + resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.25.3.tgz#a2941d4fde4c181e687e97a294faca8e4122e26d" + integrity sha512-McsLJ2rg8EEpRBRYN4Pf9gT7ZNYnjvF9zrBpUBBbUX/fxk+eGi5ff1iPIhMyiHsH71/BmTUzX9nc9XqupD0nMg== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" - rc-resize-observer "^1.0.0" - rc-util "^5.4.0" + rc-resize-observer "^1.1.0" + rc-util "^5.22.5" shallowequal "^1.1.0" -rc-tabs@~11.7.0: - version "11.7.3" - resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.7.3.tgz#32a30e59c6992d60fb58115ba0bf2652b337ed43" - integrity sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w== +rc-tabs@~11.16.0: + version "11.16.1" + resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.16.1.tgz#7c57b6a092d9d0e2df54413b0319f195c27214a9" + integrity sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw== dependencies: "@babel/runtime" "^7.11.2" classnames "2.x" - rc-dropdown "^3.1.3" - rc-menu "^8.6.1" + rc-dropdown "~4.0.0" + rc-menu "~9.6.0" rc-resize-observer "^1.0.0" rc-util "^5.5.0" @@ -14427,7 +14471,7 @@ rc-tooltip@^3.7.0, rc-tooltip@~3.7.3: prop-types "^15.5.8" rc-trigger "^2.2.2" -rc-tooltip@^5.0.1: +rc-tooltip@~5.2.0: version "5.2.2" resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-5.2.2.tgz#e5cafa8ecebf78108936a0bcb93c150fa81ac93b" integrity sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg== @@ -14436,14 +14480,6 @@ rc-tooltip@^5.0.1: classnames "^2.3.1" rc-trigger "^5.0.0" -rc-tooltip@~5.1.0: - version "5.1.1" - resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" - integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA== - dependencies: - "@babel/runtime" "^7.11.2" - rc-trigger "^5.0.0" - rc-tree-select@~2.9.1: version "2.9.4" resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-2.9.4.tgz#6aa794e1f0e65c66c406aa0a2a0e74fd0a557b09" @@ -14461,27 +14497,16 @@ rc-tree-select@~2.9.1: shallowequal "^1.0.2" warning "^4.0.1" -rc-tree-select@~4.3.0: - version "4.3.3" - resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-4.3.3.tgz#28eba4d8a8dc8c0f9b61d83ce465842a6915eca4" - integrity sha512-0tilOHLJA6p+TNg4kD559XnDX3PTEYuoSF7m7ryzFLAYvdEEPtjn0QZc5z6L0sMKBiBlj8a2kf0auw8XyHU3lA== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-select "^12.0.0" - rc-tree "^4.0.0" - rc-util "^5.0.5" - -rc-tree@^4.0.0: - version "4.2.2" - resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-4.2.2.tgz#4429187cbbfbecbe989714a607e3de8b3ab7763f" - integrity sha512-V1hkJt092VrOVjNyfj5IYbZKRMHxWihZarvA5hPL/eqm7o2+0SNkeidFYm7LVVBrAKBpOpa0l8xt04uiqOd+6w== +rc-tree-select@~5.4.0: + version "5.4.1" + resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.4.1.tgz#b97b9c6adcabc7415d25cfd40d18058b0c57bec2" + integrity sha512-xhXnKP8Stu2Q7wTcjJaSzSOLd4wmFtUZOwmy1cioaWyPbpiKlYdnALXA/9U49HOaV3KFXdRHE9Yi0KYED7yOAQ== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - rc-motion "^2.0.1" - rc-util "^5.0.0" - rc-virtual-list "^3.0.1" + rc-select "~14.1.0" + rc-tree "~5.6.1" + rc-util "^5.16.1" rc-tree@~2.1.0: version "2.1.4" @@ -14496,16 +14521,16 @@ rc-tree@~2.1.0: react-lifecycles-compat "^3.0.4" warning "^4.0.3" -rc-tree@~4.1.0: - version "4.1.5" - resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-4.1.5.tgz#734ab1bfe835e78791be41442ca0e571147ab6fa" - integrity sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ== +rc-tree@~5.6.1, rc-tree@~5.6.3, rc-tree@~5.6.5: + version "5.6.9" + resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.6.9.tgz#b73290a6dcad65e4ed5d8dc21cb198b30316404b" + integrity sha512-si8aGuWQ2/sh2Ibk+WdUdDeAxoviT/+kDY+NLtJ+RhqfySqPFqWM5uHTwgFRrWUvKCqEeE/PjCYuuhHrK7Y7+A== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.0.1" - rc-util "^5.0.0" - rc-virtual-list "^3.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.4.8" rc-trigger@^2.2.0, rc-trigger@^2.2.2, rc-trigger@^2.3.0, rc-trigger@^2.5.1, rc-trigger@^2.5.4, rc-trigger@^2.6.2: version "2.6.5" @@ -14533,7 +14558,7 @@ rc-trigger@^3.0.0: rc-animate "^3.0.0-rc.1" rc-util "^4.15.7" -rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.1: +rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10, rc-trigger@^5.3.1: version "5.3.4" resolved "https://registry.npmmirror.com/rc-trigger/-/rc-trigger-5.3.4.tgz#6b4b26e32825677c837d1eb4d7085035eecf9a61" integrity sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw== @@ -14554,12 +14579,12 @@ rc-upload@~2.9.1: prop-types "^15.5.7" warning "4.x" -rc-upload@~4.0.0-alpha.6: - version "4.0.1" - resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.0.1.tgz#b81a04299b413d05e3d9d4a86a23e5cce3c2bf5e" - integrity sha512-h7iLt22U0C2ObpqTU7MDoAV/FDwHTUEFjMd6uidA4ipoJ7gP7C74gOQOtl5OPQTVUDATUndnSAt9uyC1znlo9A== +rc-upload@~4.3.0: + version "4.3.6" + resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.3.6.tgz#6a87397315cee065a04bee4103d6de9dbe2e377a" + integrity sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.18.3" classnames "^2.2.5" rc-util "^5.2.0" @@ -14574,7 +14599,7 @@ rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.15. react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.5, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.21.0, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.8.1, rc-util@^5.9.4, rc-util@^5.9.8: +rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.21.0, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4: version "5.24.6" resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.6.tgz#ff4d64139c05d94727e8c3584b2cd0f74a7489cd" integrity sha512-aBkJBmAHYllC6FSxHDjFTRsDp2V2xQ8iFhjG4f6au7pOcBk7p0b0mtiqQfD0OZLcxcBuvl6O9GCtNgOfZpKeVA== @@ -14583,7 +14608,15 @@ rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.5, rc-util@^5.0.6, rc-util@^5.15.0, react-is "^16.12.0" shallowequal "^1.1.0" -rc-virtual-list@^3.0.1, rc-virtual-list@^3.2.0: +rc-util@^5.12.0, rc-util@^5.18.1, rc-util@^5.20.1, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.43.0: + version "5.43.0" + resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" + integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^18.2.0" + +rc-virtual-list@^3.2.0: version "3.4.11" resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.4.11.tgz#97f5e947380d546a2ca8ad229d8e41e9b33b20c6" integrity sha512-BvUUH60kkeTBPigN5F89HtGaA5jSP4y2aM6cJ4dk9Y42I9yY+h6i08wF6UKeDcxdfOU8j3I5HxkSS/xA77J3wA== @@ -14593,6 +14626,16 @@ rc-virtual-list@^3.0.1, rc-virtual-list@^3.2.0: rc-resize-observer "^1.0.0" rc-util "^5.15.0" +rc-virtual-list@^3.4.8: + version "3.15.0" + resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.15.0.tgz#45c5b1ef1363287214e0a3c17af29ee0c3764764" + integrity sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w== + dependencies: + "@babel/runtime" "^7.20.0" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.36.0" + rc@1.2.8, rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: version "1.2.8" resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -14662,6 +14705,11 @@ react-is@^17.0.2: resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.2.0: + version "18.3.1" + resolved "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + react-lazy-load@^3.0.13: version "3.1.14" resolved "https://registry.npmmirror.com/react-lazy-load/-/react-lazy-load-3.1.14.tgz#536047d295f578614540a5b417b70b1155f36d9a" @@ -14742,10 +14790,10 @@ react-slick@~0.25.2: lodash.debounce "^4.0.8" resize-observer-polyfill "^1.5.0" -react@^16.9.0: - version "16.14.0" - resolved "https://registry.npmmirror.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@16.9.0: + version "16.9.0" + resolved "https://registry.npmmirror.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" + integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -14980,6 +15028,11 @@ regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.4: resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" From a09949ca1f208fefefa9a2aa99b0358c3388ad7e Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 15:04:45 +0800 Subject: [PATCH 3/6] ci: lint config --- .eslintignore | 4 +- .eslintrc | 44 -- .eslintrc.js | 12 + .gitignore | 3 +- .prettierignore | 8 + .prettierrc.js | 5 + .stylelintignore | 5 + .stylelintrc.js | 6 + .vscode/settings.json | 4 + package.json | 11 +- yarn.lock | 1724 ++++++++++++++++++++++++++++++++++++++++- 11 files changed, 1750 insertions(+), 76 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.js create mode 100644 .prettierignore create mode 100644 .prettierrc.js create mode 100644 .stylelintignore create mode 100644 .stylelintrc.js create mode 100644 .vscode/settings.json diff --git a/.eslintignore b/.eslintignore index 52ee69b..e9f080c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,4 +13,6 @@ app/web/store plugins/ app/web/asset/ app/view/ -test.js \ No newline at end of file +test.js + +config/manifest.json diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 213f055..0000000 --- a/.eslintrc +++ /dev/null @@ -1,44 +0,0 @@ -{ - "parser": "babel-eslint", - "env": { - "node": true, - "es6": true, - "mocha": true - }, - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 8, - "ecmaFeatures": { - "jsx": true - } - }, - "rules": { - "indent": [ - "error", - 4 - ], - "new-cap": "off", - "newline-after-var": "off", - "no-invalid-this": "off", - "guard-for-in": "off", - "no-console": "off", - "no-undefined": "off", - "array-bracket-spacing": "off", - "no-unused-expressions": "off", - "linebreak-style": "off", - "func-style": 0, - "comma-dangle": [ - "error", - "never" - ] - }, - "plugins": [ - "react" - ], - "globals": { - "EASY_ENV_IS_PROD": true, - "EASY_ENV_IS_NODE": true, - "EASY_ENV_IS_BROWSER": true, - "EASY_ENV_IS_DEV": true - } -} \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..6a0d9a7 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,12 @@ +module.exports = { + extends: [require.resolve('ko-lint-config/.eslintrc')], + rules: { + 'no-param-reassign': 0, + 'prefer-rest-params': 0, + 'no-octal-escape': 0, + 'new-cap': 0, + 'no-new': 0, + 'react/no-unescaped-entities': 0, + 'no-control-regex': 0, + }, +}; diff --git a/.gitignore b/.gitignore index 99440b3..ebb9c12 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -.vscode node_modules config/manifest.json run @@ -7,4 +6,4 @@ cache .history public resources -app/view \ No newline at end of file +app/view diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..6e10cd7 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +# Please Checkout And Make Sure Patterns Isn't Exist In .gitignore File First +*.md +**/iconfont*/* +*.yml +app/view/ +public + +config/manifest.json diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..91db763 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +const prettier = require('ko-lint-config/.prettierrc'); + +module.exports = { + ...prettier, +}; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..348aa40 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,5 @@ +# Please Checkout And Make Sure Patterns Isn't Exist In .gitignore File First + +**/iconfont*/* +app/view/ +public diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000..16a21d6 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,6 @@ +module.exports = { + extends: ['ko-lint-config/.stylelintrc'], + rules: { + 'value-no-vendor-prefix': null, + }, +}; diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..23b9698 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.formatOnSave": true, + "cSpell.words": ["SUBSCRIPTIONSENDTYPE", "SUBSCRIPTIONSENDTYPECN", "SUBSCRIPTIONSTATUS"] +} diff --git a/package.json b/package.json index 0e01c3f..4ecc506 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,14 @@ "server:test": "egg-scripts start --port=7002 --env=test --daemon --workers=2", "dingBot": "node DingBot.js", "stop": "egg-scripts stop", + "prettier": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --check", + "prettier:fix": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --write", + "eslint": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx'", + "eslint:fix": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx' --fix", + "stylelint": "npx stylelint '**/*.scss' '**/*.css'", + "stylelint:fix": "npx stylelint '**/*.scss' '**/*.css' --fix", + "lint": "npm run prettier && npm run eslint && npm run stylelint", + "lint:fix": "npm run prettier:fix && npm run eslint:fix && npm run stylelint:fix", "check-types": "tsc --skipLibCheck", "release": "./scripts/release.sh", "ii": "npm install --registry https://registry.npm.taobao.org", @@ -68,7 +76,7 @@ "socket.io": "^4.1.0", "socket.io-client": "1.7.0", "ssh2": "^1.4.0", - "typescript": "^4.2.3", + "typescript": "4.7.4", "utf8": "^3.0.0", "xterm": "^4.12.0", "xterm-addon-attach": "^0.6.0", @@ -105,6 +113,7 @@ "file-loader": "^3.0.1", "husky": "^3.1.0", "ip": "^1.1.5", + "ko-lint-config": "^2.2.21", "less": "3.9.0", "less-loader": "^4.0.0", "redux-devtools-extension": "^2.13.8", diff --git a/yarn.lock b/yarn.lock index d83289d..7865434 100644 --- a/yarn.lock +++ b/yarn.lock @@ -516,6 +516,11 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@csstools/selector-specificity@^2.0.2": + version "2.2.0" + resolved "https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== + "@ctrl/tinycolor@^3.4.0": version "3.4.1" resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" @@ -543,6 +548,53 @@ urijs "^1.19.0" utility "^1.15.0" +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.1" + resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/eslintrc@^1.3.0": + version "1.4.1" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.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" + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + 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" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + "@hot-loader/react-dom@^16.8.6": version "16.14.0" resolved "https://registry.npmmirror.com/@hot-loader/react-dom/-/react-dom-16.14.0.tgz#3cfc64e40bb78fa623e59b582b8f09dcdaad648a" @@ -562,6 +614,44 @@ object-assign "^4.1.1" scheduler "^0.20.2" +"@humanwhocodes/config-array@^0.10.4": + version "0.10.7" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc" + integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" @@ -669,7 +759,7 @@ resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -914,6 +1004,11 @@ resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1105,6 +1200,11 @@ resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/sequelize@^4.27.24": version "4.28.14" resolved "https://registry.npmmirror.com/@types/sequelize/-/sequelize-4.28.14.tgz#70302689ddef09f5d472b548a14e5a150e690aff" @@ -1159,6 +1259,21 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz#524a11e15c09701733033c96943ecf33f55d9ca1" + integrity sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow== + dependencies: + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/type-utils" "5.30.0" + "@typescript-eslint/utils" "5.30.0" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/eslint-plugin@^2.0.0": version "2.34.0" resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" @@ -1179,6 +1294,16 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" +"@typescript-eslint/parser@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.30.0.tgz#a2184fb5f8ef2bf1db0ae61a43907e2e32aa1b8f" + integrity sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA== + dependencies: + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" + debug "^4.3.4" + "@typescript-eslint/parser@^2.0.0": version "2.34.0" resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" @@ -1189,6 +1314,41 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/scope-manager@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz#bf585ee801ab4ad84db2f840174e171a6bb002c7" + integrity sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ== + dependencies: + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz#98f3af926a5099153f092d4dad87148df21fbaae" + integrity sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg== + dependencies: + "@typescript-eslint/utils" "5.30.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.30.0.tgz#db7d81d585a3da3801432a9c1d2fafbff125e110" + integrity sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag== + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" @@ -1202,6 +1362,79 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz#4565ee8a6d2ac368996e20b2344ea0eab1a8f0bb" + integrity sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw== + dependencies: + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + 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" + +"@typescript-eslint/utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.30.0.tgz#1dac771fead5eab40d31860716de219356f5f754" + integrity sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + 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" + +"@typescript-eslint/visitor-keys@5.30.0": + version "5.30.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz#07721d23daca2ec4c2da7f1e660d41cd78bacac3" + integrity sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw== + dependencies: + "@typescript-eslint/types" "5.30.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@webassemblyjs/ast@1.7.11": version "1.7.11" resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" @@ -1574,6 +1807,11 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" @@ -1614,6 +1852,11 @@ acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.0: resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + add-dom-event-listener@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" @@ -1682,7 +1925,7 @@ ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1692,6 +1935,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.17.1" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ajv@^8.11.0: version "8.11.2" resolved "https://registry.npmmirror.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" @@ -2004,6 +2257,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.npmmirror.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -2027,6 +2285,14 @@ arr-union@^3.1.0: resolved "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-differ@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" @@ -2110,6 +2376,26 @@ array.prototype.flat@^1.2.5: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" @@ -2142,6 +2428,20 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arraybuffer.slice@0.0.6: version "0.0.6" resolved "https://registry.npmmirror.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" @@ -2223,6 +2523,11 @@ ast-types@^0.13.2: dependencies: tslib "^2.0.1" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -2283,6 +2588,13 @@ autoprefixer@^9.1.5: postcss "^7.0.32" postcss-value-parser "^4.1.0" +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + await-event@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/await-event/-/await-event-2.1.0.tgz#78e9f92684bae4022f9fa0b5f314a11550f9aa76" @@ -2310,6 +2622,11 @@ aws4@^1.8.0: resolved "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axe-core@^4.4.2: + version "4.10.2" + resolved "https://registry.npmmirror.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" + integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w== + axe-core@^4.4.3: version "4.5.2" resolved "https://registry.npmmirror.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7" @@ -3212,6 +3529,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + base64-arraybuffer@0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" @@ -3474,6 +3796,13 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -3628,6 +3957,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== +builtins@^5.0.1: + version "5.1.0" + resolved "https://registry.npmmirror.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== + dependencies: + semver "^7.0.0" + busboy@^0.2.8: version "0.2.14" resolved "https://registry.npmmirror.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" @@ -3802,6 +4138,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + call-matcher@^1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/call-matcher/-/call-matcher-1.1.0.tgz#23b2c1bc7a8394c8be28609d77ddbd5786680432" @@ -3982,7 +4329,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4441,6 +4788,11 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -5137,7 +5489,7 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^7.0.0: +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.1.0" resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -5305,6 +5657,15 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.2: + version "7.0.6" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypt@0.0.2: version "0.0.2" resolved "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -5376,6 +5737,11 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-functions-list@^3.1.0: + version "3.2.3" + resolved "https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.2.3.tgz#95652b0c24f0f59b291a9fc386041a19d4f40dbe" + integrity sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA== + css-loader@^3.0.0: version "3.6.0" resolved "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" @@ -5654,6 +6020,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@2.x: version "2.29.3" resolved "https://registry.npmmirror.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" @@ -5728,6 +6121,13 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.4: + version "4.3.7" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + debug@~4.1.0: version "4.1.1" resolved "https://registry.npmmirror.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -5792,7 +6192,7 @@ deep-extend@^0.6.0: resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -5823,6 +6223,15 @@ defer-to-connect@^1.0.1: resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -5831,6 +6240,15 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -6067,6 +6485,13 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-align@^1.7.0: version "1.12.4" resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511" @@ -7112,11 +7537,91 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -7236,6 +7741,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^1.10.0, escodegen@^1.11.1, escodegen@^1.7.0, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.npmmirror.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -7294,6 +7804,16 @@ eslint-config-egg@^7.1.0: eslint-plugin-jsx-a11y "^6.1.1" eslint-plugin-react "^7.11.1" +eslint-config-prettier@8.5.0: + version "8.5.0" + resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-config-standard@17.0.0: + version "17.0.0" + resolved "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== + eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" @@ -7320,12 +7840,29 @@ eslint-module-utils@^2.7.3: dependencies: debug "^3.2.7" +eslint-plugin-dt-react@0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/eslint-plugin-dt-react/-/eslint-plugin-dt-react-0.0.6.tgz#545ff5a4fa34efabd9d0a37fe332df7723a59766" + integrity sha512-yLSfUl7CF0XED34Zh2hwtGZyXxlXt6Nf8hcte7S32UUnDMcFudF1pHWUa4C34LQap/aSywb9qsUHWIlpoab1bQ== + dependencies: + eslint "^8.16.0" + object.hasown "^1.1.1" + semver "^7.3.7" + eslint-plugin-eggache@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/eslint-plugin-eggache/-/eslint-plugin-eggache-1.0.0.tgz#1f8f98c698d2b511519fbdefbae78fe230487aa4" integrity sha512-LPTrTvITFDZggiXAIdMPL4bJo0wvXUgJqC3f6UIskJxzHZze2aBTvjWQJ7TgEbkfpk++KWhcOl+lels+qAPKDg== -eslint-plugin-import@^2.14.0, eslint-plugin-import@^2.6.0: +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@2.26.0, eslint-plugin-import@^2.14.0, eslint-plugin-import@^2.6.0: version "2.26.0" resolved "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -7344,6 +7881,13 @@ eslint-plugin-import@^2.14.0, eslint-plugin-import@^2.6.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" +eslint-plugin-jest@26.5.3: + version "26.5.3" + resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-26.5.3.tgz#a3ceeaf4a757878342b8b00eca92379b246e5505" + integrity sha512-sICclUqJQnR1bFRZGLN2jnSVsYOsmPYYnroGCIMVSvTS3y8XR3yjzy1EcTQmk6typ5pRgyIWzbjqxK6cZHEZuQ== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + eslint-plugin-jsdoc@^4.1.1: version "4.8.4" resolved "https://registry.npmmirror.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-4.8.4.tgz#31f413c8a31fe656881398d8920b381bfdfac618" @@ -7353,6 +7897,25 @@ eslint-plugin-jsdoc@^4.1.1: jsdoctypeparser "3.1.0" lodash "^4.17.11" +eslint-plugin-jsx-a11y@6.6.0: + version "6.6.0" + resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415" + integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw== + dependencies: + "@babel/runtime" "^7.18.3" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.1" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + eslint-plugin-jsx-a11y@^6.0.0, eslint-plugin-jsx-a11y@^6.1.1: version "6.6.1" resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" @@ -7372,6 +7935,57 @@ eslint-plugin-jsx-a11y@^6.0.0, eslint-plugin-jsx-a11y@^6.1.1: minimatch "^3.1.2" semver "^6.3.0" +eslint-plugin-n@15.2.3: + version "15.2.3" + resolved "https://registry.npmmirror.com/eslint-plugin-n/-/eslint-plugin-n-15.2.3.tgz#b8850b90a8c27d3d880521ad90dbf537ac0a9830" + integrity sha512-H+KC7U5R+3IWTeRnACm/4wlqLvS1Q7M6t7BGhn89qXDkZan8HTAEv3ouIONA0ifDwc2YzPFmyPzHuNLddNK4jw== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.9.0" + minimatch "^3.1.2" + resolve "^1.10.1" + semver "^7.3.7" + +eslint-plugin-prettier@4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" + integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== + +eslint-plugin-react-hooks@4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@7.30.1: + version "7.30.1" + resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + eslint-plugin-react@^7.1.0, eslint-plugin-react@^7.11.1: version "7.31.11" resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" @@ -7393,6 +8007,16 @@ eslint-plugin-react@^7.1.0, eslint-plugin-react@^7.11.1: semver "^6.3.0" string.prototype.matchall "^4.0.8" +eslint-plugin-simple-import-sort@^10.0.0: + version "10.0.0" + resolved "https://registry.npmmirror.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" + integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== + +eslint-plugin-sort-requires@2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/eslint-plugin-sort-requires/-/eslint-plugin-sort-requires-2.1.0.tgz#3efad948dc83798219e809f54067c40e55444861" + integrity sha512-kU24IuceSOEMfASJF0Blmy3mcsLWfUaUNSaEAz3v80TXBi9HbvTBLA0iISlmLZvvxRlegNTRxFYVgsvcAkz6PA== + eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" @@ -7417,7 +8041,7 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0: +eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -7425,6 +8049,14 @@ eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.1.1, eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -7432,11 +8064,73 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.22.0: + version "8.22.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + eslint@^4.3.0: version "4.19.1" resolved "https://registry.npmmirror.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" @@ -7481,6 +8175,50 @@ eslint@^4.3.0: table "4.0.2" text-table "~0.2.0" +eslint@^8.16.0: + version "8.57.1" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + espower-loader@^1.0.0: version "1.2.2" resolved "https://registry.npmmirror.com/espower-loader/-/espower-loader-1.2.2.tgz#edb46c3c59a06bac8ea73a695c86e5c5a0bc82da" @@ -7542,6 +8280,15 @@ espree@^3.5.4: acorn "^5.5.0" acorn-jsx "^3.0.0" +espree@^9.3.3, espree@^9.4.0, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@^2.0.0: version "2.7.3" resolved "https://registry.npmmirror.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -7566,6 +8313,13 @@ esquery@^1.0.0: dependencies: estraverse "^5.1.0" +esquery@^1.4.0, esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -7835,11 +8589,16 @@ fast-deep-equal@^1.0.0: resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" integrity sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -7863,6 +8622,17 @@ fast-glob@^3.0.3, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.11: + version "3.3.2" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -7873,6 +8643,16 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -7932,6 +8712,13 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-loader@^1.1.10: version "1.1.11" resolved "https://registry.npmmirror.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" @@ -7985,6 +8772,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + finalhandler@0.4.0: version "0.4.0" resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" @@ -8119,6 +8913,15 @@ flat-cache@^1.2.1: rimraf "~2.6.2" write "^0.2.1" +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + flat@^4.1.0: version "4.1.1" resolved "https://registry.npmmirror.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" @@ -8126,6 +8929,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -8151,6 +8959,13 @@ follow-redirects@^1.0.0: resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -8348,6 +9163,11 @@ function-bind@^1.1.1: resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -8358,12 +9178,22 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -8399,6 +9229,17 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" @@ -8463,6 +9304,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + get-uri@3: version "3.0.2" resolved "https://registry.npmmirror.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" @@ -8536,6 +9386,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.1.0.tgz#e0369d426578fd456d47dc23b09de05c1da9ea5d" @@ -8604,6 +9461,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -8615,6 +9479,15 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + global@^4.3.0: version "4.4.0" resolved "https://registry.npmmirror.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -8628,11 +9501,26 @@ globals@^11.0.1, globals@^11.1.0: resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.15.0, globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + globals@^9.18.0: version "9.18.0" resolved "https://registry.npmmirror.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + globby@^10.0.2: version "10.0.2" resolved "https://registry.npmmirror.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -8647,7 +9535,7 @@ globby@^10.0.2: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.0: +globby@^11.0.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -8685,6 +9573,18 @@ globby@^9.1.0, globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== + +gopd@^1.0.1: + version "1.1.0" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.1.0.tgz#df8f0839c2d48caefc32a025a49294d39606c912" + integrity sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA== + dependencies: + get-intrinsic "^1.2.4" + got@^6.7.1: version "6.7.1" resolved "https://registry.npmmirror.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -8740,6 +9640,16 @@ graceful@^1.1.0: humanize-ms "^1.2.1" ps-tree "^1.1.0" +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + growl@1.10.5: version "1.10.5" resolved "https://registry.npmmirror.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -8846,7 +9756,21 @@ has-property-descriptors@^1.0.0: resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.1.1" + +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.1.0" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.1.0.tgz#deb10494cbbe8809bce168a3b961f42969f5ed43" + integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== + dependencies: + call-bind "^1.0.7" has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" @@ -8860,6 +9784,13 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -8927,6 +9858,13 @@ hasha@^3.0.0: dependencies: is-stream "^1.0.1" +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0, he@1.2.x: version "1.2.0" resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -9057,6 +9995,11 @@ html-minifier@^3.2.3, html-minifier@^3.4.3: relateurl "0.2.x" uglify-js "3.4.x" +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + html-webpack-plugin@^3.0.6: version "3.2.0" resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" @@ -9358,6 +10301,11 @@ import-lazy@^2.1.0: resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -9438,7 +10386,7 @@ ini@1.3.7: resolved "https://registry.npmmirror.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -9535,6 +10483,15 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -9604,6 +10561,14 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -9614,6 +10579,13 @@ is-arrayish@^0.3.1: resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -9658,7 +10630,7 @@ is-buffer@~2.0.3: resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -9694,6 +10666,13 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -9715,7 +10694,14 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -9762,6 +10748,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== + dependencies: + call-bind "^1.0.7" + is-finite@^1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" @@ -9784,7 +10777,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -9843,6 +10836,11 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-mobile@^2.1.0: version "2.2.2" resolved "https://registry.npmmirror.com/is-mobile/-/is-mobile-2.2.2.tgz#f6c9c5d50ee01254ce05e739bdd835f1ed4e9954" @@ -9861,6 +10859,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -9907,7 +10910,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-path-inside@^3.0.1: +is-path-inside@^3.0.1, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -9929,6 +10932,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -9967,6 +10975,11 @@ is-retry-allowed@^1.0.0: resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -9974,6 +10987,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -10014,6 +11034,13 @@ is-type-of@^1.0.0, is-type-of@^1.1.0, is-type-of@^1.2.0, is-type-of@^1.2.1: is-class-hotfix "~0.0.6" isstream "~0.1.2" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -10041,6 +11068,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -10048,6 +11080,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -10078,6 +11118,11 @@ isarray@2.0.1: resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -10242,6 +11287,13 @@ js-yaml@^3.13.1, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -10337,6 +11389,11 @@ json-buffer@3.0.0: resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -10457,6 +11514,16 @@ jsprim@^1.2.2: array-includes "^3.1.5" object.assign "^4.1.3" +jsx-ast-utils@^3.3.1: + version "3.3.5" + resolved "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + kcors@^1.3.2: version "1.3.3" resolved "https://registry.npmmirror.com/kcors/-/kcors-1.3.3.tgz#afaf9e5dbef4c20c2994a7b434e4f7e07826fc65" @@ -10478,6 +11545,13 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -10514,6 +11588,41 @@ klona@^2.0.4: resolved "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== +known-css-properties@^0.25.0: + version "0.25.0" + resolved "https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.25.0.tgz#6ebc4d4b412f602e5cfbeb4086bd544e34c0a776" + integrity sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA== + +ko-lint-config@^2.2.21: + version "2.2.21" + resolved "https://registry.npmmirror.com/ko-lint-config/-/ko-lint-config-2.2.21.tgz#f57f9ac87180cd95d2bb7ac688aac2709fdddd8f" + integrity sha512-FwKbG3hKhUeG3WLPDMR5TdUGaqLaEl97ID4fPOhcKZNLNEoeWa6+HDBDzTT40kz5ycONq3dsDoRgcNg3IJccDg== + dependencies: + "@typescript-eslint/eslint-plugin" "5.30.0" + "@typescript-eslint/parser" "5.30.0" + eslint "8.22.0" + eslint-config-prettier "8.5.0" + eslint-config-standard "17.0.0" + eslint-plugin-dt-react "0.0.6" + eslint-plugin-import "2.26.0" + eslint-plugin-jest "26.5.3" + eslint-plugin-jsx-a11y "6.6.0" + eslint-plugin-n "15.2.3" + eslint-plugin-prettier "4.2.1" + eslint-plugin-promise "6.0.0" + eslint-plugin-react "7.30.1" + eslint-plugin-react-hooks "4.6.0" + eslint-plugin-simple-import-sort "^10.0.0" + eslint-plugin-sort-requires "2.1.0" + postcss "8.4.14" + postcss-less "6.0.0" + postcss-scss "4.0.4" + prettier "2.7.1" + stylelint "14.11.0" + stylelint-config-standard "25.0.0" + stylelint-order "5.0.0" + stylelint-scss "4.3.0" + ko-sleep@^1.0.2, ko-sleep@^1.0.3: version "1.1.4" resolved "https://registry.npmmirror.com/ko-sleep/-/ko-sleep-1.1.4.tgz#56462fba835e07bb8c26cfa083f9893a3fde5469" @@ -10785,6 +11894,14 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -11002,6 +12119,11 @@ lodash.throttle@^4.0.0: resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -11196,6 +12318,11 @@ material-colors@^1.2.1: resolved "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -11326,6 +12453,24 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -11402,6 +12547,14 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.5: + version "4.0.8" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -11506,7 +12659,7 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -11682,7 +12835,7 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@*, ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@*, ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -11823,6 +12976,11 @@ nanoid@^3.3.2: resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.4, nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -12236,6 +13394,11 @@ object-inspect@^1.12.2, object-inspect@^1.9.0: resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.1, object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + object-is@^1.0.1: version "1.1.5" resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -12276,6 +13439,25 @@ object.assign@^4.0.1, object.assign@^4.1.0, object.assign@^4.1.3, object.assign@ has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.8" + resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + object.entries@^1.1.6: version "1.1.6" resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" @@ -12285,6 +13467,16 @@ object.entries@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.fromentries@^2.0.5: + version "2.0.8" + resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + object.fromentries@^2.0.6: version "2.0.6" resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" @@ -12304,6 +13496,15 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.4" es-abstract "^1.20.4" +object.hasown@^1.1.1: + version "1.1.4" + resolved "https://registry.npmmirror.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" @@ -12424,6 +13625,18 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1, optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + options@>=0.0.5: version "0.0.6" resolved "https://registry.npmmirror.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" @@ -12957,6 +14170,11 @@ picocolors@^1.0.0: resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -13044,6 +14262,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-calc@^7.0.1: version "7.0.5" resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" @@ -13100,6 +14323,11 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" +postcss-less@6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-less/-/postcss-less-6.0.0.tgz#463b34c60f53b648c237f569aeb2e09149d85af4" + integrity sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg== + postcss-load-config@^2.0.0: version "2.1.2" resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" @@ -13118,6 +14346,11 @@ postcss-loader@^3.0.0: postcss-load-config "^2.0.0" schema-utils "^1.0.0" +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.npmmirror.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + postcss-merge-longhand@^4.0.11: version "4.0.11" resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" @@ -13323,6 +14556,21 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-resolve-nested-selector@^0.1.1: + version "0.1.6" + resolved "https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" + integrity sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== + +postcss-safe-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" + integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + +postcss-scss@4.0.4: + version "4.0.4" + resolved "https://registry.npmmirror.com/postcss-scss/-/postcss-scss-4.0.4.tgz#aa8f60e19ee18259bc193db9e4b96edfce3f3b1f" + integrity sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg== + postcss-selector-parser@^3.0.0: version "3.1.2" resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" @@ -13340,6 +14588,19 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: + version "6.1.2" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sorting@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-7.0.1.tgz#923b5268451cf2d93ebf8835e17a6537757049a5" + integrity sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g== + postcss-svgo@^4.0.3: version "4.0.3" resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" @@ -13363,11 +14624,20 @@ postcss-value-parser@^3.0.0: resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" @@ -13376,6 +14646,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3 picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.3.11, postcss@^8.4.16: + version "8.4.49" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + power-assert-context-formatter@^1.0.7: version "1.2.0" resolved "https://registry.npmmirror.com/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz#8fbe72692288ec5a7203cdf215c8b838a6061d2a" @@ -13475,6 +14754,11 @@ power-assert@^1.6.1: universal-deep-strict-equal "^1.2.1" xtend "^4.0.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -13490,6 +14774,18 @@ prepend-http@^2.0.0: resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@2.7.1: + version "2.7.1" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" @@ -15008,6 +16304,19 @@ redux@^4.0.0, redux@^4.0.4: dependencies: "@babel/runtime" "^7.9.2" +reflect.getprototypeof@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz#04311b33a1b713ca5eb7b5aed9950a86481858e5" + integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + which-builtin-type "^1.1.4" + regenerate@^1.2.1: version "1.4.2" resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -15059,12 +16368,22 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" +regexp.prototype.flags@^1.5.2, regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + regexpp@^1.0.1: version "1.1.0" resolved "https://registry.npmmirror.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== -regexpp@^3.0.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -15313,6 +16632,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.2.0, resolve@^1.20. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.10.1: + version "1.22.8" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.4" resolved "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -15481,6 +16809,16 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -15500,6 +16838,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -15697,6 +17044,11 @@ semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.0.0, semver@^7.3.7: + version "7.6.3" + resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.8" resolved "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -15891,6 +17243,28 @@ set-blocking@^2.0.0: resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -15995,12 +17369,22 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + sigmund@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -16034,6 +17418,15 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -16242,6 +17635,11 @@ source-list-map@^2.0.0: resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.0.2, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -16608,7 +18006,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -16617,6 +18015,24 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.matchall@^4.0.7: + version "4.0.11" + resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -16631,6 +18047,16 @@ string.prototype.matchall@^4.0.8: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + string.prototype.trimend@^1.0.5: version "1.0.6" resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -16640,6 +18066,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.5: version "1.0.6" resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -16649,6 +18084,15 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -16761,7 +18205,7 @@ strip-json-comments@2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -16774,6 +18218,11 @@ style-loader@^0.18.2: loader-utils "^1.0.2" schema-utils "^0.3.0" +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -16783,6 +18232,81 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +stylelint-config-recommended@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz#7497372ae83ab7a6fffc18d7d7b424c6480ae15e" + integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q== + +stylelint-config-standard@25.0.0: + version "25.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz#2c916984e6655d40d6e8748b19baa8603b680bff" + integrity sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA== + dependencies: + stylelint-config-recommended "^7.0.0" + +stylelint-order@5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/stylelint-order/-/stylelint-order-5.0.0.tgz#abd20f6b85ac640774cbe40e70d3fe9c6fdf4400" + integrity sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw== + dependencies: + postcss "^8.3.11" + postcss-sorting "^7.0.1" + +stylelint-scss@4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/stylelint-scss/-/stylelint-scss-4.3.0.tgz#638800faf823db11fff60d537c81051fe74c90fa" + integrity sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ== + dependencies: + lodash "^4.17.21" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.0.6" + postcss-value-parser "^4.1.0" + +stylelint@14.11.0: + version "14.11.0" + resolved "https://registry.npmmirror.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc" + integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + balanced-match "^2.0.0" + colord "^2.9.3" + cosmiconfig "^7.0.1" + css-functions-list "^3.1.0" + debug "^4.3.4" + fast-glob "^3.2.11" + fastest-levenshtein "^1.0.16" + file-entry-cache "^6.0.1" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.2.0" + ignore "^5.2.0" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.25.0" + mathml-tag-names "^2.1.3" + meow "^9.0.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.16" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^6.0.0" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + style-search "^0.1.0" + supports-hyperlinks "^2.2.0" + svg-tags "^1.0.0" + table "^6.8.0" + v8-compile-cache "^2.3.0" + write-file-atomic "^4.0.2" + supports-color@6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -16809,18 +18333,31 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.2.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + svgo@^1.0.0: version "1.3.2" resolved "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -16889,6 +18426,17 @@ table@4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +table@^6.8.0: + version "6.8.2" + resolved "https://registry.npmmirror.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tapable@^0.2.7: version "0.2.9" resolved "https://registry.npmmirror.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" @@ -17025,7 +18573,7 @@ text-extensions@^1.0.0: resolved "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@~0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== @@ -17370,7 +18918,7 @@ tsscmp@1.0.6: resolved "https://registry.npmmirror.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^3.17.1: +tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -17399,6 +18947,13 @@ tweezer.js@^1.4.0: resolved "https://registry.npmmirror.com/tweezer.js/-/tweezer.js-1.5.0.tgz#ca50ac5215022203fd3be4d28617e8e2305f5c0c" integrity sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -17411,6 +18966,11 @@ type-fest@^0.18.0: resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -17449,6 +19009,51 @@ type@^2.7.2: resolved "https://registry.npmmirror.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz#3fa9f22567700cc86aaf86a1e7176f74b59600f2" + integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + reflect.getprototypeof "^1.0.6" + +typed-array-length@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -17461,7 +19066,12 @@ typedarray@^0.0.6: resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.0.0, typescript@^4.2.3, typescript@^4.6.4: +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +typescript@^4.0.0, typescript@^4.6.4: version "4.9.3" resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== @@ -17890,6 +19500,11 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: + version "2.4.0" + resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== + v8-to-istanbul@^9.0.0: version "9.0.1" resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" @@ -18275,6 +19890,35 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.4: + version "1.2.0" + resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c" + integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== + dependencies: + call-bind "^1.0.7" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -18285,7 +19929,18 @@ which-module@^2.0.0: resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.16" + resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -18339,6 +19994,11 @@ word-wrap@^1.0.3, word-wrap@~1.2.3: resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -18410,6 +20070,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.npmmirror.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" From 8bb4994616a7252db6601401f68e8ac9a10359f0 Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 15:12:36 +0800 Subject: [PATCH 4/6] ci: lint fix --- DingBot.js | 37 +- agent.js | 32 +- app.js | 16 +- app/consts/index.js | 12 +- app/controller/appCenters.js | 110 +- app/controller/articleSubscription.js | 96 +- app/controller/articleTopic.js | 20 +- app/controller/common.js | 21 +- app/controller/configCenter.js | 90 +- app/controller/configDetail.js | 143 +- app/controller/envManagement.js | 47 +- app/controller/home.js | 6 +- app/controller/hostManagement.js | 50 +- app/controller/proxy.js | 258 +- app/controller/switchHosts.js | 48 +- app/controller/tagManagement.js | 57 +- app/io/controller/home.js | 25 +- app/io/middleware/connection.js | 6 +- app/middleware/access.js | 19 +- app/middleware/proxy.js | 76 +- app/mocks/article/list.js | 232 +- app/model/app_centers.js | 37 +- app/model/article_subscription.js | 47 +- app/model/article_topic.js | 31 +- app/model/config_management.js | 51 +- app/model/config_notice_url.js | 32 +- app/model/config_tag_rel.js | 27 +- app/model/env_management.js | 32 +- app/model/host_management.js | 34 +- app/model/proxy_rule.js | 32 +- app/model/proxy_server.js | 32 +- app/model/proxy_server_addrs.js | 28 +- app/model/switch_hosts.js | 37 +- app/model/tag_management.js | 33 +- app/router.js | 92 +- app/schedule/articleSubscription.js | 10 +- app/service/appCenters.js | 46 +- app/service/articleSubscription.js | 115 +- app/service/articleTopic.js | 10 +- app/service/configCenter.js | 117 +- app/service/configDetail.js | 96 +- app/service/envManagement.js | 71 +- app/service/hostManagement.js | 88 +- app/service/proxyServer.js | 64 +- app/service/proxyServerAddrs.js | 43 +- app/service/switchHosts.js | 24 +- app/service/tagManagement.js | 69 +- app/utils/articleSubscription.js | 290 +- app/utils/createServer.js | 58 +- app/utils/index.js | 109 +- app/utils/timedTask.js | 58 +- app/view/app.js | 2 +- app/web/ typings/global.d.ts | 26 +- app/web/api/index.ts | 18 +- app/web/api/url.ts | 162 +- app/web/app.tsx | 30 +- app/web/asset/css/app.css | 470 +- app/web/asset/css/bootstrap-theme.css | 602 +-- app/web/asset/css/bootstrap.css | 3909 ++++++++--------- app/web/asset/css/global.css | 2 +- app/web/asset/css/normalize.css | 270 +- app/web/asset/font/iconfont.css | 51 +- app/web/asset/font/iconfont.js | 64 +- app/web/components/dtCodemirror/index.tsx | 60 +- app/web/components/dtCodemirror/style.scss | 6 +- app/web/components/dtDingconfig/index.tsx | 327 +- app/web/components/dtDingconfig/style.scss | 11 +- app/web/components/dtTable/index.tsx | 95 +- app/web/components/dtTable/style.scss | 29 +- app/web/components/dtTag/index.tsx | 11 +- app/web/components/dtTag/style.scss | 12 +- app/web/components/exception/index.tsx | 7 +- app/web/components/exception/style.scss | 138 +- app/web/components/exception/typeConfig.ts | 8 +- app/web/components/loading/index.tsx | 21 +- app/web/components/loading/style.scss | 330 +- app/web/components/newLoading/index.tsx | 19 +- app/web/components/newLoading/style.scss | 328 +- app/web/constant/index.ts | 15 +- app/web/layouts/basicLayout/index.tsx | 59 +- app/web/layouts/basicLayout/style.scss | 58 +- app/web/layouts/header/header.tsx | 155 +- app/web/layouts/header/style.scss | 10 +- app/web/layouts/sider/index.tsx | 115 +- app/web/layouts/sider/style.scss | 52 +- app/web/main.tsx | 52 +- .../components/ChooseSendTime/index.tsx | 72 +- .../components/SubscriptionModal/index.tsx | 300 +- .../pages/articleSubscription/consts/index.ts | 6 +- app/web/pages/articleSubscription/index.tsx | 179 +- app/web/pages/articleSubscription/style.scss | 2 +- .../components/configFileModal/index.tsx | 144 +- app/web/pages/configCenter/index.tsx | 247 +- app/web/pages/configCenter/style.scss | 22 +- app/web/pages/configDetail/index.tsx | 175 +- app/web/pages/configDetail/style.scss | 26 +- .../components/envModal/index.tsx | 110 +- app/web/pages/envManagement/index.tsx | 223 +- app/web/pages/envManagement/style.scss | 32 +- app/web/pages/exception/403.tsx | 10 +- app/web/pages/exception/404.tsx | 8 +- app/web/pages/exception/500.tsx | 13 +- app/web/pages/home/index.tsx | 19 +- app/web/pages/home/style.scss | 24 +- .../components/hostModal/index.tsx | 152 +- .../components/passwordModal/index.tsx | 80 +- .../components/webTerminalModal/index.tsx | 23 +- app/web/pages/hostManagement/index.tsx | 265 +- app/web/pages/hostManagement/style.scss | 45 +- app/web/pages/innerUrlNavigation/index.tsx | 84 +- app/web/pages/innerUrlNavigation/style.scss | 42 +- app/web/pages/mailSign/index.tsx | 283 +- app/web/pages/mailSign/style.scss | 150 +- .../components/proxyRuleModal/index.tsx | 92 +- .../components/proxyServerModal/index.tsx | 204 +- .../proxyServerModal/proxyAddrsTable.tsx | 49 +- app/web/pages/proxyServer/index.tsx | 821 ++-- app/web/pages/proxyServer/style.scss | 111 +- .../pages/switchHosts/editHosts/hostsInfo.tsx | 47 +- app/web/pages/switchHosts/editHosts/index.tsx | 93 +- app/web/pages/switchHosts/index.tsx | 122 +- .../components/addTagModal/index.tsx | 123 +- .../components/colorPicker/index.tsx | 75 +- .../components/colorPicker/style.scss | 10 +- app/web/pages/tagsManagement/index.tsx | 180 +- app/web/pages/tagsManagement/style.scss | 4 +- .../toolbox/components/CreateApp/index.tsx | 176 +- .../components/toolboxCard/constant.ts | 4 +- .../toolbox/components/toolboxCard/index.tsx | 104 +- .../toolbox/components/toolboxCard/style.scss | 9 +- .../toolbox/components/uplodadLogo/index.tsx | 26 +- .../toolbox/components/uplodadLogo/style.scss | 2 +- app/web/pages/toolbox/index.tsx | 198 +- app/web/pages/toolbox/style.scss | 90 +- app/web/pages/webTerminal/const.ts | 5 +- app/web/pages/webTerminal/index.tsx | 321 +- app/web/pages/webTerminal/style.scss | 2 +- app/web/router/index.ts | 76 +- app/web/scss/common.scss | 50 +- app/web/scss/cover.scss | 12 +- app/web/scss/index.scss | 8 +- app/web/scss/reset.scss | 63 +- app/web/scss/variable.scss | 6 +- app/web/store/actions.ts | 32 +- app/web/store/index.ts | 10 +- app/web/store/reducer.ts | 17 +- app/web/utils/http.ts | 79 +- app/web/utils/interceptor.ts | 60 +- app/web/utils/reg.ts | 5 +- app/web/utils/socket.ts | 4 +- app/web/view/layout.tsx | 45 +- commitlint.config.js | 7 +- config/config.default.js | 70 +- config/config.local.js | 19 +- config/config.prod.js | 11 +- config/config.test.js | 8 +- config/plugin.js | 10 +- config/plugin.local.js | 6 +- getJsonFiles.js | 17 +- package.json | 300 +- theme.js | 6 +- tsconfig.json | 21 +- webpack.config.js | 31 +- 163 files changed, 9284 insertions(+), 8031 deletions(-) diff --git a/DingBot.js b/DingBot.js index 592fec4..807626e 100644 --- a/DingBot.js +++ b/DingBot.js @@ -3,7 +3,7 @@ const version = require('./package.json').version; const config = require('./env.json'); const Logger = require('egg-logger').Logger; const logger = new Logger('DingdingBot'); -const botWebhookUrl = config && config.webhookUrls ? config.webhookUrls : []; //钉钉通知群 +const botWebhookUrl = config && config.webhookUrls ? config.webhookUrls : []; // 钉钉通知群 const ApplicationTypeHeader = 'application/json;charset=utf-8'; // DingdingBot class DingdingBot { @@ -12,36 +12,35 @@ class DingdingBot { this._webhookUrl = webhookUrl; } - pushMsg(msg, atMobiles) { + pushMsg(msg, _atMobiles) { try { - - let options = { + const options = { headers: { - 'Content-Type': ApplicationTypeHeader + 'Content-Type': ApplicationTypeHeader, }, json: { - 'msgtype': 'actionCard', - 'actionCard': { - 'title': 'Doraemon发布通知', - 'text': `### Doraemon v${version} 发布成功 ![screenshot](https://img.pngio.com/my-impression-doraemon-is-my-favorite-cartoon-l-like-doraemon-doraemon-png-820_443.png) \n>致力于解放更多生产力,让日常工作变的更加高效、轻松、便捷、愉快~`, - 'btnOrientation': '0', - 'singleTitle': '阅读全文', - 'singleURL': config && config.msgSingleUrl ? config.msgSingleUrl : '' - } - } + msgtype: 'actionCard', + actionCard: { + title: 'Doraemon发布通知', + text: `### Doraemon v${version} 发布成功 ![screenshot](https://img.pngio.com/my-impression-doraemon-is-my-favorite-cartoon-l-like-doraemon-doraemon-png-820_443.png) \n>致力于解放更多生产力,让日常工作变的更加高效、轻松、便捷、愉快~`, + btnOrientation: '0', + singleTitle: '阅读全文', + singleURL: config && config.msgSingleUrl ? config.msgSingleUrl : '', + }, + }, }; + // eslint-disable-next-line n/handle-callback-err request.post(this._webhookUrl, options, function (error, response, body) { logger.debug(`push msg ${msg}, response: ${JSON.stringify(body)}`); }); - } - catch (err) { + } catch (err) { console.error(err); return false; } } } -botWebhookUrl.forEach(item => { - let bot = new DingdingBot(item);; +botWebhookUrl.forEach((item) => { + const bot = new DingdingBot(item); // 直接推送消息 bot.pushMsg('发布通知'); -}) +}); diff --git a/agent.js b/agent.js index c475a84..d58dcad 100644 --- a/agent.js +++ b/agent.js @@ -1,29 +1,35 @@ -const { createTimedTask, changeTimedTask, cancelTimedTask, timedTaskList, timedTaskResult } = require('./app/utils/timedTask') +const { + createTimedTask, + changeTimedTask, + cancelTimedTask, + timedTaskList, + timedTaskResult, +} = require('./app/utils/timedTask'); // 接收 app 发送来的消息并作出反应 -module.exports = agent => { +module.exports = (agent) => { // 创建文章订阅任务 agent.messenger.on('createTimedTask', ({ id, sendCron }) => { - createTimedTask(id, sendCron, agent) - }) + createTimedTask(id, sendCron, agent); + }); // 改变文章订阅任务 agent.messenger.on('changeTimedTask', ({ id, sendCron }) => { - changeTimedTask(id, sendCron, agent) - }) + changeTimedTask(id, sendCron, agent); + }); // 取消文章订阅任务 agent.messenger.on('cancelTimedTask', ({ id }) => { - cancelTimedTask(id, agent) - }) + cancelTimedTask(id, agent); + }); // 文章订阅任务列表 agent.messenger.on('timedTaskList', () => { - timedTaskList(agent) - }) + timedTaskList(agent); + }); // 打印文章订阅任务的执行结果 agent.messenger.on('timedTaskResult', ({ result }) => { - timedTaskResult(result, agent) - }) -} + timedTaskResult(result, agent); + }); +}; diff --git a/app.js b/app.js index f9be6aa..f76c343 100644 --- a/app.js +++ b/app.js @@ -6,20 +6,20 @@ module.exports = class AppBootHook { this.app = app; } async serverDidReady() { - const {app} = this; + const { app } = this; app.utils = utils; - const {cacheDirectory} = app.config; - if (!fs.existsSync(cacheDirectory)){ + const { cacheDirectory } = app.config; + if (!fs.existsSync(cacheDirectory)) { fs.mkdirSync(cacheDirectory); } // 监听 agent 进程发出的信息并作出反应 app.messenger.on('sendArticleSubscription', (id) => { // create an anonymous context to access service - const ctx = app.createAnonymousContext() + const ctx = app.createAnonymousContext(); ctx.runInBackground(async () => { - await ctx.service.articleSubscription.sendArticleSubscription(id) - }) - }) + await ctx.service.articleSubscription.sendArticleSubscription(id); + }); + }); } -} +}; diff --git a/app/consts/index.js b/app/consts/index.js index ee72038..216b951 100644 --- a/app/consts/index.js +++ b/app/consts/index.js @@ -2,16 +2,16 @@ const SITE_NAME = { GITHUB: 'Github', JUEJIN: '掘金', - ENGLISH: '英文' -} + ENGLISH: '英文', +}; // 订阅网站的二级分类 - 话题 const TOPIC_NAME = { DEV_ARCHITECTURE: 'DEV Architecture', - REACT_STATUS: 'React Status' -} + REACT_STATUS: 'React Status', +}; module.exports = { SITE_NAME, - TOPIC_NAME -} + TOPIC_NAME, +}; diff --git a/app/controller/appCenters.js b/app/controller/appCenters.js index 0ad4a12..0163a0b 100644 --- a/app/controller/appCenters.js +++ b/app/controller/appCenters.js @@ -3,9 +3,9 @@ const _ = require('lodash'); const moment = require('moment'); const path = require('path'); const fs = require('fs'); -//异步二进制 写入流 +// 异步二进制 写入流 const awaitWriteStream = require('await-stream-ready').write; -//管道读入一个虫洞。 +// 管道读入一个虫洞。 const sendToWormhole = require('stream-wormhole'); class AppCentersController extends Controller { @@ -13,30 +13,44 @@ class AppCentersController extends Controller { const { app, ctx } = this; const { appName = '', appTags } = ctx.request.query; const appResult = await app.model.AppCenters.findAndCountAll({ - attributes: ['id', 'appName', 'appTags', 'appDesc', 'appUrl', 'appType', 'clickCount', 'logoUrl', 'created_at', 'updated_at'], - order: [['appType', 'ASC'], ['clickCount', 'DESC']], + attributes: [ + 'id', + 'appName', + 'appTags', + 'appDesc', + 'appUrl', + 'appType', + 'clickCount', + 'logoUrl', + 'created_at', + 'updated_at', + ], + order: [ + ['appType', 'ASC'], + ['clickCount', 'DESC'], + ], where: { status: 1, appName: { - '$like': `%${appName}%` - } - } + $like: `%${appName}%`, + }, + }, }); - let tagsResult = await ctx.model.TagManagement.findAll(); // query - let result = []; - appResult.rows.forEach(item => { + const tagsResult = await ctx.model.TagManagement.findAll(); // query + const result = []; + appResult.rows.forEach((item) => { const tags = item.get('appTags'); - let tagids = tags ? tags.split(',') : ''; - let tagArrs = tagsResult.filter(ele => { - return tagids.includes(`${ele.get('id')}`) + const tagids = tags ? tags.split(',') : ''; + const tagArrs = tagsResult.filter((ele) => { + return tagids.includes(`${ele.get('id')}`); }); item.set('appTags', tagArrs); if (appTags) { - if (appTags.split(',').some(ele => tagids.includes(`${ele}`))) { - result.push(item) + if (appTags.split(',').some((ele) => tagids.includes(`${ele}`))) { + result.push(item); } } else { - result.push(item) + result.push(item); } }); ctx.body = app.utils.response(true, { data: result, count: result.length }); @@ -57,36 +71,47 @@ class AppCentersController extends Controller { appDesc, appTags: appTags.join(), id, - updated_at: moment().format('YYYY-MM-DD') - }) + updated_at: moment().format('YYYY-MM-DD'), + }); if (id) { - ctx.body = app.utils.response(true, null) - return + ctx.body = app.utils.response(true, null); + return; } - ctx.body = app.utils.response(true, result.get({ - plain: true - })); + ctx.body = app.utils.response( + true, + result.get({ + plain: true, + }) + ); } async getApplicationById() { const { app, ctx } = this; - const { id } = ctx.request.query + const { id } = ctx.request.query; const result = await app.model.AppCenters.findOne({ - attributes: ['id', 'appName', 'appDesc', 'appTags', 'appUrl', 'created_at', 'updated_at'], + attributes: [ + 'id', + 'appName', + 'appDesc', + 'appTags', + 'appUrl', + 'created_at', + 'updated_at', + ], where: { - id - } + id, + }, }); ctx.body = app.utils.response(true, result); } async clickApplications() { const { app, ctx } = this; - const { params } = ctx.request.body + const { params } = ctx.request.body; const result = await ctx.service.appCenters.clickApplications({ - ...params - }) + ...params, + }); ctx.body = app.utils.response(true, result); } @@ -107,25 +132,34 @@ class AppCentersController extends Controller { const fileName = stream.filename; // 目标文件夹,没有就创建,创建多级目录存储 const date = new Date(); - const dirTree = ['resources', 'imgs', date.getFullYear(), date.getMonth() + 1, date.getDate()]; + const dirTree = [ + 'resources', + 'imgs', + date.getFullYear(), + date.getMonth() + 1, + date.getDate(), + ]; const dir = app.utils.createFolder(dirTree); // 创建文件 const target = path.join(dir, fileName); const writeStream = fs.createWriteStream(target); try { - //异步把文件流 写入 + // 异步把文件流 写入 await awaitWriteStream(stream.pipe(writeStream)); } catch (err) { - //如果出现错误,关闭管道 + // 如果出现错误,关闭管道 await sendToWormhole(stream); throw new Error('图片上传出错'); } - const result = await this.ctx.model.AppCenters.update({ logoUrl: [...dirTree, fileName].join('/') }, { - where: { - id + const result = await this.ctx.model.AppCenters.update( + { logoUrl: [...dirTree, fileName].join('/') }, + { + where: { + id, + }, } - }); + ); ctx.body = app.utils.response(true, result); } } -module.exports = AppCentersController; \ No newline at end of file +module.exports = AppCentersController; diff --git a/app/controller/articleSubscription.js b/app/controller/articleSubscription.js index 988fbe0..5ec14c9 100644 --- a/app/controller/articleSubscription.js +++ b/app/controller/articleSubscription.js @@ -9,22 +9,39 @@ class ArticleSubscriptionController extends Controller { if (_.isNil(current)) throw new Error('缺少必要参 current'); if (_.isNil(size)) throw new Error('缺少必要参数 size'); - const data = await ctx.service.articleSubscription.getSubscriptionList({ current, size, searchText }); + const data = await ctx.service.articleSubscription.getSubscriptionList({ + current, + size, + searchText, + }); ctx.body = app.utils.response(true, { - data: data.rows.map(item => { + data: data.rows.map((item) => { return { ...item, - topicIds: item.topicIds.split(',').map(i => +i) - } + topicIds: item.topicIds.split(',').map((i) => +i), + }; }), - count: data.count + count: data.count, }); } // 新增 async createSubscription() { const { app, ctx } = this; - const { groupName, webHook, remark, topicIds = [], siteNames, sendType, sendCron, time, status, messageTitle, message, isAtAll } = ctx.request.body; + const { + groupName, + webHook, + remark, + topicIds = [], + siteNames, + sendType, + sendCron, + time, + status, + messageTitle, + message, + isAtAll, + } = ctx.request.body; if (_.isNil(groupName)) throw new Error('缺少必要参数 groupName'); if (_.isNil(webHook)) throw new Error('缺少必要参数 webHook'); if (_.isNil(siteNames)) throw new Error('缺少必要参数 siteNames'); @@ -32,27 +49,71 @@ class ArticleSubscriptionController extends Controller { if (_.isNil(sendCron)) throw new Error('缺少必要参数 sendCron'); if (_.isNil(time)) throw new Error('缺少必要参数 time'); // 数据库插入数据 - const data = await ctx.service.articleSubscription.createSubscription({ groupName, webHook, remark, topicIds: topicIds?.join(','), siteNames, sendType, sendCron, time, status, messageTitle, message, isAtAll }); - const { id } = data + const data = await ctx.service.articleSubscription.createSubscription({ + groupName, + webHook, + remark, + topicIds: topicIds?.join(','), + siteNames, + sendType, + sendCron, + time, + status, + messageTitle, + message, + isAtAll, + }); + const { id } = data; if (_.isNil(id)) throw new Error('创建失败'); // 向 agent 进程发消息 - app.messenger.sendToAgent('createTimedTask', { id, sendCron }) + app.messenger.sendToAgent('createTimedTask', { id, sendCron }); ctx.body = app.utils.response(true, id); } // 更新 async updateSubscription() { const { ctx, app } = this; - const { id, groupName, webHook, remark, topicIds = [], siteNames, sendType, sendCron, time, status, messageTitle, message, isAtAll } = ctx.request.body; + const { + id, + groupName, + webHook, + remark, + topicIds = [], + siteNames, + sendType, + sendCron, + time, + status, + messageTitle, + message, + isAtAll, + } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数 id'); if (_.isNil(groupName)) throw new Error('缺少必要参数 groupName'); if (_.isNil(webHook)) throw new Error('缺少必要参数 webHook'); if (_.isNil(siteNames)) throw new Error('缺少必要参数 siteNames'); if (_.isNil(sendType)) throw new Error('缺少必要参数 sendType'); if (_.isNil(sendCron)) throw new Error('缺少必要参数 sendCron'); - await ctx.service.articleSubscription.updateSubscription(id, { groupName, webHook, remark, topicIds: topicIds?.join(','), siteNames, sendType, sendCron, time, status, messageTitle, message, isAtAll, updated_at: new Date() }) + await ctx.service.articleSubscription.updateSubscription(id, { + groupName, + webHook, + remark, + topicIds: topicIds?.join(','), + siteNames, + sendType, + sendCron, + time, + status, + messageTitle, + message, + isAtAll, + updated_at: new Date(), + }); // 向 agent 进程发消息 - app.messenger.sendToAgent(status === 1 ? 'changeTimedTask' : 'cancelTimedTask', { id, sendCron }) + app.messenger.sendToAgent(status === 1 ? 'changeTimedTask' : 'cancelTimedTask', { + id, + sendCron, + }); ctx.body = app.utils.response(true, id); } @@ -61,9 +122,12 @@ class ArticleSubscriptionController extends Controller { const { ctx, app } = this; const { id } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数 id'); - await ctx.service.articleSubscription.updateSubscription(id, { is_delete: 1, updated_at: new Date() }); + await ctx.service.articleSubscription.updateSubscription(id, { + is_delete: 1, + updated_at: new Date(), + }); // 向 agent 进程发消息 - app.messenger.sendToAgent('cancelTimedTask', { id }) + app.messenger.sendToAgent('cancelTimedTask', { id }); ctx.body = app.utils.response(true, id); } @@ -71,7 +135,7 @@ class ArticleSubscriptionController extends Controller { async getTimedTaskList() { const { ctx, app } = this; // 向 agent 进程发消息 - app.messenger.sendToAgent('timedTaskList') + app.messenger.sendToAgent('timedTaskList'); ctx.body = app.utils.response(true, '请前往服务器 /logs/egg-agent.log 查看'); } @@ -79,7 +143,7 @@ class ArticleSubscriptionController extends Controller { async getSubscriptionInfo() { const { ctx, app } = this; const { id } = ctx.query; - if (_.isNil(id)) throw new Error('缺少必要参数 id') + if (_.isNil(id)) throw new Error('缺少必要参数 id'); const data = await ctx.service.articleSubscription.getSubscriptionInfo(id); if (_.isNil(data)) throw new Error('找不到该 id 下的相关信息'); ctx.body = app.utils.response(true, data); diff --git a/app/controller/articleTopic.js b/app/controller/articleTopic.js index b6ce719..ed5134d 100644 --- a/app/controller/articleTopic.js +++ b/app/controller/articleTopic.js @@ -4,22 +4,22 @@ class ArticleController extends Controller { // 获取订阅项列表 async getTopicList() { const { ctx, app } = this; - const data = await ctx.service.articleTopic.getTopicList() || []; - const nameList = Array.from(new Set(data.map(item => item.siteName))) - let list = [] + const data = (await ctx.service.articleTopic.getTopicList()) || []; + const nameList = Array.from(new Set(data.map((item) => item.siteName))); + const list = []; - for (let name of nameList) { - let children = [] - for (let item of data) { + for (const name of nameList) { + const children = []; + for (const item of data) { if (name === item.siteName) { - let { id, siteName, topicName, topicUrl } = item - children.push({ id, name: `${ siteName } - ${ topicName }`, siteName, topicUrl }) + const { id, siteName, topicName, topicUrl } = item; + children.push({ id, name: `${siteName} - ${topicName}`, siteName, topicUrl }); } } list.push({ name, - children - }) + children, + }); } ctx.body = app.utils.response(true, list); } diff --git a/app/controller/common.js b/app/controller/common.js index 4f8ff6b..05711db 100644 --- a/app/controller/common.js +++ b/app/controller/common.js @@ -5,19 +5,26 @@ class CommonController extends Controller { const { app, ctx } = this; const { owner, configRepositoryName } = app.config.github; const { name } = ctx.request.query; - const result = await ctx.curl(`https://${owner}.github.io/${configRepositoryName}/${name}`, { - dataType: 'json' - }); - ctx.body = app.utils.response(result.status === 200, result.data, result.status === 200 ? null : '请求失败'); + const result = await ctx.curl( + `https://${owner}.github.io/${configRepositoryName}/${name}`, + { + dataType: 'json', + } + ); + ctx.body = app.utils.response( + result.status === 200, + result.data, + result.status === 200 ? null : '请求失败' + ); } async getLocalIp() { const { app, ctx } = this; - const localIp = ctx.header['x-real-ip']||ctx.ip; + const localIp = ctx.header['x-real-ip'] || ctx.ip; ctx.body = app.utils.response(true, { localIp, host: ctx.host, - protocol: ctx.protocol + protocol: ctx.protocol, }); } } -module.exports = CommonController; \ No newline at end of file +module.exports = CommonController; diff --git a/app/controller/configCenter.js b/app/controller/configCenter.js index 0e7d718..62c3325 100644 --- a/app/controller/configCenter.js +++ b/app/controller/configCenter.js @@ -1,8 +1,7 @@ const Controller = require('egg').Controller; const _ = require('lodash'); - -class ConfigCenter extends Controller{ +class ConfigCenter extends Controller { async getConfigList() { const { ctx, app } = this; const { current, size, tags, search } = ctx.request.body; @@ -10,62 +9,79 @@ class ConfigCenter extends Controller{ current, size, tags, - search + search, }); ctx.body = app.utils.response(true, { data: data.rows, - count: data.count + count: data.count, }); } - async addConfig(){ - const {ctx,app} = this; - const {filename,filePath,hostId,remark,tagIds} = ctx.request.body; - if(_.isNil(filename)) throw new Error('缺少必要参数filename'); - if(_.isNil(filePath)) throw new Error('缺少必要参数filePath'); - if(_.isNil(hostId)) throw new Error('缺少必要参数hostId'); - if(_.isNil(tagIds)) throw new Error('缺少必要参数tagIds'); + async addConfig() { + const { ctx, app } = this; + const { filename, filePath, hostId, remark, tagIds } = ctx.request.body; + if (_.isNil(filename)) throw new Error('缺少必要参数filename'); + if (_.isNil(filePath)) throw new Error('缺少必要参数filePath'); + if (_.isNil(hostId)) throw new Error('缺少必要参数hostId'); + if (_.isNil(tagIds)) throw new Error('缺少必要参数tagIds'); const result = await ctx.service.configCenter.addConfig({ - filename,filePath,hostId,remark,tagIds + filename, + filePath, + hostId, + remark, + tagIds, }); - ctx.body = app.utils.response(true,result.get({ - plain: true - })); + ctx.body = app.utils.response( + true, + result.get({ + plain: true, + }) + ); } - async editConfig(){ - const {ctx,app} = this; - const {id,filename,filePath,hostId,remark,tagIds} = ctx.request.body; - if(_.isNil(id)) throw new Error('缺少必要参数id'); + async editConfig() { + const { ctx, app } = this; + const { id, filename, filePath, hostId, remark, tagIds } = ctx.request.body; + if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.configCenter.editConfig({ id, filename, filePath, remark, hostId, - tagIds + tagIds, }); const basicInfo = await ctx.service.configDetail.getConfigBasicInfo(id); - const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id,'config-center') - noticeUrlList.forEach(item => { - app.utils.sendMsg(item.webHook,basicInfo.dataValues,'已更新',ctx.request.header.referer) - }) + const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id, 'config-center'); + noticeUrlList.forEach((item) => { + app.utils.sendMsg( + item.webHook, + basicInfo.dataValues, + '已更新', + ctx.request.header.referer + ); + }); ctx.body = app.utils.response(true); } - async deleteConfig(){ - const {ctx,app} = this; - const {id} = ctx.request.query; - if(_.isNil(id)) throw new Error('缺少必要参数id'); + async deleteConfig() { + const { ctx, app } = this; + const { id } = ctx.request.query; + if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.configCenter.deleteConfig(id); const basicInfo = await ctx.service.configDetail.getConfigBasicInfo(id); - const type = 'config-center' - const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id,type) - noticeUrlList.forEach(item => { - app.utils.sendMsg(item.webHook,basicInfo.dataValues,'已删除',ctx.request.header.referer) - }) - await ctx.service.configDetail.updateNoticeAllUrl(id,type,{ - is_delete: 1 + const type = 'config-center'; + const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id, type); + noticeUrlList.forEach((item) => { + app.utils.sendMsg( + item.webHook, + basicInfo.dataValues, + '已删除', + ctx.request.header.referer + ); }); - ctx.body = app.utils.response(true) + await ctx.service.configDetail.updateNoticeAllUrl(id, type, { + is_delete: 1, + }); + ctx.body = app.utils.response(true); } } -module.exports = ConfigCenter; \ No newline at end of file +module.exports = ConfigCenter; diff --git a/app/controller/configDetail.js b/app/controller/configDetail.js index fbe7429..3e39df9 100644 --- a/app/controller/configDetail.js +++ b/app/controller/configDetail.js @@ -2,109 +2,126 @@ const fs = require('fs'); const path = require('path'); const Controller = require('egg').Controller; const _ = require('lodash'); -const NodeSsh = require('node-ssh') +const NodeSsh = require('node-ssh'); -class ConfigDetail extends Controller{ - async getBasicInfo(){ - const {ctx,app} = this; - const {id} = ctx.query; - if(_.isNil(id)) throw new Error('缺少必要参数id'); +class ConfigDetail extends Controller { + async getBasicInfo() { + const { ctx, app } = this; + const { id } = ctx.query; + if (_.isNil(id)) throw new Error('缺少必要参数id'); const data = await ctx.service.configDetail.getConfigBasicInfo(id); - if(_.isNil(data)) throw new Error('获取不到该文件的相关信息'); - ctx.body = app.utils.response(true,data); + if (_.isNil(data)) throw new Error('获取不到该文件的相关信息'); + ctx.body = app.utils.response(true, data); } async getNoticeList() { - const {ctx,app} = this; - const {id,type} = ctx.query; - if(_.isNil(id)) throw new Error('缺少必要参数id'); - const data = await ctx.service.configDetail.getNoticeListById(id,type); - ctx.body = app.utils.response(true,data); + const { ctx, app } = this; + const { id, type } = ctx.query; + if (_.isNil(id)) throw new Error('缺少必要参数id'); + const data = await ctx.service.configDetail.getNoticeListById(id, type); + ctx.body = app.utils.response(true, data); } async delNoticeUrl() { - const {ctx,app} = this; - const {id,type} = ctx.query; - if(_.isNil(id)) throw new Error('缺少必要参数id'); - const data = await ctx.service.configDetail.updateNoticeUrl(id,type,{ - is_delete: 1 + const { ctx, app } = this; + const { id, type } = ctx.query; + if (_.isNil(id)) throw new Error('缺少必要参数id'); + const data = await ctx.service.configDetail.updateNoticeUrl(id, type, { + is_delete: 1, }); - ctx.body = app.utils.response(true,data); + ctx.body = app.utils.response(true, data); } async addNoticeUrl() { - const {ctx,app} = this; - const {id,accept_group,type,webHook} = ctx.request.body; - if(_.isNil(id)) throw new Error('缺少必要参数id'); - if(_.isNil(webHook)) throw new Error('缺少必要参数webHook'); - const data = await ctx.service.configDetail.addNoticeUrl(id,webHook,type,accept_group); - ctx.body = app.utils.response(true,data); + const { ctx, app } = this; + const { id, accept_group, type, webHook } = ctx.request.body; + if (_.isNil(id)) throw new Error('缺少必要参数id'); + if (_.isNil(webHook)) throw new Error('缺少必要参数webHook'); + const data = await ctx.service.configDetail.addNoticeUrl(id, webHook, type, accept_group); + ctx.body = app.utils.response(true, data); } - async getRemoteConfig(){ - const {ctx,app} = this; - const {id} = ctx.query; - const configDetail = await ctx.service.configDetail.getConfigSpecificInfo(id,['id','filename','filePath',[app.Sequelize.col('host_management.host_ip'),'hostIp'],[app.Sequelize.col('host_management.username'),'username'],[app.Sequelize.col('host_management.password'),'password']]); - if(_.isNil(configDetail)){ + async getRemoteConfig() { + const { ctx, app } = this; + const { id } = ctx.query; + const configDetail = await ctx.service.configDetail.getConfigSpecificInfo(id, [ + 'id', + 'filename', + 'filePath', + [app.Sequelize.col('host_management.host_ip'), 'hostIp'], + [app.Sequelize.col('host_management.username'), 'username'], + [app.Sequelize.col('host_management.password'), 'password'], + ]); + if (_.isNil(configDetail)) { throw new Error('获取不到该文件的相关信息'); - }else{ - const {filePath,filename,hostIp,username,password} = configDetail.dataValues; + } else { + const { filePath, filename, hostIp, username, password } = configDetail.dataValues; const ssh = new NodeSsh(); app.logger.info(`开始连接服务器${hostIp}...`); await ssh.connect({ - host:hostIp, + host: hostIp, username, port: 22, - password + password, }); - const {stdout,stderr} = await ssh.execCommand(`cat ${path.join(filePath,filename)}`); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { stdout, stderr } = await ssh.execCommand( + `cat ${path.join(filePath, filename)}` + ); ssh.dispose(); app.logger.info(`服务器${hostIp}断开`); - ctx.body = app.utils.response(true,stdout); + ctx.body = app.utils.response(true, stdout); // ctx.body = app.utils.response(true,_.isEmpty(stderr)?stdout:''); } } - async saveConfig(){ - const {ctx,app} = this; - const {id,config,shell,basicInfo} = ctx.request.body; - const configDetail = await ctx.service.configDetail.getConfigSpecificInfo(id,['id','filename','filePath',[app.Sequelize.col('host_management.host_ip'),'hostIp'],[app.Sequelize.col('host_management.username'),'username'],[app.Sequelize.col('host_management.password'),'password']]); - const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id,'config-center') - noticeUrlList.forEach(item => { - app.utils.sendMsg(item.webHook,basicInfo,'已更新',ctx.request.header.referer) - }) - const {filePath,filename,hostIp,username,password} = configDetail.dataValues; - const configFilePath = path.join(__dirname,'../../cache/',filename); - const shellPath = path.join(__dirname,'../../cache',`${filename}_shell`); - fs.writeFileSync(configFilePath,config); - fs.writeFileSync(shellPath,shell); - const remoteConfigFilePath = path.join(filePath,filename); - const remoteShellPath = path.join(filePath,`${filename}_shell`); + async saveConfig() { + const { ctx, app } = this; + const { id, config, shell, basicInfo } = ctx.request.body; + const configDetail = await ctx.service.configDetail.getConfigSpecificInfo(id, [ + 'id', + 'filename', + 'filePath', + [app.Sequelize.col('host_management.host_ip'), 'hostIp'], + [app.Sequelize.col('host_management.username'), 'username'], + [app.Sequelize.col('host_management.password'), 'password'], + ]); + const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id, 'config-center'); + noticeUrlList.forEach((item) => { + app.utils.sendMsg(item.webHook, basicInfo, '已更新', ctx.request.header.referer); + }); + const { filePath, filename, hostIp, username, password } = configDetail.dataValues; + const configFilePath = path.join(__dirname, '../../cache/', filename); + const shellPath = path.join(__dirname, '../../cache', `${filename}_shell`); + fs.writeFileSync(configFilePath, config); + fs.writeFileSync(shellPath, shell); + const remoteConfigFilePath = path.join(filePath, filename); + const remoteShellPath = path.join(filePath, `${filename}_shell`); const ssh = new NodeSsh(); - try{ + try { app.logger.info(`开始连接服务器${hostIp}...`); await ssh.connect({ - host:hostIp, + host: hostIp, username, port: 22, - password + password, }); - await ssh.putFile(configFilePath,remoteConfigFilePath); - await ssh.putFile(shellPath,remoteShellPath); - const {stderr:execShellStderr} = await ssh.execCommand(`bash ${remoteShellPath}`); - const {stderr:deleteShellStderr} = await ssh.execCommand(`rm ${remoteShellPath}`); - if(deleteShellStderr){ + await ssh.putFile(configFilePath, remoteConfigFilePath); + await ssh.putFile(shellPath, remoteShellPath); + const { stderr: execShellStderr } = await ssh.execCommand(`bash ${remoteShellPath}`); + const { stderr: deleteShellStderr } = await ssh.execCommand(`rm ${remoteShellPath}`); + if (deleteShellStderr) { throw new Error(deleteShellStderr); } - if(execShellStderr){ + if (execShellStderr) { await ssh.execCommand(`rm ${remoteShellPath}`); throw new Error(execShellStderr); } await ctx.service.configCenter.editConfig({ id, - updateShell:shell + updateShell: shell, }); ssh.dispose(); app.logger.info(`服务器${hostIp}断开`); fs.unlinkSync(configFilePath); fs.unlinkSync(shellPath); ctx.body = app.utils.response(true); - }catch(err){ + } catch (err) { ssh.dispose(); app.logger.info(`服务器${hostIp}断开`); fs.unlinkSync(configFilePath); @@ -114,4 +131,4 @@ class ConfigDetail extends Controller{ } } -module.exports=ConfigDetail; \ No newline at end of file +module.exports = ConfigDetail; diff --git a/app/controller/envManagement.js b/app/controller/envManagement.js index 580bafa..fb02683 100644 --- a/app/controller/envManagement.js +++ b/app/controller/envManagement.js @@ -1,31 +1,38 @@ const Controller = require('egg').Controller; const _ = require('lodash'); -class EnvManagementController extends Controller{ - //环境列表 +class EnvManagementController extends Controller { + // 环境列表 async queryEnvs() { const { ctx, app } = this; const { tags, search } = ctx.request.query; const data = await ctx.service.envManagement.queryEnvs({ tags, search }); ctx.body = app.utils.response(true, data); } - //新增环境 - async addEnv(){ - const {ctx, app} = this; - const {envName, hostIp, url, remark, tagIds} = ctx.request.body; + // 新增环境 + async addEnv() { + const { ctx, app } = this; + const { envName, hostIp, url, remark, tagIds } = ctx.request.body; if (_.isNil(envName)) throw new Error('缺少必要参数 envName'); if (_.isNil(url)) throw new Error('缺少必要参数 url'); const result = await ctx.service.envManagement.addEnv({ - envName,hostIp,url,remark,tags:tagIds.join(',') + envName, + hostIp, + url, + remark, + tags: tagIds.join(','), }); - ctx.body = app.utils.response(true,result.get({ - plain: true - })); + ctx.body = app.utils.response( + true, + result.get({ + plain: true, + }) + ); } - //编辑环境 - async editEnv(){ - const {ctx,app} = this; - const {id,envName,hostIp,url,remark,tagIds} = ctx.request.body; + // 编辑环境 + async editEnv() { + const { ctx, app } = this; + const { id, envName, hostIp, url, remark, tagIds } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.envManagement.editEnv({ id, @@ -33,17 +40,17 @@ class EnvManagementController extends Controller{ hostIp, url, remark, - tags: tagIds ? tagIds.join(',') : undefined + tags: tagIds ? tagIds.join(',') : undefined, }); ctx.body = app.utils.response(true); } - //删除环境 - async deleteEnv(){ - const {ctx,app} = this; - const {id} = ctx.request.query; + // 删除环境 + async deleteEnv() { + const { ctx, app } = this; + const { id } = ctx.request.query; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.envManagement.deleteEnv(id); - ctx.body = app.utils.response(true) + ctx.body = app.utils.response(true); } } diff --git a/app/controller/home.js b/app/controller/home.js index 08b3898..b3fa018 100644 --- a/app/controller/home.js +++ b/app/controller/home.js @@ -1,9 +1,9 @@ const Model = require('../mocks/article/list'); -module.exports = app => { +module.exports = (app) => { return class AppController extends app.Controller { async index() { const { ctx } = this; - if (ctx.url==='/'){ + if (ctx.url === '/') { ctx.response.redirect('/page/toolbox'); } else { await ctx.render('app.js', { url: ctx.url }); @@ -15,4 +15,4 @@ module.exports = app => { await ctx.renderClient('app.js', Model.getPage(1, 10)); } }; -}; \ No newline at end of file +}; diff --git a/app/controller/hostManagement.js b/app/controller/hostManagement.js index 8ee4b97..6a98eee 100644 --- a/app/controller/hostManagement.js +++ b/app/controller/hostManagement.js @@ -1,33 +1,41 @@ const Controller = require('egg').Controller; const _ = require('lodash'); -class HostManagementController extends Controller{ - //主机列表 +class HostManagementController extends Controller { + // 主机列表 async queryHosts() { const { ctx, app } = this; const { tags, search } = ctx.request.query; const data = await ctx.service.hostManagement.queryHosts({ tags, search }); ctx.body = app.utils.response(true, data); } - //新增主机 - async addHost(){ - const {ctx,app} = this; - const {hostIp,hostName,username,password,remark,tagIds} = ctx.request.body; + // 新增主机 + async addHost() { + const { ctx, app } = this; + const { hostIp, hostName, username, password, remark, tagIds } = ctx.request.body; if (_.isNil(hostIp)) throw new Error('缺少必要参数hostIp'); if (_.isNil(hostName)) throw new Error('缺少必要参数hostName'); if (_.isNil(username)) throw new Error('缺少必要参数username'); if (_.isNil(password)) throw new Error('缺少必要参数password'); const result = await ctx.service.hostManagement.addHost({ - hostIp,hostName,username,password,remark,tags:tagIds.join(',') + hostIp, + hostName, + username, + password, + remark, + tags: tagIds.join(','), }); - ctx.body = app.utils.response(true,result.get({ - plain: true - })); + ctx.body = app.utils.response( + true, + result.get({ + plain: true, + }) + ); } - //编辑主机 - async editHost(){ - const {ctx,app} = this; - const {id,hostIp,hostName,username,password,remark,tagIds} = ctx.request.body; + // 编辑主机 + async editHost() { + const { ctx, app } = this; + const { id, hostIp, hostName, username, password, remark, tagIds } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.hostManagement.editHost({ id, @@ -36,18 +44,18 @@ class HostManagementController extends Controller{ remark, username, password, - tags: tagIds ? tagIds.join(',') : undefined + tags: tagIds ? tagIds.join(',') : undefined, }); ctx.body = app.utils.response(true); } - //删除主机 - async deleteHost(){ - const {ctx,app} = this; - const {id} = ctx.request.query; + // 删除主机 + async deleteHost() { + const { ctx, app } = this; + const { id } = ctx.request.query; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.hostManagement.deleteHost(id); - ctx.body = app.utils.response(true) + ctx.body = app.utils.response(true); } } -module.exports = HostManagementController; \ No newline at end of file +module.exports = HostManagementController; diff --git a/app/controller/proxy.js b/app/controller/proxy.js index 742708f..744eaef 100644 --- a/app/controller/proxy.js +++ b/app/controller/proxy.js @@ -1,30 +1,39 @@ const Controller = require('egg').Controller; const _ = require('lodash'); -class ProxyServerController extends Controller{ - //获取服务列表 +class ProxyServerController extends Controller { + // 获取服务列表 async list() { const { pageSize, pageNo, search, projectId } = this.ctx.request.body; - let where = { - '$or': [ - { name: { '$like': `%${search}%` } }, - { proxy_server_address: { '$like': `%${search}%` } } + const where = { + $or: [ + { name: { $like: `%${search}%` } }, + { proxy_server_address: { $like: `%${search}%` } }, ], - is_delete: 0 - } + is_delete: 0, + }; if (projectId) { - where.id = projectId + where.id = projectId; } const result = await this.app.model.ProxyServer.findAndCountAll({ - attributes: ['id', 'name', 'proxy_server_address', 'api_doc_url', 'status', 'target', 'created_at', 'updated_at'], + attributes: [ + 'id', + 'name', + 'proxy_server_address', + 'api_doc_url', + 'status', + 'target', + 'created_at', + 'updated_at', + ], where, limit: pageSize, order: [['updated_at', 'DESC']], - offset: (pageNo - 1) * pageSize + offset: (pageNo - 1) * pageSize, }); this.ctx.body = this.app.utils.response(true, { data: result.rows, count: result.count }); } - //创建服务 - async add(){ + // 创建服务 + async add() { const { proxyServer, targetAddrs } = this.ctx.request.body; // 创建服务 const result = await this.ctx.service.proxyServer.create(proxyServer); @@ -41,155 +50,180 @@ class ProxyServerController extends Controller{ const result = await this.ctx.service.proxyServerAddrs.queryAddrs(id); this.ctx.body = this.app.utils.response(true, result); } - - //更新服务 - async update(){ + + // 更新服务 + async update() { const { proxyServer, targetAddrs } = this.ctx.request.body; - await this.app.model.ProxyServer.update(proxyServer,{ - where:{ - id:proxyServer.id - } + await this.app.model.ProxyServer.update(proxyServer, { + where: { + id: proxyServer.id, + }, }); await this.ctx.service.proxyServerAddrs.update(targetAddrs, proxyServer.id); this.ctx.body = this.app.utils.response(true, null); } - //删除服务 - async delete(){ - const {id} = this.ctx.request.query; + // 删除服务 + async delete() { + const { id } = this.ctx.request.query; // 逻辑删除代理服务下的项目 - await this.app.model.ProxyServer.update({ - is_delete: 1 - }, { - where: { - id + await this.app.model.ProxyServer.update( + { + is_delete: 1, + }, + { + where: { + id, + }, } - }); + ); // 逻辑删除代理服务下的项目下的代理服务 - await this.app.model.ProxyRule.update({ - is_delete: 1 - }, { - where: { - proxy_server_id: id + await this.app.model.ProxyRule.update( + { + is_delete: 1, + }, + { + where: { + proxy_server_id: id, + }, } - }); + ); this.ctx.body = this.app.utils.response(true, null); } - //改变状态 - async changeStatus(){ - const {status,id} = this.ctx.request.query; - let closeResult = false ; + // 改变状态 + async changeStatus() { + const { status, id } = this.ctx.request.query; + let closeResult = false; let restartResult = true; - if (status==='0'){ - closeResult = this.ctx.service.proxyServer.close(id); + if (status === '0') { + closeResult = this.ctx.service.proxyServer.close(id); } else { restartResult = this.ctx.service.proxyServer.restart(id); } - this.ctx.body = this.app.utils.response(status==='0'?closeResult:restartResult,null); + this.ctx.body = this.app.utils.response(status === '0' ? closeResult : restartResult, null); } - //获取代理服务下的代理规则 - async ruleList(){ - const {proxy_server_id} = this.ctx.request.query; + // 获取代理服务下的代理规则 + async ruleList() { + const { proxy_server_id } = this.ctx.request.query; const result = await this.app.model.ProxyRule.findAndCountAll({ - attributes:['id','proxy_server_id','status','ip','target','remark','mode'], - where:{ - is_delete:0, - proxy_server_id - } + attributes: ['id', 'proxy_server_id', 'status', 'ip', 'target', 'remark', 'mode'], + where: { + is_delete: 0, + proxy_server_id, + }, }); - this.ctx.body = this.app.utils.response(true,{ - data:result.rows, - count:result.count + this.ctx.body = this.app.utils.response(true, { + data: result.rows, + count: result.count, }); } - //新增代理规则 - async addRule(){ - const {proxy_server_id,target,ip,remark,mode} = this.ctx.request.body; + // 新增代理规则 + async addRule() { + const { proxy_server_id, target, ip, remark, mode } = this.ctx.request.body; const result = await this.app.model.ProxyRule.create({ proxy_server_id, target, ip, remark, - status:1, - mode + status: 1, + mode, }); - this.ctx.body = this.app.utils.response(result,null); + this.ctx.body = this.app.utils.response(result, null); } - //更新代理规则 - async updateRule(){ - const {id,target,ip,remark,mode} = this.ctx.request.body; - const result = await this.app.model.ProxyRule.update({ - target, - ip, - remark, - mode - },{ - where:{ - id + // 更新代理规则 + async updateRule() { + const { id, target, ip, remark, mode } = this.ctx.request.body; + const result = await this.app.model.ProxyRule.update( + { + target, + ip, + remark, + mode, + }, + { + where: { + id, + }, } - }); - this.ctx.body = this.app.utils.response(result,null); + ); + this.ctx.body = this.app.utils.response(result, null); } - //更新代理规则状态 - async updateRuleStatus(){ - const {id,status} = this.ctx.request.body; - const result = await this.app.model.ProxyRule.update({ - status - },{ - where:{ - id + // 更新代理规则状态 + async updateRuleStatus() { + const { id, status } = this.ctx.request.body; + const result = await this.app.model.ProxyRule.update( + { + status, + }, + { + where: { + id, + }, } - }); - this.ctx.body = this.app.utils.response(result,null); + ); + this.ctx.body = this.app.utils.response(result, null); } - //删除代理规则 - async deleteRule(){ - const {id} = this.ctx.request.query; - const result = await this.app.model.ProxyRule.update({ - is_delete:1 - },{ - where:{ - id + // 删除代理规则 + async deleteRule() { + const { id } = this.ctx.request.query; + const result = await this.app.model.ProxyRule.update( + { + is_delete: 1, + }, + { + where: { + id, + }, } - }); - this.ctx.body = this.app.utils.response(result,null); + ); + this.ctx.body = this.app.utils.response(result, null); } - //根据用户IP查询所在的项目列表 + // 根据用户IP查询所在的项目列表 async projectListByUserIP() { const { userIP } = this.ctx.request.body; - this.app.model.ProxyRule.belongsTo(this.app.model.ProxyServer,{ foreignKey: 'proxy_server_id', targetKey: 'id'}); + this.app.model.ProxyRule.belongsTo(this.app.model.ProxyServer, { + foreignKey: 'proxy_server_id', + targetKey: 'id', + }); const result = await this.app.model.ProxyRule.findAndCountAll({ - attributes:['id','status','ip','target','remark'], - where:{ - is_delete:0, - ip: userIP + attributes: ['id', 'status', 'ip', 'target', 'remark'], + where: { + is_delete: 0, + ip: userIP, }, - include: [{ - model: this.app.model.ProxyServer, - where: { - is_delete:0 + include: [ + { + model: this.app.model.ProxyServer, + where: { + is_delete: 0, + }, + attributes: [ + ['id', 'serverId'], + ['name', 'serverName'], + ['proxy_server_address', 'address'], + 'target', + ], }, - attributes:[['id', 'serverId'], ['name', 'serverName'], ['proxy_server_address', 'address'], 'target'] - }] + ], }); - let dataObj = {}; - result.rows.forEach(item => { + const dataObj = {}; + result.rows.forEach((item) => { const { proxy_server = {}, id, ip, status, target, remark } = item || {}; const rule = { id, ip, status, target, remark }; const { serverId, serverName, address } = proxy_server?.dataValues || {}; - if(dataObj.hasOwnProperty(serverId)) { + if (dataObj.hasOwnProperty(serverId)) { dataObj[serverId].rules.push(rule); } else { dataObj[serverId] = { serverName, address, - rules: [ - rule - ] - } + rules: [rule], + }; } }); - const data = Object.keys(dataObj).map((key) => Object.assign({}, { serverId: key }, dataObj[key])) + const data = Object.keys(dataObj).map((key) => + Object.assign({}, { serverId: key }, dataObj[key]) + ); this.ctx.body = this.app.utils.response(true, data); } } diff --git a/app/controller/switchHosts.js b/app/controller/switchHosts.js index b538032..30a0330 100644 --- a/app/controller/switchHosts.js +++ b/app/controller/switchHosts.js @@ -1,5 +1,4 @@ const Controller = require('egg').Controller; -const path = require('path'); const fs = require('fs'); const _ = require('lodash'); // const { createWS } = require('../utils/ws'); @@ -14,11 +13,11 @@ class SwitchHostsController extends Controller { const data = await ctx.service.switchHosts.getHostsList({ size, current, - searchText + searchText, }); ctx.body = app.utils.response(true, { data: data.rows, - count: data.count + count: data.count, }); } @@ -31,13 +30,13 @@ class SwitchHostsController extends Controller { const data = await ctx.service.switchHosts.createHosts({ groupName, groupDesc, - is_push + is_push, }); if (_.isNil(data)) throw new Error('创建失败'); // 创建对应hosts文件 const fileName = 'hosts_' + data.id; const paths = ['resources', 'hosts']; - const filePath = app.utils.createFileSync(paths,fileName,hosts); + const filePath = app.utils.createFileSync(paths, fileName, hosts); // 创建websocket连接 // createWS(8080, '/websocket_' + data.id); // 更新数据 @@ -45,7 +44,7 @@ class SwitchHostsController extends Controller { const result = await ctx.service.switchHosts.updateHosts(data.id, { groupApi, // groupId, - groupAddr:filePath + groupAddr: filePath, }); data.dataValues.groupAddr = filePath; data.dataValues.groupApi = groupApi; @@ -57,7 +56,6 @@ class SwitchHostsController extends Controller { const { ctx, app } = this; const { hosts, id, groupName, groupDesc, is_push } = ctx.request.body; const { origin, referer } = ctx.request.header; - const type = 'switch-hosts'; if (_.isNil(id)) throw new Error('缺少必要参数id'); if (_.isNil(groupName)) throw new Error('缺少必要参数groupName'); // 更新hosts @@ -72,13 +70,13 @@ class SwitchHostsController extends Controller { groupName, groupDesc, is_push, - updated_at: new Date() - }) + updated_at: new Date(), + }); const { dataValues } = await ctx.service.switchHosts.getHostsInfo(id); - const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id,'switch-hosts') - noticeUrlList.forEach(({webHook}) => { - app.utils.sendHostsUpdateMsg(webHook,dataValues,origin,referer,'已更新') - }) + const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id, 'switch-hosts'); + noticeUrlList.forEach(({ webHook }) => { + app.utils.sendHostsUpdateMsg(webHook, dataValues, origin, referer, '已更新'); + }); ctx.body = app.utils.response(result); } // 推送 @@ -88,7 +86,7 @@ class SwitchHostsController extends Controller { if (_.isNil(id)) throw new Error('缺少必要参数id'); const result = await ctx.service.switchHosts.updateHosts(id, { is_push: 1, - updated_at: new Date() + updated_at: new Date(), }); ctx.body = app.utils.response(result); } @@ -102,15 +100,15 @@ class SwitchHostsController extends Controller { if (_.isNil(id)) throw new Error('缺少必要参数id'); const result = await ctx.service.switchHosts.updateHosts(id, { is_delete: 1, - updated_at: new Date() + updated_at: new Date(), }); const { dataValues } = await ctx.service.switchHosts.getHostsInfo(id); - const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id,'switch-hosts') - noticeUrlList.forEach(({webHook}) => { - app.utils.sendHostsUpdateMsg(webHook,dataValues,origin,referer,'已删除') - }) - await ctx.service.configDetail.updateNoticeAllUrl(id,type,{ - is_delete: 1 + const noticeUrlList = await ctx.service.configDetail.getNoticeListById(id, 'switch-hosts'); + noticeUrlList.forEach(({ webHook }) => { + app.utils.sendHostsUpdateMsg(webHook, dataValues, origin, referer, '已删除'); + }); + await ctx.service.configDetail.updateNoticeAllUrl(id, type, { + is_delete: 1, }); ctx.body = app.utils.response(result); } @@ -119,7 +117,7 @@ class SwitchHostsController extends Controller { async getHostsInfo() { const { ctx, app } = this; const { id } = ctx.query; - if (_.isNil(id)) throw new Error('缺少必要参数id') + if (_.isNil(id)) throw new Error('缺少必要参数id'); const data = await ctx.service.switchHosts.getHostsInfo(id); if (_.isNil(data)) throw new Error('找不到该id下的相关信息'); await this.readHostsConfig(id, data.groupAddr, (hosts) => { @@ -130,9 +128,9 @@ class SwitchHostsController extends Controller { // 获取该id下的hosts内容 async getHostsConfig() { - const { ctx, app } = this; + const { ctx } = this; const id = ctx.params.id; - if (_.isNil(id)) throw new Error('缺少必要参数id') + if (_.isNil(id)) throw new Error('缺少必要参数id'); const groupAddr = await this.ctx.service.switchHosts.getGroupAddr(id); await this.readHostsConfig(id, groupAddr, (hosts) => { ctx.body = hosts; @@ -145,4 +143,4 @@ class SwitchHostsController extends Controller { } } -module.exports = SwitchHostsController; \ No newline at end of file +module.exports = SwitchHostsController; diff --git a/app/controller/tagManagement.js b/app/controller/tagManagement.js index ddfcb86..ca23f5c 100644 --- a/app/controller/tagManagement.js +++ b/app/controller/tagManagement.js @@ -1,8 +1,8 @@ const Controller = require('egg').Controller; const _ = require('lodash'); -class TagsManagementController extends Controller{ - //获取标签列表 +class TagsManagementController extends Controller { + // 获取标签列表 async getTagsList() { const { app, ctx } = this; const { current, size, searchText } = ctx.request.body; @@ -11,60 +11,65 @@ class TagsManagementController extends Controller{ const data = await ctx.service.tagManagement.getTagsList({ size, current, - searchText + searchText, }); ctx.body = app.utils.response(true, { data: data.rows, - count: data.count + count: data.count, }); } - //获取标签列表 + // 获取标签列表 async getAllTagsList() { const { app, ctx } = this; const { searchText } = ctx.request.query; const data = await ctx.service.tagManagement.getAllTagsList({ - searchText + searchText, }); ctx.body = app.utils.response(true, { data: data.rows, - count: data.count + count: data.count, }); } - //新增标签 - async addTag(){ - const {ctx,app} = this; - const { tagName,tagDesc,tagColor } = ctx.request.body; + // 新增标签 + async addTag() { + const { ctx, app } = this; + const { tagName, tagDesc, tagColor } = ctx.request.body; if (_.isNil(tagName)) throw new Error('缺少必要参数tagName'); if (_.isNil(tagDesc)) throw new Error('缺少必要参数tagDesc'); if (_.isNil(tagColor)) throw new Error('缺少必要参数tagColor'); const result = await ctx.service.tagManagement.addTag({ - tagName,tagDesc,tagColor + tagName, + tagDesc, + tagColor, }); - ctx.body = app.utils.response(true,result.get({ - plain: true - })); + ctx.body = app.utils.response( + true, + result.get({ + plain: true, + }) + ); } - //编辑标签 - async editTag(){ - const {ctx,app} = this; - const {id,tagName,tagDesc,tagColor} = ctx.request.body; + // 编辑标签 + async editTag() { + const { ctx, app } = this; + const { id, tagName, tagDesc, tagColor } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.tagManagement.editTag({ id, tagName, tagDesc, - tagColor + tagColor, }); ctx.body = app.utils.response(true); } - //删除标签 - async deleteTag(){ - const {ctx,app} = this; - const {id} = ctx.request.body; + // 删除标签 + async deleteTag() { + const { ctx, app } = this; + const { id } = ctx.request.body; if (_.isNil(id)) throw new Error('缺少必要参数id'); await ctx.service.tagManagement.deleteTag(id); - ctx.body = app.utils.response(true) + ctx.body = app.utils.response(true); } } -module.exports = TagsManagementController; \ No newline at end of file +module.exports = TagsManagementController; diff --git a/app/io/controller/home.js b/app/io/controller/home.js index f95ac1f..0c9c621 100644 --- a/app/io/controller/home.js +++ b/app/io/controller/home.js @@ -1,6 +1,6 @@ const { createNewServer } = require('../../utils/createServer'); -module.exports = app => { +module.exports = (app) => { return class Controller extends app.Controller { // async getShellCommand () { // const { ctx, logger, app } = this; @@ -9,15 +9,18 @@ module.exports = app => { // logger.info(' ======= command ======= ', command) // } - async loginServer () { - const { ctx } = this - const { host, username, password } = ctx.args[0] + async loginServer() { + const { ctx } = this; + const { host, username, password } = ctx.args[0]; - createNewServer({ - host, - username, - password - }, ctx) + createNewServer( + { + host, + username, + password, + }, + ctx + ); } - } -} \ No newline at end of file + }; +}; diff --git a/app/io/middleware/connection.js b/app/io/middleware/connection.js index b50e400..1e3765a 100644 --- a/app/io/middleware/connection.js +++ b/app/io/middleware/connection.js @@ -1,9 +1,9 @@ module.exports = () => { return async (ctx, next) => { ctx.logger.info('*** SOCKET IO CONNECTION SUCCESS ***'); - ctx.socket.emit('serverMsg', '\r\n*** SOCKET IO CONNECTION SUCCESS ***\r\n') + ctx.socket.emit('serverMsg', '\r\n*** SOCKET IO CONNECTION SUCCESS ***\r\n'); await next(); ctx.logger.info('*** SOCKET IO DISCONNECTION ***'); - ctx.socket.emit('serverMsg', '\r\n*** SOCKET IO DISCONNECTION ***\r\n') + ctx.socket.emit('serverMsg', '\r\n*** SOCKET IO DISCONNECTION ***\r\n'); }; -}; \ No newline at end of file +}; diff --git a/app/middleware/access.js b/app/middleware/access.js index b184839..53e17fd 100644 --- a/app/middleware/access.js +++ b/app/middleware/access.js @@ -2,7 +2,7 @@ const path = require('path'); const util = require('util'); module.exports = () => { - const skipExt = [ '.png', '.jpeg', '.jpg', '.ico', '.gif' ]; + const skipExt = ['.png', '.jpeg', '.jpg', '.ico', '.gif']; return function* (next) { const start = new Date().getTime(); @@ -26,10 +26,21 @@ module.exports = () => { const referrer = this.get('referrer') || '-'; const ua = this.get('user-agent') || '-'; const serverTime = this.response.get('X-Server-Response-Time') || '-'; - const message = util.format('[access] %s:%s - %s %s %s/%s %s %s %s %s %s', - ip, port, method, url, protocol, status, length, referrer, rs, serverTime, ua); + const message = util.format( + '[access] %s:%s - %s %s %s/%s %s %s %s %s %s', + ip, + port, + method, + url, + protocol, + status, + length, + referrer, + rs, + serverTime, + ua + ); this.logger.info(message); } }; }; - diff --git a/app/middleware/proxy.js b/app/middleware/proxy.js index 1c9cf4b..92e5b5a 100644 --- a/app/middleware/proxy.js +++ b/app/middleware/proxy.js @@ -2,53 +2,55 @@ const c2k = require('koa-connect'); const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = async function httpproxy(ctx, next) { await next(); - const {app} = ctx; - //获取代理服务id + const { app } = ctx; + // 获取代理服务id const serverId = ctx.params.id; - //获取真实访问者ip + // 获取真实访问者ip const realIp = ctx.header['x-real-ip']; - //根据代理服务id查询代理服务 + // 根据代理服务id查询代理服务 const proxyServer = await app.model.ProxyServer.findOne({ - attributes:['target','status'], - where:{ - is_delete:0, - id:serverId - } + attributes: ['target', 'status'], + where: { + is_delete: 0, + id: serverId, + }, }); - //判断代理服务是否被禁用 - if (proxyServer.status===0){ - ctx.body = app.utils.response(false,null,'该代理服务已关闭'); + // 判断代理服务是否被禁用 + if (proxyServer.status === 0) { + ctx.body = app.utils.response(false, null, '该代理服务已关闭'); } else { let target = ''; - //根据代理服务id和真实访问者ip查询代理规则 + // 根据代理服务id和真实访问者ip查询代理规则 const proxyRule = await app.model.ProxyRule.findOne({ - attributes:['target'], - where:{ - is_delete:0, - status:1, - ip:realIp, - proxy_server_id:serverId - } + attributes: ['target'], + where: { + is_delete: 0, + status: 1, + ip: realIp, + proxy_server_id: serverId, + }, }); - //判断代理服务id和真实访问者ip是否有对应的代理规则 - if (proxyRule){ - target=proxyRule.target.trim(); + // 判断代理服务id和真实访问者ip是否有对应的代理规则 + if (proxyRule) { + target = proxyRule.target.trim(); } else { - target=proxyServer.target.trim(); + target = proxyServer.target.trim(); } - if (target){ - await c2k(createProxyMiddleware({ - target, - pathRewrite:{ - [`^/proxy/${serverId}`]:'' - }, - timeout: 5 * 60 * 1000, // 五分钟 - proxyTimeout: 5 * 60 * 1000, // 五分钟 - changeOrigin: true, - onError: (err, req, res, target) => { - app.logger.info('http-proxy-middleware error', err, target); - } - }))(ctx,next) + if (target) { + await c2k( + createProxyMiddleware({ + target, + pathRewrite: { + [`^/proxy/${serverId}`]: '', + }, + timeout: 5 * 60 * 1000, // 五分钟 + proxyTimeout: 5 * 60 * 1000, // 五分钟 + changeOrigin: true, + onError: (err, req, res, target) => { + app.logger.info('http-proxy-middleware error', err, target); + }, + }) + )(ctx, next); } } }; diff --git a/app/mocks/article/list.js b/app/mocks/article/list.js index bc6dbb8..4fc0455 100644 --- a/app/mocks/article/list.js +++ b/app/mocks/article/list.js @@ -1,98 +1,119 @@ 'use strict'; const data = { - list: [{ - title: `Egg + React 服务端渲染骨架`, - summary: '基于Egg + React + Webpack3/Webpack2 多页面和单页面服务器渲染同构工程骨架项目', - hits: 550, - url: 'https://github.com/hubcarl/egg-react-webpack-boilerplate' - }, { - id: 1, - title: '前端工程化解决方案easywebpack', - summary: 'programming instead of configuration, webpack is so easy', - hits: 550, - url: 'https://github.com/hubcarl/easywebpack' - }, { - id: 2, - title: '前端工程化解决方案脚手架easywebpack-cli', - summary: 'easywebpack command tool, support init Vue/Reac/Weex boilerplate', - hits: 278, - url: 'https://github.com/hubcarl/easywebpack-cli' - }, { - title: 'react-渐进式JavaScript 框架', - summary: '简单小巧的核心,渐进式技术栈,足以应付任何规模的应用', - hits: 200, - url: 'https://cn.reactjs.org' - }, { - title: 'webpack配置官方文档', - summary: 'webpack is a module bundler for modern JavaScript applications.', - hits: 550, - url: 'https://webpack.js.org/configuration/' - }, { - title: 'egg-为企业级框架和应用而生', - summary: 'Born to buildbetter enterprise frameworks and apps with Node.js & Koa', - hits: 278, - url: 'https://eggjs.org/' - }, { - title: 'axios-基于 Promise 的 HTTP 请求客户端', - summary: '基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用', - hits: 998, - url: 'https://www.awesomes.cn/repo/mzabriskie/axios' - }, { - title: 'Centralized State Management for react.js', - summary: 'reactx 是一个专为react.js 应用程序开发的状态管理模式', - hits: 232, - url: 'https://github.com/reactjs/reactx' - }, { - title: 'react服务器渲染', - summary: '服务器渲染可以加快首屏速度,利于SEO', - hits: 565, - url: 'http://csbun.github.io/blog/2016/08/react-2-0-server-side-rendering/' - }, { - title: 'webpack服务器构建', - summary: 'Webpack is an amazing tool.', - hits: 988, - url: 'http://jlongster.com/Backend-Apps-with-Webpack--Part-I' - }, { - title: 'react component loader for Webpack', - summary: 'Webpack loader for react.js components', - hits: 322, - url: 'https://github.com/reactjs/react-loader' - }, { - title: 'react-router--The official router for react.js', - summary: 'It deeply integrates with react.js core to make building Single Page Applications with react.js a breeze', - hits: 566, - url: 'https://github.com/reactjs/react-router' - }, { - title: 'react生命周期', - summary: 'react.js 生命周期和route的生命周期讲解', - hits: 434, - url: 'http://www.jianshu.com/p/e9f884b6ba6c' - }, { - title: 'babel到底将代码转换成什么鸟样', - summary: '将babel捧作前端一个划时代的工具一定也不为过,它的出现让许多程序员幸福地用上了es6新语法', - hits: 432, - url: 'https://github.com/lcxfs1991/blog/issues/9' - }, { - title: 'HTTP2 的真正性能到底如何', - summary: 'HTTP2 的真正性能到底如何', - hits: 565, - url: 'https://segmentfault.com/a/1190000007219256?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly' - }, { - title: 'HTTP,HTTP2.0,SPDY,HTTPS讲解', - summary: '使用SPDY加快你的网站速度', - hits: 787, - url: 'http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/' - }, { - title: 'git - 简明指南', - summary: '助你入门 git 的简明指南', - hits: 121, - url: 'http://rogerdudler.github.io/git-guide/index.zh.html' - }, { - title: 'react从1升级到2', - summary: 'Migrating from v1 to v2', - hits: 555, - url: 'https://webpack.js.org/guides/migrating/' - }] + list: [ + { + title: `Egg + React 服务端渲染骨架`, + summary: '基于Egg + React + Webpack3/Webpack2 多页面和单页面服务器渲染同构工程骨架项目', + hits: 550, + url: 'https://github.com/hubcarl/egg-react-webpack-boilerplate', + }, + { + id: 1, + title: '前端工程化解决方案easywebpack', + summary: 'programming instead of configuration, webpack is so easy', + hits: 550, + url: 'https://github.com/hubcarl/easywebpack', + }, + { + id: 2, + title: '前端工程化解决方案脚手架easywebpack-cli', + summary: 'easywebpack command tool, support init Vue/Reac/Weex boilerplate', + hits: 278, + url: 'https://github.com/hubcarl/easywebpack-cli', + }, + { + title: 'react-渐进式JavaScript 框架', + summary: '简单小巧的核心,渐进式技术栈,足以应付任何规模的应用', + hits: 200, + url: 'https://cn.reactjs.org', + }, + { + title: 'webpack配置官方文档', + summary: 'webpack is a module bundler for modern JavaScript applications.', + hits: 550, + url: 'https://webpack.js.org/configuration/', + }, + { + title: 'egg-为企业级框架和应用而生', + summary: 'Born to buildbetter enterprise frameworks and apps with Node.js & Koa', + hits: 278, + url: 'https://eggjs.org/', + }, + { + title: 'axios-基于 Promise 的 HTTP 请求客户端', + summary: '基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用', + hits: 998, + url: 'https://www.awesomes.cn/repo/mzabriskie/axios', + }, + { + title: 'Centralized State Management for react.js', + summary: 'reactx 是一个专为react.js 应用程序开发的状态管理模式', + hits: 232, + url: 'https://github.com/reactjs/reactx', + }, + { + title: 'react服务器渲染', + summary: '服务器渲染可以加快首屏速度,利于SEO', + hits: 565, + url: 'http://csbun.github.io/blog/2016/08/react-2-0-server-side-rendering/', + }, + { + title: 'webpack服务器构建', + summary: 'Webpack is an amazing tool.', + hits: 988, + url: 'http://jlongster.com/Backend-Apps-with-Webpack--Part-I', + }, + { + title: 'react component loader for Webpack', + summary: 'Webpack loader for react.js components', + hits: 322, + url: 'https://github.com/reactjs/react-loader', + }, + { + title: 'react-router--The official router for react.js', + summary: + 'It deeply integrates with react.js core to make building Single Page Applications with react.js a breeze', + hits: 566, + url: 'https://github.com/reactjs/react-router', + }, + { + title: 'react生命周期', + summary: 'react.js 生命周期和route的生命周期讲解', + hits: 434, + url: 'http://www.jianshu.com/p/e9f884b6ba6c', + }, + { + title: 'babel到底将代码转换成什么鸟样', + summary: + '将babel捧作前端一个划时代的工具一定也不为过,它的出现让许多程序员幸福地用上了es6新语法', + hits: 432, + url: 'https://github.com/lcxfs1991/blog/issues/9', + }, + { + title: 'HTTP2 的真正性能到底如何', + summary: 'HTTP2 的真正性能到底如何', + hits: 565, + url: 'https://segmentfault.com/a/1190000007219256?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly', + }, + { + title: 'HTTP,HTTP2.0,SPDY,HTTPS讲解', + summary: '使用SPDY加快你的网站速度', + hits: 787, + url: 'http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/', + }, + { + title: 'git - 简明指南', + summary: '助你入门 git 的简明指南', + hits: 121, + url: 'http://rogerdudler.github.io/git-guide/index.zh.html', + }, + { + title: 'react从1升级到2', + summary: 'Migrating from v1 to v2', + hits: 555, + url: 'https://webpack.js.org/guides/migrating/', + }, + ], }; let id = 1; @@ -100,20 +121,21 @@ let id = 1; data.list = data.list.concat(data.list); data.list = data.list.concat(data.list); -data.list.forEach(item => { - item.id = id++; +data.list.forEach((item) => { + item.id = id++; }); - const total = data.list.length; -exports.getPage = (pageIndex = 1, pageSize = 10)=> { - const start = (pageIndex - 1) * pageSize; - const end = start + Number(pageSize); - return { list: data.list.slice(start, end), total }; +exports.getPage = (pageIndex = 1, pageSize = 10) => { + const start = (pageIndex - 1) * pageSize; + const end = start + Number(pageSize); + return { list: data.list.slice(start, end), total }; }; -exports.getDetail = id => { - return data.list.filter(item => { - return item.id === id; - }).slice(0, 1); -}; \ No newline at end of file +exports.getDetail = (id) => { + return data.list + .filter((item) => { + return item.id === id; + }) + .slice(0, 1); +}; diff --git a/app/model/app_centers.js b/app/model/app_centers.js index ce9b7e4..c278ef3 100644 --- a/app/model/app_centers.js +++ b/app/model/app_centers.js @@ -1,20 +1,23 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const AppCenters = app.model.define('app_centers', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - appName: STRING(100), - appUrl: STRING(255), - appTags: STRING(255), - appType: { type: INTEGER(2), defaultValue: 1 }, - appDesc: STRING(255), - logoUrl: STRING(255), - status: { type: INTEGER(2), defaultValue: 1 }, - clickCount: { type: INTEGER(2), defaultValue: 0 }, - created_at: DATE, - updated_at: DATE - },{ - freezeTableName: true - }); + const AppCenters = app.model.define( + 'app_centers', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + appName: STRING(100), + appUrl: STRING(255), + appTags: STRING(255), + appType: { type: INTEGER(2), defaultValue: 1 }, + appDesc: STRING(255), + logoUrl: STRING(255), + status: { type: INTEGER(2), defaultValue: 1 }, + clickCount: { type: INTEGER(2), defaultValue: 0 }, + created_at: DATE, + updated_at: DATE, + }, + { + freezeTableName: true, + } + ); return AppCenters; }; - \ No newline at end of file diff --git a/app/model/article_subscription.js b/app/model/article_subscription.js index f25fd59..747e12b 100644 --- a/app/model/article_subscription.js +++ b/app/model/article_subscription.js @@ -1,25 +1,28 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const ArticleSubscription = app.model.define('article_subscription', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - groupName: STRING(64), - webHook: STRING(500), - remark: STRING(255), - topicIds: STRING(255), - siteNames: STRING(255), - sendType: { type: INTEGER(2), defaultValue: 1 }, - sendCron: STRING(255), - time: STRING(255), - status: { type: INTEGER(2), defaultValue: 1 }, - is_delete: { type: INTEGER(2), defaultValue: 0 }, - created_at: DATE, - updated_at: DATE, - messageTitle: STRING(64), - message: STRING(2000), - isAtAll: { type: INTEGER(2), defaultValue: 0 } - },{ - freezeTableName: true - }); + const ArticleSubscription = app.model.define( + 'article_subscription', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + groupName: STRING(64), + webHook: STRING(500), + remark: STRING(255), + topicIds: STRING(255), + siteNames: STRING(255), + sendType: { type: INTEGER(2), defaultValue: 1 }, + sendCron: STRING(255), + time: STRING(255), + status: { type: INTEGER(2), defaultValue: 1 }, + is_delete: { type: INTEGER(2), defaultValue: 0 }, + created_at: DATE, + updated_at: DATE, + messageTitle: STRING(64), + message: STRING(2000), + isAtAll: { type: INTEGER(2), defaultValue: 0 }, + }, + { + freezeTableName: true, + } + ); return ArticleSubscription; }; - \ No newline at end of file diff --git a/app/model/article_topic.js b/app/model/article_topic.js index 20d3534..13f8ed4 100644 --- a/app/model/article_topic.js +++ b/app/model/article_topic.js @@ -1,17 +1,20 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const ArticleTopic = app.model.define('article_topic', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - siteName: STRING(64), - topicName: STRING(255), - topicUrl: STRING(255), - sort: INTEGER, - is_delete: { type: INTEGER(2), defaultValue: 0 }, - created_at: DATE, - updated_at: DATE - },{ - freezeTableName: true - }); + const ArticleTopic = app.model.define( + 'article_topic', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + siteName: STRING(64), + topicName: STRING(255), + topicUrl: STRING(255), + sort: INTEGER, + is_delete: { type: INTEGER(2), defaultValue: 0 }, + created_at: DATE, + updated_at: DATE, + }, + { + freezeTableName: true, + } + ); return ArticleTopic; }; - \ No newline at end of file diff --git a/app/model/config_management.js b/app/model/config_management.js index 4d11eb5..34d8f71 100644 --- a/app/model/config_management.js +++ b/app/model/config_management.js @@ -1,22 +1,33 @@ -module.exports = app => { - const { STRING, INTEGER, DATE,TEXT} = app.Sequelize; - const ConfigManagement = app.model.define('config_management', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - filename:STRING(30), - filePath:{type:STRING(80),field:'file_path'}, - tagIds:{type:STRING(100),field:'tag_ids'}, - hostId:{type:INTEGER,field:'host_id'}, - remark: STRING(255), - updateShell:{type:TEXT,field:'update_shell'}, - status: {type:INTEGER(2),defaultValue:1}, - createdAt: DATE, - updatedAt: DATE - },{ - freezeTableName: true - }); - ConfigManagement.associate = function() { - app.model.ConfigManagement.belongsTo(app.model.HostManagement,{ foreignKey: 'host_id', targetKey: 'id'}); - app.model.ConfigManagement.belongsTo(app.model.TagManagement,{ as:'tags',foreignKey: 'tag_ids', targetKey: 'id'}); - } +module.exports = (app) => { + const { STRING, INTEGER, DATE, TEXT } = app.Sequelize; + const ConfigManagement = app.model.define( + 'config_management', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + filename: STRING(30), + filePath: { type: STRING(80), field: 'file_path' }, + tagIds: { type: STRING(100), field: 'tag_ids' }, + hostId: { type: INTEGER, field: 'host_id' }, + remark: STRING(255), + updateShell: { type: TEXT, field: 'update_shell' }, + status: { type: INTEGER(2), defaultValue: 1 }, + createdAt: DATE, + updatedAt: DATE, + }, + { + freezeTableName: true, + } + ); + ConfigManagement.associate = function () { + app.model.ConfigManagement.belongsTo(app.model.HostManagement, { + foreignKey: 'host_id', + targetKey: 'id', + }); + app.model.ConfigManagement.belongsTo(app.model.TagManagement, { + as: 'tags', + foreignKey: 'tag_ids', + targetKey: 'id', + }); + }; return ConfigManagement; }; diff --git a/app/model/config_notice_url.js b/app/model/config_notice_url.js index 93adc88..68c66e7 100644 --- a/app/model/config_notice_url.js +++ b/app/model/config_notice_url.js @@ -1,15 +1,19 @@ -module.exports = app => { - const { INTEGER,STRING} = app.Sequelize; - const ConfigNoticeUrl = app.model.define('config_notice_url', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - webHook:STRING(255), - type:STRING(255), - accept_group:STRING(255), - is_delete: INTEGER, - configId:{type:INTEGER,field:'config_id'} - },{ - freezeTableName: true, - timestamps: false - }); +module.exports = (app) => { + const { INTEGER, STRING } = app.Sequelize; + const ConfigNoticeUrl = app.model.define( + 'config_notice_url', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + webHook: STRING(255), + type: STRING(255), + accept_group: STRING(255), + is_delete: INTEGER, + configId: { type: INTEGER, field: 'config_id' }, + }, + { + freezeTableName: true, + timestamps: false, + } + ); return ConfigNoticeUrl; -}; \ No newline at end of file +}; diff --git a/app/model/config_tag_rel.js b/app/model/config_tag_rel.js index 5447db3..05823c6 100644 --- a/app/model/config_tag_rel.js +++ b/app/model/config_tag_rel.js @@ -1,15 +1,18 @@ -module.exports = app => { +module.exports = (app) => { const { INTEGER, DATE } = app.Sequelize; - const ConfigTagRelServer = app.model.define('config_tag_rel', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - configId:{type:INTEGER,field:'config_id'}, - tagId:{type:INTEGER,field:'tag_id'}, - created_at: DATE, - updated_at: DATE, - is_delete: INTEGER - },{ - freezeTableName: true - }); + const ConfigTagRelServer = app.model.define( + 'config_tag_rel', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + configId: { type: INTEGER, field: 'config_id' }, + tagId: { type: INTEGER, field: 'tag_id' }, + created_at: DATE, + updated_at: DATE, + is_delete: INTEGER, + }, + { + freezeTableName: true, + } + ); return ConfigTagRelServer; }; - \ No newline at end of file diff --git a/app/model/env_management.js b/app/model/env_management.js index 7c18565..f97bb24 100644 --- a/app/model/env_management.js +++ b/app/model/env_management.js @@ -1,18 +1,22 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const EnvManagement = app.model.define('env_management', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - envName:{type:STRING(255),field:'env_name'}, - hostIp:{type:STRING(20),field:'host_ip'}, - url:{type:STRING(2048),field:'url'}, - remark: STRING(255), - tags:{type:STRING(60),field:'tag_ids'}, - status: {type:INTEGER(2),defaultValue:1}, - createdAt: DATE, - updatedAt: DATE - },{ - freezeTableName: true - }); + const EnvManagement = app.model.define( + 'env_management', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + envName: { type: STRING(255), field: 'env_name' }, + hostIp: { type: STRING(20), field: 'host_ip' }, + url: { type: STRING(2048), field: 'url' }, + remark: STRING(255), + tags: { type: STRING(60), field: 'tag_ids' }, + status: { type: INTEGER(2), defaultValue: 1 }, + createdAt: DATE, + updatedAt: DATE, + }, + { + freezeTableName: true, + } + ); return EnvManagement; }; diff --git a/app/model/host_management.js b/app/model/host_management.js index b6ae356..9171cc2 100644 --- a/app/model/host_management.js +++ b/app/model/host_management.js @@ -1,19 +1,23 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const HostManagement = app.model.define('host_management', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - hostIp:{type:STRING(20),field:'host_ip'}, - hostName:{type:STRING(60),field:'host_name'}, - username:STRING(60), - password:STRING(60), - remark: STRING(255), - tags:{type:STRING(60),field:'tag_ids'}, - status: {type:INTEGER(2),defaultValue:1}, - createdAt: DATE, - updatedAt: DATE - },{ - freezeTableName: true - }); + const HostManagement = app.model.define( + 'host_management', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + hostIp: { type: STRING(20), field: 'host_ip' }, + hostName: { type: STRING(60), field: 'host_name' }, + username: STRING(60), + password: STRING(60), + remark: STRING(255), + tags: { type: STRING(60), field: 'tag_ids' }, + status: { type: INTEGER(2), defaultValue: 1 }, + createdAt: DATE, + updatedAt: DATE, + }, + { + freezeTableName: true, + } + ); return HostManagement; }; diff --git a/app/model/proxy_rule.js b/app/model/proxy_rule.js index 1468742..64c2069 100644 --- a/app/model/proxy_rule.js +++ b/app/model/proxy_rule.js @@ -1,18 +1,22 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const ProxyServer = app.model.define('proxy_rule', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - ip: INTEGER, - target: STRING(60), - remark: STRING(255), - proxy_server_id: INTEGER, - status: INTEGER, - is_delete: INTEGER, - created_at: DATE, - updated_at: DATE - },{ - freezeTableName: true - }); + const ProxyServer = app.model.define( + 'proxy_rule', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + ip: INTEGER, + target: STRING(60), + remark: STRING(255), + proxy_server_id: INTEGER, + status: INTEGER, + is_delete: INTEGER, + created_at: DATE, + updated_at: DATE, + }, + { + freezeTableName: true, + } + ); return ProxyServer; }; diff --git a/app/model/proxy_server.js b/app/model/proxy_server.js index 5f2d228..3829f6b 100644 --- a/app/model/proxy_server.js +++ b/app/model/proxy_server.js @@ -1,17 +1,21 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const ProxyServer = app.model.define('proxy_server', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - name: INTEGER, - target: STRING(60), - api_doc_url: STRING(255), - proxy_server_address: STRING(100), - status: INTEGER, - is_delete: INTEGER, - created_at: DATE, - updated_at: DATE - },{ - freezeTableName: true - }); + const ProxyServer = app.model.define( + 'proxy_server', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + name: INTEGER, + target: STRING(60), + api_doc_url: STRING(255), + proxy_server_address: STRING(100), + status: INTEGER, + is_delete: INTEGER, + created_at: DATE, + updated_at: DATE, + }, + { + freezeTableName: true, + } + ); return ProxyServer; }; diff --git a/app/model/proxy_server_addrs.js b/app/model/proxy_server_addrs.js index 25e50ca..1e2172c 100644 --- a/app/model/proxy_server_addrs.js +++ b/app/model/proxy_server_addrs.js @@ -1,15 +1,19 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const ProxyServer = app.model.define('proxy_server_addrs', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - target: STRING(255), - remark: STRING(255), - proxy_server_id: INTEGER, - is_delete: INTEGER, - created_at: DATE, - updated_at: DATE - }, { - freezeTableName: true - }); + const ProxyServer = app.model.define( + 'proxy_server_addrs', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + target: STRING(255), + remark: STRING(255), + proxy_server_id: INTEGER, + is_delete: INTEGER, + created_at: DATE, + updated_at: DATE, + }, + { + freezeTableName: true, + } + ); return ProxyServer; }; diff --git a/app/model/switch_hosts.js b/app/model/switch_hosts.js index f2b27a4..a608a01 100644 --- a/app/model/switch_hosts.js +++ b/app/model/switch_hosts.js @@ -1,20 +1,23 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const SwitchHostsServer = app.model.define('switch_hosts', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - groupName: STRING(64), - groupId: STRING(255), - groupApi: STRING(255), - groupDesc: STRING(255), - groupAddr: STRING(255), - created_at: DATE, - updated_at: DATE, - is_delete: INTEGER, - is_close: INTEGER, - is_push: INTEGER - },{ - freezeTableName: true - }); + const SwitchHostsServer = app.model.define( + 'switch_hosts', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + groupName: STRING(64), + groupId: STRING(255), + groupApi: STRING(255), + groupDesc: STRING(255), + groupAddr: STRING(255), + created_at: DATE, + updated_at: DATE, + is_delete: INTEGER, + is_close: INTEGER, + is_push: INTEGER, + }, + { + freezeTableName: true, + } + ); return SwitchHostsServer; }; - \ No newline at end of file diff --git a/app/model/tag_management.js b/app/model/tag_management.js index 39108e4..028e604 100644 --- a/app/model/tag_management.js +++ b/app/model/tag_management.js @@ -1,18 +1,21 @@ -module.exports = app => { +module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; - const TagManagementServer = app.model.define('tag_management', { - id: { type: INTEGER, primaryKey: true, autoIncrement: true }, - tagName: STRING(64), - tagDesc: STRING(255), - tagColor: STRING(255), - created_at: DATE, - updated_at: DATE, - isAdmin:{type:INTEGER,field:'is_admin'}, - is_delete: INTEGER, - is_close: INTEGER - },{ - freezeTableName: true - }); + const TagManagementServer = app.model.define( + 'tag_management', + { + id: { type: INTEGER, primaryKey: true, autoIncrement: true }, + tagName: STRING(64), + tagDesc: STRING(255), + tagColor: STRING(255), + created_at: DATE, + updated_at: DATE, + isAdmin: { type: INTEGER, field: 'is_admin' }, + is_delete: INTEGER, + is_close: INTEGER, + }, + { + freezeTableName: true, + } + ); return TagManagementServer; }; - \ No newline at end of file diff --git a/app/router.js b/app/router.js index 8d21b42..347c1c3 100644 --- a/app/router.js +++ b/app/router.js @@ -1,11 +1,11 @@ -module.exports = app => { - const { io } = app +module.exports = (app) => { + // const { io } = app; app.get('/', app.controller.home.index); app.get('/page/*', app.controller.home.index); app.get('/c', app.controller.home.client); /** - * 代理服务增删改查以及状态修改 - */ + * 代理服务增删改查以及状态修改 + */ app.post('/api/proxy-server/server-list', app.controller.proxy.list); app.post('/api/proxy-server/add-server', app.controller.proxy.add); app.get('/api/proxy-server/target-addrs-list', app.controller.proxy.getTargetAddrs); @@ -13,51 +13,54 @@ module.exports = app => { app.delete('/api/proxy-server/delete-server', app.controller.proxy.delete); app.get('/api/proxy-server/change-server-status', app.controller.proxy.changeStatus); /** - * 代理服务规则增删改查 - */ + * 代理服务规则增删改查 + */ app.get('/api/proxy-server/rule-list', app.controller.proxy.ruleList); app.post('/api/proxy-server/add-rule', app.controller.proxy.addRule); app.post('/api/proxy-server/update-rule', app.controller.proxy.updateRule); app.post('/api/proxy-server/update-rule-status', app.controller.proxy.updateRuleStatus); app.delete('/api/proxy-server/delete-rule', app.controller.proxy.deleteRule); - app.post('/api/proxy-server/get-project-list-by-user-ip', app.controller.proxy.projectListByUserIP); + app.post( + '/api/proxy-server/get-project-list-by-user-ip', + app.controller.proxy.projectListByUserIP + ); /** - * 主机管理 - */ + * 主机管理 + */ app.get('/api/host-management/host-list', app.controller.hostManagement.queryHosts); app.post('/api/host-management/add-host', app.controller.hostManagement.addHost); app.post('/api/host-management/edit-host', app.controller.hostManagement.editHost); app.delete('/api/host-management/delete-host', app.controller.hostManagement.deleteHost); /** - * 环境管理 - */ + * 环境管理 + */ app.get('/api/env-management/env-list', app.controller.envManagement.queryEnvs); app.post('/api/env-management/add-env', app.controller.envManagement.addEnv); app.post('/api/env-management/edit-env', app.controller.envManagement.editEnv); app.delete('/api/env-management/delete-env', app.controller.envManagement.deleteEnv); /** - * 配置中心 - */ + * 配置中心 + */ app.post('/api/config-center/config-list', app.controller.configCenter.getConfigList); app.post('/api/config-center/add-config', app.controller.configCenter.addConfig); app.post('/api/config-center/edit-config', app.controller.configCenter.editConfig); app.delete('/api/config-center/delete-config', app.controller.configCenter.deleteConfig); /** - * 配置详情 - */ + * 配置详情 + */ app.get('/api/config-detail/get-basic-info', app.controller.configDetail.getBasicInfo); - app.get('/api/config-detail/get-notice-list', app.controller.configDetail.getNoticeList) - app.post('/api/config-detail/add-config-notice-url', app.controller.configDetail.addNoticeUrl) - app.get('/api/config-detail/del-config-notice-url', app.controller.configDetail.delNoticeUrl) + app.get('/api/config-detail/get-notice-list', app.controller.configDetail.getNoticeList); + app.post('/api/config-detail/add-config-notice-url', app.controller.configDetail.addNoticeUrl); + app.get('/api/config-detail/del-config-notice-url', app.controller.configDetail.delNoticeUrl); app.get('/api/config-detail/get-remote-config', app.controller.configDetail.getRemoteConfig); - app.post('/api/config-detail/save', app.controller.configDetail.saveConfig) + app.post('/api/config-detail/save', app.controller.configDetail.saveConfig); /** * 服务代理 */ app.all('/proxy/:id/*', app.middleware.proxy); /** - * 通用接口 - */ + * 通用接口 + */ app.get('/api/appCenters/get-app-list', app.controller.appCenters.getAppCenterList); app.get('/api/github/get-local-ip', app.controller.common.getLocalIp); app.post('/api/appCenters/update-applications', app.controller.appCenters.updateApplications); @@ -66,13 +69,13 @@ module.exports = app => { app.get('/api/appCenters/get-app-by-id', app.controller.appCenters.getApplicationById); app.post('/api/appCenters/upload-logo/:id', app.controller.appCenters.uploadLogo); /** - * switch hosts 管理列表 - */ + * switch hosts 管理列表 + */ app.post('/api/switch-hosts/get-hosts-list', app.controller.switchHosts.getHostsList); app.post('/api/switch-hosts/push-hosts', app.controller.switchHosts.pushHosts); /** - * switch hosts 配置内容 增删改查 - */ + * switch hosts 配置内容 增删改查 + */ app.post('/api/switch-hosts/create-hosts', app.controller.switchHosts.createHosts); app.post('/api/switch-hosts/delete-hosts', app.controller.switchHosts.deleteHosts); app.post('/api/switch-hosts/update-hosts', app.controller.switchHosts.updateHosts); @@ -82,18 +85,39 @@ module.exports = app => { /** * 文章订阅 */ - app.get('/api/article-subscription/test-article', app.controller.articleSubscription.testArticle); - app.post('/api/article-subscription/create-subscription', app.controller.articleSubscription.createSubscription); - app.post('/api/article-subscription/delete-subscription', app.controller.articleSubscription.deleteSubscription); - app.post('/api/article-subscription/update-subscription', app.controller.articleSubscription.updateSubscription); - app.post('/api/article-subscription/get-subscription-list', app.controller.articleSubscription.getSubscriptionList); - app.get('/api/article-subscription/get-subscription-info', app.controller.articleSubscription.getSubscriptionInfo); - app.get('/api/article-subscription/get-timed-task-list', app.controller.articleSubscription.getTimedTaskList); + app.get( + '/api/article-subscription/test-article', + app.controller.articleSubscription.testArticle + ); + app.post( + '/api/article-subscription/create-subscription', + app.controller.articleSubscription.createSubscription + ); + app.post( + '/api/article-subscription/delete-subscription', + app.controller.articleSubscription.deleteSubscription + ); + app.post( + '/api/article-subscription/update-subscription', + app.controller.articleSubscription.updateSubscription + ); + app.post( + '/api/article-subscription/get-subscription-list', + app.controller.articleSubscription.getSubscriptionList + ); + app.get( + '/api/article-subscription/get-subscription-info', + app.controller.articleSubscription.getSubscriptionInfo + ); + app.get( + '/api/article-subscription/get-timed-task-list', + app.controller.articleSubscription.getTimedTaskList + ); app.get('/api/article-topic/get-topic-list', app.controller.articleTopic.getTopicList); /** - * tag management 配置内容 增删改查 - */ + * tag management 配置内容 增删改查 + */ app.get('/api/tags/get-all-tag-list', app.controller.tagManagement.getAllTagsList); app.post('/api/tags/get-tag-list', app.controller.tagManagement.getTagsList); app.post('/api/tags/create-tag', app.controller.tagManagement.addTag); diff --git a/app/schedule/articleSubscription.js b/app/schedule/articleSubscription.js index 5d4f64e..69f98e3 100644 --- a/app/schedule/articleSubscription.js +++ b/app/schedule/articleSubscription.js @@ -1,10 +1,10 @@ module.exports = { schedule: { - interval: '0 55 23 ? * 6L', // 每月的最后一个星期五 23:55 触发 + interval: '0 55 23 ? * 6L', // 每月的最后一个星期五 23:55 触发 type: 'worker', - immediate: true + immediate: true, }, async task(ctx) { - ctx.service.articleSubscription.startSubscriptionTimedTask() - } -} + ctx.service.articleSubscription.startSubscriptionTimedTask(); + }, +}; diff --git a/app/service/appCenters.js b/app/service/appCenters.js index 65d6671..65ca3c2 100644 --- a/app/service/appCenters.js +++ b/app/service/appCenters.js @@ -1,39 +1,45 @@ const Service = require('egg').Service; -const _ = require('lodash'); class AppCentersService extends Service { updateApplications(config) { const { id, appName, appUrl, appDesc, appTags } = config; - if (id) return this.ctx.model.AppCenters.update(config, { - where:{ - id - } - }); + if (id) + return this.ctx.model.AppCenters.update(config, { + where: { + id, + }, + }); return this.ctx.model.AppCenters.create({ appName, appUrl, appDesc, - appTags + appTags, }); } - clickApplications (config) { + clickApplications(config) { const { id, clickCount } = config; - return this.ctx.model.AppCenters.update({ clickCount: clickCount + 1 }, { - where:{ - id + return this.ctx.model.AppCenters.update( + { clickCount: clickCount + 1 }, + { + where: { + id, + }, } - }); + ); } - deleteApplications (id) { - return this.ctx.model.AppCenters.update({ - status:0 - },{ - where:{ - id + deleteApplications(id) { + return this.ctx.model.AppCenters.update( + { + status: 0, + }, + { + where: { + id, + }, } - }); + ); } } -module.exports = AppCentersService; \ No newline at end of file +module.exports = AppCentersService; diff --git a/app/service/articleSubscription.js b/app/service/articleSubscription.js index c9f1b43..7176202 100644 --- a/app/service/articleSubscription.js +++ b/app/service/articleSubscription.js @@ -1,35 +1,41 @@ -const Service = require('egg').Service -const { SITE_NAME, TOPIC_NAME } = require('../consts') -const { getGithubTrendingFromServerless, getJueJinHot, getDevArchitectureHot, getReactStatusHot, customMessage } = require('../utils/articleSubscription') +const Service = require('egg').Service; +const { SITE_NAME, TOPIC_NAME } = require('../consts'); +const { + getGithubTrendingFromServerless, + getJueJinHot, + getDevArchitectureHot, + getReactStatusHot, + customMessage, +} = require('../utils/articleSubscription'); class ArticleSubscriptionService extends Service { // 获取列表 getSubscriptionList(reqParams) { - const { size, current, searchText } = reqParams + const { size, current, searchText } = reqParams; return this.ctx.model.ArticleSubscription.findAndCountAll({ where: { groupName: { - '$like':`%${ searchText }%` + $like: `%${searchText}%`, }, - is_delete: 0 + is_delete: 0, }, order: [['created_at', 'DESC']], limit: size, offset: size * (current - 1), - raw: true - }) + raw: true, + }); } // 新增 createSubscription(params) { - return this.ctx.model.ArticleSubscription.create(params) + return this.ctx.model.ArticleSubscription.create(params); } // 更新 updateSubscription(id, updateParams) { return this.ctx.model.ArticleSubscription.update(updateParams, { - where: { id } - }) + where: { id }, + }); } // 通过订阅 id 查询需要发送的文章订阅消息 @@ -37,24 +43,65 @@ class ArticleSubscriptionService extends Service { const articleSubscription = await this.app.model.ArticleSubscription.findOne({ where: { id, - is_delete: 0 + is_delete: 0, }, - raw: true - }) - const { webHook, groupName, siteNames, messageTitle, message, isAtAll } = articleSubscription + raw: true, + }); + const { webHook, groupName, siteNames, messageTitle, message, isAtAll } = + articleSubscription; if (siteNames === '自定义消息') { - customMessage(id, groupName, siteNames, messageTitle, message, isAtAll, webHook, this.app) + customMessage( + id, + groupName, + siteNames, + messageTitle, + message, + isAtAll, + webHook, + this.app + ); } else { - const topicAll = await this.app.model.ArticleTopic.findAll({ where: { is_delete: 0 }, raw: true }); + const topicAll = await this.app.model.ArticleTopic.findAll({ + where: { is_delete: 0 }, + raw: true, + }); const topicIds = articleSubscription.topicIds?.split(',') || []; - const topicList = topicAll.filter(item => topicIds.includes(`${ item.id }`)) + const topicList = topicAll.filter((item) => topicIds.includes(`${item.id}`)); - for (let item of topicList) { - const { siteName, topicName, topicUrl } = item - siteName === SITE_NAME.GITHUB && getGithubTrendingFromServerless(id, groupName, siteName, topicName, topicUrl, webHook, this.app) - siteName === SITE_NAME.JUEJIN && getJueJinHot(id, groupName, siteName, topicName, topicUrl, webHook, this.app) - topicName === TOPIC_NAME.DEV_ARCHITECTURE && getDevArchitectureHot(id, groupName, siteName, topicName, topicUrl, webHook, this.app) - topicName === TOPIC_NAME.REACT_STATUS && getReactStatusHot(id, groupName, siteName, topicName, topicUrl, webHook, this.app) + for (const item of topicList) { + const { siteName, topicName, topicUrl } = item; + siteName === SITE_NAME.GITHUB && + getGithubTrendingFromServerless( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + this.app + ); + siteName === SITE_NAME.JUEJIN && + getJueJinHot(id, groupName, siteName, topicName, topicUrl, webHook, this.app); + topicName === TOPIC_NAME.DEV_ARCHITECTURE && + getDevArchitectureHot( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + this.app + ); + topicName === TOPIC_NAME.REACT_STATUS && + getReactStatusHot( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + this.app + ); } } } @@ -64,25 +111,25 @@ class ArticleSubscriptionService extends Service { const subscriptionList = await this.app.model.ArticleSubscription.findAll({ where: { is_delete: 0, - status: 1 + status: 1, }, order: [['created_at', 'DESC']], - raw: true - }) + raw: true, + }); - for (let i of subscriptionList) { - const { id, sendCron } = i - this.app.messenger.sendToAgent('createTimedTask', { id, sendCron }) + for (const i of subscriptionList) { + const { id, sendCron } = i; + this.app.messenger.sendToAgent('createTimedTask', { id, sendCron }); } } // 获取详情 - 暂未使用 async getSubscriptionInfo(id) { const data = await this.ctx.model.ArticleSubscription.findOne({ - where: { id } - }) - return data + where: { id }, + }); + return data; } } -module.exports = ArticleSubscriptionService +module.exports = ArticleSubscriptionService; diff --git a/app/service/articleTopic.js b/app/service/articleTopic.js index 22ea9a0..b860fbb 100644 --- a/app/service/articleTopic.js +++ b/app/service/articleTopic.js @@ -1,16 +1,16 @@ -const Service = require('egg').Service +const Service = require('egg').Service; class ArticleTopicService extends Service { // 获取订阅项列表 getTopicList() { return this.ctx.model.ArticleTopic.findAll({ where: { - is_delete: 0 + is_delete: 0, }, order: [['sort']], - raw: true - }) + raw: true, + }); } } -module.exports = ArticleTopicService +module.exports = ArticleTopicService; diff --git a/app/service/configCenter.js b/app/service/configCenter.js index 2c03586..5aacc47 100644 --- a/app/service/configCenter.js +++ b/app/service/configCenter.js @@ -2,78 +2,87 @@ const Service = require('egg').Service; const _ = require('lodash'); class ConfigCenterService extends Service { - queryConfigs({ - current, - size, - tags, - search = '' - }) { + queryConfigs({ current, size, tags, search = '' }) { const { ctx, app } = this; - let whereParams = { - status: 1 - } + const whereParams = { + status: 1, + }; if (tags && tags.length) { whereParams['tag_ids'] = { - $in: tags - } + $in: tags, + }; } if (search) { whereParams['$or'] = [ - { - filename: { '$like': `%${search}%` } - }, { - '$host_management.host_ip$': { '$like': `%${search}%` } - } - ] + { + filename: { $like: `%${search}%` }, + }, + { + '$host_management.host_ip$': { $like: `%${search}%` }, + }, + ]; } - let params = { - attributes: ['id', 'filename', 'filePath', 'remark', 'hostId', [app.Sequelize.col('host_management.host_ip'), 'hostIp'], 'created_at', 'updated_at'], + const params = { + attributes: [ + 'id', + 'filename', + 'filePath', + 'remark', + 'hostId', + [app.Sequelize.col('host_management.host_ip'), 'hostIp'], + 'created_at', + 'updated_at', + ], where: whereParams, - include: [{ - model: ctx.model.HostManagement, - attributes: [] - }, - { - model: ctx.model.TagManagement, - as: 'tags', - attributes: ['id', 'tagName', 'tagColor', 'tagDesc'] - }], + include: [ + { + model: ctx.model.HostManagement, + attributes: [], + }, + { + model: ctx.model.TagManagement, + as: 'tags', + attributes: ['id', 'tagName', 'tagColor', 'tagDesc'], + }, + ], // raw:true, // 这个属性表示开启原生查询,原生查询支持的功能更多,自定义更强 limit: size, order: [['updated_at', 'DESC']], - offset: size * (current - 1) - } - return ctx.model.ConfigManagement.findAndCountAll(params) + offset: size * (current - 1), + }; + return ctx.model.ConfigManagement.findAndCountAll(params); } - addConfig(config){ + addConfig(config) { return this.ctx.model.ConfigManagement.create(config); } - editConfig(config){ - const {id,filename,filePath,remark,hostId,updateShell,tagIds} = config; + editConfig(config) { + const { id, filename, filePath, remark, hostId, updateShell, tagIds } = config; const newConfig = {}; - if (!_.isNil(filename)) newConfig.filename=filename; - if (!_.isNil(filePath)) newConfig.filePath=filePath; - if (!_.isNil(remark)) newConfig.remark=remark; - if (!_.isNil(hostId)) newConfig.hostId=hostId; - if (!_.isNil(tagIds)) newConfig.tagIds=tagIds; - if (!_.isNil(updateShell)) newConfig.updateShell=updateShell; - + if (!_.isNil(filename)) newConfig.filename = filename; + if (!_.isNil(filePath)) newConfig.filePath = filePath; + if (!_.isNil(remark)) newConfig.remark = remark; + if (!_.isNil(hostId)) newConfig.hostId = hostId; + if (!_.isNil(tagIds)) newConfig.tagIds = tagIds; + if (!_.isNil(updateShell)) newConfig.updateShell = updateShell; - return this.ctx.model.ConfigManagement.update(newConfig,{ - where:{ - id - } - }) + return this.ctx.model.ConfigManagement.update(newConfig, { + where: { + id, + }, + }); } - deleteConfig(id){ - return this.ctx.model.ConfigManagement.update({ - status:0 - },{ - where:{ - id + deleteConfig(id) { + return this.ctx.model.ConfigManagement.update( + { + status: 0, + }, + { + where: { + id, + }, } - }); + ); } } -module.exports = ConfigCenterService; \ No newline at end of file +module.exports = ConfigCenterService; diff --git a/app/service/configDetail.js b/app/service/configDetail.js index 16b6d89..8133dce 100644 --- a/app/service/configDetail.js +++ b/app/service/configDetail.js @@ -1,68 +1,88 @@ const Service = require('egg').Service; -const _ = require('lodash'); class ConfigDetailService extends Service { - async getConfigBasicInfo(id){ - const {ctx,app} = this; - ctx.model.ConfigManagement.belongsTo(ctx.model.HostManagement,{ foreignKey: 'host_id', targetKey: 'id'}); + async getConfigBasicInfo(id) { + const { ctx, app } = this; + ctx.model.ConfigManagement.belongsTo(ctx.model.HostManagement, { + foreignKey: 'host_id', + targetKey: 'id', + }); return ctx.model.ConfigManagement.findOne({ - attributes:['id','filename','filePath','remark','updateShell','hostId',[app.Sequelize.col('host_management.host_ip'),'hostIp'],[app.Sequelize.col('host_management.host_name'),'hostName'],[app.Sequelize.col('host_management.username'),'username'],[app.Sequelize.col('host_management.password'),'password']], - where:{ - id + attributes: [ + 'id', + 'filename', + 'filePath', + 'remark', + 'updateShell', + 'hostId', + [app.Sequelize.col('host_management.host_ip'), 'hostIp'], + [app.Sequelize.col('host_management.host_name'), 'hostName'], + [app.Sequelize.col('host_management.username'), 'username'], + [app.Sequelize.col('host_management.password'), 'password'], + ], + where: { + id, }, - include: [{ - model: ctx.model.HostManagement, - attributes:[] - }] - }) + include: [ + { + model: ctx.model.HostManagement, + attributes: [], + }, + ], + }); } - async getNoticeListById(id,type) { - const {ctx} = this; + async getNoticeListById(id, type) { + const { ctx } = this; return ctx.model.ConfigNoticeUrl.findAll({ - attributes:['id','webHook','accept_group'], - where:{ + attributes: ['id', 'webHook', 'accept_group'], + where: { configId: id, type, - is_delete: 0 - } - }) + is_delete: 0, + }, + }); } - async addNoticeUrl(id,webHook,type,accept_group) { - const {ctx} = this; + async addNoticeUrl(id, webHook, type, accept_group) { + const { ctx } = this; return ctx.model.ConfigNoticeUrl.create({ configId: id, webHook, type, accept_group, - is_delete: 0 - }) + is_delete: 0, + }); } async updateNoticeUrl(id, type, updateParams) { const { ctx } = this; return ctx.model.ConfigNoticeUrl.update(updateParams, { - where: { id, type } - }) + where: { id, type }, + }); } async updateNoticeAllUrl(id, type, updateParams) { const { ctx } = this; return ctx.model.ConfigNoticeUrl.update(updateParams, { - where: { type, configId: id } - }) + where: { type, configId: id }, + }); } - async getConfigSpecificInfo(id,attributes=[]){ - const {ctx,app} = this; - ctx.model.ConfigManagement.belongsTo(ctx.model.HostManagement,{ foreignKey: 'host_id', targetKey: 'id'}); + async getConfigSpecificInfo(id, attributes = []) { + const { ctx } = this; + ctx.model.ConfigManagement.belongsTo(ctx.model.HostManagement, { + foreignKey: 'host_id', + targetKey: 'id', + }); return ctx.model.ConfigManagement.findOne({ attributes, - where:{ - id + where: { + id, }, - include: [{ - model: ctx.model.HostManagement, - attributes:[] - }] - }) + include: [ + { + model: ctx.model.HostManagement, + attributes: [], + }, + ], + }); } } -module.exports = ConfigDetailService \ No newline at end of file +module.exports = ConfigDetailService; diff --git a/app/service/envManagement.js b/app/service/envManagement.js index e5a0ef5..cf0a6e8 100644 --- a/app/service/envManagement.js +++ b/app/service/envManagement.js @@ -5,45 +5,45 @@ class EnvManagementService extends Service { async queryEnvs(params) { const { ctx } = this; const { tags = '', search = '' } = params; - let envResult = await ctx.model.EnvManagement.findAll({ + const envResult = await ctx.model.EnvManagement.findAll({ attributes: ['id', 'envName', 'hostIp', 'url', 'remark', 'tags'], where: { status: 1, $or: [ { - envName: { '$like': `%${search}%` } + envName: { $like: `%${search}%` }, }, { - hostIp: { '$like': `%${search}%` } - } - ] - } + hostIp: { $like: `%${search}%` }, + }, + ], + }, }); - let tagsResult = await ctx.model.TagManagement.findAll(); - let result = []; - envResult.forEach(item => { - let tagids = item.get('tags').split(','); - let tagArrs = tagsResult.filter(ele => { - return tagids.includes(`${ele.get('id')}`) + const tagsResult = await ctx.model.TagManagement.findAll(); + const result = []; + envResult.forEach((item) => { + const tagids = item.get('tags').split(','); + const tagArrs = tagsResult.filter((ele) => { + return tagids.includes(`${ele.get('id')}`); }); item.set('tags', tagArrs); if (tags) { - if (tags.split(',').some(ele => tagids.includes(`${ele}`))) { - result.push(item) + if (tags.split(',').some((ele) => tagids.includes(`${ele}`))) { + result.push(item); } } else { - result.push(item) + result.push(item); } }); - return result + return result; } - addEnv(env){ - const {ctx} = this; + addEnv(env) { + const { ctx } = this; return ctx.model.EnvManagement.create(env); } - editEnv(env){ - const {ctx} = this; - const {id, envName, hostIp, url, remark, tags} = env; + editEnv(env) { + const { ctx } = this; + const { id, envName, hostIp, url, remark, tags } = env; const newEnv = {}; if (!_.isNil(envName)) newEnv.envName = envName; if (!_.isNil(hostIp)) newEnv.hostIp = hostIp; @@ -51,21 +51,24 @@ class EnvManagementService extends Service { if (!_.isNil(remark)) newEnv.remark = remark; if (!_.isNil(tags)) newEnv.tags = tags; - return ctx.model.EnvManagement.update(newEnv,{ - where:{ - id - } - }) + return ctx.model.EnvManagement.update(newEnv, { + where: { + id, + }, + }); } - deleteEnv(id){ - const {ctx} = this; - return ctx.model.EnvManagement.update({ - status:0 - },{ - where:{ - id + deleteEnv(id) { + const { ctx } = this; + return ctx.model.EnvManagement.update( + { + status: 0, + }, + { + where: { + id, + }, } - }); + ); } } module.exports = EnvManagementService; diff --git a/app/service/hostManagement.js b/app/service/hostManagement.js index 79dd3b8..4737a3d 100644 --- a/app/service/hostManagement.js +++ b/app/service/hostManagement.js @@ -5,69 +5,71 @@ class HostManagementService extends Service { async queryHosts(params) { const { ctx } = this; const { tags = '', search = '' } = params; - let hostReulst = await ctx.model.HostManagement.findAll({ + const hostReulst = await ctx.model.HostManagement.findAll({ attributes: ['id', 'hostIp', 'hostName', 'remark', 'username', 'password', 'tags'], where: { status: 1, $or: [ - { - hostIp: { '$like': `%${search}%` } + { + hostIp: { $like: `%${search}%` }, }, { - hostName: { '$like': `%${search}%` } - } - ] - - } + hostName: { $like: `%${search}%` }, + }, + ], + }, }); - let tagsResult = await ctx.model.TagManagement.findAll(); - let result = []; - hostReulst.forEach(item => { - let tagids = item.get('tags').split(','); - let tagArrs = tagsResult.filter(ele => { - return tagids.includes(`${ele.get('id')}`) + const tagsResult = await ctx.model.TagManagement.findAll(); + const result = []; + hostReulst.forEach((item) => { + const tagids = item.get('tags').split(','); + const tagArrs = tagsResult.filter((ele) => { + return tagids.includes(`${ele.get('id')}`); }); item.set('tags', tagArrs); if (tags) { - if (tags.split(',').some(ele => tagids.includes(`${ele}`))) { - result.push(item) + if (tags.split(',').some((ele) => tagids.includes(`${ele}`))) { + result.push(item); } } else { - result.push(item) + result.push(item); } }); - return result + return result; } - addHost(host){ - const {ctx} = this; + addHost(host) { + const { ctx } = this; return ctx.model.HostManagement.create(host); } - editHost(host){ - const {ctx} = this; - const {id,hostIp,hostName,remark,username,password,tags} = host; + editHost(host) { + const { ctx } = this; + const { id, hostIp, hostName, remark, username, password, tags } = host; const newHost = {}; - if (!_.isNil(hostIp)) newHost.hostIp=hostIp; - if (!_.isNil(hostName)) newHost.hostName=hostName; - if (!_.isNil(remark)) newHost.remark=remark; - if (!_.isNil(username)) newHost.username=username; - if (!_.isNil(password)) newHost.password=password; - if (!_.isNil(tags)) newHost.tags=tags; + if (!_.isNil(hostIp)) newHost.hostIp = hostIp; + if (!_.isNil(hostName)) newHost.hostName = hostName; + if (!_.isNil(remark)) newHost.remark = remark; + if (!_.isNil(username)) newHost.username = username; + if (!_.isNil(password)) newHost.password = password; + if (!_.isNil(tags)) newHost.tags = tags; - return ctx.model.HostManagement.update(newHost,{ - where:{ - id - } - }) + return ctx.model.HostManagement.update(newHost, { + where: { + id, + }, + }); } - deleteHost(id){ - const {ctx} = this; - return ctx.model.HostManagement.update({ - status:0 - },{ - where:{ - id + deleteHost(id) { + const { ctx } = this; + return ctx.model.HostManagement.update( + { + status: 0, + }, + { + where: { + id, + }, } - }); + ); } } -module.exports = HostManagementService; \ No newline at end of file +module.exports = HostManagementService; diff --git a/app/service/proxyServer.js b/app/service/proxyServer.js index fbe0e2d..0372e2f 100644 --- a/app/service/proxyServer.js +++ b/app/service/proxyServer.js @@ -1,42 +1,52 @@ const Service = require('egg').Service; class ProxyServerService extends Service { - //创建 + // 创建 async create(proxyServer) { - const {host,protocol} = this.ctx; - proxyServer.proxy_server_address=`${protocol}://${host}/proxy`; + const { host, protocol } = this.ctx; + proxyServer.proxy_server_address = `${protocol}://${host}/proxy`; proxyServer.status = 1; const insertResult = await this.ctx.model.ProxyServer.create(proxyServer); - const {id,proxy_server_address} = insertResult; - const updateResult = await this.ctx.model.ProxyServer.update({ - proxy_server_address:`${proxy_server_address}/${id}` - },{ - where:{ - id + const { id, proxy_server_address } = insertResult; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const updateResult = await this.ctx.model.ProxyServer.update( + { + proxy_server_address: `${proxy_server_address}/${id}`, + }, + { + where: { + id, + }, } - }); + ); return { id }; } - //关闭 - async close(id){ - return await this.ctx.model.ProxyServer.update({ - status:0 - },{ - where:{ - id + // 关闭 + async close(id) { + return await this.ctx.model.ProxyServer.update( + { + status: 0, + }, + { + where: { + id, + }, } - }); + ); } - //重启 - async restart(id){ - return await this.ctx.model.ProxyServer.update({ - status:1 - },{ - where:{ - id + // 重启 + async restart(id) { + return await this.ctx.model.ProxyServer.update( + { + status: 1, + }, + { + where: { + id, + }, } - }); + ); } } -module.exports = ProxyServerService; \ No newline at end of file +module.exports = ProxyServerService; diff --git a/app/service/proxyServerAddrs.js b/app/service/proxyServerAddrs.js index 7587947..d699c82 100644 --- a/app/service/proxyServerAddrs.js +++ b/app/service/proxyServerAddrs.js @@ -1,13 +1,13 @@ const Service = require('egg').Service; -const _ = require('lodash'); class ProxyServerAddrsService extends Service { // 创建 async create(addrs, proxy_server_id) { - Array.isArray(addrs) && addrs.forEach(async (addr) => { - addr.proxy_server_id = proxy_server_id; - await this.ctx.model.ProxyServerAddrs.create(addr); - }) + Array.isArray(addrs) && + addrs.forEach(async (addr) => { + addr.proxy_server_id = proxy_server_id; + await this.ctx.model.ProxyServerAddrs.create(addr); + }); return true; } @@ -16,28 +16,29 @@ class ProxyServerAddrsService extends Service { return this.ctx.model.ProxyServerAddrs.findAll({ where: { proxy_server_id, - is_delete: 0 + is_delete: 0, }, - order: [['updated_at', 'DESC']] - }) + order: [['updated_at', 'DESC']], + }); } // 更新 | 新增 // 删除,同更新,让前端传个is_delete = 1 async update(addrs, proxy_server_id) { - Array.isArray(addrs) && addrs.forEach(async (addr) => { - addr.proxy_server_id = proxy_server_id; - if (addr.id) { - await this.ctx.model.ProxyServerAddrs.update(addr, { - where: { - id: addr.id - } - }) - } else { - await this.ctx.model.ProxyServerAddrs.create(addr); - } - }) + Array.isArray(addrs) && + addrs.forEach(async (addr) => { + addr.proxy_server_id = proxy_server_id; + if (addr.id) { + await this.ctx.model.ProxyServerAddrs.update(addr, { + where: { + id: addr.id, + }, + }); + } else { + await this.ctx.model.ProxyServerAddrs.create(addr); + } + }); } } -module.exports = ProxyServerAddrsService; \ No newline at end of file +module.exports = ProxyServerAddrsService; diff --git a/app/service/switchHosts.js b/app/service/switchHosts.js index 1595370..d4d29a6 100644 --- a/app/service/switchHosts.js +++ b/app/service/switchHosts.js @@ -7,15 +7,15 @@ class SwitchHostsService extends Service { const { size, current, searchText } = reqParams; return this.ctx.model.SwitchHosts.findAndCountAll({ where: { - groupName:{ - '$like':`%${searchText}%` + groupName: { + $like: `%${searchText}%`, }, - is_delete: 0 + is_delete: 0, }, limit: size, order: [['updated_at', 'DESC']], - offset: size * (current - 1) - }) + offset: size * (current - 1), + }); } // 创建 @@ -28,8 +28,8 @@ class SwitchHostsService extends Service { groupId: '', groupAddr: '', created_at: new Date(), - updated_at: new Date() - } + updated_at: new Date(), + }; return this.ctx.model.SwitchHosts.create(hostsParams); } @@ -37,15 +37,15 @@ class SwitchHostsService extends Service { updateHosts(id, updateParams) { const { ctx } = this; return ctx.model.SwitchHosts.update(updateParams, { - where: { id } - }) + where: { id }, + }); } // 获取hosts详细信息 getHostsInfo(id) { const { ctx } = this; return ctx.model.SwitchHosts.findOne({ - where: { id } + where: { id }, }); } @@ -53,11 +53,11 @@ class SwitchHostsService extends Service { async getGroupAddr(id) { const data = await this.ctx.model.SwitchHosts.findOne({ attributes: ['groupAddr'], - where: { id } + where: { id }, }); if (_.isNil(data)) throw new Error('获取不到该分组下存储的hosts文件'); return data.groupAddr; } } -module.exports = SwitchHostsService; \ No newline at end of file +module.exports = SwitchHostsService; diff --git a/app/service/tagManagement.js b/app/service/tagManagement.js index 56f0752..5a36428 100644 --- a/app/service/tagManagement.js +++ b/app/service/tagManagement.js @@ -7,54 +7,57 @@ class TagManagementService extends Service { const { size, current, searchText } = reqParams; return this.ctx.model.TagManagement.findAndCountAll({ where: { - tagName:{ - '$like':`%${searchText}%` + tagName: { + $like: `%${searchText}%`, }, - is_delete: 0 + is_delete: 0, }, limit: size, order: [['updated_at', 'DESC']], - offset: size * (current - 1) - }) + offset: size * (current - 1), + }); } // 获取列表数据 getAllTagsList(reqParams) { - const { searchText='' } = reqParams; + const { searchText = '' } = reqParams; return this.ctx.model.TagManagement.findAndCountAll({ where: { - tagName:{ - '$like':`%${searchText}%` + tagName: { + $like: `%${searchText}%`, }, - is_delete: 0 - } - }) + is_delete: 0, + }, + }); } - addTag(params){ - const {ctx} = this; + addTag(params) { + const { ctx } = this; return ctx.model.TagManagement.create(params); } - editTag(params){ - const {ctx} = this; - const {id,tagName,tagDesc,tagColor} = params; + editTag(params) { + const { ctx } = this; + const { id, tagName, tagDesc, tagColor } = params; const newParams = {}; - if (!_.isNil(tagName)) newParams.tagName=tagName; - if (!_.isNil(tagDesc)) newParams.tagDesc=tagDesc; - if (!_.isNil(tagColor)) newParams.tagColor=tagColor; - return ctx.model.TagManagement.update(newParams,{ - where:{ - id - } - }) + if (!_.isNil(tagName)) newParams.tagName = tagName; + if (!_.isNil(tagDesc)) newParams.tagDesc = tagDesc; + if (!_.isNil(tagColor)) newParams.tagColor = tagColor; + return ctx.model.TagManagement.update(newParams, { + where: { + id, + }, + }); } - deleteTag(id){ - const {ctx} = this; - return ctx.model.TagManagement.update({ - is_delete:1 - },{ - where:{ - id + deleteTag(id) { + const { ctx } = this; + return ctx.model.TagManagement.update( + { + is_delete: 1, + }, + { + where: { + id, + }, } - }); + ); } } -module.exports = TagManagementService; \ No newline at end of file +module.exports = TagManagementService; diff --git a/app/utils/articleSubscription.js b/app/utils/articleSubscription.js index 75e0cef..07d1a12 100644 --- a/app/utils/articleSubscription.js +++ b/app/utils/articleSubscription.js @@ -2,168 +2,268 @@ * 文章订阅 * 功能说明文档:https://dtstack.yuque.com/rd-center/sm6war/tyz0bp */ -const cheerio = require('cheerio') -const axios = require('axios') -const config = require('../../env.json') -const { sendArticleMsg, sendMsgAfterSendArticle } = require('./index') -const articleResultWebhook = config.articleResultWebhook // 文章订阅结果通知机器人 -const timeout = 30_000 +const cheerio = require('cheerio'); +const axios = require('axios'); +const config = require('../../env.json'); +const { sendArticleMsg, sendMsgAfterSendArticle } = require('./index'); +const articleResultWebhook = config.articleResultWebhook; // 文章订阅结果通知机器人 +const timeout = 30_000; // github trending from github -const getGithubTrendingFromGithub = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { +const getGithubTrendingFromGithub = async ( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + app +) => { try { - const pageSize = app.config.articleSubscription.pageSize - const { data } = await axios.get(`https://github.com/trending/${ topicUrl }?since=daily`, { timeout }) - let msg = `## Github Trending ${ topicName } 今日 Top5\n\n` + const pageSize = app.config.articleSubscription.pageSize; + const { data } = await axios.get(`https://github.com/trending/${topicUrl}?since=daily`, { + timeout, + }); + let msg = `## Github Trending ${topicName} 今日 Top5\n\n`; - const $ = cheerio.load(data) - const items = $('article') + const $ = cheerio.load(data); + const items = $('article'); for (let i = 0; i < pageSize; i++) { - const result = items.eq(i).find('h1.lh-condensed').text().replace(/\n/g, '').replace(/\s*/g, '') - msg += `${ i + 1 }、[${ result }](https://github.com/${ result })\n\n` + const result = items + .eq(i) + .find('h1.lh-condensed') + .text() + .replace(/\n/g, '') + .replace(/\s*/g, ''); + msg += `${i + 1}、[${result}](https://github.com/${result})\n\n`; } - msg += `[点击查看更多内容](https://github.com/trending/${ topicUrl }?since=daily)` - sendArticleMsg('Github Trending 今日 Top5', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + msg += `[点击查看更多内容](https://github.com/trending/${topicUrl}?since=daily)`; + sendArticleMsg('Github Trending 今日 Top5', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `Github 网络不佳 ${ JSON.stringify(err) }`) + logFunc( + app, + id, + groupName, + siteName, + topicName, + `失败`, + `Github 网络不佳 ${JSON.stringify(err)}` + ); } -} +}; // github trending from 掘金 chrome 插件 -const getGithubTrendingFromJueJin = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { +const getGithubTrendingFromJueJin = async ( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + app +) => { try { - const pageSize = app.config.articleSubscription.pageSize + const pageSize = app.config.articleSubscription.pageSize; const params = { category: 'trending', period: 'day', lang: topicUrl, offset: 0, - limit: pageSize - } - const res = await axios.post(`https://e.juejin.cn/resources/github`, params) - const { data } = res.data - let msg = `## Github Trending ${ topicName } 今日 Top5\n\n` + limit: pageSize, + }; + const res = await axios.post(`https://e.juejin.cn/resources/github`, params); + const { data } = res.data; + let msg = `## Github Trending ${topicName} 今日 Top5\n\n`; for (let i = 0; i < pageSize; i++) { - msg += `${ i + 1 }、[${ data[i].username } / ${ data[i].reponame }](${ data[i].url })\n\n` + msg += `${i + 1}、[${data[i].username} / ${data[i].reponame}](${data[i].url})\n\n`; } - msg += `[点击查看更多内容](https://github.com/trending/${ topicUrl }?since=daily)` - sendArticleMsg('Github Trending 今日 Top5', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + msg += `[点击查看更多内容](https://github.com/trending/${topicUrl}?since=daily)`; + sendArticleMsg('Github Trending 今日 Top5', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `Github 网络不佳 ${ JSON.stringify(err) }`) + logFunc( + app, + id, + groupName, + siteName, + topicName, + `失败`, + `Github 网络不佳 ${JSON.stringify(err)}` + ); } -} +}; // github trending from Serverless,目前使用的是该方法 -const getGithubTrendingFromServerless = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { +const getGithubTrendingFromServerless = async ( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + app +) => { try { - const pageSize = app.config.articleSubscription.pageSize - const res = await axios.get(`http://github-trending-api.liuxianyu.cn/repository/list?language=${ topicUrl }&pageSize=${ pageSize }`, { timeout }) - const { data } = res.data - let msg = `## Github Trending ${ topicName } 今日 Top5\n\n` + const pageSize = app.config.articleSubscription.pageSize; + const res = await axios.get( + `http://github-trending-api.liuxianyu.cn/repository/list?language=${topicUrl}&pageSize=${pageSize}`, + { timeout } + ); + const { data } = res.data; + let msg = `## Github Trending ${topicName} 今日 Top5\n\n`; for (let i = 0; i < pageSize; i++) { - msg += `${ i + 1 }、[${ data.list[i].username } / ${ data.list[i].repositoryName }](${ data.list[i].url })\n\n` + msg += `${i + 1}、[${data.list[i].username} / ${data.list[i].repositoryName}](${ + data.list[i].url + })\n\n`; } - msg += `[点击查看更多](https://github.com/trending/${ topicUrl }?since=daily)` - sendArticleMsg('Github Trending 今日 Top5', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + msg += `[点击查看更多](https://github.com/trending/${topicUrl}?since=daily)`; + sendArticleMsg('Github Trending 今日 Top5', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `Github 网络不佳 ${ JSON.stringify(err) }`) + logFunc( + app, + id, + groupName, + siteName, + topicName, + `失败`, + `Github 网络不佳 ${JSON.stringify(err)}` + ); } -} +}; // 掘金热门 https://juejin.cn/frontend const getJueJinHot = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { try { - const pageSize = app.config.articleSubscription.pageSize + const pageSize = app.config.articleSubscription.pageSize; const params = { id_type: 2, sort_type: 200, cate_id: topicUrl, - cursor: "0", - limit: pageSize - } - const res = await axios.post('https://api.juejin.cn/recommend_api/v1/article/recommend_cate_feed', params) - const { data } = res.data - let msg = `## 掘金热门 ${ topicName } Top5\n\n` + cursor: '0', + limit: pageSize, + }; + const res = await axios.post( + 'https://api.juejin.cn/recommend_api/v1/article/recommend_cate_feed', + params + ); + const { data } = res.data; + let msg = `## 掘金热门 ${topicName} Top5\n\n`; for (let i = 0; i < pageSize; i++) { - msg += `${ i + 1 }、[${ data[i].article_info.title }](https://juejin.cn/post/${ data[i].article_id })\n\n` + msg += `${i + 1}、[${data[i].article_info.title}](https://juejin.cn/post/${ + data[i].article_id + })\n\n`; } - sendArticleMsg('掘金热门 Top5', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + sendArticleMsg('掘金热门 Top5', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `${ JSON.stringify(err) }`) + logFunc(app, id, groupName, siteName, topicName, `失败`, `${JSON.stringify(err)}`); } -} +}; // https://dev.to/t/architecture/top/week -const getDevArchitectureHot = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { +const getDevArchitectureHot = async ( + id, + groupName, + siteName, + topicName, + topicUrl, + webHook, + app +) => { try { - const pageSize = app.config.articleSubscription.pageSize - const res = await axios.get(`https://dev.to/search/feed_content?per_page=5&page=0&tag=architecture&sort_by=public_reactions_count&sort_direction=desc&tag_names%5B%5D=architecture&approved=&class_name=Article&published_at%5Bgte%5D=2024-11-10T02%3A43%3A45Z`, { timeout }) - let msg = `## DEV Architecture 每周 Top5\n\n` + const pageSize = app.config.articleSubscription.pageSize; + const res = await axios.get( + `https://dev.to/search/feed_content?per_page=5&page=0&tag=architecture&sort_by=public_reactions_count&sort_direction=desc&tag_names%5B%5D=architecture&approved=&class_name=Article&published_at%5Bgte%5D=2024-11-10T02%3A43%3A45Z`, + { timeout } + ); + let msg = `## DEV Architecture 每周 Top5\n\n`; - const data = res?.data?.result || [] + const data = res?.data?.result || []; for (let i = 0; i < pageSize; i++) { - msg += `${ i + 1 }、[${ data[i].title }](https://dev.to${ data[i].path })\n\n` + msg += `${i + 1}、[${data[i].title}](https://dev.to${data[i].path})\n\n`; } - msg += `[点击查看更多内容](https://dev.to/t/architecture/top/week)` - sendArticleMsg('DEV Architecture 每周 Top5', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + msg += `[点击查看更多内容](https://dev.to/t/architecture/top/week)`; + sendArticleMsg('DEV Architecture 每周 Top5', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `${ JSON.stringify(err) }`) + logFunc(app, id, groupName, siteName, topicName, `失败`, `${JSON.stringify(err)}`); } -} +}; // https://react.statuscode.com/latest const getReactStatusHot = async (id, groupName, siteName, topicName, topicUrl, webHook, app) => { try { - const pageSize = app.config.articleSubscription.pageSize - const { data } = await axios.get(`https://react.statuscode.com/latest`, { timeout }) - let msg = `## React Status\n\n` + const pageSize = app.config.articleSubscription.pageSize; + const { data } = await axios.get(`https://react.statuscode.com/latest`, { timeout }); + let msg = `## React Status\n\n`; - const $ = cheerio.load(data) - const items = $('table.el-item').find('span.mainlink') + const $ = cheerio.load(data); + const items = $('table.el-item').find('span.mainlink'); for (let i = 0; i < pageSize; i++) { - const name = items.eq(i).text() - const url = items.eq(i).find('a').attr('href') - msg += `${ i + 1 }、[${ name }](${ url })\n\n` + const name = items.eq(i).text(); + const url = items.eq(i).find('a').attr('href'); + msg += `${i + 1}、[${name}](${url})\n\n`; } - msg += `[点击查看更多内容](https://react.statuscode.com/latest)` - sendArticleMsg('React Status', msg, webHook) - logFunc(app, id, groupName, siteName, topicName, '成功') + msg += `[点击查看更多内容](https://react.statuscode.com/latest)`; + sendArticleMsg('React Status', msg, webHook); + logFunc(app, id, groupName, siteName, topicName, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, topicName, `失败`, `Github 网络不佳 ${ JSON.stringify(err) }`) + logFunc( + app, + id, + groupName, + siteName, + topicName, + `失败`, + `Github 网络不佳 ${JSON.stringify(err)}` + ); } -} +}; // 自定义消息 -const customMessage = async (id, groupName, siteName, messageTitle, message, isAtAll, webHook, app) => { +const customMessage = async ( + id, + groupName, + siteName, + messageTitle, + message, + isAtAll, + webHook, + app +) => { try { - sendArticleMsg(messageTitle, message?.replace(/\\n/g, '\n')?.replace(/\\r/g, '\r'), webHook, { isAtAll }) - logFunc(app, id, groupName, siteName, messageTitle, '成功') + sendArticleMsg( + messageTitle, + message?.replace(/\\n/g, '\n')?.replace(/\\r/g, '\r'), + webHook, + { isAtAll } + ); + logFunc(app, id, groupName, siteName, messageTitle, '成功'); } catch (err) { - logFunc(app, id, groupName, siteName, messageTitle, `失败`, `${ JSON.stringify(err) }`) + logFunc(app, id, groupName, siteName, messageTitle, `失败`, `${JSON.stringify(err)}`); } -} +}; // 打印文章订阅任务结果 const logFunc = (app, id, groupName, siteName, topicName, msg, errMsg = '') => { - if (!articleResultWebhook) return - const result = `文章订阅任务, id: ${ id } 执行${ msg }, 钉钉群名称: ${ groupName }, 订阅项: ${ siteName }-${ topicName } ${ errMsg ? ', ' + errMsg : '' }` + if (!articleResultWebhook) return; + const result = `文章订阅任务, id: ${id} 执行${msg}, 钉钉群名称: ${groupName}, 订阅项: ${siteName}-${topicName} ${ + errMsg ? ', ' + errMsg : '' + }`; // 向 agent 进程发消息 - app.messenger.sendToAgent('timedTaskResult', { result }) + app.messenger.sendToAgent('timedTaskResult', { result }); // 文章订阅发送后,发出是否成功的通知 - const text = `文章订阅结果:${ msg } - \n\n钉钉群名称:${ groupName } - \n\n订阅项:${ siteName }-${ topicName } - ${ msg === '失败' ? '\n\n请前往服务器查看对应日志!' : '' }` - sendMsgAfterSendArticle(`发送${ msg }`, text, articleResultWebhook) -} + const text = `文章订阅结果:${msg} + \n\n钉钉群名称:${groupName} + \n\n订阅项:${siteName}-${topicName} + ${msg === '失败' ? '\n\n请前往服务器查看对应日志!' : ''}`; + sendMsgAfterSendArticle(`发送${msg}`, text, articleResultWebhook); +}; module.exports = { getGithubTrendingFromGithub, @@ -172,5 +272,5 @@ module.exports = { getJueJinHot, getDevArchitectureHot, getReactStatusHot, - customMessage -} + customMessage, +}; diff --git a/app/utils/createServer.js b/app/utils/createServer.js index 5fc0587..81ebe71 100644 --- a/app/utils/createServer.js +++ b/app/utils/createServer.js @@ -1,47 +1,47 @@ -const SSHClient = require('ssh2').Client -const utf8 = require('utf8') - +const SSHClient = require('ssh2').Client; +const utf8 = require('utf8'); const createNewServer = (machineConfig, ctx) => { const ssh = new SSHClient(); - const { host, username, password } = machineConfig - const { socket } = ctx + const { host, username, password } = machineConfig; + const { socket } = ctx; // 连接成功 ssh.on('ready', () => { - - socket.emit('serverMsg', '\r\n*** SSH CONNECTION SUCCESS ***\r\n') + socket.emit('serverMsg', '\r\n*** SSH CONNECTION SUCCESS ***\r\n'); ssh.shell((err, stream) => { - if (err) { return socket.send('\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n'); } socket.on('shellCommand', (command) => { - stream.write(command) - }) - - stream.on('data', (msg) => { - socket.emit('serverMsg', utf8.decode(msg.toString('binary'))) - - }).on('close', () => { - ssh.end(); + stream.write(command); }); - }) - }).on('close', () => { - socket.emit('serverMsg', '\r\n*** SSH CONNECTION CLOSED ***\r\n') - }).on('error', (err) => { - socket.emit('serverMsg', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n') - }).connect({ - port: 22, - host, - username, - password + stream + .on('data', (msg) => { + socket.emit('serverMsg', utf8.decode(msg.toString('binary'))); + }) + .on('close', () => { + ssh.end(); + }); + }); }) -} + .on('close', () => { + socket.emit('serverMsg', '\r\n*** SSH CONNECTION CLOSED ***\r\n'); + }) + .on('error', (err) => { + socket.emit('serverMsg', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n'); + }) + .connect({ + port: 22, + host, + username, + password, + }); +}; module.exports = { - createNewServer -} + createNewServer, +}; diff --git a/app/utils/index.js b/app/utils/index.js index 568f05a..584da8d 100644 --- a/app/utils/index.js +++ b/app/utils/index.js @@ -3,74 +3,85 @@ const fs = require('fs'); const ROOT_PATH = path.join(__dirname, '../../'); const ChatBot = require('dingtalk-robot-sender'); -const createFolder = (paths) => { +const createFolder = (paths) => { let dirPath = ROOT_PATH; try { - paths.forEach(dir => { + paths.forEach((dir) => { dirPath = path.join(dirPath, dir.toString()); if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath); } - }) + }); return dirPath; } catch { - throw new Error('创建文件夹出错') + throw new Error('创建文件夹出错'); } -} -const createFileSync = (paths,fileName,data) => { +}; +const createFileSync = (paths, fileName, data) => { try { const dir = createFolder(paths); - const filePath = path.join(dir,fileName) - fs.writeFileSync(filePath,data); + const filePath = path.join(dir, fileName); + fs.writeFileSync(filePath, data); return filePath; } catch { - throw new Error('创建文件出错') + throw new Error('创建文件出错'); } -} +}; const sendMsg = async (webhook_url, basicInfo, operation, address) => { - const { filename, hostIp, hostName } = basicInfo + const { filename, hostIp, hostName } = basicInfo; const feChatRobot = new ChatBot({ - webhook: webhook_url + webhook: webhook_url, }); - const mdTxt = "Doraemon - 配置中心变更通知:\n\n\n" + - "文件名:" + filename + "\n\n\n" + - "主机:" + hostIp + "(" + hostName + ")\n\n" + - "详情地址:" + address + "\n\n\n" + - "该配置文件" + operation - feChatRobot - .markdown('配置中心变更通知', mdTxt) - .catch(ex => console.error(ex)); -} + const mdTxt = + 'Doraemon - 配置中心变更通知:\n\n\n' + + '文件名:' + + filename + + '\n\n\n' + + '主机:' + + hostIp + + '(' + + hostName + + ')\n\n' + + '详情地址:' + + address + + '\n\n\n' + + '该配置文件' + + operation; + feChatRobot.markdown('配置中心变更通知', mdTxt).catch((ex) => console.error(ex)); +}; const sendHostsUpdateMsg = async (webhook_url, basicInfo, ip, address, operation) => { - const { groupName, groupApi } = basicInfo + const { groupName, groupApi } = basicInfo; const feChatRobot = new ChatBot({ - webhook: webhook_url + webhook: webhook_url, }); - const mdTxt = "Doraemon - Hosts管理变更通知:\n\n\n" + - "分组名称:" + groupName + "\n\n\n" + - "API:" + ip + groupApi + "\n\n\n" + - "详情地址:" + address + "\n\n\n" + - "该Hosts文件" + operation - feChatRobot - .markdown('Hosts管理变更通知', mdTxt) - .catch(ex => console.error(ex)); -} + const mdTxt = + 'Doraemon - Hosts管理变更通知:\n\n\n' + + '分组名称:' + + groupName + + '\n\n\n' + + 'API:' + + ip + + groupApi + + '\n\n\n' + + '详情地址:' + + address + + '\n\n\n' + + '该Hosts文件' + + operation; + feChatRobot.markdown('Hosts管理变更通知', mdTxt).catch((ex) => console.error(ex)); +}; // 发送文章订阅消息 const sendArticleMsg = async (title, text, webhook, at = {}) => { - const feChatRobot = new ChatBot({ webhook }) - feChatRobot - .markdown(title, text, at) - .catch(ex => console.error(ex)) -} + const feChatRobot = new ChatBot({ webhook }); + feChatRobot.markdown(title, text, at).catch((ex) => console.error(ex)); +}; // 文章订阅发送后,发出是否成功的通知 const sendMsgAfterSendArticle = async (title, text, webhook) => { - const feChatRobot = new ChatBot({ webhook }) - feChatRobot - .markdown(title, text) - .catch(ex => console.error(ex)) -} + const feChatRobot = new ChatBot({ webhook }); + feChatRobot.markdown(title, text).catch((ex) => console.error(ex)); +}; module.exports = { createFolder, @@ -79,14 +90,14 @@ module.exports = { sendHostsUpdateMsg, sendArticleMsg, sendMsgAfterSendArticle, - response: (success, data = null, message)=>{ - if(success) { - message='执行成功'; + response: (success, data = null, message) => { + if (success) { + message = '执行成功'; } return { success, data, - message - } - } -} + message, + }; + }, +}; diff --git a/app/utils/timedTask.js b/app/utils/timedTask.js index f06db32..fe25c7c 100644 --- a/app/utils/timedTask.js +++ b/app/utils/timedTask.js @@ -1,60 +1,60 @@ /** * 文章订阅任务 */ -const schedule = require('node-schedule') +const schedule = require('node-schedule'); // 判断文章订阅任务是否存在 const timedTaskIsExist = (name, agent) => { - const timedTask = schedule.scheduledJobs[`${ name }`] - log(agent, `文章订阅任务, id:${ name } ${ timedTask === undefined ? '不存在' : '存在' }`) - return timedTask !== undefined -} + const timedTask = schedule.scheduledJobs[`${name}`]; + log(agent, `文章订阅任务, id:${name} ${timedTask === undefined ? '不存在' : '存在'}`); + return timedTask !== undefined; +}; // 开始文章订阅任务 const createTimedTask = (name, cron, agent) => { - if (timedTaskIsExist(name, agent)) return - log(agent, `创建文章订阅任务, id: ${ name }, Cron: ${ cron }`) - schedule.scheduleJob(`${ name }`, cron, () => { + if (timedTaskIsExist(name, agent)) return; + log(agent, `创建文章订阅任务, id: ${name}, Cron: ${cron}`); + schedule.scheduleJob(`${name}`, cron, () => { // agent 进程随机给一个 app 进程发消息(由 master 来控制发送给谁) - agent.messenger.sendRandom('sendArticleSubscription', name) - }) -} + agent.messenger.sendRandom('sendArticleSubscription', name); + }); +}; // 改变文章订阅任务的时间规则 const changeTimedTask = (name, cron, agent) => { - if (!timedTaskIsExist(name, agent)) return createTimedTask(name, cron, agent) - schedule.rescheduleJob(schedule.scheduledJobs[`${ name }`], cron) - log(agent, `编辑文章订阅任务, id: ${ name }, Cron: ${ cron }`) -} + if (!timedTaskIsExist(name, agent)) return createTimedTask(name, cron, agent); + schedule.rescheduleJob(schedule.scheduledJobs[`${name}`], cron); + log(agent, `编辑文章订阅任务, id: ${name}, Cron: ${cron}`); +}; // 取消指定文章订阅任务 const cancelTimedTask = (name, agent) => { - if (!timedTaskIsExist(name, agent)) return - log(agent, `取消文章订阅任务, id: ${ name }`) - schedule.scheduledJobs[`${ name }`].cancel() -} + if (!timedTaskIsExist(name, agent)) return; + log(agent, `取消文章订阅任务, id: ${name}`); + schedule.scheduledJobs[`${name}`].cancel(); +}; // 文章订阅任务列表 const timedTaskList = (agent) => { - const result = Object.keys(schedule.scheduledJobs) - log(agent, `文章订阅任务 id 列表: [${ result.join(',') }]`) - return result -} + const result = Object.keys(schedule.scheduledJobs); + log(agent, `文章订阅任务 id 列表: [${result.join(',')}]`); + return result; +}; // 打印文章订阅任务的执行结果 const timedTaskResult = (result, agent) => { - log(agent, result) -} + log(agent, result); +}; // 打印文章订阅任务信息 const log = (agent, msg) => { - agent.logger.info(`${ msg }`) -} + agent.logger.info(`${msg}`); +}; module.exports = { createTimedTask, changeTimedTask, cancelTimedTask, timedTaskList, - timedTaskResult -} + timedTaskResult, +}; diff --git a/app/view/app.js b/app/view/app.js index 8bc6972..e145135 100644 --- a/app/view/app.js +++ b/app/view/app.js @@ -1 +1 @@ -!function(n,t){for(var e in t)n[e]=t[e]}(exports,function(n){var t={};function e(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return n[a].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=t,e.d=function(n,t,a){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:a})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var a=Object.create(null);if(e.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)e.d(a,o,function(t){return n[t]}.bind(null,o));return a},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="/public/",e(e.s=67)}([function(n,t){n.exports=require("react")},function(n,t){n.exports=require("antd")},function(n,t){n.exports=function(n){var t=[];return t.toString=function(){return this.map((function(t){var e=function(n,t){var e=n[1]||"",a=n[3];if(!a)return e;if(t&&"function"==typeof btoa){var o=(i=a,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */"),r=a.sources.map((function(n){return"/*# sourceURL="+a.sourceRoot+n+" */"}));return[e].concat(r).concat([o]).join("\n")}var i;return[e].join("\n")}(t,n);return t[2]?"@media "+t[2]+"{"+e+"}":e})).join("")},t.i=function(n,e){"string"==typeof n&&(n=[[null,n,""]]);for(var a={},o=0;o1&&void 0!==arguments[1]?arguments[1]:{},e=t.replace,r=void 0!==e&&e,c=t.prepend,d=void 0!==c&&c,p=[],u=0;u0&&o[o.length-1])||6!==r[0]&&2!==r[0])){i=0;continue}if(3===r[0]&&(!o||r[1]>o[0]&&r[1]0?a:e)(n)}},function(n,t,e){var a=e(46)("keys"),o=e(47);n.exports=function(n){return a[n]||(a[n]=o(n))}},function(n){n.exports=JSON.parse('{"webhookUrls":[],"msgSingleUrl":"https://dtstack.github.io/doraemon/docsify/#/","helpDocUrl":"https://dtstack.github.io/doraemon/docsify/#/","articleHelpDocUrl":"https://dtstack.github.io/doraemon/docsify/#/zh-cn/guide/%E6%96%87%E7%AB%A0%E8%AE%A2%E9%98%85","proxyHelpDocUrl":"https://dtstack.github.io/doraemon/docsify/#/zh-cn/guide/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1","mysql":{"prod":{}}}')},function(n,t){n.exports=require("js-cookie")},function(n,t){n.exports=require("prop-types")},function(n,t){n.exports=require("socket.io-parser")},function(n,t,e){"use strict";var a,o;Object.defineProperty(t,"__esModule",{value:!0}),t.SUBSCRIPTIONSENDTYPECN=t.SUBSCRIPTIONSENDTYPE=t.SUBSCRIPTIONSTATUS=void 0,function(n){n[n.OPEN=1]="OPEN",n[n.CLOSE=2]="CLOSE"}(t.SUBSCRIPTIONSTATUS||(t.SUBSCRIPTIONSTATUS={})),function(n){n[n.WORKDAY=1]="WORKDAY",n[n.EVERYDAY=2]="EVERYDAY"}(o=t.SUBSCRIPTIONSENDTYPE||(t.SUBSCRIPTIONSENDTYPE={})),t.SUBSCRIPTIONSENDTYPECN=((a={})[o.WORKDAY]="周一至周五",a[o.EVERYDAY]="每天",a)},function(n,t){n.exports=require("redux")},function(n,t,e){"use strict";var a=e(15);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(e(75)),r=a(e(76)),i=a(e(36)),l={lang:(0,o.default)({placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeWeekPlaceholder:["开始周","结束周"]},r.default),timePickerLocale:(0,o.default)({},i.default)};l.lang.ok="确 定";var s=l;t.default=s},function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]};t.default=a},function(n,t,e){"use strict";var a=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(t,"__esModule",{value:!0});var o=a(e(78)),r=a(e(117)),i=a(e(121)),l=a(e(132)),s=a(e(138)),c=a(e(153)),d=a(e(162)),p=a(e(189)),u=a(e(193)),b=a(e(199)),f=a(e(200)),m=a(e(202)),h=a(e(209)),g=a(e(217)),x=[{path:"/",component:o.default,routes:[{path:"/page/toolbox",component:s.default},{path:"/page/home",component:r.default},{path:"/page/internal-url-navigation",component:l.default},{path:"/page/proxy-server",component:i.default},{path:"/page/mail-sign",component:c.default},{path:"/page/host-management",component:d.default},{path:"/page/config-center",component:p.default},{path:"/page/config-detail/:id",component:u.default},{path:"/page/switch-hosts-list",component:b.default},{path:"/page/switch-hosts-edit/:id/:type",component:f.default},{path:"/page/article-subscription-list",component:m.default},{path:"/page/tags",component:h.default},{path:"*",component:g.default}]}];t.default=x},function(n,t){n.exports=require("classnames")},function(n,t,e){e(86);for(var a=e(11),o=e(13),r=e(12),i=e(8)("toStringTag"),l="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),s=0;s=t.length?{value:void 0,done:!0}:(n=a(t,e),this._i+=n.length,{value:n,done:!1})}))},function(n,t,e){var a=e(40),o=e(8)("toStringTag"),r="Arguments"==a(function(){return arguments}());n.exports=function(n){var t,e,i;return void 0===n?"Undefined":null===n?"Null":"string"==typeof(e=function(n,t){try{return n[t]}catch(n){}}(t=Object(n),o))?e:r?a(t):"Object"==(i=a(t))&&"function"==typeof t.callee?"Arguments":i}},function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.urlReg=void 0,t.urlReg=new RegExp(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,"i")},function(n,t,e){n.exports=e.p+"img/help-icon.3d0854a5.png"},function(n,t,e){var a=e(178),o=e(55),r=e(56),i=e(32),l=e(57),s=e(58),c=e(20)("socket.io-client:manager"),d=e(181),p=e(182),u=Object.prototype.hasOwnProperty;function b(n,t){if(!(this instanceof b))return new b(n,t);n&&"object"==typeof n&&(t=n,n=void 0),(t=t||{}).path=t.path||"/socket.io",this.nsps={},this.subs=[],this.opts=t,this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(t.randomizationFactor||.5),this.backoff=new p({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this.readyState="closed",this.uri=n,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[],this.encoder=new i.Encoder,this.decoder=new i.Decoder,this.autoConnect=!1!==t.autoConnect,this.autoConnect&&this.open()}n.exports=b,b.prototype.emitAll=function(){for(var n in this.emit.apply(this,arguments),this.nsps)u.call(this.nsps,n)&&this.nsps[n].emit.apply(this.nsps[n],arguments)},b.prototype.updateSocketIds=function(){for(var n in this.nsps)u.call(this.nsps,n)&&(this.nsps[n].id=this.engine.id)},r(b.prototype),b.prototype.reconnection=function(n){return arguments.length?(this._reconnection=!!n,this):this._reconnection},b.prototype.reconnectionAttempts=function(n){return arguments.length?(this._reconnectionAttempts=n,this):this._reconnectionAttempts},b.prototype.reconnectionDelay=function(n){return arguments.length?(this._reconnectionDelay=n,this.backoff&&this.backoff.setMin(n),this):this._reconnectionDelay},b.prototype.randomizationFactor=function(n){return arguments.length?(this._randomizationFactor=n,this.backoff&&this.backoff.setJitter(n),this):this._randomizationFactor},b.prototype.reconnectionDelayMax=function(n){return arguments.length?(this._reconnectionDelayMax=n,this.backoff&&this.backoff.setMax(n),this):this._reconnectionDelayMax},b.prototype.timeout=function(n){return arguments.length?(this._timeout=n,this):this._timeout},b.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},b.prototype.open=b.prototype.connect=function(n,t){if(c("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;c("opening %s",this.uri),this.engine=a(this.uri,this.opts);var e=this.engine,o=this;this.readyState="opening",this.skipReconnect=!1;var r=l(e,"open",(function(){o.onopen(),n&&n()})),i=l(e,"error",(function(t){if(c("connect_error"),o.cleanup(),o.readyState="closed",o.emitAll("connect_error",t),n){var e=new Error("Connection error");e.data=t,n(e)}else o.maybeReconnectOnOpen()}));if(!1!==this._timeout){var s=this._timeout;c("connect attempt will timeout after %d",s);var d=setTimeout((function(){c("connect attempt timed out after %d",s),r.destroy(),e.close(),e.emit("error","timeout"),o.emitAll("connect_timeout",s)}),s);this.subs.push({destroy:function(){clearTimeout(d)}})}return this.subs.push(r),this.subs.push(i),this},b.prototype.onopen=function(){c("open"),this.cleanup(),this.readyState="open",this.emit("open");var n=this.engine;this.subs.push(l(n,"data",s(this,"ondata"))),this.subs.push(l(n,"ping",s(this,"onping"))),this.subs.push(l(n,"pong",s(this,"onpong"))),this.subs.push(l(n,"error",s(this,"onerror"))),this.subs.push(l(n,"close",s(this,"onclose"))),this.subs.push(l(this.decoder,"decoded",s(this,"ondecoded")))},b.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},b.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},b.prototype.ondata=function(n){this.decoder.add(n)},b.prototype.ondecoded=function(n){this.emit("packet",n)},b.prototype.onerror=function(n){c("error",n),this.emitAll("error",n)},b.prototype.socket=function(n,t){var e=this.nsps[n];if(!e){e=new o(this,n,t),this.nsps[n]=e;var a=this;e.on("connecting",r),e.on("connect",(function(){e.id=a.engine.id})),this.autoConnect&&r()}function r(){~d(a.connecting,e)||a.connecting.push(e)}return e},b.prototype.destroy=function(n){var t=d(this.connecting,n);~t&&this.connecting.splice(t,1),this.connecting.length||this.close()},b.prototype.packet=function(n){c("writing packet %j",n);var t=this;n.query&&0===n.type&&(n.nsp+="?"+n.query),t.encoding?t.packetBuffer.push(n):(t.encoding=!0,this.encoder.encode(n,(function(e){for(var a=0;a0&&!this.encoding){var n=this.packetBuffer.shift();this.packet(n)}},b.prototype.cleanup=function(){c("cleanup");for(var n=this.subs.length,t=0;t=this._reconnectionAttempts)c("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var t=this.backoff.duration();c("will wait %dms before reconnect attempt",t),this.reconnecting=!0;var e=setTimeout((function(){n.skipReconnect||(c("attempting reconnect"),n.emitAll("reconnect_attempt",n.backoff.attempts),n.emitAll("reconnecting",n.backoff.attempts),n.skipReconnect||n.open((function(t){t?(c("reconnect attempt error"),n.reconnecting=!1,n.reconnect(),n.emitAll("reconnect_error",t.data)):(c("reconnect success"),n.onreconnect())})))}),t);this.subs.push({destroy:function(){clearTimeout(e)}})}},b.prototype.onreconnect=function(){var n=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",n)}},function(n,t,e){var a=e(32),o=e(56),r=e(179),i=e(57),l=e(58),s=e(20)("socket.io-client:socket"),c=e(180);n.exports=u;var d={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},p=o.prototype.emit;function u(n,t,e){this.io=n,this.nsp=t,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,e&&e.query&&(this.query=e.query),this.io.autoConnect&&this.open()}o(u.prototype),u.prototype.subEvents=function(){if(!this.subs){var n=this.io;this.subs=[i(n,"open",l(this,"onopen")),i(n,"packet",l(this,"onpacket")),i(n,"close",l(this,"onclose"))]}},u.prototype.open=u.prototype.connect=function(){return this.connected||(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting")),this},u.prototype.send=function(){var n=r(arguments);return n.unshift("message"),this.emit.apply(this,n),this},u.prototype.emit=function(n){if(d.hasOwnProperty(n))return p.apply(this,arguments),this;var t=r(arguments),e=a.EVENT;c(t)&&(e=a.BINARY_EVENT);var o={type:e,data:t,options:{}};return o.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof t[t.length-1]&&(s("emitting packet with ack id %d",this.ids),this.acks[this.ids]=t.pop(),o.id=this.ids++),this.connected?this.packet(o):this.sendBuffer.push(o),delete this.flags,this},u.prototype.packet=function(n){n.nsp=this.nsp,this.io.packet(n)},u.prototype.onopen=function(){s("transport is open - connecting"),"/"!==this.nsp&&(this.query?this.packet({type:a.CONNECT,query:this.query}):this.packet({type:a.CONNECT}))},u.prototype.onclose=function(n){s("close (%s)",n),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",n)},u.prototype.onpacket=function(n){if(n.nsp===this.nsp)switch(n.type){case a.CONNECT:this.onconnect();break;case a.EVENT:case a.BINARY_EVENT:this.onevent(n);break;case a.ACK:case a.BINARY_ACK:this.onack(n);break;case a.DISCONNECT:this.ondisconnect();break;case a.ERROR:this.emit("error",n.data)}},u.prototype.onevent=function(n){var t=n.data||[];s("emitting event %j",t),null!=n.id&&(s("attaching ack callback to event"),t.push(this.ack(n.id))),this.connected?p.apply(this,t):this.receiveBuffer.push(t)},u.prototype.ack=function(n){var t=this,e=!1;return function(){if(!e){e=!0;var o=r(arguments);s("sending ack %j",o);var i=c(o)?a.BINARY_ACK:a.ACK;t.packet({type:i,id:n,data:o})}}},u.prototype.onack=function(n){var t=this.acks[n.id];"function"==typeof t?(s("calling ack %s with %j",n.id,n.data),t.apply(this,n.data),delete this.acks[n.id]):s("bad ack %s",n.id)},u.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},u.prototype.emitBuffered=function(){var n;for(n=0;n*\/]/.test(p)?l(null,"select-op"):/[;{}:\[\]]/.test(p)?l(null,p):(n.eatWhile(/[\w\\\-]/),l("variable","variable")):l(null,"compare"):void l(null,"compare")}function c(n,t){for(var e,a=!1;null!=(e=n.next());){if(a&&"/"==e){t.tokenize=s;break}a="*"==e}return l("comment","comment")}function d(n,t){for(var e,a=0;null!=(e=n.next());){if(a>=2&&">"==e){t.tokenize=s;break}a="-"==e?a+1:0}return l("comment","comment")}return{startState:function(n){return{tokenize:s,baseIndent:n||0,stack:[]}},token:function(n,t){if(n.eatSpace())return null;e=null;var a=t.tokenize(n,t),o=t.stack[t.stack.length-1];return"hash"==e&&"rule"==o?a="atom":"variable"==a&&("rule"==o?a="number":o&&"@media{"!=o||(a="tag")),"rule"==o&&/^[\{\};]$/.test(e)&&t.stack.pop(),"{"==e?"@media"==o?t.stack[t.stack.length-1]="@media{":t.stack.push("{"):"}"==e?t.stack.pop():"@media"==e?t.stack.push("@media"):"{"==o&&"comment"!=e&&t.stack.push("rule"),a},indent:function(n,t){var e=n.stack.length;return/^\}/.test(t)&&(e-="rule"==n.stack[n.stack.length-1]?2:1),n.baseIndent+e*i},electricChars:"}"}})),n.defineMIME("text/x-nginx-conf","nginx")}(e(62))},function(n,t,e){n.exports=function(){"use strict";var n=navigator.userAgent,t=navigator.platform,e=/gecko\/\d/i.test(n),a=/MSIE \d/.test(n),o=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(n),r=/Edge\/(\d+)/.exec(n),i=a||o||r,l=i&&(a?document.documentMode||6:+(r||o)[1]),s=!r&&/WebKit\//.test(n),c=s&&/Qt\/\d+\.\d+/.test(n),d=!r&&/Chrome\//.test(n),p=/Opera\//.test(n),u=/Apple Computer/.test(navigator.vendor),b=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(n),f=/PhantomJS/.test(n),m=u&&(/Mobile\/\w+/.test(n)||navigator.maxTouchPoints>2),h=/Android/.test(n),g=m||h||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(n),x=m||/Mac/.test(t),v=/\bCrOS\b/.test(n),y=/win/i.test(t),w=p&&n.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(p=!1,s=!0);var k=x&&(c||p&&(null==w||w<12.11)),z=e||i&&l>=9;function _(n){return new RegExp("(^|\\s)"+n+"(?:$|\\s)\\s*")}var F,C=function(n,t){var e=n.className,a=_(t).exec(e);if(a){var o=e.slice(a.index+a[0].length);n.className=e.slice(0,a.index)+(o?a[1]+o:"")}};function E(n){for(var t=n.childNodes.length;t>0;--t)n.removeChild(n.firstChild);return n}function S(n,t){return E(n).appendChild(t)}function O(n,t,e,a){var o=document.createElement(n);if(e&&(o.className=e),a&&(o.style.cssText=a),"string"==typeof t)o.appendChild(document.createTextNode(t));else if(t)for(var r=0;r=t)return i+(t-r);i+=l-r,i+=e-i%e,r=l+1}}m?T=function(n){n.selectionStart=0,n.selectionEnd=n.value.length}:i&&(T=function(n){try{n.select()}catch(n){}});var j=function(){this.id=null,this.f=null,this.time=0,this.handler=I(this.onTimeout,this)};function R(n,t){for(var e=0;e=t)return a+Math.min(i,t-o);if(o+=r-a,a=r+1,(o+=e-o%e)>=t)return a}}var K=[""];function G(n){for(;K.length<=n;)K.push(V(K)+" ");return K[n]}function V(n){return n[n.length-1]}function X(n,t){for(var e=[],a=0;a"€"&&(n.toUpperCase()!=n.toLowerCase()||Q.test(n))}function nn(n,t){return t?!!(t.source.indexOf("\\w")>-1&&J(n))||t.test(n):J(n)}function tn(n){for(var t in n)if(n.hasOwnProperty(t)&&n[t])return!1;return!0}var en=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function an(n){return n.charCodeAt(0)>=768&&en.test(n)}function on(n,t,e){for(;(e<0?t>0:te?-1:1;;){if(t==e)return t;var o=(t+e)/2,r=a<0?Math.ceil(o):Math.floor(o);if(r==t)return n(r)?t:e;n(r)?e=r:t=r+a}}var ln=null;function sn(n,t,e){var a;ln=null;for(var o=0;ot)return o;r.to==t&&(r.from!=r.to&&"before"==e?a=o:ln=o),r.from==t&&(r.from!=r.to&&"before"!=e?a=o:ln=o)}return null!=a?a:ln}var cn=function(){var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,e=/[LRr]/,a=/[Lb1n]/,o=/[1n]/;function r(n,t,e){this.level=n,this.from=t,this.to=e}return function(i,l){var s="ltr"==l?"L":"R";if(0==i.length||"ltr"==l&&!n.test(i))return!1;for(var c,d=i.length,p=[],u=0;u-1&&(a[t]=o.slice(0,r).concat(o.slice(r+1)))}}}function mn(n,t){var e=bn(n,t);if(e.length)for(var a=Array.prototype.slice.call(arguments,2),o=0;o0}function vn(n){n.prototype.on=function(n,t){un(this,n,t)},n.prototype.off=function(n,t){fn(this,n,t)}}function yn(n){n.preventDefault?n.preventDefault():n.returnValue=!1}function wn(n){n.stopPropagation?n.stopPropagation():n.cancelBubble=!0}function kn(n){return null!=n.defaultPrevented?n.defaultPrevented:0==n.returnValue}function zn(n){yn(n),wn(n)}function _n(n){return n.target||n.srcElement}function Fn(n){var t=n.which;return null==t&&(1&n.button?t=1:2&n.button?t=3:4&n.button&&(t=2)),x&&n.ctrlKey&&1==t&&(t=3),t}var Cn,En,Sn=function(){if(i&&l<9)return!1;var n=O("div");return"draggable"in n||"dragDrop"in n}();function On(n){if(null==Cn){var t=O("span","​");S(n,O("span",[t,document.createTextNode("x")])),0!=n.firstChild.offsetHeight&&(Cn=t.offsetWidth<=1&&t.offsetHeight>2&&!(i&&l<8))}var e=Cn?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return e.setAttribute("cm-text",""),e}function Dn(n){if(null!=En)return En;var t=S(n,document.createTextNode("AخA")),e=F(t,0,1).getBoundingClientRect(),a=F(t,1,2).getBoundingClientRect();return E(n),!(!e||e.left==e.right)&&(En=a.right-e.right<3)}var Mn,Bn=3!="\n\nb".split(/\n/).length?function(n){for(var t=0,e=[],a=n.length;t<=a;){var o=n.indexOf("\n",t);-1==o&&(o=n.length);var r=n.slice(t,"\r"==n.charAt(o-1)?o-1:o),i=r.indexOf("\r");-1!=i?(e.push(r.slice(0,i)),t+=i+1):(e.push(r),t=o+1)}return e}:function(n){return n.split(/\r\n?|\n/)},An=window.getSelection?function(n){try{return n.selectionStart!=n.selectionEnd}catch(n){return!1}}:function(n){var t;try{t=n.ownerDocument.selection.createRange()}catch(n){}return!(!t||t.parentElement()!=n)&&0!=t.compareEndPoints("StartToEnd",t)},Ln="oncopy"in(Mn=O("div"))||(Mn.setAttribute("oncopy","return;"),"function"==typeof Mn.oncopy),Tn=null,In={},Pn={};function Nn(n,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),In[n]=t}function jn(n){if("string"==typeof n&&Pn.hasOwnProperty(n))n=Pn[n];else if(n&&"string"==typeof n.name&&Pn.hasOwnProperty(n.name)){var t=Pn[n.name];"string"==typeof t&&(t={name:t}),(n=$(t,n)).name=t.name}else{if("string"==typeof n&&/^[\w\-]+\/[\w\-]+\+xml$/.test(n))return jn("application/xml");if("string"==typeof n&&/^[\w\-]+\/[\w\-]+\+json$/.test(n))return jn("application/json")}return"string"==typeof n?{name:n}:n||{name:"null"}}function Rn(n,t){t=jn(t);var e=In[t.name];if(!e)return Rn(n,"text/plain");var a=e(n,t);if(Hn.hasOwnProperty(t.name)){var o=Hn[t.name];for(var r in o)o.hasOwnProperty(r)&&(a.hasOwnProperty(r)&&(a["_"+r]=a[r]),a[r]=o[r])}if(a.name=t.name,t.helperType&&(a.helperType=t.helperType),t.modeProps)for(var i in t.modeProps)a[i]=t.modeProps[i];return a}var Hn={};function Wn(n,t){P(t,Hn.hasOwnProperty(n)?Hn[n]:Hn[n]={})}function Un(n,t){if(!0===t)return t;if(n.copyState)return n.copyState(t);var e={};for(var a in t){var o=t[a];o instanceof Array&&(o=o.concat([])),e[a]=o}return e}function Yn(n,t){for(var e;n.innerMode&&(e=n.innerMode(t))&&e.mode!=n;)t=e.state,n=e.mode;return e||{mode:n,state:t}}function qn(n,t,e){return!n.startState||n.startState(t,e)}var Kn=function(n,t,e){this.pos=this.start=0,this.string=n,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=e};function Gn(n,t){if((t-=n.first)<0||t>=n.size)throw new Error("There is no line "+(t+n.first)+" in the document.");for(var e=n;!e.lines;)for(var a=0;;++a){var o=e.children[a],r=o.chunkSize();if(t=n.first&&te?tt(e,Gn(n,e).text.length):function(n,t){var e=n.ch;return null==e||e>t?tt(n.line,t):e<0?tt(n.line,0):n}(t,Gn(n,t.line).text.length)}function ct(n,t){for(var e=[],a=0;a=this.string.length},Kn.prototype.sol=function(){return this.pos==this.lineStart},Kn.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Kn.prototype.next=function(){if(this.post},Kn.prototype.eatSpace=function(){for(var n=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>n},Kn.prototype.skipToEnd=function(){this.pos=this.string.length},Kn.prototype.skipTo=function(n){var t=this.string.indexOf(n,this.pos);if(t>-1)return this.pos=t,!0},Kn.prototype.backUp=function(n){this.pos-=n},Kn.prototype.column=function(){return this.lastColumnPos0?null:(a&&!1!==t&&(this.pos+=a[0].length),a)}var o=function(n){return e?n.toLowerCase():n};if(o(this.string.substr(this.pos,n.length))==o(n))return!1!==t&&(this.pos+=n.length),!0},Kn.prototype.current=function(){return this.string.slice(this.start,this.pos)},Kn.prototype.hideFirstChars=function(n,t){this.lineStart+=n;try{return t()}finally{this.lineStart-=n}},Kn.prototype.lookAhead=function(n){var t=this.lineOracle;return t&&t.lookAhead(n)},Kn.prototype.baseToken=function(){var n=this.lineOracle;return n&&n.baseToken(this.pos)};var dt=function(n,t){this.state=n,this.lookAhead=t},pt=function(n,t,e,a){this.state=t,this.doc=n,this.line=e,this.maxLookAhead=a||0,this.baseTokens=null,this.baseTokenPos=1};function ut(n,t,e,a){var o=[n.state.modeGen],r={};wt(n,t.text,n.doc.mode,e,(function(n,t){return o.push(n,t)}),r,a);for(var i=e.state,l=function(a){e.baseTokens=o;var l=n.state.overlays[a],s=1,c=0;e.state=!0,wt(n,t.text,l.mode,e,(function(n,t){for(var e=s;cn&&o.splice(s,1,n,o[s+1],a),s+=2,c=Math.min(n,a)}if(t)if(l.opaque)o.splice(e,s-e,n,"overlay "+t),s=e+2;else for(;en.options.maxHighlightLength&&Un(n.doc.mode,a.state),r=ut(n,t,a);o&&(a.state=o),t.stateAfter=a.save(!o),t.styles=r.styles,r.classes?t.styleClasses=r.classes:t.styleClasses&&(t.styleClasses=null),e===n.doc.highlightFrontier&&(n.doc.modeFrontier=Math.max(n.doc.modeFrontier,++n.doc.highlightFrontier))}return t.styles}function ft(n,t,e){var a=n.doc,o=n.display;if(!a.mode.startState)return new pt(a,!0,t);var r=function(n,t,e){for(var a,o,r=n.doc,i=e?-1:t-(n.doc.mode.innerMode?1e3:100),l=t;l>i;--l){if(l<=r.first)return r.first;var s=Gn(r,l-1),c=s.stateAfter;if(c&&(!e||l+(c instanceof dt?c.lookAhead:0)<=r.modeFrontier))return l;var d=N(s.text,null,n.options.tabSize);(null==o||a>d)&&(o=l-1,a=d)}return o}(n,t,e),i=r>a.first&&Gn(a,r-1).stateAfter,l=i?pt.fromSaved(a,i,r):new pt(a,qn(a.mode),r);return a.iter(r,t,(function(e){mt(n,e.text,l);var a=l.line;e.stateAfter=a==t-1||a%5==0||a>=o.viewFrom&&at.start)return r}throw new Error("Mode "+n.name+" failed to advance stream.")}pt.prototype.lookAhead=function(n){var t=this.doc.getLine(this.line+n);return null!=t&&n>this.maxLookAhead&&(this.maxLookAhead=n),t},pt.prototype.baseToken=function(n){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=n;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-n}},pt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},pt.fromSaved=function(n,t,e){return t instanceof dt?new pt(n,Un(n.mode,t.state),e,t.lookAhead):new pt(n,Un(n.mode,t),e)},pt.prototype.save=function(n){var t=!1!==n?Un(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new dt(t,this.maxLookAhead):t};var xt=function(n,t,e){this.start=n.start,this.end=n.pos,this.string=n.current(),this.type=t||null,this.state=e};function vt(n,t,e,a){var o,r,i=n.doc,l=i.mode,s=Gn(i,(t=st(i,t)).line),c=ft(n,t.line,e),d=new Kn(s.text,n.options.tabSize,c);for(a&&(r=[]);(a||d.posn.options.maxHighlightLength?(l=!1,i&&mt(n,t,a,p.pos),p.pos=t.length,s=null):s=yt(gt(e,p,a.state,u),r),u){var b=u[0].name;b&&(s="m-"+(s?b+" "+s:b))}if(!l||d!=s){for(;c=t:r.to>t);(a||(a=[])).push(new _t(i,r.from,l?null:r.to))}}return a}(e,o,i),s=function(n,t,e){var a;if(n)for(var o=0;o=t:r.to>t)||r.from==t&&"bookmark"==i.type&&(!e||r.marker.insertLeft)){var l=null==r.from||(i.inclusiveLeft?r.from<=t:r.from0&&l)for(var v=0;vt)&&(!e||At(e,r.marker)<0)&&(e=r.marker)}return e}function Nt(n,t,e,a,o){var r=Gn(n,t),i=zt&&r.markedSpans;if(i)for(var l=0;l=0&&p<=0||d<=0&&p>=0)&&(d<=0&&(s.marker.inclusiveRight&&o.inclusiveLeft?et(c.to,e)>=0:et(c.to,e)>0)||d>=0&&(s.marker.inclusiveRight&&o.inclusiveLeft?et(c.from,a)<=0:et(c.from,a)<0)))return!0}}}function jt(n){for(var t;t=Tt(n);)n=t.find(-1,!0).line;return n}function Rt(n,t){var e=Gn(n,t),a=jt(e);return e==a?t:$n(a)}function Ht(n,t){if(t>n.lastLine())return t;var e,a=Gn(n,t);if(!Wt(n,a))return t;for(;e=It(a);)a=e.find(1,!0).line;return $n(a)+1}function Wt(n,t){var e=zt&&t.markedSpans;if(e)for(var a=void 0,o=0;ot.maxLineLength&&(t.maxLineLength=e,t.maxLine=n)}))}var Gt=function(n,t,e){this.text=n,Dt(this,t),this.height=e?e(this):1};function Vt(n){n.parent=null,Ot(n)}Gt.prototype.lineNo=function(){return $n(this)},vn(Gt);var Xt={},Zt={};function $t(n,t){if(!n||/^\s*$/.test(n))return null;var e=t.addModeClass?Zt:Xt;return e[n]||(e[n]=n.replace(/\S+/g,"cm-$&"))}function Qt(n,t){var e=D("span",null,null,s?"padding-right: .1px":null),a={pre:D("pre",[e],"CodeMirror-line"),content:e,col:0,pos:0,cm:n,trailingSpace:!1,splitSpaces:n.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var r=o?t.rest[o-1]:t.line,i=void 0;a.pos=0,a.addToken=ne,Dn(n.display.measure)&&(i=dn(r,n.doc.direction))&&(a.addToken=te(a.addToken,i)),a.map=[],ae(r,a,bt(n,r,t!=n.display.externalMeasured&&$n(r))),r.styleClasses&&(r.styleClasses.bgClass&&(a.bgClass=L(r.styleClasses.bgClass,a.bgClass||"")),r.styleClasses.textClass&&(a.textClass=L(r.styleClasses.textClass,a.textClass||""))),0==a.map.length&&a.map.push(0,0,a.content.appendChild(On(n.display.measure))),0==o?(t.measure.map=a.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(a.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(s){var l=a.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(a.content.className="cm-tab-wrap-hack")}return mn(n,"renderLine",n,t.line,a.pre),a.pre.className&&(a.textClass=L(a.pre.className,a.textClass||"")),a}function Jt(n){var t=O("span","•","cm-invalidchar");return t.title="\\u"+n.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function ne(n,t,e,a,o,r,s){if(t){var c,d=n.splitSpaces?function(n,t){if(n.length>1&&!/ /.test(n))return n;for(var e=t,a="",o=0;oc&&p.from<=c);u++);if(p.to>=d)return n(e,a,o,r,i,l,s);n(e,a.slice(0,p.to-c),o,r,null,l,s),r=null,a=a.slice(p.to-c),c=p.to}}}function ee(n,t,e,a){var o=!a&&e.widgetNode;o&&n.map.push(n.pos,n.pos+t,o),!a&&n.cm.display.input.needsContentAttribute&&(o||(o=n.content.appendChild(document.createElement("span"))),o.setAttribute("cm-marker",e.id)),o&&(n.cm.display.input.setUneditable(o),n.content.appendChild(o)),n.pos+=t,n.trailingSpace=!1}function ae(n,t,e){var a=n.markedSpans,o=n.text,r=0;if(a)for(var i,l,s,c,d,p,u,b=o.length,f=0,m=1,h="",g=0;;){if(g==f){s=c=d=l="",u=null,p=null,g=1/0;for(var x=[],v=void 0,y=0;yf||k.collapsed&&w.to==f&&w.from==f)){if(null!=w.to&&w.to!=f&&g>w.to&&(g=w.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&w.from==f&&(d+=" "+k.startStyle),k.endStyle&&w.to==g&&(v||(v=[])).push(k.endStyle,w.to),k.title&&((u||(u={})).title=k.title),k.attributes)for(var z in k.attributes)(u||(u={}))[z]=k.attributes[z];k.collapsed&&(!p||At(p.marker,k)<0)&&(p=w)}else w.from>f&&g>w.from&&(g=w.from)}if(v)for(var _=0;_=b)break;for(var C=Math.min(b,g);;){if(h){var E=f+h.length;if(!p){var S=E>C?h.slice(0,C-f):h;t.addToken(t,S,i?i+s:s,d,f+S.length==g?c:"",l,u)}if(E>=C){h=h.slice(C-f),f=C;break}f=E,d=""}h=o.slice(r,r=e[m++]),i=$t(e[m++],t.cm.options)}}else for(var O=1;Oe)return{map:n.measure.maps[o],cache:n.measure.caches[o],before:!0}}function De(n,t,e,a){return Ae(n,Be(n,t),e,a)}function Me(n,t){if(t>=n.display.viewFrom&&t=e.lineN&&t2&&r.push((s.bottom+c.top)/2-e.top)}}r.push(e.bottom-e.top)}}(n,t.view,t.rect),t.hasHeights=!0),(r=function(n,t,e,a){var o,r=Ie(t.map,e,a),s=r.node,c=r.start,d=r.end,p=r.collapse;if(3==s.nodeType){for(var u=0;u<4;u++){for(;c&&an(t.line.text.charAt(r.coverStart+c));)--c;for(;r.coverStart+d1}(n))return t;var e=screen.logicalXDPI/screen.deviceXDPI,a=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*e,right:t.right*e,top:t.top*a,bottom:t.bottom*a}}(n.display.measure,o))}else{var b;c>0&&(p=a="right"),o=n.options.lineWrapping&&(b=s.getClientRects()).length>1?b["right"==a?b.length-1:0]:s.getBoundingClientRect()}if(i&&l<9&&!c&&(!o||!o.left&&!o.right)){var f=s.parentNode.getClientRects()[0];o=f?{left:f.left,right:f.left+oa(n.display),top:f.top,bottom:f.bottom}:Te}for(var m=o.top-t.rect.top,h=o.bottom-t.rect.top,g=(m+h)/2,x=t.view.measure.heights,v=0;vt)&&(o=(r=s-l)-1,t>=s&&(i="right")),null!=o){if(a=n[c+2],l==s&&e==(a.insertLeft?"left":"right")&&(i=e),"left"==e&&0==o)for(;c&&n[c-2]==n[c-3]&&n[c-1].insertLeft;)a=n[2+(c-=3)],i="left";if("right"==e&&o==s-l)for(;c=0&&(e=n[o]).left==e.right;o--);return e}function Ne(n){if(n.measure&&(n.measure.cache={},n.measure.heights=null,n.rest))for(var t=0;t=a.text.length?(s=a.text.length,c="before"):s<=0&&(s=0,c="after"),!l)return i("before"==c?s-1:s,"before"==c);function d(n,t,e){return i(e?n-1:n,1==l[t].level!=e)}var p=sn(l,s,c),u=ln,b=d(s,p,"before"==c);return null!=u&&(b.other=d(s,u,"before"!=c)),b}function Ve(n,t){var e=0;t=st(n.doc,t),n.options.lineWrapping||(e=oa(n.display)*t.ch);var a=Gn(n.doc,t.line),o=Yt(a)+ze(n.display);return{left:e,right:e,top:o,bottom:o+a.height}}function Xe(n,t,e,a,o){var r=tt(n,t,e);return r.xRel=o,a&&(r.outside=a),r}function Ze(n,t,e){var a=n.doc;if((e+=n.display.viewOffset)<0)return Xe(a.first,0,null,-1,-1);var o=Qn(a,e),r=a.first+a.size-1;if(o>r)return Xe(a.first+a.size-1,Gn(a,r).text.length,null,1,1);t<0&&(t=0);for(var i=Gn(a,o);;){var l=na(n,i,o,t,e),s=Pt(i,l.ch+(l.xRel>0||l.outside>0?1:0));if(!s)return l;var c=s.find(1);if(c.line==o)return c;i=Gn(a,o=c.line)}}function $e(n,t,e,a){a-=Ue(t);var o=t.text.length,r=rn((function(t){return Ae(n,e,t-1).bottom<=a}),o,0);return{begin:r,end:o=rn((function(t){return Ae(n,e,t).top>a}),r,o)}}function Qe(n,t,e,a){return e||(e=Be(n,t)),$e(n,t,e,Ye(n,t,Ae(n,e,a),"line").top)}function Je(n,t,e,a){return!(n.bottom<=e)&&(n.top>e||(a?n.left:n.right)>t)}function na(n,t,e,a,o){o-=Yt(t);var r=Be(n,t),i=Ue(t),l=0,s=t.text.length,c=!0,d=dn(t,n.doc.direction);if(d){var p=(n.options.lineWrapping?ea:ta)(n,t,e,r,d,a,o);l=(c=1!=p.level)?p.from:p.to-1,s=c?p.to:p.from-1}var u,b,f=null,m=null,h=rn((function(t){var e=Ae(n,r,t);return e.top+=i,e.bottom+=i,!!Je(e,a,o,!1)&&(e.top<=o&&e.left<=a&&(f=t,m=e),!0)}),l,s),g=!1;if(m){var x=a-m.left=y.bottom?1:0}return Xe(e,h=on(t.text,h,1),b,g,a-u)}function ta(n,t,e,a,o,r,i){var l=rn((function(l){var s=o[l],c=1!=s.level;return Je(Ge(n,tt(e,c?s.to:s.from,c?"before":"after"),"line",t,a),r,i,!0)}),0,o.length-1),s=o[l];if(l>0){var c=1!=s.level,d=Ge(n,tt(e,c?s.from:s.to,c?"after":"before"),"line",t,a);Je(d,r,i,!0)&&d.top>i&&(s=o[l-1])}return s}function ea(n,t,e,a,o,r,i){var l=$e(n,t,a,i),s=l.begin,c=l.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var d=null,p=null,u=0;u=c||b.to<=s)){var f=Ae(n,a,1!=b.level?Math.min(c,b.to)-1:Math.max(s,b.from)).right,m=fm)&&(d=b,p=m)}}return d||(d=o[o.length-1]),d.fromc&&(d={from:d.from,to:c,level:d.level}),d}function aa(n){if(null!=n.cachedTextHeight)return n.cachedTextHeight;if(null==Le){Le=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Le.appendChild(document.createTextNode("x")),Le.appendChild(O("br"));Le.appendChild(document.createTextNode("x"))}S(n.measure,Le);var e=Le.offsetHeight/50;return e>3&&(n.cachedTextHeight=e),E(n.measure),e||1}function oa(n){if(null!=n.cachedCharWidth)return n.cachedCharWidth;var t=O("span","xxxxxxxxxx"),e=O("pre",[t],"CodeMirror-line-like");S(n.measure,e);var a=t.getBoundingClientRect(),o=(a.right-a.left)/10;return o>2&&(n.cachedCharWidth=o),o||10}function ra(n){for(var t=n.display,e={},a={},o=t.gutters.clientLeft,r=t.gutters.firstChild,i=0;r;r=r.nextSibling,++i){var l=n.display.gutterSpecs[i].className;e[l]=r.offsetLeft+r.clientLeft+o,a[l]=r.clientWidth}return{fixedPos:ia(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:e,gutterWidth:a,wrapperWidth:t.wrapper.clientWidth}}function ia(n){return n.scroller.getBoundingClientRect().left-n.sizer.getBoundingClientRect().left}function la(n){var t=aa(n.display),e=n.options.lineWrapping,a=e&&Math.max(5,n.display.scroller.clientWidth/oa(n.display)-3);return function(o){if(Wt(n.doc,o))return 0;var r=0;if(o.widgets)for(var i=0;i0&&(s=Gn(n.doc,c.line).text).length==c.ch){var d=N(s,s.length,n.options.tabSize)-s.length;c=tt(c.line,Math.max(0,Math.round((r-Fe(n.display).left)/oa(n.display))-d))}return c}function da(n,t){if(t>=n.display.viewTo)return null;if((t-=n.display.viewFrom)<0)return null;for(var e=n.display.view,a=0;at)&&(o.updateLineNumbers=t),n.curOp.viewChanged=!0,t>=o.viewTo)zt&&Rt(n.doc,t)o.viewFrom?ba(n):(o.viewFrom+=a,o.viewTo+=a);else if(t<=o.viewFrom&&e>=o.viewTo)ba(n);else if(t<=o.viewFrom){var r=fa(n,e,e+a,1);r?(o.view=o.view.slice(r.index),o.viewFrom=r.lineN,o.viewTo+=a):ba(n)}else if(e>=o.viewTo){var i=fa(n,t,t,-1);i?(o.view=o.view.slice(0,i.index),o.viewTo=i.lineN):ba(n)}else{var l=fa(n,t,t,-1),s=fa(n,e,e+a,1);l&&s?(o.view=o.view.slice(0,l.index).concat(re(n,l.lineN,s.lineN)).concat(o.view.slice(s.index)),o.viewTo+=a):ba(n)}var c=o.externalMeasured;c&&(e=o.lineN&&t=a.viewTo)){var r=a.view[da(n,t)];if(null!=r.node){var i=r.changes||(r.changes=[]);-1==R(i,e)&&i.push(e)}}}function ba(n){n.display.viewFrom=n.display.viewTo=n.doc.first,n.display.view=[],n.display.viewOffset=0}function fa(n,t,e,a){var o,r=da(n,t),i=n.display.view;if(!zt||e==n.doc.first+n.doc.size)return{index:r,lineN:e};for(var l=n.display.viewFrom,s=0;s0){if(r==i.length-1)return null;o=l+i[r].size-t,r++}else o=l-t;t+=o,e+=o}for(;Rt(n.doc,e)!=e;){if(r==(a<0?0:i.length-1))return null;e+=a*i[r-(a<0?1:0)].size,r+=a}return{index:r,lineN:e}}function ma(n){for(var t=n.display.view,e=0,a=0;a=n.display.viewTo||l.to().line0&&(o.style.width=r.right-r.left+"px")}if(a.other){var i=e.appendChild(O("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));i.style.display="",i.style.left=a.other.left+"px",i.style.top=a.other.top+"px",i.style.height=.85*(a.other.bottom-a.other.top)+"px"}}function va(n,t){return n.top-t.top||n.left-t.left}function ya(n,t,e){var a=n.display,o=n.doc,r=document.createDocumentFragment(),i=Fe(n.display),l=i.left,s=Math.max(a.sizerWidth,Ee(n)-a.sizer.offsetLeft)-i.right,c="ltr"==o.direction;function d(n,t,e,a){t<0&&(t=0),t=Math.round(t),a=Math.round(a),r.appendChild(O("div",null,"CodeMirror-selected","position: absolute; left: "+n+"px;\n top: "+t+"px; width: "+(null==e?s-n:e)+"px;\n height: "+(a-t)+"px"))}function p(t,e,a){var r,i,p=Gn(o,t),u=p.text.length;function b(e,a){return Ke(n,tt(t,e),"div",p,a)}function f(t,e,a){var o=Qe(n,p,null,t),r="ltr"==e==("after"==a)?"left":"right";return b("after"==a?o.begin:o.end-(/\s/.test(p.text.charAt(o.end-1))?2:1),r)[r]}var m=dn(p,o.direction);return function(n,t,e,a){if(!n)return a(t,e,"ltr",0);for(var o=!1,r=0;rt||t==e&&i.to==t)&&(a(Math.max(i.from,t),Math.min(i.to,e),1==i.level?"rtl":"ltr",r),o=!0)}o||a(t,e,"ltr")}(m,e||0,null==a?u:a,(function(n,t,o,p){var h="ltr"==o,g=b(n,h?"left":"right"),x=b(t-1,h?"right":"left"),v=null==e&&0==n,y=null==a&&t==u,w=0==p,k=!m||p==m.length-1;if(x.top-g.top<=3){var z=(c?y:v)&&k,_=(c?v:y)&&w?l:(h?g:x).left,F=z?s:(h?x:g).right;d(_,g.top,F-_,g.bottom)}else{var C,E,S,O;h?(C=c&&v&&w?l:g.left,E=c?s:f(n,o,"before"),S=c?l:f(t,o,"after"),O=c&&y&&k?s:x.right):(C=c?f(n,o,"before"):l,E=!c&&v&&w?s:g.right,S=!c&&y&&k?l:x.left,O=c?f(t,o,"after"):s),d(C,g.top,E-C,g.bottom),g.bottom0?t.blinker=setInterval((function(){n.hasFocus()||Fa(n),t.cursorDiv.style.visibility=(e=!e)?"":"hidden"}),n.options.cursorBlinkRate):n.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function ka(n){n.hasFocus()||(n.display.input.focus(),n.state.focused||_a(n))}function za(n){n.state.delayingBlurEvent=!0,setTimeout((function(){n.state.delayingBlurEvent&&(n.state.delayingBlurEvent=!1,n.state.focused&&Fa(n))}),100)}function _a(n,t){n.state.delayingBlurEvent&&!n.state.draggingText&&(n.state.delayingBlurEvent=!1),"nocursor"!=n.options.readOnly&&(n.state.focused||(mn(n,"focus",n,t),n.state.focused=!0,A(n.display.wrapper,"CodeMirror-focused"),n.curOp||n.display.selForContextMenu==n.doc.sel||(n.display.input.reset(),s&&setTimeout((function(){return n.display.input.reset(!0)}),20)),n.display.input.receivedFocus()),wa(n))}function Fa(n,t){n.state.delayingBlurEvent||(n.state.focused&&(mn(n,"blur",n,t),n.state.focused=!1,C(n.display.wrapper,"CodeMirror-focused")),clearInterval(n.display.blinker),setTimeout((function(){n.state.focused||(n.display.shift=!1)}),150))}function Ca(n){for(var t=n.display,e=t.lineDiv.offsetTop,a=Math.max(0,t.scroller.getBoundingClientRect().top),o=t.lineDiv.getBoundingClientRect().top,r=0,s=0;s.005||m<-.005)&&(on.display.sizerWidth){var g=Math.ceil(u/oa(n.display));g>n.display.maxLineLength&&(n.display.maxLineLength=g,n.display.maxLine=c.line,n.display.maxLineChanged=!0)}}}Math.abs(r)>2&&(t.scroller.scrollTop+=r)}function Ea(n){if(n.widgets)for(var t=0;t=i&&(r=Qn(t,Yt(Gn(t,s))-n.wrapper.clientHeight),i=s)}return{from:r,to:Math.max(i,r+1)}}function Oa(n,t){var e=n.display,a=aa(n.display);t.top<0&&(t.top=0);var o=n.curOp&&null!=n.curOp.scrollTop?n.curOp.scrollTop:e.scroller.scrollTop,r=Se(n),i={};t.bottom-t.top>r&&(t.bottom=t.top+r);var l=n.doc.height+_e(e),s=t.topl-a;if(t.topo+r){var d=Math.min(t.top,(c?l:t.bottom)-r);d!=o&&(i.scrollTop=d)}var p=n.options.fixedGutter?0:e.gutters.offsetWidth,u=n.curOp&&null!=n.curOp.scrollLeft?n.curOp.scrollLeft:e.scroller.scrollLeft-p,b=Ee(n)-e.gutters.offsetWidth,f=t.right-t.left>b;return f&&(t.right=t.left+b),t.left<10?i.scrollLeft=0:t.leftb+u-3&&(i.scrollLeft=t.right+(f?0:10)-b),i}function Da(n,t){null!=t&&(Aa(n),n.curOp.scrollTop=(null==n.curOp.scrollTop?n.doc.scrollTop:n.curOp.scrollTop)+t)}function Ma(n){Aa(n);var t=n.getCursor();n.curOp.scrollToPos={from:t,to:t,margin:n.options.cursorScrollMargin}}function Ba(n,t,e){null==t&&null==e||Aa(n),null!=t&&(n.curOp.scrollLeft=t),null!=e&&(n.curOp.scrollTop=e)}function Aa(n){var t=n.curOp.scrollToPos;t&&(n.curOp.scrollToPos=null,La(n,Ve(n,t.from),Ve(n,t.to),t.margin))}function La(n,t,e,a){var o=Oa(n,{left:Math.min(t.left,e.left),top:Math.min(t.top,e.top)-a,right:Math.max(t.right,e.right),bottom:Math.max(t.bottom,e.bottom)+a});Ba(n,o.scrollLeft,o.scrollTop)}function Ta(n,t){Math.abs(n.doc.scrollTop-t)<2||(e||so(n,{top:t}),Ia(n,t,!0),e&&so(n),ao(n,100))}function Ia(n,t,e){t=Math.max(0,Math.min(n.display.scroller.scrollHeight-n.display.scroller.clientHeight,t)),(n.display.scroller.scrollTop!=t||e)&&(n.doc.scrollTop=t,n.display.scrollbars.setScrollTop(t),n.display.scroller.scrollTop!=t&&(n.display.scroller.scrollTop=t))}function Pa(n,t,e,a){t=Math.max(0,Math.min(t,n.display.scroller.scrollWidth-n.display.scroller.clientWidth)),(e?t==n.doc.scrollLeft:Math.abs(n.doc.scrollLeft-t)<2)&&!a||(n.doc.scrollLeft=t,uo(n),n.display.scroller.scrollLeft!=t&&(n.display.scroller.scrollLeft=t),n.display.scrollbars.setScrollLeft(t))}function Na(n){var t=n.display,e=t.gutters.offsetWidth,a=Math.round(n.doc.height+_e(n.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:n.options.fixedGutter?e:0,docHeight:a,scrollHeight:a+Ce(n)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:e}}var ja=function(n,t,e){this.cm=e;var a=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");a.tabIndex=o.tabIndex=-1,n(a),n(o),un(a,"scroll",(function(){a.clientHeight&&t(a.scrollTop,"vertical")})),un(o,"scroll",(function(){o.clientWidth&&t(o.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,i&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};ja.prototype.update=function(n){var t=n.scrollWidth>n.clientWidth+1,e=n.scrollHeight>n.clientHeight+1,a=n.nativeBarWidth;if(e){this.vert.style.display="block",this.vert.style.bottom=t?a+"px":"0";var o=n.viewHeight-(t?a:0);this.vert.firstChild.style.height=Math.max(0,n.scrollHeight-n.clientHeight+o)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=e?a+"px":"0",this.horiz.style.left=n.barLeft+"px";var r=n.viewWidth-n.barLeft-(e?a:0);this.horiz.firstChild.style.width=Math.max(0,n.scrollWidth-n.clientWidth+r)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&n.clientHeight>0&&(0==a&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:e?a:0,bottom:t?a:0}},ja.prototype.setScrollLeft=function(n){this.horiz.scrollLeft!=n&&(this.horiz.scrollLeft=n),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},ja.prototype.setScrollTop=function(n){this.vert.scrollTop!=n&&(this.vert.scrollTop=n),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},ja.prototype.zeroWidthHack=function(){var n=x&&!b?"12px":"18px";this.horiz.style.height=this.vert.style.width=n,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new j,this.disableVert=new j},ja.prototype.enableZeroWidthBar=function(n,t,e){n.style.pointerEvents="auto",t.set(1e3,(function a(){var o=n.getBoundingClientRect();("vert"==e?document.elementFromPoint(o.right-1,(o.top+o.bottom)/2):document.elementFromPoint((o.right+o.left)/2,o.bottom-1))!=n?n.style.pointerEvents="none":t.set(1e3,a)}))},ja.prototype.clear=function(){var n=this.horiz.parentNode;n.removeChild(this.horiz),n.removeChild(this.vert)};var Ra=function(){};function Ha(n,t){t||(t=Na(n));var e=n.display.barWidth,a=n.display.barHeight;Wa(n,t);for(var o=0;o<4&&e!=n.display.barWidth||a!=n.display.barHeight;o++)e!=n.display.barWidth&&n.options.lineWrapping&&Ca(n),Wa(n,Na(n)),e=n.display.barWidth,a=n.display.barHeight}function Wa(n,t){var e=n.display,a=e.scrollbars.update(t);e.sizer.style.paddingRight=(e.barWidth=a.right)+"px",e.sizer.style.paddingBottom=(e.barHeight=a.bottom)+"px",e.heightForcer.style.borderBottom=a.bottom+"px solid transparent",a.right&&a.bottom?(e.scrollbarFiller.style.display="block",e.scrollbarFiller.style.height=a.bottom+"px",e.scrollbarFiller.style.width=a.right+"px"):e.scrollbarFiller.style.display="",a.bottom&&n.options.coverGutterNextToScrollbar&&n.options.fixedGutter?(e.gutterFiller.style.display="block",e.gutterFiller.style.height=a.bottom+"px",e.gutterFiller.style.width=t.gutterWidth+"px"):e.gutterFiller.style.display=""}Ra.prototype.update=function(){return{bottom:0,right:0}},Ra.prototype.setScrollLeft=function(){},Ra.prototype.setScrollTop=function(){},Ra.prototype.clear=function(){};var Ua={native:ja,null:Ra};function Ya(n){n.display.scrollbars&&(n.display.scrollbars.clear(),n.display.scrollbars.addClass&&C(n.display.wrapper,n.display.scrollbars.addClass)),n.display.scrollbars=new Ua[n.options.scrollbarStyle]((function(t){n.display.wrapper.insertBefore(t,n.display.scrollbarFiller),un(t,"mousedown",(function(){n.state.focused&&setTimeout((function(){return n.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,e){"horizontal"==e?Pa(n,t):Ta(n,t)}),n),n.display.scrollbars.addClass&&A(n.display.wrapper,n.display.scrollbars.addClass)}var qa=0;function Ka(n){var t;n.curOp={cm:n,viewChanged:!1,startHeight:n.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++qa,markArrays:null},t=n.curOp,ie?ie.ops.push(t):t.ownsGroup=ie={ops:[t],delayedCallbacks:[]}}function Ga(n){var t=n.curOp;t&&function(n,t){var e=n.ownsGroup;if(e)try{!function(n){var t=n.delayedCallbacks,e=0;do{for(;e=e.viewTo)||e.maxLineChanged&&t.options.lineWrapping,n.update=n.mustUpdate&&new ro(t,n.mustUpdate&&{top:n.scrollTop,ensure:n.scrollToPos},n.forceUpdate)}function Xa(n){n.updatedDisplay=n.mustUpdate&&io(n.cm,n.update)}function Za(n){var t=n.cm,e=t.display;n.updatedDisplay&&Ca(t),n.barMeasure=Na(t),e.maxLineChanged&&!t.options.lineWrapping&&(n.adjustWidthTo=De(t,e.maxLine,e.maxLine.text.length).left+3,t.display.sizerWidth=n.adjustWidthTo,n.barMeasure.scrollWidth=Math.max(e.scroller.clientWidth,e.sizer.offsetLeft+n.adjustWidthTo+Ce(t)+t.display.barWidth),n.maxScrollLeft=Math.max(0,e.sizer.offsetLeft+n.adjustWidthTo-Ee(t))),(n.updatedDisplay||n.selectionChanged)&&(n.preparedSelection=e.input.prepareSelection())}function $a(n){var t=n.cm;null!=n.adjustWidthTo&&(t.display.sizer.style.minWidth=n.adjustWidthTo+"px",n.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!f){var r=O("div","​",null,"position: absolute;\n top: "+(t.top-e.viewOffset-ze(n.display))+"px;\n height: "+(t.bottom-t.top+Ce(n)+e.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");n.display.lineSpace.appendChild(r),r.scrollIntoView(o),n.display.lineSpace.removeChild(r)}}}(t,function(n,t,e,a){var o;null==a&&(a=0),n.options.lineWrapping||t!=e||(e="before"==t.sticky?tt(t.line,t.ch+1,"before"):t,t=t.ch?tt(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t);for(var r=0;r<5;r++){var i=!1,l=Ge(n,t),s=e&&e!=t?Ge(n,e):l,c=Oa(n,o={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-a,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+a}),d=n.doc.scrollTop,p=n.doc.scrollLeft;if(null!=c.scrollTop&&(Ta(n,c.scrollTop),Math.abs(n.doc.scrollTop-d)>1&&(i=!0)),null!=c.scrollLeft&&(Pa(n,c.scrollLeft),Math.abs(n.doc.scrollLeft-p)>1&&(i=!0)),!i)break}return o}(t,st(a,n.scrollToPos.from),st(a,n.scrollToPos.to),n.scrollToPos.margin));var o=n.maybeHiddenMarkers,r=n.maybeUnhiddenMarkers;if(o)for(var i=0;i=n.display.viewTo)){var e=+new Date+n.options.workTime,a=ft(n,t.highlightFrontier),o=[];t.iter(a.line,Math.min(t.first+t.size,n.display.viewTo+500),(function(r){if(a.line>=n.display.viewFrom){var i=r.styles,l=r.text.length>n.options.maxHighlightLength?Un(t.mode,a.state):null,s=ut(n,r,a,!0);l&&(a.state=l),r.styles=s.styles;var c=r.styleClasses,d=s.classes;d?r.styleClasses=d:c&&(r.styleClasses=null);for(var p=!i||i.length!=r.styles.length||c!=d&&(!c||!d||c.bgClass!=d.bgClass||c.textClass!=d.textClass),u=0;!p&&ue)return ao(n,n.options.workDelay),!0})),t.highlightFrontier=a.line,t.modeFrontier=Math.max(t.modeFrontier,a.line),o.length&&Ja(n,(function(){for(var t=0;t=e.viewFrom&&t.visible.to<=e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>=e.viewTo)&&e.renderedView==e.view&&0==ma(n))return!1;bo(n)&&(ba(n),t.dims=ra(n));var o=a.first+a.size,r=Math.max(t.visible.from-n.options.viewportMargin,a.first),i=Math.min(o,t.visible.to+n.options.viewportMargin);e.viewFromi&&e.viewTo-i<20&&(i=Math.min(o,e.viewTo)),zt&&(r=Rt(n.doc,r),i=Ht(n.doc,i));var l=r!=e.viewFrom||i!=e.viewTo||e.lastWrapHeight!=t.wrapperHeight||e.lastWrapWidth!=t.wrapperWidth;!function(n,t,e){var a=n.display;0==a.view.length||t>=a.viewTo||e<=a.viewFrom?(a.view=re(n,t,e),a.viewFrom=t):(a.viewFrom>t?a.view=re(n,t,a.viewFrom).concat(a.view):a.viewFrome&&(a.view=a.view.slice(0,da(n,e)))),a.viewTo=e}(n,r,i),e.viewOffset=Yt(Gn(n.doc,e.viewFrom)),n.display.mover.style.top=e.viewOffset+"px";var c=ma(n);if(!l&&0==c&&!t.force&&e.renderedView==e.view&&(null==e.updateLineNumbers||e.updateLineNumbers>=e.viewTo))return!1;var d=function(n){if(n.hasFocus())return null;var t=B();if(!t||!M(n.display.lineDiv,t))return null;var e={activeElt:t};if(window.getSelection){var a=window.getSelection();a.anchorNode&&a.extend&&M(n.display.lineDiv,a.anchorNode)&&(e.anchorNode=a.anchorNode,e.anchorOffset=a.anchorOffset,e.focusNode=a.focusNode,e.focusOffset=a.focusOffset)}return e}(n);return c>4&&(e.lineDiv.style.display="none"),function(n,t,e){var a=n.display,o=n.options.lineNumbers,r=a.lineDiv,i=r.firstChild;function l(t){var e=t.nextSibling;return s&&x&&n.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),e}for(var c=a.view,d=a.viewFrom,p=0;p-1&&(b=!1),de(n,u,d,e)),b&&(E(u.lineNumber),u.lineNumber.appendChild(document.createTextNode(nt(n.options,d)))),i=u.node.nextSibling}else{var f=ge(n,u,d,e);r.insertBefore(f,i)}d+=u.size}for(;i;)i=l(i)}(n,e.updateLineNumbers,t.dims),c>4&&(e.lineDiv.style.display=""),e.renderedView=e.view,function(n){if(n&&n.activeElt&&n.activeElt!=B()&&(n.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(n.activeElt.nodeName)&&n.anchorNode&&M(document.body,n.anchorNode)&&M(document.body,n.focusNode))){var t=window.getSelection(),e=document.createRange();e.setEnd(n.anchorNode,n.anchorOffset),e.collapse(!1),t.removeAllRanges(),t.addRange(e),t.extend(n.focusNode,n.focusOffset)}}(d),E(e.cursorDiv),E(e.selectionDiv),e.gutters.style.height=e.sizer.style.minHeight=0,l&&(e.lastWrapHeight=t.wrapperHeight,e.lastWrapWidth=t.wrapperWidth,ao(n,400)),e.updateLineNumbers=null,!0}function lo(n,t){for(var e=t.viewport,a=!0;;a=!1){if(a&&n.options.lineWrapping&&t.oldDisplayWidth!=Ee(n))a&&(t.visible=Sa(n.display,n.doc,e));else if(e&&null!=e.top&&(e={top:Math.min(n.doc.height+_e(n.display)-Se(n),e.top)}),t.visible=Sa(n.display,n.doc,e),t.visible.from>=n.display.viewFrom&&t.visible.to<=n.display.viewTo)break;if(!io(n,t))break;Ca(n);var o=Na(n);ha(n),Ha(n,o),po(n,o),t.force=!1}t.signal(n,"update",n),n.display.viewFrom==n.display.reportedViewFrom&&n.display.viewTo==n.display.reportedViewTo||(t.signal(n,"viewportChange",n,n.display.viewFrom,n.display.viewTo),n.display.reportedViewFrom=n.display.viewFrom,n.display.reportedViewTo=n.display.viewTo)}function so(n,t){var e=new ro(n,t);if(io(n,e)){Ca(n),lo(n,e);var a=Na(n);ha(n),Ha(n,a),po(n,a),e.finish()}}function co(n){var t=n.gutters.offsetWidth;n.sizer.style.marginLeft=t+"px",se(n,"gutterChanged",n)}function po(n,t){n.display.sizer.style.minHeight=t.docHeight+"px",n.display.heightForcer.style.top=t.docHeight+"px",n.display.gutters.style.height=t.docHeight+n.display.barHeight+Ce(n)+"px"}function uo(n){var t=n.display,e=t.view;if(t.alignWidgets||t.gutters.firstChild&&n.options.fixedGutter){for(var a=ia(t)-t.scroller.scrollLeft+n.doc.scrollLeft,o=t.gutters.offsetWidth,r=a+"px",i=0;ic.clientWidth,u=c.scrollHeight>c.clientHeight;if(o&&d||r&&u){if(r&&x&&s)n:for(var b=t.target,f=l.view;b!=c;b=b.parentNode)for(var m=0;m=0&&et(n,a.to())<=0)return e}return-1};var _o=function(n,t){this.anchor=n,this.head=t};function Fo(n,t,e){var a=n&&n.options.selectionsMayTouch,o=t[e];t.sort((function(n,t){return et(n.from(),t.from())})),e=R(t,o);for(var r=1;r0:s>=0){var c=it(l.from(),i.from()),d=rt(l.to(),i.to()),p=l.empty()?i.from()==i.head:l.from()==l.head;r<=e&&--e,t.splice(--r,2,new _o(p?d:c,p?c:d))}}return new zo(t,e)}function Co(n,t){return new zo([new _o(n,t||n)],0)}function Eo(n){return n.text?tt(n.from.line+n.text.length-1,V(n.text).length+(1==n.text.length?n.from.ch:0)):n.to}function So(n,t){if(et(n,t.from)<0)return n;if(et(n,t.to)<=0)return Eo(t);var e=n.line+t.text.length-(t.to.line-t.from.line)-1,a=n.ch;return n.line==t.to.line&&(a+=Eo(t).ch-t.to.ch),tt(e,a)}function Oo(n,t){for(var e=[],a=0;a1&&n.remove(l.line+1,f-1),n.insert(l.line+1,g)}se(n,"change",n,t)}function To(n,t,e){!function n(a,o,r){if(a.linked)for(var i=0;il-(n.cm?n.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(r=function(n,t){return t?(Ro(n.done),V(n.done)):n.done.length&&!V(n.done).ranges?V(n.done):n.done.length>1&&!n.done[n.done.length-2].ranges?(n.done.pop(),V(n.done)):void 0}(o,o.lastOp==a)))i=V(r.changes),0==et(t.from,t.to)&&0==et(t.from,i.to)?i.to=Eo(t):r.changes.push(jo(n,t));else{var s=V(o.done);for(s&&s.ranges||Uo(n.sel,o.done),r={changes:[jo(n,t)],generation:o.generation},o.done.push(r);o.done.length>o.undoDepth;)o.done.shift(),o.done[0].ranges||o.done.shift()}o.done.push(e),o.generation=++o.maxGeneration,o.lastModTime=o.lastSelTime=l,o.lastOp=o.lastSelOp=a,o.lastOrigin=o.lastSelOrigin=t.origin,i||mn(n,"historyAdded")}function Wo(n,t,e,a){var o=n.history,r=a&&a.origin;e==o.lastSelOp||r&&o.lastSelOrigin==r&&(o.lastModTime==o.lastSelTime&&o.lastOrigin==r||function(n,t,e,a){var o=t.charAt(0);return"*"==o||"+"==o&&e.ranges.length==a.ranges.length&&e.somethingSelected()==a.somethingSelected()&&new Date-n.history.lastSelTime<=(n.cm?n.cm.options.historyEventDelay:500)}(n,r,V(o.done),t))?o.done[o.done.length-1]=t:Uo(t,o.done),o.lastSelTime=+new Date,o.lastSelOrigin=r,o.lastSelOp=e,a&&!1!==a.clearRedo&&Ro(o.undone)}function Uo(n,t){var e=V(t);e&&e.ranges&&e.equals(n)||t.push(n)}function Yo(n,t,e,a){var o=t["spans_"+n.id],r=0;n.iter(Math.max(n.first,e),Math.min(n.first+n.size,a),(function(e){e.markedSpans&&((o||(o=t["spans_"+n.id]={}))[r]=e.markedSpans),++r}))}function qo(n){if(!n)return null;for(var t,e=0;e-1&&(V(l)[p]=c[p],delete c[p])}}}return a}function Vo(n,t,e,a){if(a){var o=n.anchor;if(e){var r=et(t,o)<0;r!=et(e,o)<0?(o=t,t=e):r!=et(t,e)<0&&(t=e)}return new _o(o,t)}return new _o(e||t,t)}function Xo(n,t,e,a,o){null==o&&(o=n.cm&&(n.cm.display.shift||n.extend)),nr(n,new zo([Vo(n.sel.primary(),t,e,o)],0),a)}function Zo(n,t,e){for(var a=[],o=n.cm&&(n.cm.display.shift||n.extend),r=0;r=t.ch:l.to>t.ch))){if(o&&(mn(s,"beforeCursorEnter"),s.explicitlyCleared)){if(r.markedSpans){--i;continue}break}if(!s.atomic)continue;if(e){var p=s.find(a<0?1:-1),u=void 0;if((a<0?d:c)&&(p=lr(n,p,-a,p&&p.line==t.line?r:null)),p&&p.line==t.line&&(u=et(p,e))&&(a<0?u<0:u>0))return rr(n,p,t,a,o)}var b=s.find(a<0?-1:1);return(a<0?c:d)&&(b=lr(n,b,a,b.line==t.line?r:null)),b?rr(n,b,t,a,o):null}}return t}function ir(n,t,e,a,o){var r=a||1,i=rr(n,t,e,r,o)||!o&&rr(n,t,e,r,!0)||rr(n,t,e,-r,o)||!o&&rr(n,t,e,-r,!0);return i||(n.cantEdit=!0,tt(n.first,0))}function lr(n,t,e,a){return e<0&&0==t.ch?t.line>n.first?st(n,tt(t.line-1)):null:e>0&&t.ch==(a||Gn(n,t.line)).text.length?t.line0)){var d=[s,1],p=et(c.from,l.from),u=et(c.to,l.to);(p<0||!i.inclusiveLeft&&!p)&&d.push({from:c.from,to:l.from}),(u>0||!i.inclusiveRight&&!u)&&d.push({from:l.to,to:c.to}),o.splice.apply(o,d),s+=d.length-3}}return o}(n,t.from,t.to);if(a)for(var o=a.length-1;o>=0;--o)pr(n,{from:a[o].from,to:a[o].to,text:o?[""]:t.text,origin:t.origin});else pr(n,t)}}function pr(n,t){if(1!=t.text.length||""!=t.text[0]||0!=et(t.from,t.to)){var e=Oo(n,t);Ho(n,t,e,n.cm?n.cm.curOp.id:NaN),fr(n,t,e,Et(n,t));var a=[];To(n,(function(n,e){e||-1!=R(a,n.history)||(xr(n.history,t),a.push(n.history)),fr(n,t,null,Et(n,t))}))}}function ur(n,t,e){var a=n.cm&&n.cm.state.suppressEdits;if(!a||e){for(var o,r=n.history,i=n.sel,l="undo"==t?r.done:r.undone,s="undo"==t?r.undone:r.done,c=0;c=0;--b){var f=u(b);if(f)return f.v}}}}function br(n,t){if(0!=t&&(n.first+=t,n.sel=new zo(X(n.sel.ranges,(function(n){return new _o(tt(n.anchor.line+t,n.anchor.ch),tt(n.head.line+t,n.head.ch))})),n.sel.primIndex),n.cm)){pa(n.cm,n.first,n.first-t,t);for(var e=n.cm.display,a=e.viewFrom;an.lastLine())){if(t.from.liner&&(t={from:t.from,to:tt(r,Gn(n,r).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Vn(n,t.from,t.to),e||(e=Oo(n,t)),n.cm?function(n,t,e){var a=n.doc,o=n.display,r=t.from,i=t.to,l=!1,s=r.line;n.options.lineWrapping||(s=$n(jt(Gn(a,r.line))),a.iter(s,i.line+1,(function(n){if(n==o.maxLine)return l=!0,!0}))),a.sel.contains(t.from,t.to)>-1&&gn(n),Lo(a,t,e,la(n)),n.options.lineWrapping||(a.iter(s,r.line+t.text.length,(function(n){var t=qt(n);t>o.maxLineLength&&(o.maxLine=n,o.maxLineLength=t,o.maxLineChanged=!0,l=!1)})),l&&(n.curOp.updateMaxLine=!0)),function(n,t){if(n.modeFrontier=Math.min(n.modeFrontier,t),!(n.highlightFrontiere;a--){var o=Gn(n,a).stateAfter;if(o&&(!(o instanceof dt)||a+o.lookAhead1||!(this.children[0]instanceof yr))){var l=[];this.collapse(l),this.children=[new yr(l)],this.children[0].parent=this}},collapse:function(n){for(var t=0;t50){for(var i=o.lines.length%25+25,l=i;l10);n.parent.maybeSpill()}},iterN:function(n,t,e){for(var a=0;a0||0==i&&!1!==r.clearWhenEmpty)return r;if(r.replacedWith&&(r.collapsed=!0,r.widgetNode=D("span",[r.replacedWith],"CodeMirror-widget"),a.handleMouseEvents||r.widgetNode.setAttribute("cm-ignore-events","true"),a.insertLeft&&(r.widgetNode.insertLeft=!0)),r.collapsed){if(Nt(n,t.line,t,e,r)||t.line!=e.line&&Nt(n,e.line,t,e,r))throw new Error("Inserting collapsed marker partially overlapping an existing one");zt=!0}r.addToHistory&&Ho(n,{from:t,to:e,origin:"markText"},n.sel,NaN);var l,s=t.line,c=n.cm;if(n.iter(s,e.line+1,(function(a){c&&r.collapsed&&!c.options.lineWrapping&&jt(a)==c.display.maxLine&&(l=!0),r.collapsed&&s!=t.line&&Zn(a,0),function(n,t,e){var a=e&&window.WeakSet&&(e.markedSpans||(e.markedSpans=new WeakSet));a&&a.has(n.markedSpans)?n.markedSpans.push(t):(n.markedSpans=n.markedSpans?n.markedSpans.concat([t]):[t],a&&a.add(n.markedSpans)),t.marker.attachLine(n)}(a,new _t(r,s==t.line?t.ch:null,s==e.line?e.ch:null),n.cm&&n.cm.curOp),++s})),r.collapsed&&n.iter(t.line,e.line+1,(function(t){Wt(n,t)&&Zn(t,0)})),r.clearOnEnter&&un(r,"beforeCursorEnter",(function(){return r.clear()})),r.readOnly&&(kt=!0,(n.history.done.length||n.history.undone.length)&&n.clearHistory()),r.collapsed&&(r.id=++_r,r.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),r.collapsed)pa(c,t.line,e.line+1);else if(r.className||r.startStyle||r.endStyle||r.css||r.attributes||r.title)for(var d=t.line;d<=e.line;d++)ua(c,d,"text");r.atomic&&ar(c.doc),se(c,"markerAdded",c,r)}return r}Fr.prototype.clear=function(){if(!this.explicitlyCleared){var n=this.doc.cm,t=n&&!n.curOp;if(t&&Ka(n),xn(this,"clear")){var e=this.find();e&&se(this,"clear",e.from,e.to)}for(var a=null,o=null,r=0;rn.display.maxLineLength&&(n.display.maxLine=c,n.display.maxLineLength=d,n.display.maxLineChanged=!0)}null!=a&&n&&this.collapsed&&pa(n,a,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,n&&ar(n.doc)),n&&se(n,"markerCleared",n,this,a,o),t&&Ga(n),this.parent&&this.parent.clear()}},Fr.prototype.find=function(n,t){var e,a;null==n&&"bookmark"==this.type&&(n=1);for(var o=0;o=0;s--)dr(this,a[s]);l?Jo(this,l):this.cm&&Ma(this.cm)})),undo:eo((function(){ur(this,"undo")})),redo:eo((function(){ur(this,"redo")})),undoSelection:eo((function(){ur(this,"undo",!0)})),redoSelection:eo((function(){ur(this,"redo",!0)})),setExtending:function(n){this.extend=n},getExtending:function(){return this.extend},historySize:function(){for(var n=this.history,t=0,e=0,a=0;a=n.ch)&&t.push(o.marker.parent||o.marker)}return t},findMarks:function(n,t,e){n=st(this,n),t=st(this,t);var a=[],o=n.line;return this.iter(n.line,t.line+1,(function(r){var i=r.markedSpans;if(i)for(var l=0;l=s.to||null==s.from&&o!=n.line||null!=s.from&&o==t.line&&s.from>=t.ch||e&&!e(s.marker)||a.push(s.marker.parent||s.marker)}++o})),a},getAllMarks:function(){var n=[];return this.iter((function(t){var e=t.markedSpans;if(e)for(var a=0;an)return t=n,!0;n-=r,++e})),st(this,tt(e,t))},indexFromPos:function(n){var t=(n=st(this,n)).ch;if(n.linet&&(t=n.from),null!=n.to&&n.to-1)return t.state.draggingText(n),void setTimeout((function(){return t.display.input.focus()}),20);try{var p=n.dataTransfer.getData("Text");if(p){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),tr(t.doc,Co(e,e)),u)for(var b=0;b=0;t--)mr(n.doc,"",a[t].from,a[t].to,"+delete");Ma(n)}))}function Qr(n,t,e){var a=on(n.text,t+e,e);return a<0||a>n.text.length?null:a}function Jr(n,t,e){var a=Qr(n,t.ch,e);return null==a?null:new tt(t.line,a,e<0?"after":"before")}function ni(n,t,e,a,o){if(n){"rtl"==t.doc.direction&&(o=-o);var r=dn(e,t.doc.direction);if(r){var i,l=o<0?V(r):r[0],s=o<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var c=Be(t,e);i=o<0?e.text.length-1:0;var d=Ae(t,c,i).top;i=rn((function(n){return Ae(t,c,n).top==d}),o<0==(1==l.level)?l.from:l.to-1,i),"before"==s&&(i=Qr(e,i,1))}else i=o<0?l.to:l.from;return new tt(a,i,s)}}return new tt(a,o<0?e.text.length:0,o<0?"before":"after")}Ur.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ur.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ur.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ur.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ur.default=x?Ur.macDefault:Ur.pcDefault;var ti={selectAll:sr,singleSelection:function(n){return n.setSelection(n.getCursor("anchor"),n.getCursor("head"),W)},killLine:function(n){return $r(n,(function(t){if(t.empty()){var e=Gn(n.doc,t.head.line).text.length;return t.head.ch==e&&t.head.line0)o=new tt(o.line,o.ch+1),n.replaceRange(r.charAt(o.ch-1)+r.charAt(o.ch-2),tt(o.line,o.ch-2),o,"+transpose");else if(o.line>n.doc.first){var i=Gn(n.doc,o.line-1).text;i&&(o=new tt(o.line,1),n.replaceRange(r.charAt(0)+n.doc.lineSeparator()+i.charAt(i.length-1),tt(o.line-1,i.length-1),o,"+transpose"))}e.push(new _o(o,o))}n.setSelections(e)}))},newlineAndIndent:function(n){return Ja(n,(function(){for(var t=n.listSelections(),e=t.length-1;e>=0;e--)n.replaceRange(n.doc.lineSeparator(),t[e].anchor,t[e].head,"+input");t=n.listSelections();for(var a=0;a-1&&(et((o=c.ranges[o]).from(),t)<0||t.xRel>0)&&(et(o.to(),t)>0||t.xRel<0)?function(n,t,e,a){var o=n.display,r=!1,c=no(n,(function(t){s&&(o.scroller.draggable=!1),n.state.draggingText=!1,n.state.delayingBlurEvent&&(n.hasFocus()?n.state.delayingBlurEvent=!1:za(n)),fn(o.wrapper.ownerDocument,"mouseup",c),fn(o.wrapper.ownerDocument,"mousemove",d),fn(o.scroller,"dragstart",p),fn(o.scroller,"drop",c),r||(yn(t),a.addNew||Xo(n.doc,e,null,null,a.extend),s&&!u||i&&9==l?setTimeout((function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()}),20):o.input.focus())})),d=function(n){r=r||Math.abs(t.clientX-n.clientX)+Math.abs(t.clientY-n.clientY)>=10},p=function(){return r=!0};s&&(o.scroller.draggable=!0),n.state.draggingText=c,c.copy=!a.moveOnDrag,un(o.wrapper.ownerDocument,"mouseup",c),un(o.wrapper.ownerDocument,"mousemove",d),un(o.scroller,"dragstart",p),un(o.scroller,"drop",c),n.state.delayingBlurEvent=!0,setTimeout((function(){return o.input.focus()}),20),o.scroller.dragDrop&&o.scroller.dragDrop()}(n,a,t,r):function(n,t,e,a){i&&za(n);var o=n.display,r=n.doc;yn(t);var l,s,c=r.sel,d=c.ranges;if(a.addNew&&!a.extend?(s=r.sel.contains(e),l=s>-1?d[s]:new _o(e,e)):(l=r.sel.primary(),s=r.sel.primIndex),"rectangle"==a.unit)a.addNew||(l=new _o(e,e)),e=ca(n,t,!0,!0),s=-1;else{var p=gi(n,e,a.unit);l=a.extend?Vo(l,p.anchor,p.head,a.extend):p}a.addNew?-1==s?(s=d.length,nr(r,Fo(n,d.concat([l]),s),{scroll:!1,origin:"*mouse"})):d.length>1&&d[s].empty()&&"char"==a.unit&&!a.extend?(nr(r,Fo(n,d.slice(0,s).concat(d.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),c=r.sel):$o(r,s,l,U):(s=0,nr(r,new zo([l],0),U),c=r.sel);var u=e;function b(t){if(0!=et(u,t))if(u=t,"rectangle"==a.unit){for(var o=[],i=n.options.tabSize,d=N(Gn(r,e.line).text,e.ch,i),p=N(Gn(r,t.line).text,t.ch,i),b=Math.min(d,p),f=Math.max(d,p),m=Math.min(e.line,t.line),h=Math.min(n.lastLine(),Math.max(e.line,t.line));m<=h;m++){var g=Gn(r,m).text,x=q(g,b,i);b==f?o.push(new _o(tt(m,x),tt(m,x))):g.length>x&&o.push(new _o(tt(m,x),tt(m,q(g,f,i))))}o.length||o.push(new _o(e,e)),nr(r,Fo(n,c.ranges.slice(0,s).concat(o),s),{origin:"*mouse",scroll:!1}),n.scrollIntoView(t)}else{var v,y=l,w=gi(n,t,a.unit),k=y.anchor;et(w.anchor,k)>0?(v=w.head,k=it(y.from(),w.anchor)):(v=w.anchor,k=rt(y.to(),w.head));var z=c.ranges.slice(0);z[s]=function(n,t){var e=t.anchor,a=t.head,o=Gn(n.doc,e.line);if(0==et(e,a)&&e.sticky==a.sticky)return t;var r=dn(o);if(!r)return t;var i=sn(r,e.ch,e.sticky),l=r[i];if(l.from!=e.ch&&l.to!=e.ch)return t;var s,c=i+(l.from==e.ch==(1!=l.level)?0:1);if(0==c||c==r.length)return t;if(a.line!=e.line)s=(a.line-e.line)*("ltr"==n.doc.direction?1:-1)>0;else{var d=sn(r,a.ch,a.sticky),p=d-i||(a.ch-e.ch)*(1==l.level?-1:1);s=d==c-1||d==c?p<0:p>0}var u=r[c+(s?-1:0)],b=s==(1==u.level),f=b?u.from:u.to,m=b?"after":"before";return e.ch==f&&e.sticky==m?t:new _o(new tt(e.line,f,m),a)}(n,new _o(st(r,k),v)),nr(r,Fo(n,z,s),U)}}var f=o.wrapper.getBoundingClientRect(),m=0;function h(t){n.state.selectingText=!1,m=1/0,t&&(yn(t),o.input.focus()),fn(o.wrapper.ownerDocument,"mousemove",g),fn(o.wrapper.ownerDocument,"mouseup",x),r.history.lastSelOrigin=null}var g=no(n,(function(t){0!==t.buttons&&Fn(t)?function t(e){var i=++m,l=ca(n,e,!0,"rectangle"==a.unit);if(l)if(0!=et(l,u)){n.curOp.focus=B(),b(l);var s=Sa(o,r);(l.line>=s.to||l.linef.bottom?20:0;c&&setTimeout(no(n,(function(){m==i&&(o.scroller.scrollTop+=c,t(e))})),50)}}(t):h(t)})),x=no(n,h);n.state.selectingText=x,un(o.wrapper.ownerDocument,"mousemove",g),un(o.wrapper.ownerDocument,"mouseup",x)}(n,a,t,r)}(t,a,r,n):_n(n)==e.scroller&&yn(n):2==o?(a&&Xo(t.doc,a),setTimeout((function(){return e.input.focus()}),20)):3==o&&(z?t.display.input.onContextMenu(n):za(t)))}}function gi(n,t,e){if("char"==e)return new _o(t,t);if("word"==e)return n.findWordAt(t);if("line"==e)return new _o(tt(t.line,0),st(n.doc,tt(t.line+1,0)));var a=e(n,t);return new _o(a.from,a.to)}function xi(n,t,e,a){var o,r;if(t.touches)o=t.touches[0].clientX,r=t.touches[0].clientY;else try{o=t.clientX,r=t.clientY}catch(n){return!1}if(o>=Math.floor(n.display.gutters.getBoundingClientRect().right))return!1;a&&yn(t);var i=n.display,l=i.lineDiv.getBoundingClientRect();if(r>l.bottom||!xn(n,e))return kn(t);r-=l.top-i.viewOffset;for(var s=0;s=o)return mn(n,e,n,Qn(n.doc,r),n.display.gutterSpecs[s].className,t),kn(t)}}function vi(n,t){return xi(n,t,"gutterClick",!0)}function yi(n,t){ke(n.display,t)||function(n,t){return!!xn(n,"gutterContextMenu")&&xi(n,t,"gutterContextMenu",!1)}(n,t)||hn(n,t,"contextmenu")||z||n.display.input.onContextMenu(t)}function wi(n){n.display.wrapper.className=n.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+n.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Re(n)}mi.prototype.compare=function(n,t,e){return this.time+400>n&&0==et(t,this.pos)&&e==this.button};var ki={toString:function(){return"CodeMirror.Init"}},zi={},_i={};function Fi(n,t,e){if(!t!=!(e&&e!=ki)){var a=n.display.dragFunctions,o=t?un:fn;o(n.display.scroller,"dragstart",a.start),o(n.display.scroller,"dragenter",a.enter),o(n.display.scroller,"dragover",a.over),o(n.display.scroller,"dragleave",a.leave),o(n.display.scroller,"drop",a.drop)}}function Ci(n){n.options.lineWrapping?(A(n.display.wrapper,"CodeMirror-wrap"),n.display.sizer.style.minWidth="",n.display.sizerWidth=null):(C(n.display.wrapper,"CodeMirror-wrap"),Kt(n)),sa(n),pa(n),Re(n),setTimeout((function(){return Ha(n)}),100)}function Ei(n,t){var e=this;if(!(this instanceof Ei))return new Ei(n,t);this.options=t=t?P(t):{},P(zi,t,!1);var a=t.value;"string"==typeof a?a=new Mr(a,t.mode,null,t.lineSeparator,t.direction):t.mode&&(a.modeOption=t.mode),this.doc=a;var o=new Ei.inputStyles[t.inputStyle](this),r=this.display=new go(n,a,o,t);for(var c in r.wrapper.CodeMirror=this,wi(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Ya(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new j,keySeq:null,specialChars:null},t.autofocus&&!g&&r.input.focus(),i&&l<11&&setTimeout((function(){return e.display.input.reset(!0)}),20),function(n){var t=n.display;un(t.scroller,"mousedown",no(n,hi)),un(t.scroller,"dblclick",i&&l<11?no(n,(function(t){if(!hn(n,t)){var e=ca(n,t);if(e&&!vi(n,t)&&!ke(n.display,t)){yn(t);var a=n.findWordAt(e);Xo(n.doc,a.anchor,a.head)}}})):function(t){return hn(n,t)||yn(t)}),un(t.scroller,"contextmenu",(function(t){return yi(n,t)})),un(t.input.getField(),"contextmenu",(function(e){t.scroller.contains(e.target)||yi(n,e)}));var e,a={end:0};function o(){t.activeTouch&&(e=setTimeout((function(){return t.activeTouch=null}),1e3),(a=t.activeTouch).end=+new Date)}function r(n,t){if(null==t.left)return!0;var e=t.left-n.left,a=t.top-n.top;return e*e+a*a>400}un(t.scroller,"touchstart",(function(o){if(!hn(n,o)&&!function(n){if(1!=n.touches.length)return!1;var t=n.touches[0];return t.radiusX<=1&&t.radiusY<=1}(o)&&!vi(n,o)){t.input.ensurePolled(),clearTimeout(e);var r=+new Date;t.activeTouch={start:r,moved:!1,prev:r-a.end<=300?a:null},1==o.touches.length&&(t.activeTouch.left=o.touches[0].pageX,t.activeTouch.top=o.touches[0].pageY)}})),un(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),un(t.scroller,"touchend",(function(e){var a=t.activeTouch;if(a&&!ke(t,e)&&null!=a.left&&!a.moved&&new Date-a.start<300){var i,l=n.coordsChar(t.activeTouch,"page");i=!a.prev||r(a,a.prev)?new _o(l,l):!a.prev.prev||r(a,a.prev.prev)?n.findWordAt(l):new _o(tt(l.line,0),st(n.doc,tt(l.line+1,0))),n.setSelection(i.anchor,i.head),n.focus(),yn(e)}o()})),un(t.scroller,"touchcancel",o),un(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Ta(n,t.scroller.scrollTop),Pa(n,t.scroller.scrollLeft,!0),mn(n,"scroll",n))})),un(t.scroller,"mousewheel",(function(t){return ko(n,t)})),un(t.scroller,"DOMMouseScroll",(function(t){return ko(n,t)})),un(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){hn(n,t)||zn(t)},over:function(t){hn(n,t)||(function(n,t){var e=ca(n,t);if(e){var a=document.createDocumentFragment();xa(n,e,a),n.display.dragCursor||(n.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),n.display.lineSpace.insertBefore(n.display.dragCursor,n.display.cursorDiv)),S(n.display.dragCursor,a)}}(n,t),zn(t))},start:function(t){return function(n,t){if(i&&(!n.state.draggingText||+new Date-Br<100))zn(t);else if(!hn(n,t)&&!ke(n.display,t)&&(t.dataTransfer.setData("Text",n.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!u)){var e=O("img",null,null,"position: fixed; left: 0; top: 0;");e.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",p&&(e.width=e.height=1,n.display.wrapper.appendChild(e),e._top=e.offsetTop),t.dataTransfer.setDragImage(e,0,0),p&&e.parentNode.removeChild(e)}}(n,t)},drop:no(n,Ar),leave:function(t){hn(n,t)||Lr(n)}};var s=t.input.getField();un(s,"keyup",(function(t){return pi.call(n,t)})),un(s,"keydown",no(n,di)),un(s,"keypress",no(n,ui)),un(s,"focus",(function(t){return _a(n,t)})),un(s,"blur",(function(t){return Fa(n,t)}))}(this),Pr(),Ka(this),this.curOp.forceUpdate=!0,Io(this,a),t.autofocus&&!g||this.hasFocus()?setTimeout((function(){e.hasFocus()&&!e.state.focused&&_a(e)}),20):Fa(this),_i)_i.hasOwnProperty(c)&&_i[c](this,t[c],ki);bo(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!a)return;e="prev"}}else c=0,e="not";"prev"==e?c=t>r.first?N(Gn(r,t-1).text,null,i):0:"add"==e?c=s+n.options.indentUnit:"subtract"==e?c=s-n.options.indentUnit:"number"==typeof e&&(c=s+e),c=Math.max(0,c);var p="",u=0;if(n.options.indentWithTabs)for(var b=Math.floor(c/i);b;--b)u+=i,p+="\t";if(ui,s=Bn(t),c=null;if(l&&a.ranges.length>1)if(Di&&Di.text.join("\n")==t){if(a.ranges.length%Di.text.length==0){c=[];for(var d=0;d=0;u--){var b=a.ranges[u],f=b.from(),m=b.to();b.empty()&&(e&&e>0?f=tt(f.line,f.ch-e):n.state.overwrite&&!l?m=tt(m.line,Math.min(Gn(r,m.line).text.length,m.ch+V(s).length)):l&&Di&&Di.lineWise&&Di.text.join("\n")==s.join("\n")&&(f=m=tt(f.line,0)));var h={from:f,to:m,text:c?c[u%c.length]:s,origin:o||(l?"paste":n.state.cutIncoming>i?"cut":"+input")};dr(n.doc,h),se(n,"inputRead",n,h)}t&&!l&&Li(n,t),Ma(n),n.curOp.updateInput<2&&(n.curOp.updateInput=p),n.curOp.typing=!0,n.state.pasteIncoming=n.state.cutIncoming=-1}function Ai(n,t){var e=n.clipboardData&&n.clipboardData.getData("Text");if(e)return n.preventDefault(),t.isReadOnly()||t.options.disableInput||Ja(t,(function(){return Bi(t,e,0,null,"paste")})),!0}function Li(n,t){if(n.options.electricChars&&n.options.smartIndent)for(var e=n.doc.sel,a=e.ranges.length-1;a>=0;a--){var o=e.ranges[a];if(!(o.head.ch>100||a&&e.ranges[a-1].head.line==o.head.line)){var r=n.getModeAt(o.head),i=!1;if(r.electricChars){for(var l=0;l-1){i=Oi(n,o.head.line,"smart");break}}else r.electricInput&&r.electricInput.test(Gn(n.doc,o.head.line).text.slice(0,o.head.ch))&&(i=Oi(n,o.head.line,"smart"));i&&se(n,"electricInput",n,o.head.line)}}}function Ti(n){for(var t=[],e=[],a=0;a0?0:-1));if(isNaN(d))i=null;else{var p=e>0?d>=55296&&d<56320:d>=56320&&d<57343;i=new tt(t.line,Math.max(0,Math.min(l.text.length,t.ch+e*(p?2:1))),-e)}}else i=o?function(n,t,e,a){var o=dn(t,n.doc.direction);if(!o)return Jr(t,e,a);e.ch>=t.text.length?(e.ch=t.text.length,e.sticky="before"):e.ch<=0&&(e.ch=0,e.sticky="after");var r=sn(o,e.ch,e.sticky),i=o[r];if("ltr"==n.doc.direction&&i.level%2==0&&(a>0?i.to>e.ch:i.from=i.from&&u>=d.begin)){var b=p?"before":"after";return new tt(e.line,u,b)}}var f=function(n,t,a){for(var r=function(n,t){return t?new tt(e.line,s(n,1),"before"):new tt(e.line,n,"after")};n>=0&&n0==(1!=i.level),c=l?a.begin:s(a.end,-1);if(i.from<=c&&c0?d.end:s(d.begin,-1);return null==h||a>0&&h==t.text.length||!(m=f(a>0?0:o.length-1,a,c(h)))?null:m}(n.cm,l,t,e):Jr(l,t,e);if(null==i){if(r||(c=t.line+s)=n.first+n.size||(t=new tt(c,t.ch,t.sticky),!(l=Gn(n,c))))return!1;t=ni(o,n.cm,l,t.line,s)}else t=i;return!0}if("char"==a||"codepoint"==a)c();else if("column"==a)c(!0);else if("word"==a||"group"==a)for(var d=null,p="group"==a,u=n.cm&&n.cm.getHelper(t,"wordChars"),b=!0;!(e<0)||c(!b);b=!1){var f=l.text.charAt(t.ch)||"\n",m=nn(f,u)?"w":p&&"\n"==f?"n":!p||/\s/.test(f)?null:"p";if(!p||b||m||(m="s"),d&&d!=m){e<0&&(e=1,c(),t.sticky="after");break}if(m&&(d=m),e>0&&!c(!b))break}var h=ir(n,t,r,i,!0);return at(r,h)&&(h.hitSide=!0),h}function ji(n,t,e,a){var o,r,i=n.doc,l=t.left;if("page"==a){var s=Math.min(n.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*aa(n.display),3);o=(e>0?t.bottom:t.top)+e*c}else"line"==a&&(o=e>0?t.bottom+3:t.top-3);for(;(r=Ze(n,l,o)).outside;){if(e<0?o<=0:o>=i.height){r.hitSide=!0;break}o+=5*e}return r}var Ri=function(n){this.cm=n,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new j,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Hi(n,t){var e=Me(n,t.line);if(!e||e.hidden)return null;var a=Gn(n.doc,t.line),o=Oe(e,a,t.line),r=dn(a,n.doc.direction),i="left";r&&(i=sn(r,t.ch)%2?"right":"left");var l=Ie(o.map,t.ch,i);return l.offset="right"==l.collapse?l.end:l.start,l}function Wi(n,t){return t&&(n.bad=!0),n}function Ui(n,t,e){var a;if(t==n.display.lineDiv){if(!(a=n.display.lineDiv.childNodes[e]))return Wi(n.clipPos(tt(n.display.viewTo-1)),!0);t=null,e=0}else for(a=t;;a=a.parentNode){if(!a||a==n.display.lineDiv)return null;if(a.parentNode&&a.parentNode==n.display.lineDiv)break}for(var o=0;o=t.display.viewTo||r.line=t.display.viewFrom&&Hi(t,o)||{node:s[0].measure.map[2],offset:0},d=r.linea.firstLine()&&(i=tt(i.line-1,Gn(a.doc,i.line-1).length)),l.ch==Gn(a.doc,l.line).text.length&&l.lineo.viewTo-1)return!1;i.line==o.viewFrom||0==(n=da(a,i.line))?(t=$n(o.view[0].line),e=o.view[0].node):(t=$n(o.view[n].line),e=o.view[n-1].node.nextSibling);var s,c,d=da(a,l.line);if(d==o.view.length-1?(s=o.viewTo-1,c=o.lineDiv.lastChild):(s=$n(o.view[d+1].line)-1,c=o.view[d+1].node.previousSibling),!e)return!1;for(var p=a.doc.splitLines(function(n,t,e,a,o){var r="",i=!1,l=n.doc.lineSeparator(),s=!1;function c(){i&&(r+=l,s&&(r+=l),i=s=!1)}function d(n){n&&(c(),r+=n)}function p(t){if(1==t.nodeType){var e=t.getAttribute("cm-text");if(e)return void d(e);var r,u=t.getAttribute("cm-marker");if(u){var b=n.findMarks(tt(a,0),tt(o+1,0),(h=+u,function(n){return n.id==h}));return void(b.length&&(r=b[0].find(0))&&d(Vn(n.doc,r.from,r.to).join(l)))}if("false"==t.getAttribute("contenteditable"))return;var f=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;f&&c();for(var m=0;m1&&u.length>1;)if(V(p)==V(u))p.pop(),u.pop(),s--;else{if(p[0]!=u[0])break;p.shift(),u.shift(),t++}for(var b=0,f=0,m=p[0],h=u[0],g=Math.min(m.length,h.length);bi.ch&&x.charCodeAt(x.length-f-1)==v.charCodeAt(v.length-f-1);)b--,f++;p[p.length-1]=x.slice(0,x.length-f).replace(/^\u200b+/,""),p[0]=p[0].slice(b).replace(/\u200b+$/,"");var w=tt(t,b),k=tt(s,u.length?V(u).length-f:0);return p.length>1||p[0]||et(w,k)?(mr(a.doc,p,w,k,"+input"),!0):void 0},Ri.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ri.prototype.reset=function(){this.forceCompositionEnd()},Ri.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ri.prototype.readFromDOMSoon=function(){var n=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(n.readDOMTimeout=null,n.composing){if(!n.composing.done)return;n.composing=null}n.updateFromDOM()}),80))},Ri.prototype.updateFromDOM=function(){var n=this;!this.cm.isReadOnly()&&this.pollContent()||Ja(this.cm,(function(){return pa(n.cm)}))},Ri.prototype.setUneditable=function(n){n.contentEditable="false"},Ri.prototype.onKeyPress=function(n){0==n.charCode||this.composing||(n.preventDefault(),this.cm.isReadOnly()||no(this.cm,Bi)(this.cm,String.fromCharCode(null==n.charCode?n.keyCode:n.charCode),0))},Ri.prototype.readOnlyChanged=function(n){this.div.contentEditable=String("nocursor"!=n)},Ri.prototype.onContextMenu=function(){},Ri.prototype.resetPosition=function(){},Ri.prototype.needsContentAttribute=!0;var qi=function(n){this.cm=n,this.prevInput="",this.pollingFast=!1,this.polling=new j,this.hasSelection=!1,this.composing=null};qi.prototype.init=function(n){var t=this,e=this,a=this.cm;this.createField(n);var o=this.textarea;function r(n){if(!hn(a,n)){if(a.somethingSelected())Mi({lineWise:!1,text:a.getSelections()});else{if(!a.options.lineWiseCopyCut)return;var t=Ti(a);Mi({lineWise:!0,text:t.text}),"cut"==n.type?a.setSelections(t.ranges,null,W):(e.prevInput="",o.value=t.text.join("\n"),T(o))}"cut"==n.type&&(a.state.cutIncoming=+new Date)}}n.wrapper.insertBefore(this.wrapper,n.wrapper.firstChild),m&&(o.style.width="0px"),un(o,"input",(function(){i&&l>=9&&t.hasSelection&&(t.hasSelection=null),e.poll()})),un(o,"paste",(function(n){hn(a,n)||Ai(n,a)||(a.state.pasteIncoming=+new Date,e.fastPoll())})),un(o,"cut",r),un(o,"copy",r),un(n.scroller,"paste",(function(t){if(!ke(n,t)&&!hn(a,t)){if(!o.dispatchEvent)return a.state.pasteIncoming=+new Date,void e.focus();var r=new Event("paste");r.clipboardData=t.clipboardData,o.dispatchEvent(r)}})),un(n.lineSpace,"selectstart",(function(t){ke(n,t)||yn(t)})),un(o,"compositionstart",(function(){var n=a.getCursor("from");e.composing&&e.composing.range.clear(),e.composing={start:n,range:a.markText(n,a.getCursor("to"),{className:"CodeMirror-composing"})}})),un(o,"compositionend",(function(){e.composing&&(e.poll(),e.composing.range.clear(),e.composing=null)}))},qi.prototype.createField=function(n){this.wrapper=Pi(),this.textarea=this.wrapper.firstChild},qi.prototype.screenReaderLabelChanged=function(n){n?this.textarea.setAttribute("aria-label",n):this.textarea.removeAttribute("aria-label")},qi.prototype.prepareSelection=function(){var n=this.cm,t=n.display,e=n.doc,a=ga(n);if(n.options.moveInputWithCursor){var o=Ge(n,e.sel.primary().head,"div"),r=t.wrapper.getBoundingClientRect(),i=t.lineDiv.getBoundingClientRect();a.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,o.top+i.top-r.top)),a.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,o.left+i.left-r.left))}return a},qi.prototype.showSelection=function(n){var t=this.cm.display;S(t.cursorDiv,n.cursors),S(t.selectionDiv,n.selection),null!=n.teTop&&(this.wrapper.style.top=n.teTop+"px",this.wrapper.style.left=n.teLeft+"px")},qi.prototype.reset=function(n){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var e=t.getSelection();this.textarea.value=e,t.state.focused&&T(this.textarea),i&&l>=9&&(this.hasSelection=e)}else n||(this.prevInput=this.textarea.value="",i&&l>=9&&(this.hasSelection=null))}},qi.prototype.getField=function(){return this.textarea},qi.prototype.supportsTouch=function(){return!1},qi.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!g||B()!=this.textarea))try{this.textarea.focus()}catch(n){}},qi.prototype.blur=function(){this.textarea.blur()},qi.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},qi.prototype.receivedFocus=function(){this.slowPoll()},qi.prototype.slowPoll=function(){var n=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){n.poll(),n.cm.state.focused&&n.slowPoll()}))},qi.prototype.fastPoll=function(){var n=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function e(){t.poll()||n?(t.pollingFast=!1,t.slowPoll()):(n=!0,t.polling.set(60,e))}))},qi.prototype.poll=function(){var n=this,t=this.cm,e=this.textarea,a=this.prevInput;if(this.contextMenuPending||!t.state.focused||An(e)&&!a&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var o=e.value;if(o==a&&!t.somethingSelected())return!1;if(i&&l>=9&&this.hasSelection===o||x&&/[\uf700-\uf7ff]/.test(o))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var r=o.charCodeAt(0);if(8203!=r||a||(a="​"),8666==r)return this.reset(),this.cm.execCommand("undo")}for(var s=0,c=Math.min(a.length,o.length);s1e3||o.indexOf("\n")>-1?e.value=n.prevInput="":n.prevInput=o,n.composing&&(n.composing.range.clear(),n.composing.range=t.markText(n.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},qi.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},qi.prototype.onKeyPress=function(){i&&l>=9&&(this.hasSelection=null),this.fastPoll()},qi.prototype.onContextMenu=function(n){var t=this,e=t.cm,a=e.display,o=t.textarea;t.contextMenuPending&&t.contextMenuPending();var r=ca(e,n),c=a.scroller.scrollTop;if(r&&!p){e.options.resetSelectionOnContextMenu&&-1==e.doc.sel.contains(r)&&no(e,nr)(e.doc,Co(r),W);var d,u=o.style.cssText,b=t.wrapper.style.cssText,f=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",o.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(n.clientY-f.top-5)+"px; left: "+(n.clientX-f.left-5)+"px;\n z-index: 1000; background: "+(i?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",s&&(d=window.scrollY),a.input.focus(),s&&window.scrollTo(null,d),a.input.reset(),e.somethingSelected()||(o.value=t.prevInput=" "),t.contextMenuPending=g,a.selForContextMenu=e.doc.sel,clearTimeout(a.detectingSelectAll),i&&l>=9&&h(),z){zn(n);var m=function(){fn(window,"mouseup",m),setTimeout(g,20)};un(window,"mouseup",m)}else setTimeout(g,50)}function h(){if(null!=o.selectionStart){var n=e.somethingSelected(),r="​"+(n?o.value:"");o.value="⇚",o.value=r,t.prevInput=n?"":"​",o.selectionStart=1,o.selectionEnd=r.length,a.selForContextMenu=e.doc.sel}}function g(){if(t.contextMenuPending==g&&(t.contextMenuPending=!1,t.wrapper.style.cssText=b,o.style.cssText=u,i&&l<9&&a.scrollbars.setScrollTop(a.scroller.scrollTop=c),null!=o.selectionStart)){(!i||i&&l<9)&&h();var n=0,r=function(){a.selForContextMenu==e.doc.sel&&0==o.selectionStart&&o.selectionEnd>0&&"​"==t.prevInput?no(e,sr)(e):n++<10?a.detectingSelectAll=setTimeout(r,500):(a.selForContextMenu=null,a.input.reset())};a.detectingSelectAll=setTimeout(r,200)}}},qi.prototype.readOnlyChanged=function(n){n||this.reset(),this.textarea.disabled="nocursor"==n,this.textarea.readOnly=!!n},qi.prototype.setUneditable=function(){},qi.prototype.needsContentAttribute=!1,function(n){var t=n.optionHandlers;function e(e,a,o,r){n.defaults[e]=a,o&&(t[e]=r?function(n,t,e){e!=ki&&o(n,t,e)}:o)}n.defineOption=e,n.Init=ki,e("value","",(function(n,t){return n.setValue(t)}),!0),e("mode",null,(function(n,t){n.doc.modeOption=t,Mo(n)}),!0),e("indentUnit",2,Mo,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,(function(n){Bo(n),Re(n),pa(n)}),!0),e("lineSeparator",null,(function(n,t){if(n.doc.lineSep=t,t){var e=[],a=n.doc.first;n.doc.iter((function(n){for(var o=0;;){var r=n.text.indexOf(t,o);if(-1==r)break;o=r+t.length,e.push(tt(a,r))}a++}));for(var o=e.length-1;o>=0;o--)mr(n.doc,t,e[o],tt(e[o].line,e[o].ch+t.length))}})),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(n,t,e){n.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),e!=ki&&n.refresh()})),e("specialCharPlaceholder",Jt,(function(n){return n.refresh()}),!0),e("electricChars",!0),e("inputStyle",g?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),e("spellcheck",!1,(function(n,t){return n.getInputField().spellcheck=t}),!0),e("autocorrect",!1,(function(n,t){return n.getInputField().autocorrect=t}),!0),e("autocapitalize",!1,(function(n,t){return n.getInputField().autocapitalize=t}),!0),e("rtlMoveVisually",!y),e("wholeLineUpdateBefore",!0),e("theme","default",(function(n){wi(n),ho(n)}),!0),e("keyMap","default",(function(n,t,e){var a=Zr(t),o=e!=ki&&Zr(e);o&&o.detach&&o.detach(n,a),a.attach&&a.attach(n,o||null)})),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,Ci,!0),e("gutters",[],(function(n,t){n.display.gutterSpecs=fo(t,n.options.lineNumbers),ho(n)}),!0),e("fixedGutter",!0,(function(n,t){n.display.gutters.style.left=t?ia(n.display)+"px":"0",n.refresh()}),!0),e("coverGutterNextToScrollbar",!1,(function(n){return Ha(n)}),!0),e("scrollbarStyle","native",(function(n){Ya(n),Ha(n),n.display.scrollbars.setScrollTop(n.doc.scrollTop),n.display.scrollbars.setScrollLeft(n.doc.scrollLeft)}),!0),e("lineNumbers",!1,(function(n,t){n.display.gutterSpecs=fo(n.options.gutters,t),ho(n)}),!0),e("firstLineNumber",1,ho,!0),e("lineNumberFormatter",(function(n){return n}),ho,!0),e("showCursorWhenSelecting",!1,ha,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("selectionsMayTouch",!1),e("readOnly",!1,(function(n,t){"nocursor"==t&&(Fa(n),n.display.input.blur()),n.display.input.readOnlyChanged(t)})),e("screenReaderLabel",null,(function(n,t){t=""===t?null:t,n.display.input.screenReaderLabelChanged(t)})),e("disableInput",!1,(function(n,t){t||n.display.input.reset()}),!0),e("dragDrop",!0,Fi),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,ha,!0),e("singleCursorHeightPerLine",!0,ha,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Bo,!0),e("addModeClass",!1,Bo,!0),e("pollInterval",100),e("undoDepth",200,(function(n,t){return n.doc.history.undoDepth=t})),e("historyEventDelay",1250),e("viewportMargin",10,(function(n){return n.refresh()}),!0),e("maxHighlightLength",1e4,Bo,!0),e("moveInputWithCursor",!0,(function(n,t){t||n.display.input.resetPosition()})),e("tabindex",null,(function(n,t){return n.display.input.getField().tabIndex=t||""})),e("autofocus",null),e("direction","ltr",(function(n,t){return n.doc.setDirection(t)}),!0),e("phrases",null)}(Ei),function(n){var t=n.optionHandlers,e=n.helpers={};n.prototype={constructor:n,focus:function(){window.focus(),this.display.input.focus()},setOption:function(n,e){var a=this.options,o=a[n];a[n]==e&&"mode"!=n||(a[n]=e,t.hasOwnProperty(n)&&no(this,t[n])(this,e,o),mn(this,"optionChange",this,n))},getOption:function(n){return this.options[n]},getDoc:function(){return this.doc},addKeyMap:function(n,t){this.state.keyMaps[t?"push":"unshift"](Zr(n))},removeKeyMap:function(n){for(var t=this.state.keyMaps,e=0;ee&&(Oi(this,o.head.line,n,!0),e=o.head.line,a==this.doc.sel.primIndex&&Ma(this));else{var r=o.from(),i=o.to(),l=Math.max(e,r.line);e=Math.min(this.lastLine(),i.line-(i.ch?0:1))+1;for(var s=l;s0&&$o(this.doc,a,new _o(r,c[a].to()),W)}}})),getTokenAt:function(n,t){return vt(this,n,t)},getLineTokens:function(n,t){return vt(this,tt(n),t,!0)},getTokenTypeAt:function(n){n=st(this.doc,n);var t,e=bt(this,Gn(this.doc,n.line)),a=0,o=(e.length-1)/2,r=n.ch;if(0==r)t=e[2];else for(;;){var i=a+o>>1;if((i?e[2*i-1]:0)>=r)o=i;else{if(!(e[2*i+1]r&&(n=r,o=!0),a=Gn(this.doc,n)}else a=n;return Ye(this,a,{top:0,left:0},t||"page",e||o).top+(o?this.doc.height-Yt(a):0)},defaultTextHeight:function(){return aa(this.display)},defaultCharWidth:function(){return oa(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(n,t,e,a,o){var r,i,l,s=this.display,c=(n=Ge(this,st(this.doc,n))).bottom,d=n.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==a)c=n.top;else if("above"==a||"near"==a){var p=Math.max(s.wrapper.clientHeight,this.doc.height),u=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==a||n.bottom+t.offsetHeight>p)&&n.top>t.offsetHeight?c=n.top-t.offsetHeight:n.bottom+t.offsetHeight<=p&&(c=n.bottom),d+t.offsetWidth>u&&(d=u-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==o?(d=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==o?d=0:"middle"==o&&(d=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=d+"px"),e&&(r=this,i={left:d,top:c,right:d+t.offsetWidth,bottom:c+t.offsetHeight},null!=(l=Oa(r,i)).scrollTop&&Ta(r,l.scrollTop),null!=l.scrollLeft&&Pa(r,l.scrollLeft))},triggerOnKeyDown:to(di),triggerOnKeyPress:to(ui),triggerOnKeyUp:pi,triggerOnMouseDown:to(hi),execCommand:function(n){if(ti.hasOwnProperty(n))return ti[n].call(null,this)},triggerElectric:to((function(n){Li(this,n)})),findPosH:function(n,t,e,a){var o=1;t<0&&(o=-1,t=-t);for(var r=st(this.doc,n),i=0;i0&&i(t.charAt(e-1));)--e;for(;a.5||this.options.lineWrapping)&&sa(this),mn(this,"refresh",this)})),swapDoc:to((function(n){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Io(this,n),Re(this),this.display.input.reset(),Ba(this,n.scrollLeft,n.scrollTop),this.curOp.forceScroll=!0,se(this,"swapDoc",this,t),t})),phrase:function(n){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,n)?t[n]:n},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},vn(n),n.registerHelper=function(t,a,o){e.hasOwnProperty(t)||(e[t]=n[t]={_global:[]}),e[t][a]=o},n.registerGlobalHelper=function(t,a,o,r){n.registerHelper(t,a,r),e[t]._global.push({pred:o,val:r})}}(Ei);var Ki="iter insert remove copy getEditor constructor".split(" ");for(var Gi in Mr.prototype)Mr.prototype.hasOwnProperty(Gi)&&R(Ki,Gi)<0&&(Ei.prototype[Gi]=function(n){return function(){return n.apply(this.doc,arguments)}}(Mr.prototype[Gi]));return vn(Mr),Ei.inputStyles={textarea:qi,contenteditable:Ri},Ei.defineMode=function(n){Ei.defaults.mode||"null"==n||(Ei.defaults.mode=n),Nn.apply(this,arguments)},Ei.defineMIME=function(n,t){Pn[n]=t},Ei.defineMode("null",(function(){return{token:function(n){return n.skipToEnd()}}})),Ei.defineMIME("text/plain","null"),Ei.defineExtension=function(n,t){Ei.prototype[n]=t},Ei.defineDocExtension=function(n,t){Mr.prototype[n]=t},Ei.fromTextArea=function(n,t){if((t=t?P(t):{}).value=n.value,!t.tabindex&&n.tabIndex&&(t.tabindex=n.tabIndex),!t.placeholder&&n.placeholder&&(t.placeholder=n.placeholder),null==t.autofocus){var e=B();t.autofocus=e==n||null!=n.getAttribute("autofocus")&&e==document.body}function a(){n.value=l.getValue()}var o;if(n.form&&(un(n.form,"submit",a),!t.leaveSubmitMethodAlone)){var r=n.form;o=r.submit;try{var i=r.submit=function(){a(),r.submit=o,r.submit(),r.submit=i}}catch(n){}}t.finishInit=function(e){e.save=a,e.getTextArea=function(){return n},e.toTextArea=function(){e.toTextArea=isNaN,a(),n.parentNode.removeChild(e.getWrapperElement()),n.style.display="",n.form&&(fn(n.form,"submit",a),t.leaveSubmitMethodAlone||"function"!=typeof n.form.submit||(n.form.submit=o))}},n.style.display="none";var l=Ei((function(t){return n.parentNode.insertBefore(t,n.nextSibling)}),t);return l},function(n){n.off=fn,n.on=un,n.wheelEventPixels=wo,n.Doc=Mr,n.splitLines=Bn,n.countColumn=N,n.findColumn=q,n.isWordChar=J,n.Pass=H,n.signal=mn,n.Line=Gt,n.changeEnd=Eo,n.scrollbarModel=Ua,n.Pos=tt,n.cmpPos=et,n.modes=In,n.mimeModes=Pn,n.resolveMode=jn,n.getMode=Rn,n.modeExtensions=Hn,n.extendMode=Wn,n.copyState=Un,n.startState=qn,n.innerMode=Yn,n.commands=ti,n.keyMap=Ur,n.keyName=Xr,n.isModifierKey=Gr,n.lookupKey=Kr,n.normalizeKeyMap=qr,n.StringStream=Kn,n.SharedTextMarker=Er,n.TextMarker=Fr,n.LineWidget=kr,n.e_preventDefault=yn,n.e_stopPropagation=wn,n.e_stop=zn,n.addClass=A,n.contains=M,n.rmClass=C,n.keyNames=jr}(Ei),Ei.version="5.63.3",Ei}()},function(n,t,e){!function(n){"use strict";n.defineMode("shell",(function(){var t={};function e(n,e){for(var a=0;a1&&n.eat("$");var e=n.next();return/['"({]/.test(e)?(t.tokens[0]=l(e,"("==e?"quote":"{"==e?"def":"string"),d(n,t)):(/\d/.test(e)||n.eatWhile(/\w/),t.tokens.shift(),"def")};function d(n,t){return(t.tokens[0]||i)(n,t)}return{startState:function(){return{tokens:[]}},token:function(n,t){return d(n,t)},closeBrackets:"()[]{}''\"\"``",lineComment:"#",fold:"brace"}})),n.defineMIME("text/x-sh","shell"),n.defineMIME("application/x-sh","shell")}(e(62))},function(n,t,e){var a=e(198),o=e(3);"string"==typeof a&&(a=[[n.i,a,""]]),n.exports=a.locals||{},n.exports._getContent=function(){return a},n.exports._getCss=function(){return a.toString()},n.exports._insertCss=function(n){return o(a,n)}},function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CHANGE_LOCAL_IP=void 0,t.CHANGE_LOCAL_IP="CHANGE_LOCAL_IP"},function(n,t,e){n.exports=e.p+"font/iconfont.35d9a9ed.eot"},function(n,t,e){"use strict";var a=this&&this.__createBinding||(Object.create?function(n,t,e,a){void 0===a&&(a=e),Object.defineProperty(n,a,{enumerable:!0,get:function(){return t[e]}})}:function(n,t,e,a){void 0===a&&(a=e),n[a]=t[e]}),o=this&&this.__setModuleDefault||(Object.create?function(n,t){Object.defineProperty(n,"default",{enumerable:!0,value:t})}:function(n,t){n.default=t}),r=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)"default"!==e&&Object.prototype.hasOwnProperty.call(n,e)&&a(t,n,e);return o(t,n),t},i=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(t,"__esModule",{value:!0});var l=r(e(0)),s=(r(e(68)),e(9)),c=e(6),d=e(22),p=(e(69),i(e(70))),u=i(e(71)),b=e(230),f=i(e(37));e(234),e(236);t.default=function(n,t){var e=n.state.url,a=(0,d.matchRoutes)(f.default,e).map((function(n){var t=n.route,e=t.component&&t.component.fetch;return e instanceof Function?e():Promise.resolve(null)}));return Promise.all(a).then((function(t){var a=n.state;t.forEach((function(n){Object.assign(a,n)})),n.state=Object.assign({},n.state,a);var o=(0,b.create)(a);return function(){return l.createElement(p.default,null,l.createElement("div",{style:{height:"100%"}},l.createElement(s.Provider,{store:o},l.createElement(c.StaticRouter,{location:e,context:{}},l.createElement(u.default,null)))))}}))}},function(n,t){n.exports=require("react-dom")},function(n,t){n.exports=require("react-hot-loader")},function(n,t,e){"use strict";var a,o=this&&this.__extends||(a=function(n,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e])})(n,t)},function(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function e(){this.constructor=n}a(n,t),n.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}),r=this&&this.__createBinding||(Object.create?function(n,t,e,a){void 0===a&&(a=e),Object.defineProperty(n,a,{enumerable:!0,get:function(){return t[e]}})}:function(n,t,e,a){void 0===a&&(a=e),n[a]=t[e]}),i=this&&this.__setModuleDefault||(Object.create?function(n,t){Object.defineProperty(n,"default",{enumerable:!0,value:t})}:function(n,t){n.default=t}),l=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)"default"!==e&&Object.prototype.hasOwnProperty.call(n,e)&&r(t,n,e);return i(t,n),t};Object.defineProperty(t,"__esModule",{value:!0});var s=l(e(0)),c=function(n){function t(){return null!==n&&n.apply(this,arguments)||this}return o(t,n),t.prototype.render=function(){return s.createElement("html",null,s.createElement("head",null,s.createElement("title",null,this.props.title),s.createElement("meta",{charSet:"utf-8"}),s.createElement("meta",{name:"viewport",content:"initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"}),s.createElement("meta",{name:"keywords",content:this.props.keywords}),s.createElement("meta",{name:"description",content:this.props.description}),s.createElement("link",{rel:"shortcut icon",href:"/favicon.ico",type:"image/x-icon"}),s.createElement("link",null),s.createElement("link",{href:"https://cdn.bootcss.com/codemirror/5.48.4/codemirror.min.css",rel:"stylesheet"}),s.createElement("link",{href:"https://cdn.bootcss.com/codemirror/5.48.4/theme/dracula.min.css",rel:"stylesheet"}),s.createElement("script",{src:"https://cdn.bootcss.com/codemirror/5.48.4/codemirror.min.js"}),s.createElement("script",{src:"https://cdn.bootcss.com/codemirror/5.48.4/mode/nginx/nginx.min.js"})),s.createElement("body",null,s.createElement("div",{id:"app"},this.props.children)))},t}(s.Component);t.default=c},function(n,t,e){"use strict";var a=this&&this.__createBinding||(Object.create?function(n,t,e,a){void 0===a&&(a=e),Object.defineProperty(n,a,{enumerable:!0,get:function(){return t[e]}})}:function(n,t,e,a){void 0===a&&(a=e),n[a]=t[e]}),o=this&&this.__setModuleDefault||(Object.create?function(n,t){Object.defineProperty(n,"default",{enumerable:!0,value:t})}:function(n,t){n.default=t}),r=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var t={};if(null!=n)for(var e in n)"default"!==e&&Object.prototype.hasOwnProperty.call(n,e)&&a(t,n,e);return o(t,n),t},i=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(t,"__esModule",{value:!0});var l=r(e(0)),s=e(6),c=e(34),d=e(9),p=e(1),u=i(e(72)),b=i(e(37)),f=e(22),m=r(e(223));e(224),e(226),e(228);t.default=function(){var n=(0,c.bindActionCreators)(m,(0,d.useDispatch)()).changeLocalIp;return(0,l.useEffect)((function(){var t,e,a,o;t=window,e=document,t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:2133522,hjsv:6},a=e.getElementsByTagName("head")[0],(o=e.createElement("script")).async=1,o.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,a.appendChild(o),n()}),[]),l.default.createElement("div",{style:{height:"100%"}},l.default.createElement(p.ConfigProvider,{locale:u.default},l.default.createElement(s.Switch,null,(0,f.renderRoutes)(b.default))))}},function(n,t,e){"use strict";var a=e(15);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(e(73)).default;t.default=o},function(n,t,e){"use strict";var a=e(15);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(e(74)),r=a(e(35)),i=a(e(36)),l=a(e(77)),s="${label}不是一个有效的${type}",c={locale:"zh-cn",Pagination:o.default,DatePicker:r.default,TimePicker:i.default,Calendar:l.default,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:s,method:s,array:s,object:s,number:s,date:s,boolean:s,integer:s,float:s,regexp:s,email:s,url:s,hex:s},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},Image:{preview:"预览"}};t.default=c},function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页"}},function(n,t){function e(){return n.exports=e=Object.assign||function(n){for(var t=1;t=n.length?(this._t=void 0,o(1)):o(0,"keys"==t?e:"values"==t?n[e]:[e,n[e]])}),"values"),r.Arguments=r.Array,a("keys"),a("values"),a("entries")},function(n,t){n.exports=function(){}},function(n,t){n.exports=function(n,t){return{value:t,done:!!n}}},function(n,t,e){var a=e(40);n.exports=Object("z").propertyIsEnumerable(0)?Object:function(n){return"String"==a(n)?n.split(""):Object(n)}},function(n,t,e){var a=e(11),o=e(10),r=e(91),i=e(13),l=e(18),s=function(n,t,e){var c,d,p,u=n&s.F,b=n&s.G,f=n&s.S,m=n&s.P,h=n&s.B,g=n&s.W,x=b?o:o[t]||(o[t]={}),v=x.prototype,y=b?a:f?a[t]:(a[t]||{}).prototype;for(c in b&&(e=t),e)(d=!u&&y&&void 0!==y[c])&&l(x,c)||(p=d?y[c]:e[c],x[c]=b&&"function"!=typeof y[c]?e[c]:h&&d?r(p,a):g&&y[c]==p?function(n){var t=function(t,e,a){if(this instanceof n){switch(arguments.length){case 0:return new n;case 1:return new n(t);case 2:return new n(t,e)}return new n(t,e,a)}return n.apply(this,arguments)};return t.prototype=n.prototype,t}(p):m&&"function"==typeof p?r(Function.call,p):p,m&&((x.virtual||(x.virtual={}))[c]=p,n&s.R&&v&&!v[c]&&i(v,c,p)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,n.exports=s},function(n,t,e){var a=e(92);n.exports=function(n,t,e){if(a(n),void 0===t)return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,a){return n.call(t,e,a)};case 3:return function(e,a,o){return n.call(t,e,a,o)}}return function(){return n.apply(t,arguments)}}},function(n,t){n.exports=function(n){if("function"!=typeof n)throw TypeError(n+" is not a function!");return n}},function(n,t,e){n.exports=!e(17)&&!e(43)((function(){return 7!=Object.defineProperty(e(44)("div"),"a",{get:function(){return 7}}).a}))},function(n,t,e){var a=e(26);n.exports=function(n,t){if(!a(n))return n;var e,o;if(t&&"function"==typeof(e=n.toString)&&!a(o=e.call(n)))return o;if("function"==typeof(e=n.valueOf)&&!a(o=e.call(n)))return o;if(!t&&"function"==typeof(e=n.toString)&&!a(o=e.call(n)))return o;throw TypeError("Can't convert object to primitive value")}},function(n,t,e){n.exports=e(13)},function(n,t,e){"use strict";var a=e(97),o=e(45),r=e(49),i={};e(13)(i,e(8)("iterator"),(function(){return this})),n.exports=function(n,t,e){n.prototype=a(i,{next:o(1,e)}),r(n,t+" Iterator")}},function(n,t,e){var a=e(16),o=e(98),r=e(48),i=e(28)("IE_PROTO"),l=function(){},s=function(){var n,t=e(44)("iframe"),a=r.length;for(t.style.display="none",e(104).appendChild(t),t.src="javascript:",(n=t.contentWindow.document).open(),n.write(" - - -
{this.props.children}
- ; + return ( + + + {this.props.title} + + + + + + + + + + + + +
{this.props.children}
+ + + ); } return
{this.props.children}
; } diff --git a/commitlint.config.js b/commitlint.config.js index 26481b1..83675f4 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,6 @@ module.exports = { - extends: ['./node_modules/vue-cli-plugin-commitlint/lib/lint', '@commitlint/config-conventional'] -}; \ No newline at end of file + extends: [ + './node_modules/vue-cli-plugin-commitlint/lib/lint', + '@commitlint/config-conventional', + ], +}; diff --git a/config/config.default.js b/config/config.default.js index 2a6e587..dd404c9 100644 --- a/config/config.default.js +++ b/config/config.default.js @@ -1,75 +1,77 @@ const path = require('path'); const fs = require('fs'); const utils = require('../app/utils'); -module.exports = app => { +module.exports = (app) => { const exports = {}; exports.siteFile = { - '/favicon.ico': fs.readFileSync(path.join(app.baseDir, 'app/web/asset/images/favicon.ico')) + '/favicon.ico': fs.readFileSync(path.join(app.baseDir, 'app/web/asset/images/favicon.ico')), }; exports.security = { csrf: { // ignore: /^\/proxy/ - enable: false - } + enable: false, + }, }; - exports.cacheDirectory = path.join(__dirname,'../cache') + exports.cacheDirectory = path.join(__dirname, '../cache'); exports.bodyParser = { - ignore:[/^\/proxy/] - } + ignore: [/^\/proxy/], + }; exports.logger = { consoleLevel: 'DEBUG', - dir: path.join(app.baseDir, 'logs') + dir: path.join(app.baseDir, 'logs'), }; exports.static = { prefix: '/public/', - dir: [path.join(app.baseDir, 'public'),{ - prefix: '/resources/', - dir: path.join(app.baseDir, 'resources') - }] + dir: [ + path.join(app.baseDir, 'public'), + { + prefix: '/resources/', + dir: path.join(app.baseDir, 'resources'), + }, + ], }; exports.keys = '123456'; exports.github = { - owner:'dtux-kangaroo', - configRepositoryName:'ko-config' - } + owner: 'dtux-kangaroo', + configRepositoryName: 'ko-config', + }; - exports.middleware = [ - 'access' - ]; + exports.middleware = ['access']; - exports.onerror={ + exports.onerror = { all(err, ctx) { // 在此处定义针对所有响应类型的错误处理方法 // 注意,定义了 config.all 之后,其他错误处理方法不会再生效 - ctx.body = JSON.stringify(utils.response(false,null,err.message)); + ctx.body = JSON.stringify(utils.response(false, null, err.message)); ctx.status = 500; - } - } + }, + }; exports.reactssr = { - layout: path.join(app.baseDir, 'app/web/view/layout.html') + layout: path.join(app.baseDir, 'app/web/view/layout.html'), }; - exports.multipart = { // 文件上传 + exports.multipart = { + // 文件上传 fileSize: '50mb', - mode: 'stream' - } + mode: 'stream', + }; exports.io = { - init: { }, // passed to engine.io + init: {}, // passed to engine.io namespace: { '/': { - connectionMiddleware: [ 'connection' ], - packetMiddleware: [] - } - } - } - + connectionMiddleware: ['connection'], + packetMiddleware: [], + }, + }, + }; + // 文章订阅每次多少条信息 exports.articleSubscription = { - pageSize: 5 + pageSize: 5, }; return exports; diff --git a/config/config.local.js b/config/config.local.js index 10f94c1..0ab31f7 100644 --- a/config/config.local.js +++ b/config/config.local.js @@ -1,4 +1,3 @@ - const ip = require('ip'); const EasyWebpack = require('easywebpack-react'); @@ -6,32 +5,32 @@ module.exports = () => { const exports = {}; exports.static = { - maxAge: 0 // maxAge 缓存,默认 1 年 + maxAge: 0, // maxAge 缓存,默认 1 年 }; exports.development = { watchDirs: ['build'], // 指定监视的目录(包括子目录),当目录下的文件变化的时候自动重载应用,路径从项目根目录开始写 - ignoreDirs: ['app/web', 'public', 'config'] // 指定过滤的目录(包括子目录) + ignoreDirs: ['app/web', 'public', 'config'], // 指定过滤的目录(包括子目录) }; exports.reactssr = { - injectCss: true + injectCss: true, }; exports.webpack = { - webpackConfigList: EasyWebpack.getWebpackConfig() + webpackConfigList: EasyWebpack.getWebpackConfig(), }; const localIP = ip.address(); const domainWhiteList = []; - [9000, 9001, 9002].forEach(port => { + [9000, 9001, 9002].forEach((port) => { domainWhiteList.push(`http://localhost:${port}`); domainWhiteList.push(`http://127.0.0.1:${port}`); domainWhiteList.push(`http://${localIP}:${port}`); }); exports.sequelize = { - datasources:[ + datasources: [ { delegate: 'model', baseDir: 'model', @@ -40,9 +39,9 @@ module.exports = () => { host: '127.0.0.1', port: 3306, username: 'root', - password: '123456' - } - ] + password: '123456', + }, + ], }; exports.security = { domainWhiteList }; diff --git a/config/config.prod.js b/config/config.prod.js index 19c1d4e..43308b4 100644 --- a/config/config.prod.js +++ b/config/config.prod.js @@ -8,7 +8,6 @@ const { database, host, port, username, password } = mysqlConfig; * 最终生效的配置为 prod + default(前者覆盖后者) */ - module.exports = () => { const exports = {}; exports.sequelize = { @@ -24,13 +23,13 @@ module.exports = () => { password: password || '', // 设置连接池,连接数会乘以进程数 (`lsof -i:7001` 得到 pid,`ps -ef | grep ${pid} | wc -l` 可以查看进程数) pool: { - max: 50, //最大连接个数 + max: 50, // 最大连接个数 min: 0, acquire: 40000, // 从连接池获取连接的最长等待时间(毫秒) - idle: 15000 // 连接池中空闲连接的最长存活时间(毫秒) - } - } - ] + idle: 15000, // 连接池中空闲连接的最长存活时间(毫秒) + }, + }, + ], }; return exports; }; diff --git a/config/config.test.js b/config/config.test.js index 554a3a1..57b8f88 100644 --- a/config/config.test.js +++ b/config/config.test.js @@ -10,7 +10,7 @@ const { database, host, port, username, password } = mysqlConfig; module.exports = () => { const exports = {}; exports.sequelize = { - datasources:[ + datasources: [ { delegate: 'model', baseDir: 'model', @@ -19,9 +19,9 @@ module.exports = () => { host: host || '127.0.0.1', port: port || 3306, username: username || 'root', - password: password || '123456' - } - ] + password: password || '123456', + }, + ], }; return exports; }; diff --git a/config/plugin.js b/config/plugin.js index e39fd59..30c6669 100644 --- a/config/plugin.js +++ b/config/plugin.js @@ -2,20 +2,20 @@ exports.static = true; exports.reactssr = { enable: true, - package: 'egg-view-react-ssr' + package: 'egg-view-react-ssr', }; exports.sequelize = { enable: true, - package: 'egg-sequelize' + package: 'egg-sequelize', }; exports.io = { enable: true, - package: 'egg-socket.io' + package: 'egg-socket.io', }; exports.ssh = { enable: true, - package: 'egg-ssh' -}; \ No newline at end of file + package: 'egg-ssh', +}; diff --git a/config/plugin.local.js b/config/plugin.local.js index 682b9a0..75a66fb 100644 --- a/config/plugin.local.js +++ b/config/plugin.local.js @@ -1,14 +1,14 @@ exports.cors = { enable: true, - package: 'egg-cors' + package: 'egg-cors', }; exports.webpack = { enable: true, - package: 'egg-webpack' + package: 'egg-webpack', }; exports.webpackreact = { enable: true, - package: 'egg-webpack-react' + package: 'egg-webpack-react', }; diff --git a/getJsonFiles.js b/getJsonFiles.js index 7e7a646..0b4140d 100644 --- a/getJsonFiles.js +++ b/getJsonFiles.js @@ -1,14 +1,13 @@ - -const fs = require('fs'); -function getJsonFiles(jsonPath){ - let jsonFiles = []; - function findJsonFile(path){ - let files = fs.readdirSync(path); - files.forEach(function (item, index) { - jsonFiles.push(item) +const fs = require('fs'); +function getJsonFiles(jsonPath) { + const jsonFiles = []; + function findJsonFile(path) { + const files = fs.readdirSync(path); + files.forEach(function (item) { + jsonFiles.push(item); }); } findJsonFile(jsonPath); console.log(jsonFiles); } -getJsonFiles('./node_modules/codemirror/theme'); \ No newline at end of file +getJsonFiles('./node_modules/codemirror/theme'); diff --git a/package.json b/package.json index 4ecc506..c28e470 100644 --- a/package.json +++ b/package.json @@ -1,153 +1,153 @@ { - "name": "dt-doraemon", - "version": "1.7.0", - "description": "treasure box for programmer", - "scripts": { - "helpDoc": "docsify serve ./docs/docsify", - "clean": "easy clean", - "build": "easy build", - "debug": "egg-bin debug", - "dev": "egg-bin dev --daemon", - "start": "bash start.sh", - "start:test": "bash start.sh -t", - "server": "egg-scripts start --daemon --workers=4", - "server:test": "egg-scripts start --port=7002 --env=test --daemon --workers=2", - "dingBot": "node DingBot.js", - "stop": "egg-scripts stop", - "prettier": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --check", - "prettier:fix": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --write", - "eslint": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx'", - "eslint:fix": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx' --fix", - "stylelint": "npx stylelint '**/*.scss' '**/*.css'", - "stylelint:fix": "npx stylelint '**/*.scss' '**/*.css' --fix", - "lint": "npm run prettier && npm run eslint && npm run stylelint", - "lint:fix": "npm run prettier:fix && npm run eslint:fix && npm run stylelint:fix", - "check-types": "tsc --skipLibCheck", - "release": "./scripts/release.sh", - "ii": "npm install --registry https://registry.npm.taobao.org", - "log": "conventional-changelog --config ./node_modules/vue-cli-plugin-commitlint/lib/log -i CHANGELOG.md -s -r 0", - "cz": "npm run log && git add . && git cz" - }, - "dependencies": { - "@ant-design/icons": "4.5.0", - "ant-design-dtinsight-theme": "1.1.3", - "antd": "4.22.5", - "await-stream-ready": "^1.0.1", - "babel-eslint": "^10.1.0", - "babel-plugin-transform-decorators-legacy": "^1.3.5", - "cheerio": "^1.0.0-rc.10", - "codemirror": "^5.48.4", - "cropperjs": "^1.5.1", - "dingtalk-robot-sender": "^1.2.0", - "egg": "^2.1.0", - "egg-cors": "^2.0.0", - "egg-logger": "^1.5.0", - "egg-scripts": "^2.8.1", - "egg-sequelize": "^4.3.1", - "egg-socket.io": "^4.1.6", - "egg-ssh": "^1.0.5", - "egg-validate": "^1.0.0", - "egg-view-react-ssr": "^2.2.6", - "extend": "~3.0.0", - "file-saver": "^1.3.3", - "history": "^4.7.2", - "html2canvas": "^0.5.0-beta4", - "http-proxy-middleware": "2.0.6", - "js-cookie": "^2.2.0", - "koa-connect": "^2.0.1", - "lodash": "^4.17.4", - "mockjs": "^1.0.1-beta3", - "moment": "^2.17.1", - "mysql2": "^1.6.5", - "node-schedule": "^2.0.0", - "node-ssh": "^6.0.0", - "react": "16.9.0", - "react-codemirror2": "^7.2.1", - "react-color": "^2.19.3", - "react-dom": "^16.9.0", - "react-loadable": "^5.5.0", - "react-redux": "^7.1.0", - "react-router": "^4.2.0", - "react-router-config": "^1.0.0-beta.4", - "react-router-dom": "^4.2.2", - "react-router-redux": "^4.0.8", - "redux": "^4.0.4", - "redux-thunk": "^2.3.0", - "socket.io": "^4.1.0", - "socket.io-client": "1.7.0", - "ssh2": "^1.4.0", - "typescript": "4.7.4", - "utf8": "^3.0.0", - "xterm": "^4.12.0", - "xterm-addon-attach": "^0.6.0", - "xterm-addon-fit": "^0.5.0" - }, - "devDependencies": { - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@commitlint/config-conventional": "^8.2.0", - "@hot-loader/react-dom": "^17.0.1", - "@types/classnames": "^2.2.11", - "@types/file-saver": "^2.0.1", - "@types/html2canvas": "^0.0.36", - "@types/js-cookie": "^2.2.6", - "@types/react": "18.0.25", - "@types/react-color": "^3.0.4", - "@types/react-dom": "^18.0.0", - "@types/react-redux": "^7.1.16", - "@types/react-router-config": "^5.0.2", - "@types/react-router-dom": "^5.1.7", - "babel-preset-stage-0": "^6.24.1", - "babel-preset-stage-2": "^6.24.1", - "commitizen": "^4.0.3", - "commitlint": "^8.2.0", - "conventional-changelog-cli": "^2.0.28", - "cz-conventional-changelog": "^3.3.0", - "docsify-cli": "^4.4.3", - "easywebpack-cli": "^4.3.5", - "easywebpack-react": "^4.4.1", - "egg-bin": "^4.5.0", - "egg-webpack": "^4.4.9", - "egg-webpack-react": "^2.0.2", - "eslint-config-egg": "^5.1.1", - "eslint-plugin-react": "^7.1.0", - "file-loader": "^3.0.1", - "husky": "^3.1.0", - "ip": "^1.1.5", - "ko-lint-config": "^2.2.21", - "less": "3.9.0", - "less-loader": "^4.0.0", - "redux-devtools-extension": "^2.13.8", - "request": "^2.88.2", - "sass": "^1.77.2", - "sass-loader": "10.2.0", - "sequelize-cli": "^5.4.0", - "standard-version": "^9.0.0", - "ts-loader": "^8.0.17", - "url-loader": "^1.1.2", - "vue-cli-plugin-commitlint": "^1.0.4", - "webpack": "^4.30.0" - }, - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + "name": "dt-doraemon", + "version": "1.7.0", + "description": "treasure box for programmer", + "scripts": { + "helpDoc": "docsify serve ./docs/docsify", + "clean": "easy clean", + "build": "easy build", + "debug": "egg-bin debug", + "dev": "egg-bin dev --daemon", + "start": "bash start.sh", + "start:test": "bash start.sh -t", + "server": "egg-scripts start --daemon --workers=4", + "server:test": "egg-scripts start --port=7002 --env=test --daemon --workers=2", + "dingBot": "node DingBot.js", + "stop": "egg-scripts stop", + "prettier": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --check", + "prettier:fix": "npx prettier '**/*.ts' '**/*.tsx' '**/*.js' '**/*.json' --write", + "eslint": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx'", + "eslint:fix": "npx eslint '**/*.js' '**/*.ts' '**/*.tsx' --fix", + "stylelint": "npx stylelint '**/*.scss' '**/*.css'", + "stylelint:fix": "npx stylelint '**/*.scss' '**/*.css' --fix", + "lint": "npm run prettier && npm run eslint && npm run stylelint", + "lint:fix": "npm run prettier:fix && npm run eslint:fix && npm run stylelint:fix", + "check-types": "tsc --skipLibCheck", + "release": "./scripts/release.sh", + "ii": "npm install --registry https://registry.npm.taobao.org", + "log": "conventional-changelog --config ./node_modules/vue-cli-plugin-commitlint/lib/log -i CHANGELOG.md -s -r 0", + "cz": "npm run log && git add . && git cz" + }, + "dependencies": { + "@ant-design/icons": "4.5.0", + "ant-design-dtinsight-theme": "1.1.3", + "antd": "4.22.5", + "await-stream-ready": "^1.0.1", + "babel-eslint": "^10.1.0", + "babel-plugin-transform-decorators-legacy": "^1.3.5", + "cheerio": "^1.0.0-rc.10", + "codemirror": "^5.48.4", + "cropperjs": "^1.5.1", + "dingtalk-robot-sender": "^1.2.0", + "egg": "^2.1.0", + "egg-cors": "^2.0.0", + "egg-logger": "^1.5.0", + "egg-scripts": "^2.8.1", + "egg-sequelize": "^4.3.1", + "egg-socket.io": "^4.1.6", + "egg-ssh": "^1.0.5", + "egg-validate": "^1.0.0", + "egg-view-react-ssr": "^2.2.6", + "extend": "~3.0.0", + "file-saver": "^1.3.3", + "history": "^4.7.2", + "html2canvas": "^0.5.0-beta4", + "http-proxy-middleware": "2.0.6", + "js-cookie": "^2.2.0", + "koa-connect": "^2.0.1", + "lodash": "^4.17.4", + "mockjs": "^1.0.1-beta3", + "moment": "^2.17.1", + "mysql2": "^1.6.5", + "node-schedule": "^2.0.0", + "node-ssh": "^6.0.0", + "react": "16.9.0", + "react-codemirror2": "^7.2.1", + "react-color": "^2.19.3", + "react-dom": "^16.9.0", + "react-loadable": "^5.5.0", + "react-redux": "^7.1.0", + "react-router": "^4.2.0", + "react-router-config": "^1.0.0-beta.4", + "react-router-dom": "^4.2.2", + "react-router-redux": "^4.0.8", + "redux": "^4.0.4", + "redux-thunk": "^2.3.0", + "socket.io": "^4.1.0", + "socket.io-client": "1.7.0", + "ssh2": "^1.4.0", + "typescript": "4.7.4", + "utf8": "^3.0.0", + "xterm": "^4.12.0", + "xterm-addon-attach": "^0.6.0", + "xterm-addon-fit": "^0.5.0" + }, + "devDependencies": { + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@commitlint/config-conventional": "^8.2.0", + "@hot-loader/react-dom": "^17.0.1", + "@types/classnames": "^2.2.11", + "@types/file-saver": "^2.0.1", + "@types/html2canvas": "^0.0.36", + "@types/js-cookie": "^2.2.6", + "@types/react": "18.0.25", + "@types/react-color": "^3.0.4", + "@types/react-dom": "^18.0.0", + "@types/react-redux": "^7.1.16", + "@types/react-router-config": "^5.0.2", + "@types/react-router-dom": "^5.1.7", + "babel-preset-stage-0": "^6.24.1", + "babel-preset-stage-2": "^6.24.1", + "commitizen": "^4.0.3", + "commitlint": "^8.2.0", + "conventional-changelog-cli": "^2.0.28", + "cz-conventional-changelog": "^3.3.0", + "docsify-cli": "^4.4.3", + "easywebpack-cli": "^4.3.5", + "easywebpack-react": "^4.4.1", + "egg-bin": "^4.5.0", + "egg-webpack": "^4.4.9", + "egg-webpack-react": "^2.0.2", + "eslint-config-egg": "^5.1.1", + "eslint-plugin-react": "^7.1.0", + "file-loader": "^3.0.1", + "husky": "^3.1.0", + "ip": "^1.1.5", + "ko-lint-config": "^2.2.21", + "less": "3.9.0", + "less-loader": "^4.0.0", + "redux-devtools-extension": "^2.13.8", + "request": "^2.88.2", + "sass": "^1.77.2", + "sass-loader": "10.2.0", + "sequelize-cli": "^5.4.0", + "standard-version": "^9.0.0", + "ts-loader": "^8.0.17", + "url-loader": "^1.1.2", + "vue-cli-plugin-commitlint": "^1.0.4", + "webpack": "^4.30.0" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "engines": { + "node": "14" + }, + "ci": { + "version": "8, 9" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/easy-team/egg-react-webpack-boilerplate.git" + }, + "author": "hubcarl@126.com", + "license": "MIT", + "homepage": "https://github.com/easy-team/egg-react-webpack-boilerplate", + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } } - }, - "engines": { - "node": "14" - }, - "ci": { - "version": "8, 9" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/easy-team/egg-react-webpack-boilerplate.git" - }, - "author": "hubcarl@126.com", - "license": "MIT", - "homepage": "https://github.com/easy-team/egg-react-webpack-boilerplate", - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - } } diff --git a/theme.js b/theme.js index 4df14a7..c4bd040 100644 --- a/theme.js +++ b/theme.js @@ -1,3 +1,3 @@ -module.exports = { // AntD Theme Customize - -} \ No newline at end of file +module.exports = { + // AntD Theme Customize +}; diff --git a/tsconfig.json b/tsconfig.json index 9ed5288..91073de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,25 +10,14 @@ "skipLibCheck": true, "module": "commonjs", "target": "es5", - "lib": [ "es6","es2016","dom" ], + "lib": ["es6", "es2016", "dom"], "jsx": "react", "allowSyntheticDefaultImports": true, "paths": { - "@/*": [ - "./app/web/*" - ] + "@/*": ["./app/web/*"] }, - "typeRoots": [ - "node", - "node_modules/@types", - "./app/web/typeings" - ] + "typeRoots": ["node", "node_modules/@types", "./app/web/typeings"] }, - "exclude": [ - "node_modules", - "app/web/view/*" - ], - "include": [ - "./app/web/**/*" - ], + "exclude": ["node_modules", "app/web/view/*"], + "include": ["./app/web/**/*"] } diff --git a/webpack.config.js b/webpack.config.js index fb788a6..4d3e00b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,33 +4,44 @@ const theme = require('./theme'); const resolve = (filepath) => path.resolve(__dirname, filepath); module.exports = { entry: { - app: resolve('app/web/main.tsx') + app: resolve('app/web/main.tsx'), }, - dll: ['react', 'react-dom', 'react-redux', 'redux', 'redux-thunk', 'react-router', 'react-router-config', 'react-router-dom', 'react-router-redux', 'xterm'], + dll: [ + 'react', + 'react-dom', + 'react-redux', + 'redux', + 'redux-thunk', + 'react-router', + 'react-router-config', + 'react-router-dom', + 'react-router-redux', + 'xterm', + ], loaders: { babel: { - include: [resolve('app/web'), resolve('node_modules')] + include: [resolve('app/web'), resolve('node_modules')], }, less: { include: [resolve('./app/web'), resolve('./node_modules')], options: { javascriptEnabled: true, - modifyVars: theme - } + modifyVars: theme, + }, }, typescript: true, scss: true, css: true, urlimage: true, - urlfont: true + urlfont: true, }, alias: { - '@': resolve('app/web') + '@': resolve('app/web'), }, plugins: { - imagemini: false + imagemini: false, }, done() { console.log('---webpack compile finish---'); - } -}; \ No newline at end of file + }, +}; From 42e14528560ddcd5c5b78d706c57218a702135f9 Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 15:26:18 +0800 Subject: [PATCH 5/6] feat: log version --- app/web/app.tsx | 11 +++++++++++ package.json | 2 +- yarn.lock | 6 +++--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/web/app.tsx b/app/web/app.tsx index 05761a1..2e9a2c9 100644 --- a/app/web/app.tsx +++ b/app/web/app.tsx @@ -8,6 +8,7 @@ import { bindActionCreators } from 'redux'; import routes from '@/router'; import * as actions from '@/store/actions'; +import { version } from '../../package.json'; import 'antd/dist/antd.less'; import 'ant-design-dtinsight-theme/theme/dt-theme/reset.less'; import 'ant-design-dtinsight-theme/theme/dt-theme/index.less'; @@ -33,10 +34,20 @@ const App = () => { a.appendChild(r); })(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv='); }; + + const logVersion = () => { + window.console.log( + `%cApp current version: v${version}`, + 'font-family: Cabin, Helvetica, Arial, sans-serif;text-align: left;font-size:32px;color:#B21212;' + ); + }; + useEffect(() => { + logVersion(); hotJar(); changeLocalIp(); }, []); + return (
diff --git a/package.json b/package.json index c28e470..3f982fb 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ } }, "engines": { - "node": "14" + "node": ">=14" }, "ci": { "version": "8, 9" diff --git a/yarn.lock b/yarn.lock index 7865434..22dc316 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4275,9 +4275,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400: - version "1.0.30001622" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001622.tgz" - integrity sha512-H+g7cwL2r1TzN4HpM1ZzhaOf7zwMNAZomX/uao6flMFsT3sLIpxi9H3QMo7U0KPWr0a8/Zvl8sQgrr6RXJ0HRw== + version "1.0.30001686" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz" + integrity sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA== capture-stack-trace@^1.0.0: version "1.0.2" From cabd1f84ddca9bb545ce6289432a7efa8f57546a Mon Sep 17 00:00:00 2001 From: liuxy0551 Date: Tue, 3 Dec 2024 15:32:30 +0800 Subject: [PATCH 6/6] ci: check more node versions --- .github/workflows/CI.yml | 10 +++++++--- package.json | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 33bb677..0a38429 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -11,14 +11,18 @@ on: jobs: setup: runs-on: ubuntu-latest + strategy: + matrix: + node-version: [14.x, 16.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - name: Checkout code uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 with: - node-version: 14 + node-version: ${{ matrix.node-version }} - name: Install dependencies run: yarn diff --git a/package.json b/package.json index 3f982fb..151913b 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ } }, "engines": { - "node": ">=14" + "node": ">=14 || <=16" }, "ci": { "version": "8, 9"