build: optimize configs for building (#44)

This commit is contained in:
Fine0830 2022-03-28 23:07:49 +08:00 committed by GitHub
parent 0a29a86c34
commit 355fe215a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 450 additions and 986 deletions

509
package-lock.json generated
View File

@ -15,8 +15,6 @@
"element-plus": "^2.0.2", "element-plus": "^2.0.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinia": "^2.0.5", "pinia": "^2.0.5",
"three": "^0.131.3",
"three-orbit-controls": "^82.1.0",
"vue": "^3.0.0", "vue": "^3.0.0",
"vue-grid-layout": "^3.0.0-beta1", "vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",
@ -63,6 +61,7 @@
"stylelint-order": "^5.0.0", "stylelint-order": "^5.0.0",
"svg-sprite-loader": "^6.0.11", "svg-sprite-loader": "^6.0.11",
"typescript": "~4.4.4", "typescript": "~4.4.4",
"vue-cli-plugin-webpack-bundle-analyzer": "~4.0.0",
"vue-jest": "^5.0.0-0" "vue-jest": "^5.0.0-0"
} }
}, },
@ -2791,6 +2790,12 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/@polka/url": {
"version": "1.0.0-next.21",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
"integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
"dev": true
},
"node_modules/@popperjs/core": { "node_modules/@popperjs/core": {
"version": "2.11.2", "version": "2.11.2",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
@ -3329,16 +3334,8 @@
"node_modules/@types/lodash": { "node_modules/@types/lodash": {
"version": "4.14.179", "version": "4.14.179",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz",
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==" "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==",
}, "dev": true
"node_modules/@types/lodash-es": {
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
"integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
"peer": true,
"dependencies": {
"@types/lodash": "*"
}
}, },
"node_modules/@types/mime": { "node_modules/@types/mime": {
"version": "1.3.2", "version": "1.3.2",
@ -4632,13 +4629,6 @@
"@vue/cli-service": "^3.0.0 || ^4.0.0-0" "@vue/cli-service": "^3.0.0 || ^4.0.0-0"
} }
}, },
"node_modules/@vue/cli-plugin-unit-jest/node_modules/vue": {
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
"integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/cli-plugin-unit-jest/node_modules/vue-jest": { "node_modules/@vue/cli-plugin-unit-jest/node_modules/vue-jest": {
"version": "3.0.7", "version": "3.0.7",
"resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz", "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz",
@ -9547,13 +9537,6 @@
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
"integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
}, },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true,
"peer": true
},
"node_modules/deasync": { "node_modules/deasync": {
"version": "0.1.24", "version": "0.1.24",
"resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz", "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz",
@ -18204,6 +18187,15 @@
"run-queue": "^1.0.3" "run-queue": "^1.0.3"
} }
}, },
"node_modules/mrmime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz",
"integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -23475,6 +23467,20 @@
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
"dev": true "dev": true
}, },
"node_modules/sirv": {
"version": "1.0.19",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz",
"integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==",
"dev": true,
"dependencies": {
"@polka/url": "^1.0.0-next.20",
"mrmime": "^1.0.0",
"totalist": "^1.0.0"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/sisteransi": { "node_modules/sisteransi": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@ -25734,16 +25740,6 @@
"webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
} }
}, },
"node_modules/three": {
"version": "0.131.3",
"resolved": "https://registry.npmjs.org/three/-/three-0.131.3.tgz",
"integrity": "sha512-VkZAv8ZTJqiE/fyEmoWLxcNHImpVcjqW7RO0GzMu3tRpwO0KUvK9pjTmJzJcAbc51BOeB2G38zh80yjHTbP8gQ=="
},
"node_modules/three-orbit-controls": {
"version": "82.1.0",
"resolved": "https://registry.npmjs.org/three-orbit-controls/-/three-orbit-controls-82.1.0.tgz",
"integrity": "sha1-EafzPQog7OyY8Jizd4D2U3N0+rQ="
},
"node_modules/throat": { "node_modules/throat": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
@ -25941,6 +25937,15 @@
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
"dev": true "dev": true
}, },
"node_modules/totalist": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
"integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/tough-cookie": { "node_modules/tough-cookie": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@ -26264,7 +26269,7 @@
"version": "4.4.4", "version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"devOptional": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@ -26731,6 +26736,174 @@
"@vue/shared": "3.2.26" "@vue/shared": "3.2.26"
} }
}, },
"node_modules/vue-cli-plugin-webpack-bundle-analyzer": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/vue-cli-plugin-webpack-bundle-analyzer/-/vue-cli-plugin-webpack-bundle-analyzer-4.0.0.tgz",
"integrity": "sha512-gEQt8RMh0j9aD591PXjuMJMoKG6Aaylsi2rZHDiDRE9zGEk7wlUMrIVGwL9bYnMAHSHkojQL4oQinM3WBxCDew==",
"dev": true,
"dependencies": {
"webpack-bundle-analyzer": "^4.2.0"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/acorn": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
"integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
"engines": {
"node": ">= 10"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/gzip-size": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
"integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
"dev": true,
"dependencies": {
"duplexer": "^0.1.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/webpack-bundle-analyzer": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz",
"integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==",
"dev": true,
"dependencies": {
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0",
"chalk": "^4.1.0",
"commander": "^7.2.0",
"gzip-size": "^6.0.0",
"lodash": "^4.17.20",
"opener": "^1.5.2",
"sirv": "^1.0.7",
"ws": "^7.3.1"
},
"bin": {
"webpack-bundle-analyzer": "lib/bin/analyzer.js"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/vue-cli-plugin-webpack-bundle-analyzer/node_modules/ws": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
"dev": true,
"engines": {
"node": ">=8.3.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/vue-eslint-parser": { "node_modules/vue-eslint-parser": {
"version": "7.11.0", "version": "7.11.0",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
@ -27010,17 +27183,6 @@
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
"dev": true "dev": true
}, },
"node_modules/vue-template-compiler": {
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
"integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
"dev": true,
"peer": true,
"dependencies": {
"de-indent": "^1.0.2",
"he": "^1.1.0"
}
},
"node_modules/vue-template-es2015-compiler": { "node_modules/vue-template-es2015-compiler": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
@ -30007,8 +30169,7 @@
"@element-plus/icons-vue": { "@element-plus/icons-vue": {
"version": "0.2.7", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz", "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz",
"integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg==", "integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg=="
"requires": {}
}, },
"@hapi/address": { "@hapi/address": {
"version": "2.1.4", "version": "2.1.4",
@ -30076,8 +30237,7 @@
"@interactjs/core": { "@interactjs/core": {
"version": "1.10.11", "version": "1.10.11",
"resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.11.tgz", "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.11.tgz",
"integrity": "sha512-aJ50ccVeszpJt7wPH7Yfqm7f1aG1SA94qd90P0NaESh5/QUXn4CESO6igobo4DFHQ5z+1Rfdl8aphP4JxlH4gw==", "integrity": "sha512-aJ50ccVeszpJt7wPH7Yfqm7f1aG1SA94qd90P0NaESh5/QUXn4CESO6igobo4DFHQ5z+1Rfdl8aphP4JxlH4gw=="
"requires": {}
}, },
"@interactjs/dev-tools": { "@interactjs/dev-tools": {
"version": "1.10.11", "version": "1.10.11",
@ -30795,6 +30955,12 @@
"fastq": "^1.6.0" "fastq": "^1.6.0"
} }
}, },
"@polka/url": {
"version": "1.0.0-next.21",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
"integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
"dev": true
},
"@popperjs/core": { "@popperjs/core": {
"version": "2.11.2", "version": "2.11.2",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
@ -31309,16 +31475,8 @@
"@types/lodash": { "@types/lodash": {
"version": "4.14.179", "version": "4.14.179",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz",
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==" "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==",
}, "dev": true
"@types/lodash-es": {
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
"integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
"peer": true,
"requires": {
"@types/lodash": "*"
}
}, },
"@types/mime": { "@types/mime": {
"version": "1.3.2", "version": "1.3.2",
@ -32346,13 +32504,6 @@
"vue-jest": "^3.0.5" "vue-jest": "^3.0.5"
}, },
"dependencies": { "dependencies": {
"vue": {
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
"integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==",
"dev": true,
"peer": true
},
"vue-jest": { "vue-jest": {
"version": "3.0.7", "version": "3.0.7",
"resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz", "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz",
@ -32378,8 +32529,7 @@
"version": "4.5.15", "version": "4.5.15",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz", "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz",
"integrity": "sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==", "integrity": "sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/cli-service": { "@vue/cli-service": {
"version": "4.5.15", "version": "4.5.15",
@ -32817,8 +32967,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz",
"integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/reactivity": { "@vue/reactivity": {
"version": "3.2.26", "version": "3.2.26",
@ -32877,8 +33026,7 @@
"version": "2.0.0-rc.18", "version": "2.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.0.0-rc.18.tgz", "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.0.0-rc.18.tgz",
"integrity": "sha512-aifolXjVdsogjaLmDoZ0FU8vN+R67aWmg9OuVeED4w5Ij5GFQLrlhM19uhWe/r5xXUL4fXMk3pX5wW6FJP1NcQ==", "integrity": "sha512-aifolXjVdsogjaLmDoZ0FU8vN+R67aWmg9OuVeED4w5Ij5GFQLrlhM19uhWe/r5xXUL4fXMk3pX5wW6FJP1NcQ==",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/web-component-wrapper": { "@vue/web-component-wrapper": {
"version": "1.3.0", "version": "1.3.0",
@ -32906,8 +33054,7 @@
"vue-demi": { "vue-demi": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz",
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==", "integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw=="
"requires": {}
} }
} }
}, },
@ -33154,8 +33301,7 @@
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true, "dev": true
"requires": {}
}, },
"acorn-walk": { "acorn-walk": {
"version": "7.2.0", "version": "7.2.0",
@ -33203,15 +33349,13 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"dev": true, "dev": true
"requires": {}
}, },
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true, "dev": true
"requires": {}
}, },
"alphanum-sort": { "alphanum-sort": {
"version": "1.0.2", "version": "1.0.2",
@ -33603,8 +33747,7 @@
"version": "7.0.0-bridge.0", "version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
"dev": true, "dev": true
"requires": {}
}, },
"babel-jest": { "babel-jest": {
"version": "24.9.0", "version": "24.9.0",
@ -36290,13 +36433,6 @@
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
"integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
}, },
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true,
"peer": true
},
"deasync": { "deasync": {
"version": "0.1.24", "version": "0.1.24",
"resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz", "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz",
@ -40684,8 +40820,7 @@
"version": "7.5.6", "version": "7.5.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
"dev": true, "dev": true
"requires": {}
} }
} }
}, },
@ -41077,8 +41212,7 @@
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
"dev": true, "dev": true
"requires": {}
}, },
"jest-regex-util": { "jest-regex-util": {
"version": "24.9.0", "version": "24.9.0",
@ -42500,8 +42634,7 @@
"lodash-unified": { "lodash-unified": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.1.tgz", "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.1.tgz",
"integrity": "sha512-Py+twfpWn+2dFQWCuGcp21WiQRwZwnm1cyE3piSt/VtBVKVyxlR58WgOVRzXtmdmDRGJKH8F8GPaA29WK/yK8g==", "integrity": "sha512-Py+twfpWn+2dFQWCuGcp21WiQRwZwnm1cyE3piSt/VtBVKVyxlR58WgOVRzXtmdmDRGJKH8F8GPaA29WK/yK8g=="
"requires": {}
}, },
"lodash.debounce": { "lodash.debounce": {
"version": "4.0.8", "version": "4.0.8",
@ -43075,6 +43208,12 @@
"run-queue": "^1.0.3" "run-queue": "^1.0.3"
} }
}, },
"mrmime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz",
"integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==",
"dev": true
},
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -44250,8 +44389,7 @@
"vue-demi": { "vue-demi": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz",
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==", "integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw=="
"requires": {}
} }
} }
}, },
@ -45325,8 +45463,7 @@
"version": "1.14.0", "version": "1.14.0",
"resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.14.0.tgz", "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.14.0.tgz",
"integrity": "sha512-8d5fiBQZWMtGWH/7ewEeo6RnBNyT2kLD5wTIfV2oHYqH4hjiofg/rP5X3SUwnqOINzE4mM/K/UOAiNrIaKzd4w==", "integrity": "sha512-8d5fiBQZWMtGWH/7ewEeo6RnBNyT2kLD5wTIfV2oHYqH4hjiofg/rP5X3SUwnqOINzE4mM/K/UOAiNrIaKzd4w==",
"dev": true, "dev": true
"requires": {}
}, },
"postcss-reduce-initial": { "postcss-reduce-initial": {
"version": "4.0.3", "version": "4.0.3",
@ -45404,15 +45541,13 @@
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
"integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
"dev": true, "dev": true
"requires": {}
}, },
"postcss-scss": { "postcss-scss": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.3.tgz", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.3.tgz",
"integrity": "sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA==", "integrity": "sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA==",
"dev": true, "dev": true
"requires": {}
}, },
"postcss-selector-parser": { "postcss-selector-parser": {
"version": "6.0.8", "version": "6.0.8",
@ -45428,8 +45563,7 @@
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz",
"integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==",
"dev": true, "dev": true
"requires": {}
}, },
"postcss-svgo": { "postcss-svgo": {
"version": "4.0.3", "version": "4.0.3",
@ -47192,6 +47326,17 @@
} }
} }
}, },
"sirv": {
"version": "1.0.19",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz",
"integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==",
"dev": true,
"requires": {
"@polka/url": "^1.0.0-next.20",
"mrmime": "^1.0.0",
"totalist": "^1.0.0"
}
},
"sisteransi": { "sisteransi": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@ -48226,22 +48371,19 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz", "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz",
"integrity": "sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==", "integrity": "sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==",
"dev": true, "dev": true
"requires": {}
}, },
"stylelint-config-prettier": { "stylelint-config-prettier": {
"version": "9.0.3", "version": "9.0.3",
"resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz",
"integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==",
"dev": true, "dev": true
"requires": {}
}, },
"stylelint-config-recommended": { "stylelint-config-recommended": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
"integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
"dev": true, "dev": true
"requires": {}
}, },
"stylelint-config-standard": { "stylelint-config-standard": {
"version": "24.0.0", "version": "24.0.0",
@ -48999,16 +49141,6 @@
"neo-async": "^2.6.0" "neo-async": "^2.6.0"
} }
}, },
"three": {
"version": "0.131.3",
"resolved": "https://registry.npmjs.org/three/-/three-0.131.3.tgz",
"integrity": "sha512-VkZAv8ZTJqiE/fyEmoWLxcNHImpVcjqW7RO0GzMu3tRpwO0KUvK9pjTmJzJcAbc51BOeB2G38zh80yjHTbP8gQ=="
},
"three-orbit-controls": {
"version": "82.1.0",
"resolved": "https://registry.npmjs.org/three-orbit-controls/-/three-orbit-controls-82.1.0.tgz",
"integrity": "sha1-EafzPQog7OyY8Jizd4D2U3N0+rQ="
},
"throat": { "throat": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
@ -49174,6 +49306,12 @@
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
"dev": true "dev": true
}, },
"totalist": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
"integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
"dev": true
},
"tough-cookie": { "tough-cookie": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@ -49431,7 +49569,7 @@
"version": "4.4.4", "version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"devOptional": true "dev": true
}, },
"uglify-js": { "uglify-js": {
"version": "3.4.10", "version": "3.4.10",
@ -49812,6 +49950,116 @@
"@vue/shared": "3.2.26" "@vue/shared": "3.2.26"
} }
}, },
"vue-cli-plugin-webpack-bundle-analyzer": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/vue-cli-plugin-webpack-bundle-analyzer/-/vue-cli-plugin-webpack-bundle-analyzer-4.0.0.tgz",
"integrity": "sha512-gEQt8RMh0j9aD591PXjuMJMoKG6Aaylsi2rZHDiDRE9zGEk7wlUMrIVGwL9bYnMAHSHkojQL4oQinM3WBxCDew==",
"dev": true,
"requires": {
"webpack-bundle-analyzer": "^4.2.0"
},
"dependencies": {
"acorn": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
"integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"dev": true
},
"acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true
},
"gzip-size": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
"integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
"dev": true,
"requires": {
"duplexer": "^0.1.2"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"webpack-bundle-analyzer": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz",
"integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==",
"dev": true,
"requires": {
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0",
"chalk": "^4.1.0",
"commander": "^7.2.0",
"gzip-size": "^6.0.0",
"lodash": "^4.17.20",
"opener": "^1.5.2",
"sirv": "^1.0.7",
"ws": "^7.3.1"
}
},
"ws": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
"dev": true
}
}
},
"vue-eslint-parser": { "vue-eslint-parser": {
"version": "7.11.0", "version": "7.11.0",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
@ -50023,17 +50271,6 @@
} }
} }
}, },
"vue-template-compiler": {
"version": "2.6.14",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
"integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
"dev": true,
"peer": true,
"requires": {
"de-indent": "^1.0.2",
"he": "^1.1.0"
}
},
"vue-template-es2015-compiler": { "vue-template-es2015-compiler": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",

View File

@ -17,8 +17,6 @@
"element-plus": "^2.0.2", "element-plus": "^2.0.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinia": "^2.0.5", "pinia": "^2.0.5",
"three": "^0.131.3",
"three-orbit-controls": "^82.1.0",
"vue": "^3.0.0", "vue": "^3.0.0",
"vue-grid-layout": "^3.0.0-beta1", "vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",
@ -65,6 +63,7 @@
"stylelint-order": "^5.0.0", "stylelint-order": "^5.0.0",
"svg-sprite-loader": "^6.0.11", "svg-sprite-loader": "^6.0.11",
"typescript": "~4.4.4", "typescript": "~4.4.4",
"vue-cli-plugin-webpack-bundle-analyzer": "~4.0.0",
"vue-jest": "^5.0.0-0" "vue-jest": "^5.0.0-0"
}, },
"eslintConfig": { "eslintConfig": {

View File

@ -29,7 +29,7 @@ const msg = {
events: "Events", events: "Events",
alerts: "Alerts", alerts: "Alerts",
settings: "Settings", settings: "Settings",
dashboards: "Dashboard", dashboards: "Dashboards",
profiles: "Profiles", profiles: "Profiles",
database: "Database", database: "Database",
serviceName: "Service Name", serviceName: "Service Name",
@ -149,7 +149,7 @@ const msg = {
dashboard: "Dashboard", dashboard: "Dashboard",
topology: "Topology", topology: "Topology",
trace: "Trace", trace: "Trace",
alarm: "Alarm", alarm: "Alarms",
event: "Event", event: "Event",
auto: "Auto", auto: "Auto",
reload: "Reload", reload: "Reload",

View File

@ -35,7 +35,8 @@ export const routesAlarm: Array<RouteRecordRaw> = [
meta: { meta: {
exact: false, exact: false,
}, },
component: () => import("@/views/Alarm.vue"), component: () =>
import(/* webpackChunkName: "alarms" */ "@/views/Alarm.vue"),
}, },
], ],
}, },

