From 2d1666ff9bbc65bc6bc3657d6210412ebded78af Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Mon, 21 Mar 2022 21:50:28 +0100 Subject: [PATCH 1/6] Merge redundant dependecies and tweak chunking --- package.json | 5 +- stats.json | 20 ++++++ tsconfig.json | 6 +- webpack.config.js | 24 ++++++- yarn.lock | 158 ++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 188 insertions(+), 25 deletions(-) create mode 100644 stats.json diff --git a/package.json b/package.json index c1a0eb326..5b6700097 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "resolutions": { "node-hid": "2.1.1", "scrypt": "github:barrysteyn/node-scrypt#fb60a8d", - "websocket": "github:frozeman/WebSocket-Node#browserifyCompatible" + "websocket": "github:frozeman/WebSocket-Node#browserifyCompatible", + "**/ethereumjs-common": "npm:@ethereumjs/common@^2.5.0" }, "author": "Fabio Berger", "license": "Apache-2.0", @@ -205,6 +206,7 @@ "to-vfile": "^6.0.0", "ts-jest": "^24.2.0", "ts-node": "^8.3.0", + "tslib": "^2.3.1", "tslint": "5.11.0", "tslint-config-0xproject": "^0.0.2", "typescript": "^3.8.3", @@ -214,6 +216,7 @@ "unist-util-visit": "^2.0.0", "unist-util-visit-parents": "^3.0.0", "webpack": "^4.39.2", + "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "3.3.7", "webpack-dev-server": "^3.8.0", "yargs": "^10.0.3" diff --git a/stats.json b/stats.json new file mode 100644 index 000000000..1d39a543f --- /dev/null +++ b/stats.json @@ -0,0 +1,20 @@ +yarn run v1.22.17 +$ /Users/dennis/projects/website/node_modules/.bin/webpack --profile --json +i 「atl」: Mode: production +i 「atl」: Plugin Count: 3 +ℹ 「atl」: Using typescript@3.9.10 from typescript +ℹ 「atl」: Using tsconfig.json from /Users/dennis/projects/website/tsconfig.json + +<--- Last few GCs ---> +ll[31489:0x102e8d000] 580702 ms: Mark-sweep 2047.2 (2063.7) -> 2046.3 (2061.0) MB, 1524.6 / 0.0 ms (+ 119.2 ms in 23 steps since start of marking, biggest step 8.3 ms, walltime since start of marking 1648 ms) (average mu = 0.118, current mu = 0.003) allo[31489:0x102e8d000] 582201 ms: Mark-sweep 2048.2 (2061.0) -> 2048.1 (2063.0) MB, 1375.7 / 0.0 ms (+ 118.1 ms in 27 steps since start of marking, biggest step 8.2 ms, walltime since start of marking 1499 ms) (average mu = 0.065, current mu = 0.003) allo + +<--- JS stacktrace ---> + +==== JS stack trace ========================================= + + 0: ExitFrame [pc: 0x100a04179] +Security context: 0x30d6343408d1 + 1: addMappingWithCode [0x30d636a43c29] [/Users/dennis/projects/website/node_modules/source-map/lib/source-node.js:~150] [pc=0x158e68328dd2](this=0x30d6dc440a31 ,0x30d6b5d6ff91 ,0x30d624bdd471 ) + 2: /* anonymous */ [0x30d6ce8fbcc9] [/Users/dennis/projects/website/node_modules/source-map/lib/... + +info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. diff --git a/tsconfig.json b/tsconfig.json index 70c504904..2fd26743c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es6", "lib": ["es2017", "dom"], "experimentalDecorators": true, "downlevelIteration": true, @@ -17,6 +17,7 @@ "allowJs": true, "strictNullChecks": false, "noImplicitThis": false, + "removeComments": false, // tsconfig.json at the monorepo root contains some options required for // project references which do not work for website. We override those // options here. @@ -27,7 +28,8 @@ "*": ["node_modules/@types/*", "*"] }, "module": "esnext", - "moduleResolution": "node" + "moduleResolution": "node", + "importHelpers": true }, "awesomeTypescriptLoaderOptions": { "useCache": true, diff --git a/webpack.config.js b/webpack.config.js index 2e1622254..c755aa533 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,11 +9,12 @@ const remarkSlug = require('remark-slug'); const remarkAutolinkHeadings = require('./webpack/remark_autolink_headings'); const remarkSectionizeHeadings = require('./webpack/remark_sectionize_headings'); const mdxTableOfContents = require('./webpack/mdx_table_of_contents'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const GIT_SHA = childProcess.execSync('git rev-parse HEAD').toString().trim(); module.exports = (_env, argv) => { - const plugins = [new Dotenv()]; + const plugins = [new Dotenv(), new BundleAnalyzerPlugin()]; const isDevEnvironment = argv.mode === 'development'; const config = { @@ -21,7 +22,7 @@ module.exports = (_env, argv) => { output: { path: path.join(__dirname, '/public'), filename: 'bundle.js', - chunkFilename: 'bundle-[name].js', + chunkFilename: 'bundle-[name].[contenthash].js', publicPath: '/', }, externals: { @@ -119,7 +120,7 @@ module.exports = (_env, argv) => { minimizer: [ new TerserPlugin({ parallel: true, - sourceMap: true, + sourceMap: isDevEnvironment, terserOptions: { mangle: { reserved: ['BigNumber'], @@ -127,6 +128,23 @@ module.exports = (_env, argv) => { }, }), ], + runtimeChunk: 'single', + splitChunks: { + chunks: 'all', + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name(module) { + // get the name. E.g. node_modules/packageName/not/this/part.js + // or node_modules/packageName + const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; + + // npm package names are URL-safe, but some servers don't like @ symbols + return `npm.${packageName.replace('@', '')}`; + }, + }, + }, + }, }, devServer: { host: '0.0.0.0', diff --git a/yarn.lock b/yarn.lock index bfbc57937..0f20ce61c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2238,6 +2238,11 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + "@reach/auto-id@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.2.0.tgz#97f9e48fe736aa5c6f4f32cf73c1f19d005f8550" @@ -3551,6 +3556,11 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^5.5.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" @@ -3566,6 +3576,11 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +acorn@^8.0.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + add-dom-event-listener@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" @@ -3736,6 +3751,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + any-promise@1.3.0, any-promise@^1.0.0, any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -5482,6 +5504,14 @@ chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + change-case@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" @@ -5780,12 +5810,19 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3, color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.1.1: +color-name@^1.1.1, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -5864,6 +5901,11 @@ commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -7111,6 +7153,11 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + duplexify@^3.4.2, duplexify@^3.5.3: version "3.5.4" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" @@ -7993,24 +8040,13 @@ ethereumjs-blockstream@^7.0.0: source-map-support "0.5.6" uuid "3.2.1" -ethereumjs-common@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" - integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== - -ethereumjs-common@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-0.6.1.tgz#ec98edf315a7f107afb6acc48e937a8266979fae" - -ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.1, ethereumjs-common@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.4.0.tgz#a940685f88f3c2587e4061630fe720b089c965b8" - integrity sha512-ser2SAplX/YI5W2AnzU8wmSjKRy4KQd4uxInJ36BzjS3m18E/B9QedPUIresZN1CSEQb/RgNQ2gN7C/XbpTafA== - -ethereumjs-common@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" - integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== +ethereumjs-common@1.5.0, ethereumjs-common@^0.6.0, ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.1, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0, "ethereumjs-common@npm:@ethereumjs/common@^2.5.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df" + integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.4" ethereumjs-tx@1.3.7: version "1.3.7" @@ -8129,6 +8165,17 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereu ethjs-util "0.1.6" rlp "^2.2.4" +ethereumjs-util@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" + integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + ethereumjs-util@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" @@ -9469,6 +9516,13 @@ gud@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -9536,6 +9590,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" @@ -11969,6 +12028,11 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.20: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -12659,6 +12723,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mrmime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" + integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -13290,6 +13359,11 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -16359,6 +16433,15 @@ sinon@^4.0.0: supports-color "^5.1.0" type-detect "^4.0.5" +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + sisteransi@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" @@ -17043,6 +17126,13 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + svgo@^0.7.0, svgo@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -17412,6 +17502,11 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + tough-cookie@^2.3.3, tough-cookie@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -17551,6 +17646,11 @@ tslib@^2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== +tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslint-config-0xproject@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/tslint-config-0xproject/-/tslint-config-0xproject-0.0.2.tgz#39901e0c0b3e9388f00092a28b90c015395d5bba" @@ -18909,6 +19009,21 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webpack-bundle-analyzer@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + 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" + webpack-cli@3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.7.tgz#77c8580dd8e92f69d635e0238eaf9d9c15759a91" @@ -19241,6 +19356,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.3.1: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + x-is-function@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e" From 65efb07acc01370f1cc41a7de240757a13a64789 Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Mon, 21 Mar 2022 22:38:15 +0100 Subject: [PATCH 2/6] guard bundle analyzer --- webpack.config.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index c755aa533..3c743ec51 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -14,9 +14,13 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl const GIT_SHA = childProcess.execSync('git rev-parse HEAD').toString().trim(); module.exports = (_env, argv) => { - const plugins = [new Dotenv(), new BundleAnalyzerPlugin()]; + const plugins = [new Dotenv()]; const isDevEnvironment = argv.mode === 'development'; + if (isDevEnvironment) { + plugins.push(new BundleAnalyzerPlugin()); + } + const config = { entry: ['./ts/index.tsx'], output: { From 320a41530c969d76bc8f9b6c82fb9740697db9aa Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Wed, 23 Mar 2022 14:11:57 +0100 Subject: [PATCH 3/6] add htmlwebpack plugion --- package.json | 1 + webpack.config.js | 5 +- yarn.lock | 273 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 271 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 5b6700097..8dbe9c9c8 100644 --- a/package.json +++ b/package.json @@ -185,6 +185,7 @@ "eslint-plugin-react-hooks": "^2.3.0", "extend": "^3.0.2", "glob": "^7.1.4", + "html-webpack-plugin": "4", "husky": "^3.0.5", "jest": "^24.9.0", "jest-transform-stub": "^2.0.0", diff --git a/webpack.config.js b/webpack.config.js index 3c743ec51..3c8e25bc1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,12 +9,13 @@ const remarkSlug = require('remark-slug'); const remarkAutolinkHeadings = require('./webpack/remark_autolink_headings'); const remarkSectionizeHeadings = require('./webpack/remark_sectionize_headings'); const mdxTableOfContents = require('./webpack/mdx_table_of_contents'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const GIT_SHA = childProcess.execSync('git rev-parse HEAD').toString().trim(); module.exports = (_env, argv) => { - const plugins = [new Dotenv()]; + const plugins = [new Dotenv(), new HtmlWebpackPlugin({ template: `public/index.html` })]; const isDevEnvironment = argv.mode === 'development'; if (isDevEnvironment) { @@ -132,7 +133,7 @@ module.exports = (_env, argv) => { }, }), ], - runtimeChunk: 'single', + // runtimeChunk: 'single', splitChunks: { chunks: 'all', cacheGroups: { diff --git a/yarn.lock b/yarn.lock index 0f20ce61c..e4afcfaaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2755,6 +2755,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + "@types/is-mobile@0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@types/is-mobile/-/is-mobile-0.3.0.tgz#821825eeddb9016c41dd11c0dd6d2db8621432fc" @@ -2979,6 +2984,11 @@ dependencies: "@types/node" "*" +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -2993,6 +3003,18 @@ "@types/react" "*" csstype "^3.0.2" +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== + +"@types/uglify-js@*": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + dependencies: + source-map "^0.6.1" + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" @@ -3027,6 +3049,27 @@ dependencies: "@types/ethereum-protocol" "*" +"@types/webpack-sources@*": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.32" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" + integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + dependencies: + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" + source-map "^0.6.0" + "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -3769,6 +3812,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -4946,7 +4997,7 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@~1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -5384,6 +5435,14 @@ camel-case@^3.0.0: no-case "^2.2.0" upper-case "^1.1.1" +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-css@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" @@ -5681,6 +5740,13 @@ classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +clean-css@^4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -5901,6 +5967,11 @@ commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -6311,6 +6382,17 @@ css-mediaquery@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" +css-select@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + dependencies: + boolbase "^1.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" + css-selector-parser@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.3.0.tgz#5f1ad43e2d8eefbfdc304fcd39a521664943e3eb" @@ -6348,6 +6430,11 @@ css-tree@^1.0.0-alpha.28: mdn-data "2.0.4" source-map "^0.6.1" +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -7050,6 +7137,13 @@ dom-align@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654" +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + dom-helpers@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" @@ -7068,6 +7162,15 @@ dom-serializer@0: domelementtype "~1.1.1" entities "~1.1.1" +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -7080,6 +7183,11 @@ domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" @@ -7103,6 +7211,13 @@ domhandler@^2.4.2: dependencies: domelementtype "1" +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -7110,12 +7225,29 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + dot-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" dependencies: no-case "^2.2.0" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dotenv-defaults@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz#6b3ec2e4319aafb70940abda72d3856770ee77ac" @@ -7316,6 +7448,11 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + envify@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" @@ -9785,6 +9922,11 @@ hdkey@^1.1.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + header-case@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" @@ -9895,6 +10037,19 @@ html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + html-to-react@^1.3.4: version "1.3.4" resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz#647b3a54fdec73a6461864b129fb0d1eec7d4589" @@ -9910,6 +10065,21 @@ html-void-elements@^1.0.1: resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.4.tgz#95e8bb5ecd6b88766569c2645f2b5f1591db9ba5" integrity sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ== +html-webpack-plugin@4: + version "4.5.2" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" + integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + htmlparser2@^3.10.0: version "3.10.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" @@ -9921,6 +10091,16 @@ htmlparser2@^3.10.0: inherits "^2.0.1" readable-stream "^3.0.6" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -12028,7 +12208,7 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.20: +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12102,6 +12282,13 @@ lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -12923,6 +13110,14 @@ no-case@^2.2.0, no-case@^2.3.2: dependencies: lower-case "^1.1.1" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-abi@^2.21.0: version "2.26.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.26.0.tgz#355d5d4bc603e856f74197adbf3f5117a396ba40" @@ -13190,6 +13385,13 @@ nth-check@^1.0.1: dependencies: boolbase "~1.0.0" +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + dependencies: + boolbase "^1.0.0" + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -13561,6 +13763,14 @@ param-case@^2.1.0: dependencies: no-case "^2.2.0" +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -13673,6 +13883,14 @@ pascal-case@^2.0.0: camel-case "^3.0.0" upper-case-first "^1.1.0" +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -13811,6 +14029,11 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" +picomatch@^2.0.4: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -14201,6 +14424,14 @@ prettier@^2.2.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" @@ -15354,6 +15585,11 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + remark-mdx@^1.0.21: version "1.0.21" resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.0.21.tgz#cf5a59ad68cce6c1f687953dcf504212fbd32555" @@ -15495,6 +15731,17 @@ remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -16633,7 +16880,7 @@ source-map@0.5.6: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@>=0.5.0: +source-map@>=0.5.0, source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -16649,7 +16896,7 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -17330,6 +17577,15 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -17646,7 +17902,7 @@ tslib@^2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -tslib@^2.3.1: +tslib@^2.0.3, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== @@ -18200,7 +18456,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: +util.promisify@1.0.0, util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -18233,6 +18489,11 @@ util@^0.12.4: safe-buffer "^5.1.2" which-typed-array "^1.1.2" +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" From 9791a5623722a7377974892bab6550105a0331c8 Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Wed, 23 Mar 2022 14:59:13 +0100 Subject: [PATCH 4/6] test loadable components --- package.json | 2 + ts/components/header.tsx | 4 +- ts/index.tsx | 81 ++++++++++++++++++++++++++++++---------- webpack.config.js | 32 ++++++++-------- yarn.lock | 35 +++++++++++++++++ 5 files changed, 118 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 8dbe9c9c8..e4aaf1c8e 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@0x/subproviders": "^6.6.1", "@0x/utils": "^6.4.4", "@0x/web3-wrapper": "^7.0.2", + "@loadable/component": "^5.15.2", "@reach/dialog": "^0.11.2", "@reach/tabs": "^0.1.6", "@tryghost/admin-api": "^1.4.2", @@ -153,6 +154,7 @@ "@types/find-versions": "^2.0.0", "@types/is-mobile": "0.3.0", "@types/jest": "^24.0.25", + "@types/loadable__component": "^5.13.4", "@types/lodash": "4.14.104", "@types/marked": "^1.2.2", "@types/material-ui": "^0.20.0", diff --git a/ts/components/header.tsx b/ts/components/header.tsx index 6ffee2466..60785f258 100644 --- a/ts/components/header.tsx +++ b/ts/components/header.tsx @@ -130,7 +130,9 @@ const NavItem = (props: { link: NavItemProps; key: string }) => { link.url === undefined ? ( {link.text} ) : ( - {link.text} + + {link.text} + ); return ( diff --git a/ts/index.tsx b/ts/index.tsx index d5edb1708..eb52d27e9 100644 --- a/ts/index.tsx +++ b/ts/index.tsx @@ -7,7 +7,7 @@ import { BrowserRouter as Router, Redirect, Route, Switch } from 'react-router-d import { MetaTags } from 'ts/components/meta_tags'; import { RegisterWizard } from 'ts/containers/governance/register/wizard'; import { NotFound } from 'ts/containers/not_found'; -import { StakingWizard } from 'ts/containers/staking/wizard/wizard'; +// import { StakingWizard } from 'ts/containers/staking/wizard/wizard'; // import { createLazyComponent } from 'ts/lazy_component'; import { trackedTokenStorage } from 'ts/local_storage/tracked_token_storage'; import { tradeHistoryStorage } from 'ts/local_storage/trade_history_storage'; @@ -29,11 +29,11 @@ import { NextAboutPress } from 'ts/pages/about/press'; // import { Credits } from 'ts/pages/credits'; // import { Explore } from 'ts/pages/explore'; -import { AccountActivity } from 'ts/pages/account/activity'; -import { Account } from 'ts/pages/account/dashboard'; -import { StakingPoolActivity } from 'ts/pages/staking/history'; +// import { AccountActivity } from 'ts/pages/account/activity'; +// import { Account } from 'ts/pages/account/dashboard'; +// import { StakingPoolActivity } from 'ts/pages/staking/history'; -import { ZeroExApi } from 'ts/pages/api'; +// import { ZeroExApi } from 'ts/pages/api'; // import { CFL } from 'ts/pages/cfl'; // import { NextEcosystem } from 'ts/pages/ecosystem'; import { Extensions } from 'ts/pages/extensions'; @@ -44,12 +44,12 @@ import { NextLanding } from 'ts/pages/landing'; // import { NextLaunchKit } from 'ts/pages/launch_kit'; // import { NextMarketMaker } from 'ts/pages/market_maker'; import { PrivacyPolicy } from 'ts/pages/privacy'; -import { StakingIndex } from 'ts/pages/staking/home'; -import { StakingPool } from 'ts/pages/staking/staking_pool'; -import { RemoveStake } from 'ts/pages/staking/wizard/remove'; +// import { StakingIndex } from 'ts/pages/staking/home'; +// import { StakingPool } from 'ts/pages/staking/staking_pool'; +// import { RemoveStake } from 'ts/pages/staking/wizard/remove'; import { TermsOfService } from 'ts/pages/terms'; -import { NextWhy } from 'ts/pages/why'; +// import { NextWhy } from 'ts/pages/why'; // import { Mesh } from 'ts/pages/mesh'; @@ -58,10 +58,15 @@ tradeHistoryStorage.clearIfRequired(); trackedTokenStorage.clearIfRequired(); import { Web3Wrapper } from '@0x/web3-wrapper'; +import loadable from '@loadable/component'; import { Web3ReactProvider } from '@web3-react/core'; import 'less/all.less'; import 'sass/modal_video.scss'; import { constants } from 'ts/utils/constants'; +const AsyncPage = loadable(async (props: { page: string; compName: string }) => { + const module = await import(`ts/pages/${props.page}`); + return { default: module[props.compName] }; +}); // We pass modulePromise returning lambda instead of module promise, // cause we only want to import the module when the user navigates to the page. @@ -93,7 +98,11 @@ render( {/* Next (new site) routes */} - + } + /> {/* */} {/* */} {/* */} @@ -101,21 +110,55 @@ render( {/* */} {/* */} - + } + /> - - - - - - + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> } /> - + ( + + )} + /> { - const plugins = [new Dotenv(), new HtmlWebpackPlugin({ template: `public/index.html` })]; + const plugins = [new Dotenv()]; const isDevEnvironment = argv.mode === 'development'; if (isDevEnvironment) { @@ -134,22 +134,22 @@ module.exports = (_env, argv) => { }), ], // runtimeChunk: 'single', - splitChunks: { - chunks: 'all', - cacheGroups: { - vendor: { - test: /[\\/]node_modules[\\/]/, - name(module) { - // get the name. E.g. node_modules/packageName/not/this/part.js - // or node_modules/packageName - const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; + // splitChunks: { + // chunks: 'all', + // cacheGroups: { + // vendor: { + // test: /[\\/]node_modules[\\/]/, + // name(module) { + // // get the name. E.g. node_modules/packageName/not/this/part.js + // // or node_modules/packageName + // const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; - // npm package names are URL-safe, but some servers don't like @ symbols - return `npm.${packageName.replace('@', '')}`; - }, - }, - }, - }, + // // npm package names are URL-safe, but some servers don't like @ symbols + // return `npm.${packageName.replace('@', '')}`; + // }, + // }, + // }, + // }, }, devServer: { host: '0.0.0.0', diff --git a/yarn.lock b/yarn.lock index e4afcfaaf..d0f6dd608 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1325,6 +1325,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.7.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" + integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.1.0", "@babel/template@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" @@ -2190,6 +2197,15 @@ dependencies: events "^2.0.0" +"@loadable/component@^5.15.2": + version "5.15.2" + resolved "https://registry.yarnpkg.com/@loadable/component/-/component-5.15.2.tgz#b6c418d592e0a64f16b1d614ca9d3b1443d3b498" + integrity sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw== + dependencies: + "@babel/runtime" "^7.7.7" + hoist-non-react-statics "^3.3.1" + react-is "^16.12.0" + "@mdx-js/loader@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.3.1.tgz#04f300f5e2b4a44d610d9464d2f5c37f60d0103d" @@ -2801,6 +2817,13 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/loadable__component@^5.13.4": + version "5.13.4" + resolved "https://registry.yarnpkg.com/@types/loadable__component/-/loadable__component-5.13.4.tgz#a4646b2406b1283efac1a9d9485824a905b33d4a" + integrity sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg== + dependencies: + "@types/react" "*" + "@types/lodash@4.14.104": version "4.14.104" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80" @@ -9996,6 +10019,13 @@ hoist-non-react-statics@^3.1.0: dependencies: react-is "^16.7.0" +hoist-non-react-statics@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -15014,6 +15044,11 @@ react-instantsearch-dom@^5.7.0: prop-types "^15.5.10" react-instantsearch-core "^5.7.0" +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^16.6.0: version "16.6.3" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0" From 6875e07beb9bfce008a6c67e11800fe2f23e4894 Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Wed, 23 Mar 2022 15:01:28 +0100 Subject: [PATCH 5/6] add rel field to link --- ts/components/documentation/shared/link.tsx | 3 ++- ts/index.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ts/components/documentation/shared/link.tsx b/ts/components/documentation/shared/link.tsx index 01df4996b..dc8cbb021 100644 --- a/ts/components/documentation/shared/link.tsx +++ b/ts/components/documentation/shared/link.tsx @@ -17,6 +17,7 @@ export interface BaseLinkProps { onMouseEnter?: (event: React.MouseEvent) => void; textDecoration?: string; fontColor?: string; + rel?: string; } export interface ScrollLinkProps extends BaseLinkProps { @@ -89,7 +90,7 @@ export class Link extends React.Component { onMouseOver={this.props.onMouseOver} onMouseEnter={this.props.onMouseEnter} onMouseLeave={this.props.onMouseLeave} - rel={this.props.shouldOpenInNewTab ? 'noopener' : undefined} + rel={this.props.shouldOpenInNewTab ? 'noopener' : this.props.rel || undefined} > {this.props.children} diff --git a/ts/index.tsx b/ts/index.tsx index eb52d27e9..a019bc586 100644 --- a/ts/index.tsx +++ b/ts/index.tsx @@ -37,7 +37,7 @@ import { NextAboutPress } from 'ts/pages/about/press'; // import { CFL } from 'ts/pages/cfl'; // import { NextEcosystem } from 'ts/pages/ecosystem'; import { Extensions } from 'ts/pages/extensions'; -import { TreasuryBreakdown } from 'ts/pages/governance/treasury_breakdown'; +// import { TreasuryBreakdown } from 'ts/pages/governance/treasury_breakdown'; import { VoteIndex } from 'ts/pages/governance/vote_index'; // import { Next0xInstant } from 'ts/pages/instant'; import { NextLanding } from 'ts/pages/landing'; From 3d895a78963e5a179dcd62653494bceccabacb8c Mon Sep 17 00:00:00 2001 From: Dennis Simon Date: Wed, 23 Mar 2022 18:01:06 +0100 Subject: [PATCH 6/6] Refactor lodash --- package.json | 3 + ts/blockchain.ts | 53 +- ts/blockchain_watcher.ts | 1 - ts/components/aboutPageLayout.tsx | 1 - ts/components/card.tsx | 4 +- .../dialogs/eth_weth_conversion_dialog.tsx | 4 +- .../dialogs/ledger_config_dialog.tsx | 12 +- ts/components/dialogs/send_dialog.tsx | 1 - ts/components/docs/sidebar/filters_group.tsx | 4 +- .../docs/sidebar/sidebar_desktop.tsx | 4 +- ts/components/documentation/shared/link.tsx | 12 +- .../dropdowns/dropdown_resources.tsx | 6 +- ts/components/dropdowns/network_drop_down.tsx | 4 +- ts/components/eth_weth_conversion_button.tsx | 6 +- ts/components/eth_wrappers.tsx | 26 +- ts/components/fill_order.tsx | 2 +- ts/components/fill_order_json.tsx | 2 +- .../flash_messages/asset_send_completed.tsx | 1 - .../flash_messages/transaction_submitted.tsx | 1 - ts/components/generate_order/asset_picker.tsx | 10 +- .../generate_order/generate_order_form.tsx | 2 +- .../generate_order/new_token_form.tsx | 12 +- ts/components/inputs/address_input.tsx | 2 +- .../inputs/allowance_state_toggle.tsx | 5 +- .../inputs/balance_bounded_input.tsx | 9 +- ts/components/inputs/eth_amount_input.tsx | 2 +- ts/components/inputs/expiration_input.tsx | 2 +- ts/components/inputs/hash_input.tsx | 2 +- ts/components/inputs/token_amount_input.tsx | 5 +- ts/components/modals/modal_contact.tsx | 14 +- ts/components/nested_sidebar_menu.tsx | 8 +- ts/components/newLayout.tsx | 4 +- ts/components/onboarding/onboarding_card.tsx | 1 - .../onboarding/portal_onboarding_flow.tsx | 4 +- ts/components/order_json.tsx | 2 +- ts/components/portal/drawer_menu.tsx | 4 +- ts/components/portal/menu.tsx | 4 +- ts/components/portal/portal.tsx | 2 +- .../relayer_index/relayer_grid_tile.tsx | 4 +- .../relayer_index/relayer_top_tokens.tsx | 4 +- ts/components/sections/landing/about.tsx | 2 +- ts/components/send_button.tsx | 4 +- ts/components/staking/history_chart.tsx | 2 +- ts/components/staking/stake_rebalance.tsx | 5 +- ts/components/staking/wizard/wizard_flow.tsx | 9 +- ts/components/token_balances.tsx | 32 +- ts/components/top_bar/top_bar.tsx | 5 +- ts/components/track_token_confirmation.tsx | 6 +- ts/components/trade_history/trade_history.tsx | 16 +- .../trade_history/trade_history_item.tsx | 9 +- ts/components/ui/breadcrumb.tsx | 4 +- ts/components/ui/custom_menu_item.tsx | 4 +- ts/components/ui/drop_down.tsx | 6 +- ts/components/ui/icon_button.tsx | 4 +- ts/components/ui/identicon.tsx | 5 +- ts/components/ui/multi_select.tsx | 6 +- ts/components/ui/overlay.tsx | 4 +- ts/components/ui/party.tsx | 4 +- ts/components/ui/simple_menu.tsx | 9 +- ts/components/ui/table.tsx | 4 +- ts/components/ui/token_icon.tsx | 4 +- ts/components/visual_order.tsx | 4 +- ts/components/wallet/wallet.tsx | 27 +- ts/components/wallet/wrap_ether_item.tsx | 5 +- ts/containers/portal.ts | 2 +- ts/hooks/use_stake.ts | 7 +- ts/lazy_component.tsx | 1 - ts/local_storage/local_storage.ts | 4 +- ts/local_storage/tracked_token_storage.ts | 10 +- ts/local_storage/trade_history_storage.tsx | 15 +- ts/pages/about/jobs.tsx | 4 +- ts/pages/about/mission.tsx | 4 +- ts/pages/about/press.tsx | 4 +- ts/pages/account/activity.tsx | 4 +- ts/pages/account/dashboard.tsx | 7 +- ts/pages/community.tsx | 6 +- ts/pages/docs/guides.tsx | 4 +- ts/pages/docs/page.tsx | 6 +- ts/pages/docs/tools.tsx | 6 +- ts/pages/ecosystem.tsx | 4 +- ts/pages/explore.tsx | 57 +- ts/pages/explore/explore_content.tsx | 4 +- ts/pages/explore/explore_grid.tsx | 8 +- ts/pages/extensions.tsx | 4 +- ts/pages/governance/countdown.tsx | 4 +- ts/pages/governance/governance.tsx | 13 +- ts/pages/governance/treasury.tsx | 2 +- ts/pages/governance/vote_bar.tsx | 2 +- ts/pages/governance/vote_form.tsx | 2 +- ts/pages/governance/vote_index.tsx | 2 +- ts/pages/governance/vote_index_card.tsx | 2 +- ts/pages/governance/voter_leaderboard.tsx | 2 +- ts/pages/instant.tsx | 4 +- ts/pages/instant/config_generator.tsx | 27 +- .../config_generator_address_input.tsx | 5 +- ts/pages/launch_kit.tsx | 8 +- ts/pages/market_maker.tsx | 4 +- ts/pages/staking/history.tsx | 4 +- ts/pages/staking/home.tsx | 7 +- ts/pages/staking/staking_pool.tsx | 2 +- ts/pages/why.tsx | 8 +- ts/redux/async_dispatcher.ts | 4 +- ts/redux/reducer.ts | 5 +- ts/redux/store.ts | 4 +- ts/utils/analytics.ts | 2 +- ts/utils/backend_client.ts | 4 +- ts/utils/doc_utils.ts | 15 +- ts/utils/docs_info.ts | 47 +- ts/utils/environments.ts | 10 +- ts/utils/fetch_utils.ts | 5 +- ts/utils/order_parser.ts | 9 +- ts/utils/order_utils.ts | 8 +- ts/utils/providers/provider_factory.ts | 2 +- ts/utils/providers/provider_state_factory.ts | 1 - ts/utils/staking_utils.test.ts | 81 --- ts/utils/staking_utils.ts | 10 +- ts/utils/translate.ts | 14 +- ts/utils/typedoc_utils.ts | 56 +- ts/utils/utils.ts | 49 +- webpack.config.js | 6 +- yarn.lock | 555 +++++++++++++++++- 121 files changed, 1033 insertions(+), 542 deletions(-) delete mode 100644 ts/utils/staking_utils.test.ts diff --git a/package.json b/package.json index e4aaf1c8e..10678786b 100644 --- a/package.json +++ b/package.json @@ -82,8 +82,10 @@ "graphql": "^15.5.1", "graphql-request": "^3.5.0", "is-mobile": "^0.2.2", + "jscodeshift": "^0.13.1", "less": "^2.7.2", "lodash": "^4.17.11", + "lodash-es": "^4.17.21", "lottie-web": "^5.6.2", "marked": "^2.0.0", "material-ui": "^0.20.0", @@ -156,6 +158,7 @@ "@types/jest": "^24.0.25", "@types/loadable__component": "^5.13.4", "@types/lodash": "4.14.104", + "@types/lodash-es": "^4.17.6", "@types/marked": "^1.2.2", "@types/material-ui": "^0.20.0", "@types/mersenne-twister": "^1.1.2", diff --git a/ts/blockchain.ts b/ts/blockchain.ts index 54acb76bd..3a7d25b31 100644 --- a/ts/blockchain.ts +++ b/ts/blockchain.ts @@ -30,7 +30,7 @@ import { TransactionReceiptWithDecodedLogs, ZeroExProvider, } from 'ethereum-types'; -import * as _ from 'lodash'; +import { each, find, includes, intersection, isEmpty, map, parseInt as lodashParseInt, values } from 'lodash-es'; import * as moment from 'moment'; import * as React from 'react'; import contract from 'truffle-contract'; @@ -122,12 +122,9 @@ export class Blockchain { }; const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs); provider.addProvider(ledgerSubprovider); - const rpcSubproviders = _.map( - configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], - (publicNodeUrl) => { - return new RPCSubprovider(publicNodeUrl); - }, - ); + const rpcSubproviders = map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], (publicNodeUrl) => { + return new RPCSubprovider(publicNodeUrl); + }); provider.addProvider(new RedundantSubprovider(rpcSubproviders)); providerUtils.startProviderEngine(provider); return [provider, ledgerSubprovider]; @@ -142,7 +139,7 @@ export class Blockchain { ? new MetamaskSubprovider(injectedProviderIfExists) : new SignerSubprovider(injectedProviderIfExists); provider.addProvider(signerSubprovider); - const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, (publicNodeUrl) => { + const rpcSubproviders = map(publicNodeUrlsIfExistsForNetworkId, (publicNodeUrl) => { return new RPCSubprovider(publicNodeUrl); }); provider.addProvider(new RedundantSubprovider(rpcSubproviders)); @@ -157,7 +154,7 @@ export class Blockchain { // injected into their browser. const provider = new Web3ProviderEngine(); const networkId = constants.NETWORK_ID_MAINNET; - const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], (publicNodeUrl) => { + const rpcSubproviders = map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], (publicNodeUrl) => { return new RPCSubprovider(publicNodeUrl); }); provider.addProvider(new RedundantSubprovider(rpcSubproviders)); @@ -201,13 +198,13 @@ export class Blockchain { } public async isAddressInTokenRegistryAsync(tokenAddress: string): Promise { const tokens = fakeTokenRegistry[this.networkId]; - const tokenIfExists = _.find(tokens, { address: tokenAddress }); + const tokenIfExists = find(tokens, { address: tokenAddress }); // HACK: Override token addresses on testnets const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; let isTokenAddressInOverrides = false; if (tokenSymbolToAddressOverrides !== undefined) { - isTokenAddressInOverrides = _.values(tokenSymbolToAddressOverrides).includes(tokenAddress); + isTokenAddressInOverrides = values(tokenSymbolToAddressOverrides).includes(tokenAddress); } return tokenIfExists !== undefined || isTokenAddressInOverrides; } @@ -308,7 +305,7 @@ export class Blockchain { }); const receipt = await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); const logs: Array> = receipt.logs as any; - const logFill = _.find(logs, { event: ExchangeEvents.Fill }); + const logFill = find(logs, { event: ExchangeEvents.Fill }); const args = (logFill.args as any) as ExchangeFillEventArgs; const takerAssetFilledAmount = args.takerAssetFilledAmount; return takerAssetFilledAmount; @@ -321,7 +318,7 @@ export class Blockchain { }); const receipt = await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); const logs: Array> = receipt.logs as any; - const logCancel = _.find(logs, { event: ExchangeEvents.Cancel }); + const logCancel = find(logs, { event: ExchangeEvents.Cancel }); const args = (logCancel.args as any) as ExchangeCancelEventArgs; const cancelledOrderHash = args.orderHash; return cancelledOrderHash; @@ -512,9 +509,9 @@ export class Blockchain { this._userAddressIfExists === undefined ? {} : trackedTokenStorage.getTrackedTokensByAddress(this._userAddressIfExists, this.networkId); - const tokenRegistryTokens = _.values(tokenRegistryTokensByAddress); - const tokenRegistryTokenSymbols = _.map(tokenRegistryTokens, (t) => t.symbol); - const defaultTrackedTokensInRegistry = _.intersection( + const tokenRegistryTokens = values(tokenRegistryTokensByAddress); + const tokenRegistryTokenSymbols = map(tokenRegistryTokens, (t) => t.symbol); + const defaultTrackedTokensInRegistry = intersection( tokenRegistryTokenSymbols, configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, ); @@ -530,20 +527,20 @@ export class Blockchain { errorReporter.report(err); return; } - if (_.isEmpty(trackedTokensByAddress)) { - _.each(configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, (symbol) => { - const token = _.find(tokenRegistryTokens, (t) => t.symbol === symbol); + if (isEmpty(trackedTokensByAddress)) { + each(configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, (symbol) => { + const token = find(tokenRegistryTokens, (t) => t.symbol === symbol); token.trackedTimestamp = currentTimestamp; trackedTokensByAddress[token.address] = token; }); if (this._userAddressIfExists !== undefined) { - _.each(trackedTokensByAddress, (token: Token) => { + each(trackedTokensByAddress, (token: Token) => { trackedTokenStorage.addTrackedTokenToUser(this._userAddressIfExists, this.networkId, token); }); } } else { // Properly set all tokenRegistry tokens `trackedTimestamp` if they are in the existing trackedTokens array - _.each(trackedTokensByAddress, (trackedToken: Token, address: string) => { + each(trackedTokensByAddress, (trackedToken: Token, address: string) => { if (tokenRegistryTokensByAddress[address] !== undefined) { tokenRegistryTokensByAddress[address].trackedTimestamp = trackedToken.trackedTimestamp; } @@ -553,10 +550,10 @@ export class Blockchain { ...tokenRegistryTokensByAddress, ...trackedTokensByAddress, }; - const allTokens = _.values(allTokensByAddress); + const allTokens = values(allTokensByAddress); const mostPopularTradingPairTokens: Token[] = [ - _.find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[0] }), - _.find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[1] }), + find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[0] }), + find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[1] }), ]; const sideToAssetToken: SideToAssetToken = { [Side.Deposit]: { @@ -633,7 +630,7 @@ export class Blockchain { if (update.networkVersion === 'loading' || this._ledgerSubprovider !== undefined) { return; } - const updatedNetworkId = _.parseInt(update.networkVersion); + const updatedNetworkId = lodashParseInt(update.networkVersion); if (this.networkId === updatedNetworkId) { return; } @@ -769,7 +766,7 @@ export class Blockchain { const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; if (tokenAddressOverrides !== undefined) { // HACK: Override token addresses on testnets - tokenRegistryTokens = _.map(tokenRegistryTokens, (token: ZeroExToken) => { + tokenRegistryTokens = map(tokenRegistryTokens, (token: ZeroExToken) => { const overrideIfExists = tokenSymbolToAddressOverrides[token.symbol]; if (overrideIfExists !== undefined) { return { @@ -782,7 +779,7 @@ export class Blockchain { } } const tokenByAddress: TokenByAddress = {}; - _.each(tokenRegistryTokens, (t: ZeroExToken) => { + each(tokenRegistryTokens, (t: ZeroExToken) => { // HACK: For now we have a hard-coded list of iconUrls for the dummyTokens // TODO: Refactor this out and pull the iconUrl directly from the TokenRegistry const iconUrl = utils.getTokenIconUrl(t.symbol); @@ -920,7 +917,7 @@ export class Blockchain { } catch (err) { const errMsg = `${err}`; logUtils.log(`Notice: Error encountered: ${err} ${err.stack}`); - if (_.includes(errMsg, 'not been deployed to detected network')) { + if (includes(errMsg, 'not been deployed to detected network')) { throw new Error(BlockchainCallErrs.ContractDoesNotExist); } else { errorReporter.report(err); diff --git a/ts/blockchain_watcher.ts b/ts/blockchain_watcher.ts index eebad1368..7d9637dec 100644 --- a/ts/blockchain_watcher.ts +++ b/ts/blockchain_watcher.ts @@ -1,6 +1,5 @@ import { BigNumber, intervalUtils, logUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; import { Dispatcher } from 'ts/redux/dispatcher'; export class BlockchainWatcher { diff --git a/ts/components/aboutPageLayout.tsx b/ts/components/aboutPageLayout.tsx index 5010ca41a..57ec52b46 100644 --- a/ts/components/aboutPageLayout.tsx +++ b/ts/components/aboutPageLayout.tsx @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as React from 'react'; import styled from 'styled-components'; diff --git a/ts/components/card.tsx b/ts/components/card.tsx index 8d80177aa..be0e0a0c6 100644 --- a/ts/components/card.tsx +++ b/ts/components/card.tsx @@ -1,4 +1,4 @@ -import * as _ from 'lodash'; +import { map } from 'lodash-es'; import * as React from 'react'; import styled from 'styled-components'; @@ -35,7 +35,7 @@ export const Card: React.StatelessComponent = (props: CardProps) => { {description} - {_.map(links, (link, index) => ( + {map(links, (link, index) => (