From 922383e232ae86d28a4d507b2abdf40781c2e7fb Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sat, 4 Jul 2020 18:19:46 -0700 Subject: [PATCH] Cleanup unused code and simplify webpack --- package.json | 7 +- resources/scripts/routers/ServerRouter.tsx | 4 +- resources/styles/components/animations.css | 28 -- resources/styles/components/filemanager.css | 81 ------ resources/styles/components/forms.css | 253 ------------------ resources/styles/components/miscellaneous.css | 65 ----- resources/styles/components/modal.css | 51 ---- resources/styles/components/navigation.css | 69 ----- resources/styles/components/notifications.css | 46 ---- resources/styles/components/spinners.css | 34 --- resources/styles/components/typography.css | 17 -- resources/styles/main.css | 32 --- tsconfig.json | 1 + webpack.config.js | 97 +++---- yarn.lock | 205 +++++++------- 15 files changed, 135 insertions(+), 855 deletions(-) delete mode 100644 resources/styles/components/animations.css delete mode 100644 resources/styles/components/filemanager.css delete mode 100644 resources/styles/components/forms.css delete mode 100644 resources/styles/components/miscellaneous.css delete mode 100644 resources/styles/components/modal.css delete mode 100644 resources/styles/components/navigation.css delete mode 100644 resources/styles/components/notifications.css delete mode 100644 resources/styles/components/spinners.css delete mode 100644 resources/styles/components/typography.css delete mode 100644 resources/styles/main.css diff --git a/package.json b/package.json index 4023446df..32334baae 100644 --- a/package.json +++ b/package.json @@ -88,19 +88,17 @@ "eslint-plugin-react-hooks": "^4.0.5", "eslint-plugin-standard": "^4.0.1", "fork-ts-checker-webpack-plugin": "^5.0.6", - "glob-all": "^3.1.0", "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.8.0", "postcss": "^7.0.24", "postcss-import": "^12.0.1", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "precss": "^4.0.0", - "purgecss-webpack-plugin": "^1.6.0", "redux-devtools-extension": "^2.13.8", "resolve-url-loader": "^3.0.0", "source-map-loader": "^1.0.1", "style-loader": "^1.2.1", + "svg-url-loader": "^6.0.0", "tailwindcss": "^1.4.6", "terser-webpack-plugin": "^3.0.6", "ts-loader": "^6.2.1", @@ -109,6 +107,7 @@ "typescript-plugin-tw-template": "^2.0.1", "webpack": "^4.43.0", "webpack-assets-manifest": "^3.1.1", + "webpack-bundle-analyzer": "^3.8.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0", "webpack-manifest-plugin": "^2.2.0", @@ -119,7 +118,7 @@ "watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress", "build": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --progress", "build:production": "yarn run clean && cross-env NODE_ENV=production ./node_modules/.bin/webpack --mode production", - "serve": "yarn run clean && cross-env PUBLIC_PATH=https://pterodactyl.test:8080 NODE_ENV=development webpack-dev-server --host 0.0.0.0 --hot --https --key /etc/ssl/private/pterodactyl.test-key.pem --cert /etc/ssl/private/pterodactyl.test.pem" + "serve": "yarn run clean && cross-env PUBLIC_PATH=https://pterodactyl.test:8080 cross-env TSC_WATCHFILE=UseFsEventsWithFallbackDynamicPolling NODE_ENV=development webpack-dev-server --host 0.0.0.0 --hot --https --key /etc/ssl/private/pterodactyl.test-key.pem --cert /etc/ssl/private/pterodactyl.test.pem" }, "browserslist": [ "> 0.5%", diff --git a/resources/scripts/routers/ServerRouter.tsx b/resources/scripts/routers/ServerRouter.tsx index a053262d6..655acea52 100644 --- a/resources/scripts/routers/ServerRouter.tsx +++ b/resources/scripts/routers/ServerRouter.tsx @@ -66,9 +66,7 @@ const ServerRouter = ({ match, location }: RouteComponentProps<{ id: string }>) error ? : -
- -
+ : <> diff --git a/resources/styles/components/animations.css b/resources/styles/components/animations.css deleted file mode 100644 index 3c3689198..000000000 --- a/resources/styles/components/animations.css +++ /dev/null @@ -1,28 +0,0 @@ -/*! purgecss start ignore */ -.fade-enter, .fade-appear { - @apply .opacity-0; -} - -.fade-enter-active, .fade-appear-active { - @apply .opacity-100; - transition: opacity 250ms; -} - -.fade-exit { - @apply .opacity-100; -} - -.fade-exit-active { - @apply .opacity-0; - transition: opacity 250ms; -} - -/** @todo fix this, hides footer stuff */ -div.route-transition-group { - @apply .relative; - - & section { - @apply .absolute .w-full .top-0 .left-0; - } -} -/*! purgecss end ignore */ diff --git a/resources/styles/components/filemanager.css b/resources/styles/components/filemanager.css deleted file mode 100644 index 329f90ea1..000000000 --- a/resources/styles/components/filemanager.css +++ /dev/null @@ -1,81 +0,0 @@ -.filemanager { - & .header { - @apply .flex .text-xs .text-neutral-600 .pb-4 .font-bold .border-b .border-neutral-200 .mb-3 .uppercase; - - & > div:not(:last-of-type) { - @apply .pr-4; - } - } - - & .row { - @apply .flex .text-sm .py-3 .text-sm .border .border-transparent .text-black .rounded .no-underline; - - & > div:not(:last-of-type) { - @apply .pr-4; - } - - &.active-selection, &:hover { - @apply .bg-neutral-50 .text-neutral-900; - } - - & > .icon { - @apply .w-8 .text-center; - - & > svg { - @apply .h-4; - } - } - } - - .context-menu { - @apply .absolute .bg-white .py-2 .border .border-neutral-300 .shadow-lg .rounded .text-neutral-600 .text-sm .cursor-pointer; - - & > div:not(:last-of-type) { - @apply .border-b .border-neutral-100 .pb-2 .mb-2; - } - - & .context-row { - @apply .flex .flex-row .items-center .py-2 .px-8 .mx-2 .rounded; - transition: background-color 50ms linear; - - & > .icon { - @apply .flex-none; - - & > svg { - @apply .h-4; - } - } - - & > .action { - @apply .flex-auto .pl-2; - } - - &:hover { - @apply .bg-neutral-50 .text-neutral-800; - } - - &.danger { - @apply .border .border-transparent; - transition: border 50ms linear; - - &:hover { - @apply .bg-red-50 .border-red-100; - } - } - - } - } -} - -.filemanager-breadcrumbs { - @apply .px-4 .py-3 .mb-6 .rounded .bg-white .text-neutral-400 .border .border-neutral-100 .shadow; - - & a { - @apply .no-underline .text-neutral-400; - transition: color 100ms linear; - - &:hover { - @apply .text-primary-500; - } - } -} diff --git a/resources/styles/components/forms.css b/resources/styles/components/forms.css deleted file mode 100644 index 2b1efbc1e..000000000 --- a/resources/styles/components/forms.css +++ /dev/null @@ -1,253 +0,0 @@ -form { - @apply .m-0; -} - -textarea, select, input, button { - @apply .outline-none; -} - -button:focus, button:focus-visible { - @apply .outline-none; -} - -input[type=number]::-webkit-outer-spin-button, -input[type=number]::-webkit-inner-spin-button { - -webkit-appearance: none !important; - margin: 0; -} - -input[type=number] { - -moz-appearance: textfield !important; -} - -/** - * Styling for other forms throughout the Panel. - */ -.input:not(select), .input-dark:not(select) { - @apply .appearance-none .w-full; - min-width: 0; - - &:required, &:invalid { - box-shadow: none; - } -} - -.input:not(select) { - @apply .p-3 .rounded .border .border-neutral-200 .text-neutral-800; - transition: border 150ms linear; - - &:focus { - @apply .border-primary-400; - } - - &.error { - @apply .text-red-600 .border-red-500; - } - - &:disabled { - @apply .bg-neutral-100 .border-neutral-200; - } -} - -.input-dark:not(select) { - @apply .p-3 .bg-neutral-600 .border .border-neutral-500 .text-sm .rounded .text-neutral-200 .shadow-none; - transition: border 150ms linear, box-shaodw 150ms ease-in; - - &:focus { - @apply .shadow-md .border-neutral-400; - } - - &:hover { - @apply .border-neutral-400; - } - - & + .input-help { - @apply .text-xs .text-neutral-400; - } - - &.error + .input-help { - @apply .text-red-400 !important; - } - - &:disabled { - @apply .opacity-75; - } -} - -.has-error .input-dark:not(select), .input-dark.error { - @apply .text-red-100 .border-red-400; -} - -.input-help { - @apply .text-xs .text-neutral-400 .pt-2; - - &.error { - @apply .text-red-400 !important; - } -} - -label { - @apply .block .text-xs .uppercase .text-neutral-700 .mb-2; -} - -select:not(.appearance-none) { - @apply .shadow-none .block .p-3 .pr-8 .rounded .border .w-full .text-sm; - transition: border-color 150ms linear; - - &, &:hover:not(:disabled), &:focus { - @apply .outline-none; - } - - -webkit-appearance: none; - -moz-appearance: none; - background-size: 1rem; - background-repeat: no-repeat; - background-position-x: calc(100% - 0.75rem); - background-position-y: center; - - &::-ms-expand { - display: none; - } -} - -select.input:not(.appearance-none) { - @apply .bg-white .border-neutral-200 .text-neutral-400; - transition: color 150ms linear; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath d='M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z'/%3e%3c/svg%3e "); - - &:hover:not(:disabled), &:focus { - @apply .border-primary-500 .text-neutral-700; - } -} - -select.input-dark:not(.appearance-none) { - @apply .bg-neutral-600 .border-neutral-500 .text-neutral-200; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='%23C3D1DF' d='M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z'/%3e%3c/svg%3e "); - background-color: hsl(220deg 21% 16%); - - &:hover:not(:disabled), &:focus { - @apply .border-neutral-400; - } -} - -.input-dark-label { - @apply .uppercase .text-neutral-200; -} - -.input-label { - @apply .block .uppercase .tracking-wide .text-neutral-800 .text-xs .font-bold; - - &:not(.mb-0) { - @apply .mb-2; - } -} - -a.btn { - @apply .no-underline; -} - -.btn { - @apply .rounded .p-2 .uppercase .tracking-wide .text-sm; - transition: all 150ms linear; - - &.btn-secondary { - @apply .border .border-neutral-600 .bg-transparent .text-neutral-200; - - &:hover:not(:disabled) { - @apply .border-neutral-500 .text-neutral-100; - } - - &.btn-red:hover:not(:disabled) { - @apply .bg-red-500 .border-red-600 .text-red-50; - } - - &.btn-green:hover:not(:disabled) { - @apply .bg-green-500 .border-green-600 .text-green-50; - } - } - - &.btn-primary { - &:not(.btn-secondary) { - @apply .bg-primary-500 .border-primary-600 .border .text-primary-50; - } - - &:hover:not(:disabled) { - @apply .bg-primary-600 .border-primary-700; - } - } - - &.btn-grey { - @apply .border .border-neutral-600 .bg-neutral-500 .text-neutral-50; - - &:hover:not(:disabled) { - @apply .bg-neutral-600 .border-neutral-700; - } - } - - &.btn-green { - &:not(.btn-secondary) { - @apply .bg-green-500 .border-green-600 .border .text-green-50; - } - - &:hover:not(:disabled), &.btn-secondary:active:not(:disabled) { - @apply .bg-green-600 .border-green-700; - } - } - - &.btn-red { - &:not(.btn-secondary) { - @apply .bg-red-500 .border-red-600 .text-red-50; - } - - &:hover:not(:disabled), &.btn-secondary:active:not(:disabled) { - @apply .bg-red-600 .border-red-700; - } - } - - /** - * Button Sizes - */ - &.btn-jumbo { - @apply .p-4 .w-full; - } - - &.btn-lg { - @apply .p-4 .text-sm; - } - - &.btn-sm { - @apply .p-3; - } - - &.btn-xs { - @apply .p-2 .text-xs; - } - - &:disabled, &.disabled { - opacity: 0.55; - cursor: default; - } -} - -input[type="checkbox"], input[type="radio"] { - @apply .cursor-pointer .appearance-none .inline-block .align-middle .select-none .flex-no-shrink .w-4 .h-4 .text-primary-400 .border .border-neutral-300 .rounded-sm; - color-adjust: exact; - background-origin: border-box; - transition: all 75ms linear, box-shadow 25ms linear; - - &:checked { - @apply .border-transparent .bg-no-repeat .bg-center; - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M5.707 7.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L7 8.586 5.707 7.293z'/%3e%3c/svg%3e"); - background-color: currentColor; - background-size: 100% 100%; - } - - &:focus { - @apply .outline-none .border-primary-300; - box-shadow: 0 0 0 1px rgba(9, 103, 210, 0.25); - } -} - -input[type="radio"] { - @apply .rounded-full; -} diff --git a/resources/styles/components/miscellaneous.css b/resources/styles/components/miscellaneous.css deleted file mode 100644 index 95a2f030d..000000000 --- a/resources/styles/components/miscellaneous.css +++ /dev/null @@ -1,65 +0,0 @@ -code.clean { - @apply .font-mono .px-2 .py-1; - background-color: #eef1f6; - color: #596981; - border-radius: 2px; - border: 1px solid rgba(0, 0, 0, .1); - display: inline-block; -} - -.grey-row-box { - @apply .flex .rounded .no-underline .text-neutral-200 .items-center .bg-neutral-700 .p-4 .border .border-transparent; - transition: border-color 150ms linear; - - &:not(.no-hover):hover { - @apply .border-neutral-500; - } - - & > div.icon { - @apply .rounded-full .bg-neutral-500 .p-3; - } -} - -.grey-box { - @apply .shadow-md .bg-neutral-700 .rounded .p-3 .flex .text-xs; - - &:not(.mt-0) { - @apply .mt-4; - } -} - -::-webkit-scrollbar { - background: none; - width: 16px; - height: 16px; -} - - ::-webkit-scrollbar-thumb { - border: solid 0 rgb(0 0 0 / 0%); - border-right-width: 4px; - border-left-width: 4px; - -webkit-border-radius: 9px 4px; - -webkit-box-shadow: inset 0 0 0 1px hsl(211, 10%, 53%), inset 0 0 0 4px hsl(209deg 18% 30%); -} - - ::-webkit-scrollbar-track-piece { - margin: 4px 0; -} - - ::-webkit-scrollbar-thumb:horizontal { - border-right-width: 0; - border-left-width: 0; - border-top-width: 4px; - border-bottom-width: 4px; - -webkit-border-radius: 4px 9px; -} - - ::-webkit-scrollbar-thumb:hover { - -webkit-box-shadow: - inset 0 0 0 1px hsl(212, 92%, 43%), - inset 0 0 0 4px hsl(212, 92%, 43%); -} - - ::-webkit-scrollbar-corner { - background: transparent; -} diff --git a/resources/styles/components/modal.css b/resources/styles/components/modal.css deleted file mode 100644 index 0919d9ba1..000000000 --- a/resources/styles/components/modal.css +++ /dev/null @@ -1,51 +0,0 @@ -.modal-mask { - @apply .fixed .pin .z-50 .overflow-auto .flex; - background: rgba(0, 0, 0, 0.70); - transition: opacity 250ms ease; - - & > .modal-container { - @apply .relative .w-full .max-w-1/2 .m-auto .flex-col .flex; - - &.top { - margin-top: 10%; - } - - & > .modal-close-icon { - @apply .absolute .right-0 .p-2 .text-white .cursor-pointer .opacity-50; - transition: opacity 150ms linear, transform 150ms ease-in; - top: -2rem; - - &:hover { - @apply .opacity-100; - transform: rotate(90deg); - } - } - - & > .modal-content { - @apply .bg-neutral-800 .rounded .shadow-md .overflow-y-scroll; - max-height: calc(100vh - 16rem); - transition: all 250ms ease; - } - - /** - * On tiny phone screens make sure there is a margin on the sides and also - * center the modal rather than putting it towards the top of the screen. - */ - @screen smx { - width: 90%; - .top { - margin-top: auto; - } - } - } - - & > .modal-container.full-screen { - @apply .w-3/4; - height: calc(100vh - 16rem); - max-width: none; - } - - & > .modal-container.w-auto { - @apply .w-auto; - } -} diff --git a/resources/styles/components/navigation.css b/resources/styles/components/navigation.css deleted file mode 100644 index 31951ebfb..000000000 --- a/resources/styles/components/navigation.css +++ /dev/null @@ -1,69 +0,0 @@ -#navigation { - @apply .w-full .bg-neutral-900 .shadow-md; - - & > div { - @apply .mx-auto .w-full .flex .items-center; - } - - & #logo { - @apply .flex-1; - - & > a { - @apply .text-2xl .font-header .px-4 .no-underline .text-neutral-200; - transition: color 150ms linear; - - &:hover { - @apply .text-neutral-100; - } - } - } - - & .right-navigation { - @apply .flex .h-full .items-center .justify-center; - - & > a, & > .navigation-link { - @apply .flex .items-center .h-full .no-underline .text-neutral-300 .px-6 .cursor-pointer; - transition: background-color 150ms linear, color 150ms linear, box-shadow 150ms ease-in; - - /*! purgecss start ignore */ - &.active, &:hover { - @apply .text-neutral-100 .bg-black; - box-shadow: inset 0 -2px config('colors.cyan-700'); - } - - &.active { - box-shadow: inset 0 -2px config('colors.cyan-500'); - } - /*! purgecss end ignore */ - } - } -} - -#sub-navigation { - @apply .w-full .bg-neutral-700 .shadow; - - .items { - @apply .flex .items-center .text-sm .mx-auto .px-2; - max-width: 1200px; - - /*! purgecss start ignore */ - & > a, & > div { - @apply .inline-block .py-3 .px-4 .text-neutral-300 .no-underline; - transition: color 150ms linear, box-shadow 150ms ease-in; - - &:not(:first-of-type) { - @apply .ml-2; - } - - &.active, &:hover { - @apply .text-neutral-100; - box-shadow: inset 0 -2px config('colors.cyan-700'); - } - - &.active { - box-shadow: inset 0 -2px config('colors.cyan-500'); - } - } - /*! purgecss end ignore */ - } -} diff --git a/resources/styles/components/notifications.css b/resources/styles/components/notifications.css deleted file mode 100644 index 85d31ee6c..000000000 --- a/resources/styles/components/notifications.css +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Styling to control alert boxes. - */ -.alert { - @apply .p-2 .border .items-center .leading-normal .rounded .flex .w-full .text-sm; - - & > .title { - @apply .flex .rounded-full .uppercase .px-2 .py-1 .text-xs .font-bold .mr-3 .leading-none; - } - - & > .message { - @apply .mr-2 .text-left .flex-auto; - } - - &.error { - @apply .bg-red-600 .border-red-800 .text-red-50; - - & > .title { - @apply .bg-red-500; - } - } - - &.info { - @apply .bg-primary-600 .border-primary-800 .text-primary-50; - - & > .title { - @apply .bg-primary-500; - } - } - - &.success { - @apply .bg-green-600 .border-green-800 .text-green-50; - - & > .title { - @apply .bg-green-500; - } - } - - &.warning { - @apply .bg-yellow-600 .border-yellow-800 .text-yellow-50; - - & > .title { - @apply .bg-yellow-500; - } - } -} diff --git a/resources/styles/components/spinners.css b/resources/styles/components/spinners.css deleted file mode 100644 index 864445b31..000000000 --- a/resources/styles/components/spinners.css +++ /dev/null @@ -1,34 +0,0 @@ -.spinner-circle { - @apply .w-8 .h-8; - border: 3px solid hsla(211, 12%, 43%, 0.2); - border-top-color: hsl(211, 12%, 43%); - border-radius: 50%; - animation: spin 1s cubic-bezier(0.55, 0.25, 0.25, 0.70) infinite; - - &.spinner-sm { - @apply .w-4 .h-4 .border-2; - } - - &.spinner-lg { - @apply .w-16 .h-16; - border-width: 6px; - } - - &.spinner-blue { - border-style: solid; - border-color: hsla(212, 92%, 43%, 0.2); - border-top-color: hsl(212, 92%, 43%); - } - - &.spinner-white { - border-style: solid; - border-color: rgba(255, 255, 255, 0.2); - border-top-color: rgb(255, 255, 255); - } -} - -@keyframes spin { - to { - transform: rotate(360deg); - } -} diff --git a/resources/styles/components/typography.css b/resources/styles/components/typography.css deleted file mode 100644 index 00209a553..000000000 --- a/resources/styles/components/typography.css +++ /dev/null @@ -1,17 +0,0 @@ -@import url('//fonts.googleapis.com/css?family=Rubik:300,400,500&display=swap'); -@import url('https://fonts.googleapis.com/css?family=IBM+Plex+Mono|IBM+Plex+Sans:500&display=swap'); - -body { - @apply .text-neutral-200; - letter-spacing: 0.015em; -} - -h1, h2, h3, h4, h5, h6 { - @apply .font-medium; - letter-spacing: 0; - font-family: 'IBM Plex Sans', -apple-system, '"Roboto"', 'system-ui', 'sans-serif'; -} - -p { - @apply .text-neutral-200 .leading-snug; -} diff --git a/resources/styles/main.css b/resources/styles/main.css deleted file mode 100644 index bac7986f1..000000000 --- a/resources/styles/main.css +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Tailwind Preflight Classes - */ -@import "tailwindcss/preflight"; -@import "tailwindcss/components"; - -@import "xterm/src/xterm.css"; - -/** - * Pterodactyl Specific CSS - */ -@import "components/typography.css"; -@import "components/animations.css"; -@import "components/forms.css"; -@import "components/miscellaneous.css"; -@import "components/modal.css"; -@import "components/navigation.css"; -@import "components/notifications.css"; -@import "components/spinners.css"; -@import "components/filemanager.css"; - -/** - * Tailwind Utilities - */ -@import "tailwindcss/utilities"; - -/** - * Assorted Other CSS - */ -body { - @apply .font-sans; -} diff --git a/tsconfig.json b/tsconfig.json index 7bae0683d..41a4286b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ "sourceMap": true, "baseUrl": ".", "lib": ["es2015", "dom"], + "importsNotUsedAsValues": "preserve", "paths": { "@/*": [ "./resources/scripts/*" diff --git a/webpack.config.js b/webpack.config.js index 0770fb7b9..780461bd7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,64 +1,23 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ const path = require('path'); -const tailwind = require('tailwindcss'); -const glob = require('glob-all'); - const AssetsManifestPlugin = require('webpack-assets-manifest'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const PurgeCssPlugin = require('purgecss-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const isProduction = process.env.NODE_ENV === 'production'; -let plugins = [ - // new MiniCssExtractPlugin({ filename: isProduction ? 'bundle.[chunkhash:8].css' : 'bundle.[hash:8].css' }), - new AssetsManifestPlugin({ - writeToDisk: true, - publicPath: true, - integrity: true, - integrityHashes: ['sha384'], - }), -]; - -if (isProduction) { - // plugins = plugins.concat([ - // new PurgeCssPlugin({ - // paths: glob.sync([ - // path.join(__dirname, 'resources/scripts/**/*.tsx'), - // path.join(__dirname, 'resources/views/templates/**/*.blade.php'), - // ]), - // whitelistPatterns: [/^xterm/], - // extractors: [ - // { - // extractor: class { - // static extract (content) { - // return content.match(/[A-Za-z0-9-_:\\/]+/g) || []; - // } - // }, - // extensions: ['html', 'ts', 'tsx', 'js', 'php'], - // }, - // ], - // }), - // ]); -} else { - plugins.concat([new ForkTsCheckerWebpackPlugin()]); -} - module.exports = { cache: true, target: 'web', mode: process.env.NODE_ENV, - devtool: isProduction ? false : process.env.DEVTOOL || 'source-map', + context: __dirname, + devtool: isProduction ? false : (process.env.DEVTOOL || 'eval-source-map'), performance: { hints: false, }, - entry: [ - 'react-hot-loader/patch', - './resources/scripts/index.tsx', - ], + entry: ['react-hot-loader/patch', './resources/scripts/index.tsx'], output: { - path: path.resolve(__dirname, 'public/assets'), + path: path.resolve(__dirname, '/public/assets'), filename: isProduction ? 'bundle.[chunkhash:8].js' : 'bundle.[hash:8].js', chunkFilename: isProduction ? '[name].[chunkhash:8].js' : '[name].[hash:8].js', publicPath: (process.env.PUBLIC_PATH || '') + '/assets/', @@ -67,7 +26,7 @@ module.exports = { module: { rules: [ { - test: /\.tsx?$/, + test: /\.ts(x?)$/, exclude: /node_modules/, loader: 'babel-loader', options: { @@ -76,45 +35,54 @@ module.exports = { }, { test: /\.css$/, - // include: [ - // path.resolve(__dirname, 'resources'), - // ], - use: [ - { loader: 'style-loader' }, - { loader: 'css-loader' }, - { loader: 'resolve-url-loader' }, - ], + use: [ 'style-loader', 'css-loader' ], }, { - test: /\.(png|jpg|gif|svg)$/, + test: /\.(png|jpe?g|gif)$/, loader: 'file-loader', options: { - name: '[name].[ext]?[hash:8]', + name: 'images/[name].[hash].[ext]', }, }, { - enforce: 'pre', - test: /\.js$/, - loader: 'source-map-loader', + test: /\.svg$/, + loader: 'svg-url-loader', } + // { + // enforce: 'pre', + // test: /\.js$/, + // loader: 'source-map-loader', + // }, ], }, resolve: { extensions: ['.ts', '.tsx', '.js', '.json'], alias: { - '@': path.join(__dirname, 'resources/scripts'), + '@': path.resolve(__dirname, 'resources/scripts'), }, symlinks: false, }, - plugins: plugins, + plugins: [ + new AssetsManifestPlugin({ writeToDisk: true, publicPath: true, integrity: true, integrityHashes: ['sha384'] }), + !isProduction ? new ForkTsCheckerWebpackPlugin({ + eslint: { + files: './resources/scripts/**/*.{ts,tsx}', + }, + }) : null, + process.env.ANALYZE_BUNDLE ? new BundleAnalyzerPlugin() : null + ].filter(p => p), optimization: { + usedExports: true, + sideEffects: false, + runtimeChunk: false, + removeEmptyChunks: true, minimize: isProduction, minimizer: [ new TerserPlugin({ cache: true, parallel: true, + extractComments: false, terserOptions: { - safari10: true, mangle: true, output: { comments: false, @@ -128,7 +96,8 @@ module.exports = { ignored: /node_modules/, }, devServer: { - contentBase: path.join(__dirname, 'public'), + compress: true, + contentBase: 'public', publicPath: (process.env.PUBLIC_PATH || '') + '/assets/', allowedHosts: [ '.pterodactyl.test', diff --git a/yarn.lock b/yarn.lock index f814aec3e..e05197279 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1364,7 +1364,7 @@ acorn-node@^1.6.1: acorn-walk "^7.0.0" xtend "^4.0.2" -acorn-walk@^7.0.0: +acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== @@ -1374,7 +1374,7 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.0.0, acorn@^7.2.0: +acorn@^7.0.0, acorn@^7.1.1, acorn@^7.2.0: version "7.3.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== @@ -1729,6 +1729,16 @@ batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -2090,6 +2100,11 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.6.0" color-convert "^0.5.3" +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2259,7 +2274,7 @@ commander@2.15.x, commander@~2.15.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -commander@^2.10.0, commander@^2.20.0: +commander@^2.10.0, commander@^2.18.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2996,6 +3011,11 @@ dset@^2.0.1: resolved "https://registry.yarnpkg.com/dset/-/dset-2.0.1.tgz#a15fff3d1e4d60ac0c95634625cbd5441a76deb1" integrity sha512-nI29OZMRYq36hOcifB6HTjajNAAiBKSXsyWZrq+VniusseuP2OpNlTiYgsaNRSGvpyq5Wjbc2gQLyBdTyWqhnQ== +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" @@ -3024,6 +3044,11 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + electron-to-chromium@^1.3.322: version "1.3.322" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" @@ -3457,7 +3482,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -express@^4.17.1: +express@^4.16.3, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" dependencies: @@ -3557,6 +3582,19 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-loader@~6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" + integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3836,13 +3874,6 @@ get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -glob-all@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" - dependencies: - glob "^7.0.5" - yargs "~1.2.6" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3869,7 +3900,7 @@ glob@^7.0.0, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" dependencies: @@ -3954,6 +3985,14 @@ gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -4083,6 +4122,11 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -4591,10 +4635,6 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4863,7 +4903,7 @@ loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0: +loader-utils@^2.0.0, loader-utils@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== @@ -5195,15 +5235,6 @@ mini-create-react-context@^0.3.0: gud "^1.0.0" tiny-warning "^1.0.2" -mini-css-extract-plugin@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5222,10 +5253,6 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" - minimist@^1.1.1, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -5507,15 +5534,6 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - normalize-url@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.2.0.tgz#98d0948afc82829f374320f405fe9ca55a5f8567" @@ -5676,6 +5694,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -6657,10 +6680,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -6764,22 +6783,6 @@ punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" -purgecss-webpack-plugin@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/purgecss-webpack-plugin/-/purgecss-webpack-plugin-1.6.0.tgz#7b5d6d189f5574c1365592e1445d252162404e4a" - dependencies: - purgecss "^1.4.0" - webpack-sources "^1.4.3" - -purgecss@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-1.4.1.tgz#d362e63eb1ed9dd1fa1554b9fd7accb8d54e56dc" - dependencies: - glob "^7.1.3" - postcss "^7.0.14" - postcss-selector-parser "^6.0.0" - yargs "^14.0.0" - purgecss@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-2.3.0.tgz#5327587abf5795e6541517af8b190a6fb5488bb3" @@ -6806,13 +6809,6 @@ query-string@*, query-string@^6.7.0: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7361,7 +7357,7 @@ schema-utils@^2.6.0: ajv "^6.10.2" ajv-keywords "^3.4.1" -schema-utils@^2.6.6: +schema-utils@^2.6.5, schema-utils@^2.6.6: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -7590,12 +7586,6 @@ sockjs@0.3.20: uuid "^3.4.0" websocket-driver "0.6.5" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" @@ -7758,10 +7748,6 @@ stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -7945,6 +7931,14 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +svg-url-loader@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-6.0.0.tgz#b94861d9f6badfb8ca3e7d3ec4655c1bf732ac5d" + integrity sha512-Qr5SCKxyxKcRnvnVrO3iQj9EX/v40UiGEMshgegzV7vpo3yc+HexELOdtWcA3MKjL8IyZZ1zOdcILmDEa/8JJQ== + dependencies: + file-loader "~6.0.0" + loader-utils "~2.0.0" + svgo@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.0.5.tgz#7040364c062a0538abacff4401cea6a26a7a389a" @@ -8174,6 +8168,11 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + ts-loader@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" @@ -8527,6 +8526,25 @@ webpack-assets-manifest@^3.1.1: tapable "^1.0.0" webpack-sources "^1.0.0" +webpack-bundle-analyzer@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" + integrity sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.15" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + webpack-cli@^3.3.12: version "3.3.12" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" @@ -8610,7 +8628,7 @@ webpack-manifest-plugin@^2.2.0: object.entries "^1.1.0" tapable "^1.0.0" -webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.0.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" dependencies: @@ -8730,7 +8748,7 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^6.2.1: +ws@^6.0.0, ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" dependencies: @@ -8783,13 +8801,6 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -8806,28 +8817,6 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^14.0.0: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - -yargs@~1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" - dependencies: - minimist "^0.1.0" - yarn-deduplicate@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-1.1.1.tgz#19b4a87654b66f55bf3a4bd6b153b4e4ab1b6e6d"