mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-01 20:24:31 +00:00
build: optimize configs for building (#44)
This commit is contained in:
parent
0a29a86c34
commit
355fe215a3
509
package-lock.json
generated
509
package-lock.json
generated
@ -15,8 +15,6 @@
|
||||
"element-plus": "^2.0.2",
|
||||
"lodash": "^4.17.21",
|
||||
"pinia": "^2.0.5",
|
||||
"three": "^0.131.3",
|
||||
"three-orbit-controls": "^82.1.0",
|
||||
"vue": "^3.0.0",
|
||||
"vue-grid-layout": "^3.0.0-beta1",
|
||||
"vue-i18n": "^9.1.9",
|
||||
@ -63,6 +61,7 @@
|
||||
"stylelint-order": "^5.0.0",
|
||||
"svg-sprite-loader": "^6.0.11",
|
||||
"typescript": "~4.4.4",
|
||||
"vue-cli-plugin-webpack-bundle-analyzer": "~4.0.0",
|
||||
"vue-jest": "^5.0.0-0"
|
||||
}
|
||||
},
|
||||
@ -2791,6 +2790,12 @@
|
||||
"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": {
|
||||
"version": "2.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
|
||||
@ -3329,16 +3334,8 @@
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.14.179",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz",
|
||||
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w=="
|
||||
},
|
||||
"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": "*"
|
||||
}
|
||||
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
@ -4632,13 +4629,6 @@
|
||||
"@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": {
|
||||
"version": "3.0.7",
|
||||
"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",
|
||||
"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": {
|
||||
"version": "0.1.24",
|
||||
"resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz",
|
||||
@ -18204,6 +18187,15 @@
|
||||
"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": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -23475,6 +23467,20 @@
|
||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
|
||||
"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": {
|
||||
"version": "1.0.5",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
|
||||
@ -25941,6 +25937,15 @@
|
||||
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
|
||||
"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": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
@ -26264,7 +26269,7 @@
|
||||
"version": "4.4.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
|
||||
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@ -26731,6 +26736,174 @@
|
||||
"@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": {
|
||||
"version": "7.11.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
|
||||
@ -27010,17 +27183,6 @@
|
||||
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
|
||||
"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": {
|
||||
"version": "1.9.1",
|
||||
"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": {
|
||||
"version": "0.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz",
|
||||
"integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg=="
|
||||
},
|
||||
"@hapi/address": {
|
||||
"version": "2.1.4",
|
||||
@ -30076,8 +30237,7 @@
|
||||
"@interactjs/core": {
|
||||
"version": "1.10.11",
|
||||
"resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.11.tgz",
|
||||
"integrity": "sha512-aJ50ccVeszpJt7wPH7Yfqm7f1aG1SA94qd90P0NaESh5/QUXn4CESO6igobo4DFHQ5z+1Rfdl8aphP4JxlH4gw==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-aJ50ccVeszpJt7wPH7Yfqm7f1aG1SA94qd90P0NaESh5/QUXn4CESO6igobo4DFHQ5z+1Rfdl8aphP4JxlH4gw=="
|
||||
},
|
||||
"@interactjs/dev-tools": {
|
||||
"version": "1.10.11",
|
||||
@ -30795,6 +30955,12 @@
|
||||
"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": {
|
||||
"version": "2.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
|
||||
@ -31309,16 +31475,8 @@
|
||||
"@types/lodash": {
|
||||
"version": "4.14.179",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz",
|
||||
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w=="
|
||||
},
|
||||
"@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": "*"
|
||||
}
|
||||
"integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
@ -32346,13 +32504,6 @@
|
||||
"vue-jest": "^3.0.5"
|
||||
},
|
||||
"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": {
|
||||
"version": "3.0.7",
|
||||
"resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz",
|
||||
@ -32378,8 +32529,7 @@
|
||||
"version": "4.5.15",
|
||||
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz",
|
||||
"integrity": "sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"@vue/cli-service": {
|
||||
"version": "4.5.15",
|
||||
@ -32817,8 +32967,7 @@
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz",
|
||||
"integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"@vue/reactivity": {
|
||||
"version": "3.2.26",
|
||||
@ -32877,8 +33026,7 @@
|
||||
"version": "2.0.0-rc.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.0.0-rc.18.tgz",
|
||||
"integrity": "sha512-aifolXjVdsogjaLmDoZ0FU8vN+R67aWmg9OuVeED4w5Ij5GFQLrlhM19uhWe/r5xXUL4fXMk3pX5wW6FJP1NcQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"@vue/web-component-wrapper": {
|
||||
"version": "1.3.0",
|
||||
@ -32906,8 +33054,7 @@
|
||||
"vue-demi": {
|
||||
"version": "0.12.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz",
|
||||
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -33154,8 +33301,7 @@
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "7.2.0",
|
||||
@ -33203,15 +33349,13 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
|
||||
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"ajv-keywords": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"alphanum-sort": {
|
||||
"version": "1.0.2",
|
||||
@ -33603,8 +33747,7 @@
|
||||
"version": "7.0.0-bridge.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
|
||||
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"babel-jest": {
|
||||
"version": "24.9.0",
|
||||
@ -36290,13 +36433,6 @@
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
|
||||
"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": {
|
||||
"version": "0.1.24",
|
||||
"resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.24.tgz",
|
||||
@ -40684,8 +40820,7 @@
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -41077,8 +41212,7 @@
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
|
||||
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"jest-regex-util": {
|
||||
"version": "24.9.0",
|
||||
@ -42500,8 +42634,7 @@
|
||||
"lodash-unified": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.1.tgz",
|
||||
"integrity": "sha512-Py+twfpWn+2dFQWCuGcp21WiQRwZwnm1cyE3piSt/VtBVKVyxlR58WgOVRzXtmdmDRGJKH8F8GPaA29WK/yK8g==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-Py+twfpWn+2dFQWCuGcp21WiQRwZwnm1cyE3piSt/VtBVKVyxlR58WgOVRzXtmdmDRGJKH8F8GPaA29WK/yK8g=="
|
||||
},
|
||||
"lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
@ -43075,6 +43208,12 @@
|
||||
"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": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -44250,8 +44389,7 @@
|
||||
"vue-demi": {
|
||||
"version": "0.12.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz",
|
||||
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -45325,8 +45463,7 @@
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.14.0.tgz",
|
||||
"integrity": "sha512-8d5fiBQZWMtGWH/7ewEeo6RnBNyT2kLD5wTIfV2oHYqH4hjiofg/rP5X3SUwnqOINzE4mM/K/UOAiNrIaKzd4w==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"postcss-reduce-initial": {
|
||||
"version": "4.0.3",
|
||||
@ -45404,15 +45541,13 @@
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
|
||||
"integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"postcss-scss": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.3.tgz",
|
||||
"integrity": "sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"postcss-selector-parser": {
|
||||
"version": "6.0.8",
|
||||
@ -45428,8 +45563,7 @@
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz",
|
||||
"integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"postcss-svgo": {
|
||||
"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": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
|
||||
@ -48226,22 +48371,19 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz",
|
||||
"integrity": "sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"stylelint-config-prettier": {
|
||||
"version": "9.0.3",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz",
|
||||
"integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"stylelint-config-recommended": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
|
||||
"integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"stylelint-config-standard": {
|
||||
"version": "24.0.0",
|
||||
@ -48999,16 +49141,6 @@
|
||||
"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": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
|
||||
@ -49174,6 +49306,12 @@
|
||||
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
|
||||
"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": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
@ -49431,7 +49569,7 @@
|
||||
"version": "4.4.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
|
||||
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"uglify-js": {
|
||||
"version": "3.4.10",
|
||||
@ -49812,6 +49950,116 @@
|
||||
"@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": {
|
||||
"version": "7.11.0",
|
||||
"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": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
|
||||
|
@ -17,8 +17,6 @@
|
||||
"element-plus": "^2.0.2",
|
||||
"lodash": "^4.17.21",
|
||||
"pinia": "^2.0.5",
|
||||
"three": "^0.131.3",
|
||||
"three-orbit-controls": "^82.1.0",
|
||||
"vue": "^3.0.0",
|
||||
"vue-grid-layout": "^3.0.0-beta1",
|
||||
"vue-i18n": "^9.1.9",
|
||||
@ -65,6 +63,7 @@
|
||||
"stylelint-order": "^5.0.0",
|
||||
"svg-sprite-loader": "^6.0.11",
|
||||
"typescript": "~4.4.4",
|
||||
"vue-cli-plugin-webpack-bundle-analyzer": "~4.0.0",
|
||||
"vue-jest": "^5.0.0-0"
|
||||
},
|
||||
"eslintConfig": {
|
||||
|
@ -29,7 +29,7 @@ const msg = {
|
||||
events: "Events",
|
||||
alerts: "Alerts",
|
||||
settings: "Settings",
|
||||
dashboards: "Dashboard",
|
||||
dashboards: "Dashboards",
|
||||
profiles: "Profiles",
|
||||
database: "Database",
|
||||
serviceName: "Service Name",
|
||||
@ -149,7 +149,7 @@ const msg = {
|
||||
dashboard: "Dashboard",
|
||||
topology: "Topology",
|
||||
trace: "Trace",
|
||||
alarm: "Alarm",
|
||||
alarm: "Alarms",
|
||||
event: "Event",
|
||||
auto: "Auto",
|
||||
reload: "Reload",
|
||||
|
@ -35,7 +35,8 @@ export const routesAlarm: Array<RouteRecordRaw> = [
|
||||
meta: {
|
||||
exact: false,
|
||||
},
|
||||
component: () => import("@/views/Alarm.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "alarms" */ "@/views/Alarm.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -36,7 +36,8 @@ export const routesBrowser: Array<RouteRecordRaw> = [
|
||||
headPath: "/browser",
|
||||
exact: true,
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -31,7 +31,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
children: [
|
||||
{
|
||||
path: "/dashboard/list",
|
||||
component: () => import("@/views/dashboard/List.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/List.vue"
|
||||
),
|
||||
name: "List",
|
||||
meta: {
|
||||
title: "dashboardList",
|
||||
@ -40,7 +43,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
path: "/dashboard/new",
|
||||
component: () => import("@/views/dashboard/New.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/New.vue"
|
||||
),
|
||||
name: "New",
|
||||
meta: {
|
||||
title: "dashboardNew",
|
||||
@ -49,7 +55,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
path: "/dashboard/:layerId/:entity/:name",
|
||||
component: () => import("@/views/dashboard/Edit.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
|
||||
),
|
||||
name: "Create",
|
||||
meta: {
|
||||
title: "dashboardEdit",
|
||||
@ -59,7 +68,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
path: "/dashboard/:layerId/:entity/:serviceId/:name",
|
||||
component: () => import("@/views/dashboard/Edit.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
|
||||
),
|
||||
name: "View",
|
||||
meta: {
|
||||
title: "dashboardEdit",
|
||||
@ -69,7 +81,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
path: "/dashboard/related/:layerId/:entity/:serviceId/:destServiceId/:name",
|
||||
component: () => import("@/views/dashboard/Edit.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
|
||||
),
|
||||
name: "ViewServiceRelation",
|
||||
meta: {
|
||||
title: "dashboardEdit",
|
||||
@ -79,7 +94,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
path: "/dashboard/:layerId/:entity/:serviceId/:podId/:name",
|
||||
component: () => import("@/views/dashboard/Edit.vue"),
|
||||
component: () =>
|
||||
import(
|
||||
/* webpackChunkName: "dashboards" */ "@/views/dashboard/Edit.vue"
|
||||
),
|
||||
name: "ViewPod",
|
||||
meta: {
|
||||
title: "dashboardEdit",
|
||||
@ -89,7 +107,10 @@ export const routesDashboard: Array<RouteRecordRaw> = [
|
||||
},
|
||||
{
|
||||
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",
|
||||
meta: {
|
||||
title: "dashboardEdit",
|
||||
|
@ -37,7 +37,8 @@ export const routesDatabase: Array<RouteRecordRaw> = [
|
||||
headPath: "/database",
|
||||
exact: true,
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -35,7 +35,8 @@ export const routesEvent: Array<RouteRecordRaw> = [
|
||||
meta: {
|
||||
exact: false,
|
||||
},
|
||||
component: () => import("@/views/Event.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "events" */ "@/views/Event.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -36,7 +36,8 @@ export const routesFunctions: Array<RouteRecordRaw> = [
|
||||
headPath: "/functions",
|
||||
exact: true,
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -37,7 +37,8 @@ export const routesGen: Array<RouteRecordRaw> = [
|
||||
headPath: "/general/service",
|
||||
exact: true,
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layers" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -36,7 +36,8 @@ export const routesInfra: Array<RouteRecordRaw> = [
|
||||
meta: {
|
||||
title: "linux",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
// {
|
||||
// path: "/infrastructure/vm",
|
||||
|
@ -35,7 +35,8 @@ export const routesK8s: Array<RouteRecordRaw> = [
|
||||
meta: {
|
||||
title: "kubernetesCluster",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
{
|
||||
path: "/kubernetes/service",
|
||||
@ -43,7 +44,8 @@ export const routesK8s: Array<RouteRecordRaw> = [
|
||||
meta: {
|
||||
title: "kubernetesService",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -36,7 +36,8 @@ export const routesSelf: Array<RouteRecordRaw> = [
|
||||
title: "skyWalkingServer",
|
||||
headPath: "/mesh/services",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
{
|
||||
path: "/self/satellite",
|
||||
@ -45,7 +46,8 @@ export const routesSelf: Array<RouteRecordRaw> = [
|
||||
title: "satellite",
|
||||
headPath: "/mesh/controlPanel",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -36,7 +36,8 @@ export const routesMesh: Array<RouteRecordRaw> = [
|
||||
title: "services",
|
||||
headPath: "/mesh/services",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
{
|
||||
path: "/mesh/controlPanel",
|
||||
@ -45,7 +46,8 @@ export const routesMesh: Array<RouteRecordRaw> = [
|
||||
title: "controlPanel",
|
||||
headPath: "/mesh/controlPanel",
|
||||
},
|
||||
component: () => import("@/views/Layer.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "layer" */ "@/views/Layer.vue"),
|
||||
},
|
||||
{
|
||||
path: "/mesh/dataPanel",
|
||||
|
@ -38,7 +38,8 @@ export const routesSetting: Array<RouteRecordRaw> = [
|
||||
hasGroup: false,
|
||||
exact: false,
|
||||
},
|
||||
component: () => import("@/views/Settings.vue"),
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "settings" */ "@/views/Settings.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -77,9 +77,13 @@ export const dashboardStore = defineStore({
|
||||
},
|
||||
addControl(type: string) {
|
||||
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 = {
|
||||
...NewControl,
|
||||
i: String(Math.max(...arr) + 1),
|
||||
i: index,
|
||||
type,
|
||||
metricTypes: [""],
|
||||
metrics: [""],
|
||||
@ -148,9 +152,13 @@ export const dashboardStore = defineStore({
|
||||
const tabIndex = this.layout[idx].activedTabIndex || 0;
|
||||
const { children } = this.layout[idx].children[tabIndex];
|
||||
const arr = children.map((d: any) => Number(d.i));
|
||||
let index = String(Math.max(...arr) + 1);
|
||||
if (!children.length) {
|
||||
index = "0";
|
||||
}
|
||||
const newItem: LayoutConfig = {
|
||||
...NewControl,
|
||||
i: String(Math.max(...arr) + 1),
|
||||
i: index,
|
||||
type,
|
||||
metricTypes: [""],
|
||||
metrics: [""],
|
||||
|
@ -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>
|
@ -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>
|
@ -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",
|
||||
];
|
@ -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 };
|
@ -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;
|
@ -39,24 +39,24 @@ module.exports = {
|
||||
config.resolve.alias.set("vue-i18n", "vue-i18n/dist/vue-i18n.cjs.js");
|
||||
},
|
||||
configureWebpack: (config) => {
|
||||
config.performance = {
|
||||
hints: false,
|
||||
};
|
||||
config.optimization = {
|
||||
splitChunks: {
|
||||
chunks: "all",
|
||||
minSize: 20000,
|
||||
maxSize: 2000000,
|
||||
cacheGroups: {
|
||||
echarts: {
|
||||
name: "echarts",
|
||||
test: /[\\/]node_modules[\\/]echarts[\\/]/,
|
||||
priority: 1,
|
||||
priority: 20,
|
||||
},
|
||||
elementPlus: {
|
||||
name: "element-plus",
|
||||
name: "elementPlus",
|
||||
test: /[\\/]node_modules[\\/]element-plus[\\/]/,
|
||||
priority: 2,
|
||||
},
|
||||
three: {
|
||||
name: "three",
|
||||
test: /[\\/]node_modules[\\/]three[\\/]/,
|
||||
priority: 3,
|
||||
priority: 19,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user