View File

@ -36,7 +36,8 @@ export const routesBrowser: Array<RouteRecordRaw> = [
headPath: "/browser", headPath: "/browser",
exact: true, exact: true,
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -31,7 +31,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
children: [ children: [
{ {
path: "/dashboard/list", path: "/dashboard/list",
component: () => import("@/views/dashboard/List.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/List.vue"
),
name: "List", name: "List",
meta: { meta: {
title: "dashboardList", title: "dashboardList",
@ -40,7 +43,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/new", path: "/dashboard/new",
component: () => import("@/views/dashboard/New.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/New.vue"
),
name: "New", name: "New",
meta: { meta: {
title: "dashboardNew", title: "dashboardNew",
@ -49,7 +55,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/:layerId/:entity/:name", path: "/dashboard/:layerId/:entity/:name",
component: () => import("@/views/dashboard/Edit.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
),
name: "Create", name: "Create",
meta: { meta: {
title: "dashboardEdit", title: "dashboardEdit",
@ -59,7 +68,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/:layerId/:entity/:serviceId/:name", path: "/dashboard/:layerId/:entity/:serviceId/:name",
component: () => import("@/views/dashboard/Edit.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
),
name: "View", name: "View",
meta: { meta: {
title: "dashboardEdit", title: "dashboardEdit",
@ -69,7 +81,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/related/:layerId/:entity/:serviceId/:destServiceId/:name", path: "/dashboard/related/:layerId/:entity/:serviceId/:destServiceId/:name",
component: () => import("@/views/dashboard/Edit.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
),
name: "ViewServiceRelation", name: "ViewServiceRelation",
meta: { meta: {
title: "dashboardEdit", title: "dashboardEdit",
@ -79,7 +94,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/:layerId/:entity/:serviceId/:podId/:name", path: "/dashboard/:layerId/:entity/:serviceId/:podId/:name",
component: () => import("@/views/dashboard/Edit.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
),
name: "ViewPod", name: "ViewPod",
meta: { meta: {
title: "dashboardEdit", title: "dashboardEdit",
@ -89,7 +107,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
}, },
{ {
path: "/dashboard/:layerId/:entity/:serviceId/:podId/:destServiceId/:destPodId/:name", path: "/dashboard/:layerId/:entity/:serviceId/:podId/:destServiceId/:destPodId/:name",
component: () => import("@/views/dashboard/Edit.vue"), component: () =>
import(
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
),
name: "ViewPodRelation", name: "ViewPodRelation",
meta: { meta: {
title: "dashboardEdit", title: "dashboardEdit",

View File

@ -37,7 +37,8 @@ export const routesDatabase: Array<RouteRecordRaw> = [
headPath: "/database", headPath: "/database",
exact: true, exact: true,
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -35,7 +35,8 @@ export const routesEvent: Array<RouteRecordRaw> = [
meta: { meta: {
exact: false, exact: false,
}, },
component: () => import("@/views/Event.vue"), component: () =>
import(/* webpackChunkName: "events" */ "@/views/Event.vue"),
}, },
], ],
}, },

View File

@ -36,7 +36,8 @@ export const routesFunctions: Array<RouteRecordRaw> = [
headPath: "/functions", headPath: "/functions",
exact: true, exact: true,
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -37,7 +37,8 @@ export const routesGen: Array<RouteRecordRaw> = [
headPath: "/general/service", headPath: "/general/service",
exact: true, exact: true,
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layers" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -36,7 +36,8 @@ export const routesInfra: Array<RouteRecordRaw> = [
meta: { meta: {
title: "linux", title: "linux",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
// { // {
// path: "/infrastructure/vm", // path: "/infrastructure/vm",

View File

@ -35,7 +35,8 @@ export const routesK8s: Array<RouteRecordRaw> = [
meta: { meta: {
title: "kubernetesCluster", title: "kubernetesCluster",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
{ {
path: "/kubernetes/service", path: "/kubernetes/service",
@ -43,7 +44,8 @@ export const routesK8s: Array<RouteRecordRaw> = [
meta: { meta: {
title: "kubernetesService", title: "kubernetesService",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -36,7 +36,8 @@ export const routesSelf: Array<RouteRecordRaw> = [
title: "skyWalkingServer", title: "skyWalkingServer",
headPath: "/mesh/services", headPath: "/mesh/services",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
{ {
path: "/self/satellite", path: "/self/satellite",
@ -45,7 +46,8 @@ export const routesSelf: Array<RouteRecordRaw> = [
title: "satellite", title: "satellite",
headPath: "/mesh/controlPanel", headPath: "/mesh/controlPanel",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
], ],
}, },

View File

@ -36,7 +36,8 @@ export const routesMesh: Array<RouteRecordRaw> = [
title: "services", title: "services",
headPath: "/mesh/services", headPath: "/mesh/services",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
{ {
path: "/mesh/controlPanel", path: "/mesh/controlPanel",
@ -45,7 +46,8 @@ export const routesMesh: Array<RouteRecordRaw> = [
title: "controlPanel", title: "controlPanel",
headPath: "/mesh/controlPanel", headPath: "/mesh/controlPanel",
}, },
component: () => import("@/views/Layer.vue"), component: () =>
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
}, },
{ {
path: "/mesh/dataPanel", path: "/mesh/dataPanel",

View File

@ -38,7 +38,8 @@ export const routesSetting: Array<RouteRecordRaw> = [
hasGroup: false, hasGroup: false,
exact: false, exact: false,
}, },
component: () => import("@/views/Settings.vue"), component: () =>
import(/* webpackChunkName: "settings" */ "@/views/Settings.vue"),
}, },
], ],
}, },

View File

@ -77,9 +77,13 @@ export const dashboardStore = defineStore({
}, },
addControl(type: string) { addControl(type: string) {
const arr = this.layout.map((d: any) => Number(d.i)); const arr = this.layout.map((d: any) => Number(d.i));
let index = String(Math.max(...arr) + 1);
if (!this.layout.length) {
index = "0";
}
const newItem: LayoutConfig = { const newItem: LayoutConfig = {
...NewControl, ...NewControl,
i: String(Math.max(...arr) + 1), i: index,
type, type,
metricTypes: [""], metricTypes: [""],
metrics: [""], metrics: [""],
@ -148,9 +152,13 @@ export const dashboardStore = defineStore({
const tabIndex = this.layout[idx].activedTabIndex || 0; const tabIndex = this.layout[idx].activedTabIndex || 0;
const { children } = this.layout[idx].children[tabIndex]; const { children } = this.layout[idx].children[tabIndex];
const arr = children.map((d: any) => Number(d.i)); const arr = children.map((d: any) => Number(d.i));
let index = String(Math.max(...arr) + 1);
if (!children.length) {
index = "0";
}
const newItem: LayoutConfig = { const newItem: LayoutConfig = {
...NewControl, ...NewControl,
i: String(Math.max(...arr) + 1), i: index,
type, type,
metricTypes: [""], metricTypes: [""],
metrics: [""], metrics: [""],

View File

@ -1,29 +0,0 @@
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->
<template>
<div class="Infrastructure">
<InfrastructureMap />
</div>
</template>
<script lang="ts" setup>
import InfrastructureMap from "./InfrastructureMap.vue";
</script>
<style scoped>
.Infrastructure {
width: 100%;
height: 100%;
}
</style>

View File

@ -1,338 +0,0 @@
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->
<template>
<div class="infrastructure-box">
<div ref="mapRef" class="map"></div>
<div class="info-box" v-show="showInfo">
{{ NodeTypes[type] }} Information
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import * as THREE from "three";
import fac from "three-orbit-controls";
import { Line2 } from "three/examples/jsm/lines/Line2";
import { LineGeometry } from "three/examples/jsm/lines/LineGeometry";
import { LineMaterial } from "three/examples/jsm/lines/LineMaterial";
import { HexagonCreateParams } from "@/types/infrastructure";
import HexagonPillar from "./geometry/hexagon-pillar";
import { Layout } from "./geometry/hexagon-layout";
import { NodeTypes } from "./data";
const animateCallbacks: Array<() => void> = [];
const showInfo = ref<boolean>(false);
const objSelected = ref<any>(null);
const meshColors = ref([0xa1cffb, 0x333333, 0x333840, 0x999999]); //[0xa489b2, 0xf2bfd0, 0xf0eaea, 0xef6775, 0xfbc580];
const type = ref<number>(0);
const width = ref<number>(1920);
const height = ref<number>(900);
const mapRef = ref<HTMLDivElement | null>(null);
let lineObj: any;
let scene: any;
let camera: any;
let raycaster: any;
let pointer: any;
onMounted(() => {
if (mapRef.value) {
init(mapRef.value);
}
window.addEventListener("click", onMouseClick, false);
animate();
});
function init(dom: HTMLDivElement): void {
width.value = dom.offsetWidth;
height.value = dom.offsetHeight + 74;
camera = new THREE.PerspectiveCamera(
45,
width.value / height.value,
1,
10000
);
camera.position.set(0, 30, 140);
scene = new THREE.Scene();
let light = new THREE.DirectionalLight(0xffffff, 0.8);
light.position.set(4, 10, 4);
scene.add(light);
scene.add(new THREE.AmbientLight(0x404040));
scene.background = new THREE.Color(0x333840);
const renderer = new THREE.WebGLRenderer({
antialias: true,
alpha: true,
});
renderer.setSize(width.value, height.value);
dom.appendChild(renderer.domElement);
const window = Window as any;
const OrbitControls = fac(THREE);
window.controls = new OrbitControls(camera, renderer.domElement);
window.controls.enableZoom = true;
window.controls.enablePan = true;
const helper = new THREE.GridHelper(10000, 40, 0x04002c, 0x04002c);
helper.position.y = -1000;
// this.scene.add(helper);
// const axis = new THREE.AxesHelper(15000);
// this.scene.add(axis);
// add mesh
createInfrastructure();
raycaster = new THREE.Raycaster();
pointer = new THREE.Vector2();
animateCallbacks.push(() => {
renderer.render(scene, camera);
});
}
function createInfrastructure() {
//layer mesh
const l = {
hexagonParam: [27, 0.04, 5, 0.04, 0],
count: 1,
radius: 28, // layout hexagons radius
};
const [originVectors] = createHexagonLine(l, [0, 0, 0], 0);
// group mesh
const g: HexagonCreateParams = {
hexagonParam: [8, 0.04, 5, 0.04, 0.01],
count: 1,
radius: 8.5,
};
const [gVecs] = createPillarMesh(g, originVectors, 1);
// service mesh
const s: HexagonCreateParams = {
hexagonParam: [2, 0.04, 5, 0.04, 0.2],
count: 1,
radius: 2.2,
};
const [sVecs] = createPillarMesh(s, gVecs, 2);
// instance mesh
const i: HexagonCreateParams = {
hexagonParam: [0.2, 0.04, 5, 0.04, 0.3],
count: 2,
radius: 0.3,
};
createPillarMesh(i, sVecs, 3);
}
function createHexagonLine(
p: HexagonCreateParams,
originVectors: number[],
type: number
) {
lineObj = new THREE.Object3D();
const centers: number[] = [];
const geo = HexagonPillar.getVertices(false, ...p.hexagonParam);
for (let i = 0; i < originVectors.length / 3; i++) {
const c = [originVectors[3 * i], originVectors[3 * i + 2]];
const [origins] = hexGrid(p.count, p.radius, c);
centers.push(...origins);
}
for (let c = 0; c < centers.length / 3; c++) {
const vertices = [];
for (let v = 0; v < geo.vertices.length; v++) {
vertices.push(
centers[3 * c] + geo.vertices[v].x,
centers[3 * c + 1] + geo.vertices[v].y,
centers[3 * c + 2] + geo.vertices[v].z
);
}
const geometry = new LineGeometry().setPositions(vertices);
geometry.setAttribute(
"id",
new THREE.BufferAttribute(new Int8Array([type]), 1)
);
const material = new LineMaterial({
color: meshColors.value[type],
linewidth: 1,
// opacity: 0.2,
dashed: false,
});
material.resolution.set(width.value, height.value);
const line = new Line2(geometry, material);
line.computeLineDistances();
lineObj.add(line);
}
scene.add(lineObj);
return [centers];
}
function createPillarMesh(
p: HexagonCreateParams,
originVectors: number[],
type: number
) {
const centers: number[] = [];
const geo = HexagonPillar.get(false, ...p.hexagonParam);
for (let i = 0; i < originVectors.length / 3; i++) {
const c = [originVectors[3 * i], originVectors[3 * i + 2]];
const [origins] = hexGrid(p.count, p.radius, c);
centers.push(...origins);
}
const hMat = new THREE.MeshStandardMaterial({
side: THREE.DoubleSide,
transparent: true,
});
const geometry = new THREE.BufferGeometry();
geometry.setIndex(geo.indices);
geometry.setAttribute(
"position",
new THREE.BufferAttribute(new Float32Array(geo.vertices), 3)
);
geometry.setAttribute(
"normal",
new THREE.BufferAttribute(new Float32Array(geo.normals), 3)
);
geometry.setAttribute(
"type",
new THREE.BufferAttribute(new Int8Array([type]), 1)
);
const mesh = new THREE.InstancedMesh(geometry, hMat, centers.length / 3);
for (let c = 0; c < centers.length / 3; c++) {
const matrix = new THREE.Matrix4();
const color = new THREE.Color();
color.setHex(meshColors.value[type]);
for (let j = 0; j < geo.vertices.length / 3; j++) {
matrix.setPosition(
geo.vertices[3 * j] + centers[3 * c],
geo.vertices[3 * j + 1] + centers[3 * c + 1],
geo.vertices[3 * j + 2] + centers[3 * c + 2]
);
}
mesh.setMatrixAt(c, matrix);
mesh.setColorAt(c, color);
}
mesh.instanceMatrix.needsUpdate = true;
scene.add(mesh);
return [centers];
}
function hexGrid(n = 1, radius = 1, origin = [0, 0]) {
let x, y, yn, p;
const gLayout = new Layout(radius, origin);
// const coord = [];
const pos = [];
// x = -1; n = 1.5
for (x = -n; x <= n; x++) {
y = Math.max(-n, -x - n); // 0
yn = Math.min(n, -x + n); // 1
// y = 0 yn = 1
for (y; y <= yn; y++) {
p = gLayout.axialToPixel(x, y);
pos.push(p[0], 0, p[1]);
// coord.push(x, y);
}
}
return [pos];
}
function onMouseClick(event: MouseEvent) {
pointer.x = ((event.clientX - 210) / width.value) * 2 - 1;
pointer.y = -((event.clientY - 0) / height.value) * 2 + 1;
raycaster.setFromCamera(pointer, camera);
let meshes = scene.children.filter((d: any) => d instanceof THREE.Mesh);
meshes = [...meshes, ...lineObj.children];
const intersects = raycaster.intersectObjects(meshes, true);
const intersect = intersects[0];
if (objSelected.value) {
for (const m of meshes) {
if (m instanceof Line2) {
m.material.color.setHex(meshColors.value[0]);
m.material.needsUpdate = true;
} else {
const mType = m.geometry.getAttribute("type").array[0];
m.setColorAt(
objSelected.value.instanceId,
new THREE.Color(meshColors.value[mType])
);
m.instanceColor.needsUpdate = true;
}
}
}
if (intersect) {
showInfo.value = true;
if (intersect.object instanceof Line2) {
intersect.object.material.color.setHex(0x73b3b9);
objSelected.value = intersect;
type.value = 0;
intersect.object.material.needsUpdate = true;
} else {
intersect.object.setColorAt(
intersect.instanceId,
new THREE.Color(0x73b3b9)
);
intersect.object.instanceColor.needsUpdate = true;
objSelected.value = intersect;
type.value =
objSelected.value.object.geometry.getAttribute("type").array[0];
}
} else {
if (objSelected.value) {
for (const m of meshes) {
if (m instanceof Line2) {
m.material.color.setHex(meshColors.value[0]);
m.material.needsUpdate = true;
} else {
const mType = m.geometry.getAttribute("type").array[0];
m.setColorAt(
objSelected.value.instanceId,
new THREE.Color(meshColors.value[mType])
);
m.instanceColor.needsUpdate = true;
}
}
}
objSelected.value = null;
type.value = NaN;
showInfo.value = false;
}
}
function animate(): void {
animateCallbacks.forEach((fn) => fn());
requestAnimationFrame(animate);
}
</script>
<style scoped>
.info-box {
position: absolute;
top: 10px;
left: 10px;
background: #fff;
color: #000;
height: 700px;
width: 300px;
border-radius: 3px;
padding: 10px;
}
.infrastructure-box {
position: relative;
width: 100%;
height: 100%;
}
.map {
width: 100%;
height: 100%;
}
</style>

View File

@ -1,23 +0,0 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const NodeTypes = [
"Layer",
"Group",
"Service",
"Service Instance",
"endpoint",
];

View File

@ -1,144 +0,0 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class Orientation {
public f0 = 0;
public f1 = 0;
public f2 = 0;
public f3 = 0;
public b0? = 0;
public b1? = 0;
public b2? = 0;
public b3? = 0;
public start_angle? = 0;
constructor(
f0: number,
f1: number,
f2: number,
f3: number,
b0: number,
b1: number,
b2: number,
b3: number,
start_angle: number
) {
this.f0 = f0;
this.f1 = f1;
this.f2 = f2;
this.f3 = f3;
this.b0 = b0;
this.b1 = b1;
this.b2 = b2;
this.b3 = b3;
this.start_angle = start_angle;
}
}
const SQRT3 = Math.sqrt(3.0);
class Layout {
static Pointy = new Orientation(
SQRT3,
SQRT3 / 2.0,
0.0,
3.0 / 2.0,
SQRT3 / 3.0,
-1.0 / 3.0,
0.0,
2.0 / 3.0,
0.5
);
static Flat = new Orientation(
3.0 / 2.0,
0.0,
SQRT3 / 2.0,
SQRT3,
2.0 / 3.0,
0.0,
-1.0 / 3.0,
SQRT3 / 3.0,
0.0
);
static spacing(radius: number, isPointy = false): number[] {
return isPointy
? [SQRT3 * radius, 2 * radius * (3 / 4)]
: [2 * radius * (3 / 4), SQRT3 * radius];
}
private radius = 1;
private orientation: Orientation = { f0: 0, f1: 0, f2: 0, f3: 0 };
private origin = [0, 0];
constructor(radius: number, origin = [0, 0], orientation?: Orientation) {
this.radius = radius; //Layout.spacing( radius, ( orientation === Layout.Pointy ) );
this.orientation = orientation || Layout.Flat;
this.origin = origin;
}
// Same as HexToPixel, Except it takes raw coords instead of hex object.
axialToPixel(ax: number, ay: number): number[] {
const M = this.orientation;
const x = (M.f0 * ax + M.f1 * ay) * this.radius;
const y = (M.f2 * ax + M.f3 * ay) * this.radius;
return [x + this.origin[0], y + this.origin[1]];
}
hexToPixel(h: { x: number; y: number }): number[] {
const M = this.orientation;
const x = (M.f0 * h.x + M.f1 * h.y) * this.radius;
const y = (M.f2 * h.x + M.f3 * h.y) * this.radius;
return [x + this.origin[0], y + this.origin[1]];
}
}
class Hex extends Int16Array {
constructor(x: number, y: number, z = null) {
super(3);
this.xyz(x, y, z);
}
xyz(x: number, y: number, z: number | null = null): Hex {
if (z == null) z = -x - y;
if (x + y + z != 0) {
console.log("Bad Axial Coordinate : : q %d r %d s %d", x, y, z);
}
this[0] = x;
this[1] = y;
this[2] = z;
return this;
}
get x(): number {
return this[0];
}
get y(): number {
return this[1];
}
get z(): number {
return this[2];
}
get len(): number {
return Math.floor(
(Math.abs(this[0]) + Math.abs(this[1]) + Math.abs(this[2])) / 2
);
}
}
export { Hex, Orientation, Layout };

View File

@ -1,281 +0,0 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Vec3 from "@/utils/vec3";
import Vec2 from "@/utils/vec2";
class HexagonPillar {
static get(
pointyUp = true,
radius = 0.5,
cornerScale = 0.2,
cornerDiv = 3,
capSize = 0.2,
offsetHeight = 0.5
): {
vertices: number[];
indices: number[];
texcoord: number[];
normals: number[];
} {
const rtn: {
vertices: number[];
indices: number[];
texcoord: number[];
normals: number[];
} = {
vertices: [],
indices: [],
texcoord: [],
normals: [],
};
let poly = createPolygon(radius, 6, pointyUp ? (30 * Math.PI) / 180 : 0); // Create Base Shape
poly = polyBevel(poly, cornerScale, cornerDiv); // Round the Shape Corners
// Base Layer
toVec3(rtn, poly);
const vertCnt = rtn.vertices.length / 3;
// Starting layer for Cap.
toVec3(rtn, poly, [0, offsetHeight, 0]);
// Extra Layers for Bevel
polyCapBevel(rtn, poly, cornerDiv, capSize, [0, offsetHeight, 0]);
const idxTip = rtn.vertices.length;
// Cap Center Point
rtn.vertices.push(0, capSize + offsetHeight, 0);
rtn.normals.push(0, 1, 0);
// Indices
const idx = idxTip / 3;
gridIndicesCol(rtn.indices, vertCnt, 2 + cornerDiv, 0, true, true);
fanIndices(rtn.indices, idx, idx - vertCnt, idx - 1, true);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
return rtn;
}
static getVertices(pointyUp = true, radius = 0.5): { vertices: Vec3[] } {
const rtn = {
vertices: [],
normals: [],
};
const poly = createPolygon(radius, 6, pointyUp ? (30 * Math.PI) / 180 : 0); // Create Base Shape
toVec3(rtn, poly);
const vertices: any[] = [];
for (let i = 0; i < rtn.vertices.length / 3; i++) {
vertices.push(
new Vec3(
rtn.vertices[i * 3],
rtn.vertices[i * 3 + 1],
rtn.vertices[i * 3 + 2]
)
);
}
vertices.push(new Vec3(rtn.vertices[0], rtn.vertices[1], rtn.vertices[2]));
return { vertices };
}
}
// Create the basic 2d polygon shape
function createPolygon(radius: number, sides = 6, offset = 0) {
const poly: number[] = [];
let i, rad;
for (i = 0; i < sides; i++) {
rad = Math.PI * 2 * (i / sides);
poly.push(Math.cos(rad + offset) * radius, Math.sin(rad + offset) * radius);
}
return poly;
}
// Bevel the corners of polygon
function polyBevel(poly: number[], cornerScale = 0.2, cornerDiv = 3) {
const polyOut: number[] = [];
const len = poly.length / 2;
const a = new Vec2(); // 3 Points that forms a Polygon Corner
const b = new Vec2();
const c = new Vec2();
const va = new Vec2(); // Min/Max Points of the corner to bevel
const vb = new Vec2();
const norma = new Vec2(); // Inward Normals of the Corner Edges
const normb = new Vec2();
const pivot = new Vec2(); // Pivot point to create curved points
// eslint-disable-next-line
const v = new Vec2() as any;
let ii, i, j, k, radius;
for (j = 0; j < len; j++) {
i = mod(j - 1, len); // Previous Point
k = mod(j + 1, len); // Next Point
a.fromBuf(poly, i * 2); // Get the Point Positions out of flat buffer
b.fromBuf(poly, j * 2);
c.fromBuf(poly, k * 2);
va.fromLerp(a, b, 1.0 - cornerScale); // Get the two points to start and end curved corner
vb.fromLerp(b, c, cornerScale);
norma.fromSub(b, a).perpCCW().norm(); // Compute Inward normal of the two edges
normb.fromSub(c, b).perpCCW().norm();
raysIntersection(va, norma, vb, normb, pivot); // Point where the 2 normals converge.
radius = Vec2.len(va, pivot); // Get the Radius for the curved corner
va.pushTo(polyOut);
for (ii = 1; ii < cornerDiv; ii++) {
// Fill in the remaining points
v.fromLerp(va, vb, ii / cornerDiv) // Lerp between Start + end Points
.sub(pivot) // Localize it
.norm() // Normalize it
.scale(radius) // Scale it to the radius
.add(pivot) // Move it back to world space
.pushTo(polyOut);
}
vb.pushTo(polyOut);
}
return polyOut;
}
function mod(a: number, b: number): number {
const v = a % b;
return v < 0 ? b + v : v;
}
// Turn 2D Polygon Points into 3D Vertices
function toVec3(
geo: { normals: number[]; vertices: number[] },
poly: number[],
offset?: Vec3 | number[]
) {
const v = new Vec3();
// eslint-disable-next-line
let i: any;
offset = offset || [0, 0, 0];
for (i of Vec2.bufIter(poly)) {
v.fromVec2(i, true)
.add(offset)
.pushTo(geo.vertices)
.sub(offset)
.norm()
.pushTo(geo.normals);
}
}
// Create a Beveled cap for the extruded walls
function polyCapBevel(
geo: { normals: number[]; vertices: number[] },
poly: number[],
cornerDiv: number,
capSize: number,
offset?: Vec3 | number[]
) {
// eslint-disable-next-line
const v: any = new Vec2();
const lerp: any[] = [];
let pivot, top, pnt, i, vlen, tlen;
offset = offset || [0, 0, 0];
for (i = 0; i < poly.length; i += 2) {
v.fromBuf(poly, i);
vlen = v.len();
tlen = vlen - capSize;
pnt = new Vec3().fromVec2(v, true);
pivot = Vec3.scale(pnt, tlen / vlen);
top = Vec3.add(pivot, [0, capSize, 0]);
lerp.push({ pivot, top, pnt });
}
let t, itm;
pnt = new Vec3();
for (i = 1; i <= cornerDiv; i++) {
t = i / cornerDiv;
for (itm of lerp) {
pnt
.fromLerp(itm.pnt, itm.top, t)
.sub(itm.pivot)
.norm()
.pushTo(geo.normals)
.scale(capSize)
.add(itm.pivot)
.add(offset)
.pushTo(geo.vertices);
}
}
}
//https://stackoverflow.com/questions/2931573/determining-if-two-rays-intersect
function raysIntersection(as: Vec2, ad: Vec2, bs: Vec2, bd: Vec2, out: Vec2) {
const dx = bs[0] - as[0];
const dy = bs[1] - as[1];
const det = bd[0] * ad[1] - bd[1] * ad[0];
if (det != 0) {
// near parallel line will yield noisy results
const u = (dy * bd[0] - dx * bd[1]) / det;
const v = (dy * ad[0] - dx * ad[1]) / det;
if (u >= 0 && v >= 0) {
out[0] = as[0] + ad[0] * u;
out[1] = as[1] + ad[1] * u;
return true;
}
}
return false;
}
/** Generate Indices of both a Looped or Unlooped Grid, Backslash Pattern, Loops on Columns */
function gridIndicesCol(
out: number[],
row_size: number,
row_cnt: number,
start_idx = 0,
do_loop = false,
rev_quad = false
) {
const row_stop = row_cnt - 1,
col_stop = do_loop ? row_size : row_size - 1;
let row_a, row_b, r, rr, rrr, a, b, c, d;
for (r = 0; r < row_stop; r++) {
// Figure out the starting Index for the Two Rows
// 2nd row might loop back to starting row when Looping.
row_a = start_idx + row_size * r;
row_b = start_idx + row_size * (r + 1);
for (rr = 0; rr < col_stop; rr++) {
// Defined the Vertex Index of a Quad
rrr = (rr + 1) % row_size;
a = row_a + rr;
b = row_a + rrr;
d = row_b + rr;
c = row_b + rrr;
if (!rev_quad) out.push(a, b, c, c, d, a);
// Counter ClockWise
else out.push(a, d, c, c, b, a);
}
}
}
function fanIndices(
out: number[],
midIdx: number,
edgeStart: number,
edgeEnd: number,
rev_quad = false
) {
const len = edgeEnd - edgeStart + 1;
let i, ii;
for (i = 0; i < len; i++) {
ii = (i + 1) % len; // Next Point on the edge
if (!rev_quad) out.push(midIdx, edgeStart + i, edgeStart + ii);
// Counter ClockWise
else out.push(midIdx, edgeStart + ii, edgeStart + i);
}
}
export default HexagonPillar;

View File

@ -39,24 +39,24 @@ module.exports = {
config.resolve.alias.set("vue-i18n", "vue-i18n/dist/vue-i18n.cjs.js"); config.resolve.alias.set("vue-i18n", "vue-i18n/dist/vue-i18n.cjs.js");
}, },
configureWebpack: (config) => { configureWebpack: (config) => {
config.performance = {
hints: false,
};
config.optimization = { config.optimization = {
splitChunks: { splitChunks: {
chunks: "all", chunks: "all",
minSize: 20000,
maxSize: 2000000,
cacheGroups: { cacheGroups: {
echarts: { echarts: {
name: "echarts", name: "echarts",
test: /[\\/]node_modules[\\/]echarts[\\/]/, test: /[\\/]node_modules[\\/]echarts[\\/]/,
priority: 1, priority: 20,
}, },
elementPlus: { elementPlus: {
name: "element-plus", name: "elementPlus",
test: /[\\/]node_modules[\\/]element-plus[\\/]/, test: /[\\/]node_modules[\\/]element-plus[\\/]/,
priority: 2, priority: 19,
},
three: {
name: "three",
test: /[\\/]node_modules[\\/]three[\\/]/,
priority: 3,
}, },
}, },
}, },