diff --git a/package-lock.json b/package-lock.json index 47b42c598..1b722f4cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9231,6 +9231,66 @@ "through": "~2.3.6" } }, + "esbuild": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.7.22.tgz", + "integrity": "sha512-B43SYg8LGWYTCv9Gs0RnuLNwjzpuWOoCaZHTWEDEf5AfrnuDMerPVMdCEu7xOdhFvQ+UqfP2MGU9lxEy0JzccA==" + }, + "esbuild-loader": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.7.0.tgz", + "integrity": "sha512-1v7PVHZ+GvHPlTYVKjNDblUZbzx58Iwt0LJrBI1INzi4/UHz9D3IJ/skNOimaypHDTohj6HtS3ExWJX2xCRzWg==", + "dev": true, + "requires": { + "esbuild": "^0.8.17", + "loader-utils": "^2.0.0", + "type-fest": "^0.20.2", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "esbuild": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.26.tgz", + "integrity": "sha512-u3MMHOOumdWoAKF+073GHPpzvVB2cM+y9VD4ZwYs1FAQ6atRPISya35dbrbOu/mM68mQ42P+nwPzQVBTfQhkvQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "esbuild-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esbuild-webpack-plugin/-/esbuild-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-24E93ml+cTT69DIm7f5nKimkNXKFiiqPZNu7eWYBA/Do7AdT/O7kZidmPTxY8bRyhkk6lvNrhnjEZyJSzOvEEA==", + "requires": { + "esbuild": "^0.7.15" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", diff --git a/package.json b/package.json index 5b2f9c22a..521e6646b 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "dependencies": { "@azure/arm-cosmosdb": "9.1.0", "@azure/cosmos": "3.9.0", - "@azure/identity": "1.1.0", "@azure/cosmos-language-service": "0.0.5", + "@azure/identity": "1.1.0", "@jupyterlab/services": "6.0.0-rc.2", "@jupyterlab/terminal": "3.0.0-rc.2", "@microsoft/applicationinsights-web": "2.5.9", @@ -57,6 +57,7 @@ "dotenv": "8.2.0", "es6-object-assign": "1.1.0", "es6-symbol": "3.1.3", + "esbuild-webpack-plugin": "1.1.0", "eslint-plugin-jest": "23.13.2", "eslint-plugin-react": "7.20.0", "hasher": "1.2.0", @@ -139,6 +140,7 @@ "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.5", "enzyme-to-json": "3.6.1", + "esbuild-loader": "2.7.0", "eslint": "7.8.1", "eslint-cli": "1.1.1", "eslint-plugin-no-null": "1.0.2", diff --git a/tsconfig.json b/tsconfig.json index 0c45faa01..4ab434710 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ "allowSyntheticDefaultImports": true, "downlevelIteration": true, "module": "esnext", - "target": "es5", + "target": "es2017", "lib": ["es5", "es6", "dom", "webworker.importscripts"], "jsx": "react", "moduleResolution": "node", diff --git a/webpack.config.js b/webpack.config.js index a90e8896c..30853332a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,8 +9,8 @@ const CaseSensitivePathsPlugin = require("case-sensitive-paths-webpack-plugin"); const CreateFileWebpack = require("create-file-webpack"); const childProcess = require("child_process"); const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; -const TerserPlugin = require("terser-webpack-plugin"); const isCI = require("is-ci"); +const { ESBuildPlugin, ESBuildMinifyPlugin } = require("esbuild-loader"); const gitSha = childProcess.execSync("git rev-parse HEAD").toString("utf8"); @@ -56,37 +56,20 @@ const htmlRule = { ] }; -// We compile our own code with ts-loader const typescriptRule = { test: /\.tsx?$/, use: [ { - loader: "ts-loader", + loader: "esbuild-loader", options: { - transpileOnly: true + loader: "tsx", + target: "es2017" } } ], exclude: /node_modules/ }; -// Third party modules are compiled with babel since using ts-loader that much causes webpack to run out of memory -const ModulesRule = { - test: /\.js$/, - use: [ - { - loader: "babel-loader", - options: { - cacheDirectory: ".cache/babel", - presets: [["@babel/preset-env", { targets: { ie: "11" }, useBuiltIns: false }]] - } - } - ], - include: /node_modules/, - // Exclude large modules we know don't need transpiling - exclude: /vega|monaco|plotly/ -}; - module.exports = function(env = {}, argv = {}) { const mode = argv.mode || "development"; const rules = [fontRule, lessRule, imagesRule, cssRule, htmlRule, typescriptRule]; @@ -96,7 +79,6 @@ module.exports = function(env = {}, argv = {}) { }; if (mode === "production") { - rules.push(ModulesRule); envVars.NODE_ENV = "production"; } @@ -105,6 +87,7 @@ module.exports = function(env = {}, argv = {}) { } const plugins = [ + new ESBuildPlugin(), new CleanWebpackPlugin(["dist"]), new CreateFileWebpack({ path: "./dist", @@ -211,13 +194,8 @@ module.exports = function(env = {}, argv = {}) { optimization: { minimize: mode === "production" ? true : false, minimizer: [ - new TerserPlugin({ - cache: ".cache/terser", - terserOptions: { - // These options increase our initial bundle size by ~5% but the builds are significantly faster and won't run out of memory - compress: false, - mangle: true - } + new ESBuildMinifyPlugin({ + target: "es2015" // Syntax to compile to (see options below for possible values) }) ] },