diff --git a/karma.conf.js b/karma.conf.js index 93a8a7e99a..a993fb5103 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -324,9 +324,9 @@ module.exports = function(config) { // esbuild options target: 'es2017', define: { - COVERAGE: coverage, + COVERAGE: JSON.stringify(coverage), 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || ''), - ENABLE_PERFORMANCE: performance + ENABLE_PERFORMANCE: JSON.stringify(performance) }, plugins: [createEsbuildPlugin()] } diff --git a/package-lock.json b/package-lock.json index 6f954ceb40..6a3dd624d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "csstype": "^3.0.5", "diff": "^5.0.0", "errorstacks": "^2.4.0", - "esbuild": "^0.11.21", + "esbuild": "^0.16.10", "eslint": "5.15.1", "eslint-config-developit": "^1.1.1", "eslint-config-prettier": "^6.5.0", @@ -1856,6 +1856,358 @@ "node": ">=0.1.90" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", + "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", + "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", + "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.10.tgz", + "integrity": "sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", + "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", + "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", + "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", + "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.10.tgz", + "integrity": "sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", + "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", + "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", + "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", + "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", + "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", + "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", + "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", + "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", + "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", + "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", + "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", + "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", + "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", @@ -6212,13 +6564,40 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.10.tgz", + "integrity": "sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.10", + "@esbuild/android-arm64": "0.16.10", + "@esbuild/android-x64": "0.16.10", + "@esbuild/darwin-arm64": "0.16.10", + "@esbuild/darwin-x64": "0.16.10", + "@esbuild/freebsd-arm64": "0.16.10", + "@esbuild/freebsd-x64": "0.16.10", + "@esbuild/linux-arm": "0.16.10", + "@esbuild/linux-arm64": "0.16.10", + "@esbuild/linux-ia32": "0.16.10", + "@esbuild/linux-loong64": "0.16.10", + "@esbuild/linux-mips64el": "0.16.10", + "@esbuild/linux-ppc64": "0.16.10", + "@esbuild/linux-riscv64": "0.16.10", + "@esbuild/linux-s390x": "0.16.10", + "@esbuild/linux-x64": "0.16.10", + "@esbuild/netbsd-x64": "0.16.10", + "@esbuild/openbsd-x64": "0.16.10", + "@esbuild/sunos-x64": "0.16.10", + "@esbuild/win32-arm64": "0.16.10", + "@esbuild/win32-ia32": "0.16.10", + "@esbuild/win32-x64": "0.16.10" } }, "node_modules/escalade": { @@ -19473,6 +19852,160 @@ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true }, + "@esbuild/android-arm": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", + "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", + "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", + "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.10.tgz", + "integrity": "sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", + "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", + "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", + "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", + "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.10.tgz", + "integrity": "sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", + "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", + "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", + "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", + "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", + "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", + "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", + "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", + "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", + "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", + "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", + "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", + "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", + "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", + "dev": true, + "optional": true + }, "@istanbuljs/load-nyc-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", @@ -23053,10 +23586,34 @@ "dev": true }, "esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "dev": true + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.10.tgz", + "integrity": "sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.10", + "@esbuild/android-arm64": "0.16.10", + "@esbuild/android-x64": "0.16.10", + "@esbuild/darwin-arm64": "0.16.10", + "@esbuild/darwin-x64": "0.16.10", + "@esbuild/freebsd-arm64": "0.16.10", + "@esbuild/freebsd-x64": "0.16.10", + "@esbuild/linux-arm": "0.16.10", + "@esbuild/linux-arm64": "0.16.10", + "@esbuild/linux-ia32": "0.16.10", + "@esbuild/linux-loong64": "0.16.10", + "@esbuild/linux-mips64el": "0.16.10", + "@esbuild/linux-ppc64": "0.16.10", + "@esbuild/linux-riscv64": "0.16.10", + "@esbuild/linux-s390x": "0.16.10", + "@esbuild/linux-x64": "0.16.10", + "@esbuild/netbsd-x64": "0.16.10", + "@esbuild/openbsd-x64": "0.16.10", + "@esbuild/sunos-x64": "0.16.10", + "@esbuild/win32-arm64": "0.16.10", + "@esbuild/win32-ia32": "0.16.10", + "@esbuild/win32-x64": "0.16.10" + } }, "escalade": { "version": "3.1.1", diff --git a/package.json b/package.json index 0488234160..35c5918b6d 100644 --- a/package.json +++ b/package.json @@ -288,7 +288,7 @@ "csstype": "^3.0.5", "diff": "^5.0.0", "errorstacks": "^2.4.0", - "esbuild": "^0.11.21", + "esbuild": "^0.16.10", "eslint": "5.15.1", "eslint-config-developit": "^1.1.1", "eslint-config-prettier": "^6.5.0", diff --git a/src/create-context.js b/src/create-context.js index ccb0a67885..dbb0135af1 100644 --- a/src/create-context.js +++ b/src/create-context.js @@ -4,7 +4,7 @@ let nextContextId = 0; const providers = new Set(); -/** @param {import('./internal').Internal} internal */ +/** @param {import('./internal').ComponentInternal} internal */ export const unsubscribeFromContext = internal => { // if this was a context provider, delete() returns true and we exit: if (providers.delete(internal)) return; diff --git a/src/diff/catch-error.js b/src/diff/catch-error.js index 127899e66c..9953c8eaf6 100644 --- a/src/diff/catch-error.js +++ b/src/diff/catch-error.js @@ -1,10 +1,10 @@ import { DIRTY_BIT, MODE_RERENDERING_ERROR, - MODE_PENDING_ERROR, - TYPE_COMPONENT + MODE_PENDING_ERROR } from '../constants'; import { ENABLE_CLASSES } from '../component'; +import { isComponentInternal } from '../helpers'; /** * Find the closest error boundary to a thrown error and call it @@ -16,7 +16,7 @@ import { ENABLE_CLASSES } from '../component'; export function _catchError(error, internal) { while ((internal = internal._parent)) { if ( - internal.flags & TYPE_COMPONENT && + isComponentInternal(internal) && ~internal.flags & MODE_RERENDERING_ERROR ) { try { diff --git a/src/diff/children.js b/src/diff/children.js index 091a6765f8..0636cb9f65 100644 --- a/src/diff/children.js +++ b/src/diff/children.js @@ -1,17 +1,16 @@ import { applyRef } from './refs'; import { normalizeToVNode } from '../create-element'; import { - TYPE_COMPONENT, MODE_HYDRATE, MODE_SUSPENDED, EMPTY_ARR, - TYPE_DOM, UNDEFINED } from '../constants'; import { mount } from './mount'; import { patch } from './patch'; import { unmount } from './unmount'; import { createInternal, getDomSibling } from '../tree'; +import { isComponentInternal, isDomInternal } from '../helpers'; /** * Update an internal with new children. @@ -98,7 +97,7 @@ export function patchChildren(internal, children, parentDom) { } // Perform insert of new dom - if (childInternal.flags & TYPE_DOM) { + if (isDomInternal(childInternal)) { parentDom.insertBefore( childInternal.data, getDomSibling(internal, skewedIndex) @@ -132,7 +131,7 @@ export function patchChildren(internal, children, parentDom) { if (matchingIndex == i) break go; let nextSibling = getDomSibling(internal, skewedIndex + 1); - if (childInternal.flags & TYPE_DOM) { + if (isDomInternal(childInternal)) { parentDom.insertBefore(childInternal.data, nextSibling); } else { insertComponentDom(childInternal, nextSibling, parentDom); @@ -241,7 +240,7 @@ export function insertComponentDom(internal, nextSibling, parentDom) { if (childInternal) { childInternal._parent = internal; - if (childInternal.flags & TYPE_COMPONENT) { + if (isComponentInternal(childInternal)) { insertComponentDom(childInternal, nextSibling, parentDom); } else if (childInternal.data != nextSibling) { parentDom.insertBefore(childInternal.data, nextSibling); diff --git a/src/diff/mount.js b/src/diff/mount.js index ee89293f98..46e4ac4758 100644 --- a/src/diff/mount.js +++ b/src/diff/mount.js @@ -1,6 +1,5 @@ import { applyRef } from './refs'; import { - TYPE_COMPONENT, TYPE_ELEMENT, MODE_HYDRATE, MODE_MUTATIVE_HYDRATE, @@ -9,7 +8,6 @@ import { TYPE_TEXT, TYPE_CLASS, MODE_ERRORED, - TYPE_ROOT, MODE_SVG, DIRTY_BIT } from '../constants'; @@ -19,6 +17,7 @@ import { createInternal, getParentContext } from '../tree'; import options from '../options'; import { ENABLE_CLASSES } from '../component'; import { commitQueue } from './commit'; +import { isComponentInternal, isRootInternal } from '../helpers'; /** * Diff two virtual nodes and apply proper changes to the DOM * @param {import('../internal').Internal} internal The Internal node to mount @@ -34,14 +33,11 @@ export function mount(internal, newVNode, parentDom, startDom) { let nextDomSibling, prevStartDom; try { - if (internal.flags & TYPE_COMPONENT) { + if (isComponentInternal(internal)) { // Root nodes signal that an attempt to render into a specific DOM node on // the page. Root nodes can occur anywhere in the tree and not just at the // top. - if ( - internal.flags & TYPE_ROOT && - newVNode.props._parentDom !== parentDom - ) { + if (isRootInternal(internal) && newVNode.props._parentDom !== parentDom) { parentDom = newVNode.props._parentDom; prevStartDom = startDom; startDom = null; @@ -59,6 +55,7 @@ export function mount(internal, newVNode, parentDom, startDom) { ); } + // if ( internal.data._commitCallbacks && internal.data._commitCallbacks.length @@ -249,7 +246,7 @@ export function mountChildren(internal, children, parentDom, startDom) { newDom = childInternal.data; - if (childInternal.flags & TYPE_COMPONENT || newDom == startDom) { + if (isComponentInternal(childInternal) || newDom == startDom) { // If the child is a Fragment-like or if it is DOM VNode and its _dom // property matches the dom we are diffing (i.e. startDom), just // continue with the mountedNextChild @@ -290,14 +287,14 @@ export function mountChildren(internal, children, parentDom, startDom) { } /** - * @param {import('../internal').Internal} internal The component's backing Internal node + * @param {import('../internal').ComponentInternal} internal The component's backing Internal node * @param {import('../internal').PreactNode} startDom the preceding node * @returns {import('../internal').PreactNode} the component's children */ function mountComponent(internal, startDom) { /** @type {import('../internal').Component} */ let c; - let type = /** @type {import('../internal').ComponentType} */ (internal.type); + let type = internal.type; let newProps = internal.props; // Necessary for createContext api. Setting this property will pass diff --git a/src/diff/patch.js b/src/diff/patch.js index 8398e4ed22..5c6699e76f 100644 --- a/src/diff/patch.js +++ b/src/diff/patch.js @@ -192,7 +192,7 @@ function patchElement(internal, vnode) { } /** - * @param {import('../internal').Internal} internal The component's backing Internal node + * @param {import('../internal').ComponentInternal} internal The component's backing Internal node * @param {import('../internal').VNode} newVNode The new virtual node * @returns {import('../internal').ComponentChildren} the component's children */ diff --git a/src/helpers.js b/src/helpers.js new file mode 100644 index 0000000000..a283ddb895 --- /dev/null +++ b/src/helpers.js @@ -0,0 +1,16 @@ +import { TYPE_COMPONENT, TYPE_DOM, TYPE_ELEMENT, TYPE_ROOT } from './constants'; + +/** @type {import('./internal').isComponentInternal} */ +export const isComponentInternal = internal => + /** @type {*} */ (internal.flags & TYPE_COMPONENT); + +/** @type {import('./internal').isDomInternal} */ +export const isDomInternal = internal => + /** @type {*} */ (internal.flags & TYPE_DOM); + +/** @type {import('./internal').isRootInternal} */ +export const isRootInternal = internal => + /** @type {*} */ (internal.flags & TYPE_ROOT); + +/** @type {(internal: import('./internal').Internal) => number} */ +export const isElementInternal = internal => internal.flags & TYPE_ELEMENT; diff --git a/src/internal.d.ts b/src/internal.d.ts index bf4328669b..d2bbd1b4f0 100644 --- a/src/internal.d.ts +++ b/src/internal.d.ts @@ -45,7 +45,7 @@ export interface Options extends preact.Options { _internal?(internal: Internal, vnode: VNode | string): void; } -export type CommitQueue = Internal[]; +export type CommitQueue = ComponentInternal[]; // Redefine ComponentFactory using our new internal FunctionalComponent interface above export type ComponentFactory

= @@ -130,18 +130,13 @@ export interface VNode

extends preact.VNode

{ * An Internal is a persistent backing node within Preact's virtual DOM tree. * Think of an Internal like a long-lived VNode with stored data and tree linkages. */ -export interface Internal

{ - type: string | ComponentType

; - /** The props object for Elements/Components, and the string contents for Text */ - props: (P & { children: ComponentChildren }) | string | number; +export interface BaseInternal

{ key: any; ref: Ref | null; _prevRef: Ref | null; /** Bitfield containing information about the Internal or its component. */ flags: number; - /** Polymorphic property to store extensions like hooks on */ - data: object | PreactNode; /** The function that triggers in-place re-renders for an internal */ rerender: (internal: Internal) => void; @@ -159,16 +154,52 @@ export interface Internal

{ _component: Component | null; /** This Internal's distance from the tree root */ _depth: number | null; - /** Callbacks to invoke when this internal commits */ - _commitCallbacks: Array<() => void>; - _stateCallbacks: Array<() => void>; // Only class components } +export interface ComponentInternal

extends BaseInternal

{ + type: ComponentType

; + props: P & { children: ComponentChildren }; + /** Polymorphic property to store extensions like hooks on */ + data: { + /** Callbacks to invoke when this internal commits */ + _commitCallbacks: Array<() => void>; + _stateCallbacks: Array<() => void>; // Only class components + [key: string]: any; + }; +} + +export interface RootInternal

+ extends Exclude, 'props'> { + props: P & { children: ComponentChildren; _parentDom: PreactNode }; +} + +export interface DomInternal

extends BaseInternal

{ + type: string; + /** The props object for Elements/Components, and the string contents for Text */ + props: (P & { children: ComponentChildren }) | string | number; + data: PreactNode; +} + +export type Internal

= + | ComponentInternal

+ | DomInternal

+ | RootInternal

; + +export type isDomInternal

= ( + internal: Internal

+) => internal is DomInternal

; +export type isComponentInternal

= ( + internal: Internal

+) => internal is ComponentInternal

; +export type isRootInternal

= ( + internal: Internal

+) => internal is RootInternal

; + export interface Component

extends preact.Component { // When component is functional component, this is reset to functional component constructor: ComponentType

; state: S; // Override Component["state"] to not be readonly for internal use, specifically Hooks - _internal?: Internal

| null; + _internal?: ComponentInternal

| null; _nextState?: S | null; // Only class components /** Only used in the devtools to later dirty check if state has changed */ _prevState?: S | null; diff --git a/src/tree.js b/src/tree.js index 24f6ba8b7a..442e6a7b7d 100644 --- a/src/tree.js +++ b/src/tree.js @@ -7,11 +7,16 @@ import { TYPE_ROOT, INHERITED_MODES, TYPE_COMPONENT, - TYPE_DOM, MODE_SVG, UNDEFINED } from './constants'; import { enqueueRender } from './component'; +import { + isComponentInternal, + isDomInternal, + isElementInternal, + isRootInternal +} from './helpers'; /** * Create an internal tree node @@ -106,8 +111,8 @@ export function createInternal(vnode, parentInternal) { } const shouldSearchComponent = internal => - internal.flags & TYPE_COMPONENT && - (!(internal.flags & TYPE_ROOT) || + isComponentInternal(internal) && + (!isRootInternal(internal) || internal.props._parentDom == getParentDom(internal._parent)); /** @@ -153,7 +158,7 @@ export function getChildDom(internal, offset) { for (; offset < internal._children.length; offset++) { let child = internal._children[offset]; if (child != null) { - if (child.flags & TYPE_DOM) { + if (isDomInternal(child)) { return child.data; } @@ -190,15 +195,15 @@ export function getParentDom(internal) { let parent = internal; // if this is a Root internal, return its parent DOM: - if (parent.flags & TYPE_ROOT) { + if (isRootInternal(parent)) { return parent.props._parentDom; } // walk up the tree to find the nearest DOM or Root Internal: while ((parent = parent._parent)) { - if (parent.flags & TYPE_ROOT) { + if (isRootInternal(parent)) { return parent.props._parentDom; - } else if (parent.flags & TYPE_ELEMENT) { + } else if (isElementInternal(parent)) { return parent.data; } }