2020-03-17 18:37:07 -04:00
|
|
|
/* eslint-disable no-console */
|
2019-01-15 18:53:27 -05:00
|
|
|
/**
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
|
|
* or more contributor license agreements. See the NOTICE file
|
|
|
|
* distributed with this work for additional information
|
|
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
|
|
* to you under the Apache License, Version 2.0 (the
|
|
|
|
* "License"); you may not use this file except in compliance
|
|
|
|
* with the License. You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing,
|
|
|
|
* software distributed under the License is distributed on an
|
|
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
* KIND, either express or implied. See the License for the
|
|
|
|
* specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*/
|
2020-03-17 18:37:07 -04:00
|
|
|
const fs = require('fs');
|
2016-07-14 22:50:47 -04:00
|
|
|
const path = require('path');
|
2018-09-04 13:39:05 -04:00
|
|
|
const webpack = require('webpack');
|
2020-03-26 19:55:22 -04:00
|
|
|
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
|
2020-02-09 20:53:56 -05:00
|
|
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
|
|
|
const CopyPlugin = require('copy-webpack-plugin');
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
2018-09-05 12:17:18 -04:00
|
|
|
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
2018-09-27 15:49:05 -04:00
|
|
|
const SpeedMeasurePlugin = require('speed-measure-webpack-plugin');
|
|
|
|
const TerserPlugin = require('terser-webpack-plugin');
|
2020-03-26 19:55:22 -04:00
|
|
|
const ManifestPlugin = require('webpack-manifest-plugin');
|
2018-10-24 01:33:51 -04:00
|
|
|
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
|
2020-03-17 18:37:07 -04:00
|
|
|
const parsedArgs = require('yargs').argv;
|
2020-03-26 19:55:22 -04:00
|
|
|
const getProxyConfig = require('./webpack.proxy-config');
|
2020-03-19 17:57:39 -04:00
|
|
|
const packageConfig = require('./package.json');
|
2016-03-18 02:44:58 -04:00
|
|
|
|
2016-07-27 19:57:05 -04:00
|
|
|
// input dir
|
|
|
|
const APP_DIR = path.resolve(__dirname, './');
|
|
|
|
// output dir
|
2020-02-09 20:53:56 -05:00
|
|
|
const BUILD_DIR = path.resolve(__dirname, '../superset/static/assets');
|
2016-07-14 22:50:47 -04:00
|
|
|
|
2018-09-04 13:39:05 -04:00
|
|
|
const {
|
|
|
|
mode = 'development',
|
|
|
|
devserverPort = 9000,
|
2018-09-27 15:49:05 -04:00
|
|
|
measure = false,
|
|
|
|
analyzeBundle = false,
|
2018-09-04 13:39:05 -04:00
|
|
|
} = parsedArgs;
|
|
|
|
const isDevMode = mode !== 'production';
|
|
|
|
|
2020-03-17 18:37:07 -04:00
|
|
|
const output = {
|
|
|
|
path: BUILD_DIR,
|
|
|
|
publicPath: '/static/assets/', // necessary for lazy-loaded chunks
|
|
|
|
};
|
|
|
|
if (isDevMode) {
|
|
|
|
output.filename = '[name].[hash:8].entry.js';
|
|
|
|
output.chunkFilename = '[name].[hash:8].chunk.js';
|
|
|
|
} else {
|
|
|
|
output.filename = '[name].[chunkhash].entry.js';
|
|
|
|
output.chunkFilename = '[name].[chunkhash].chunk.js';
|
|
|
|
}
|
|
|
|
|
2018-09-04 13:39:05 -04:00
|
|
|
const plugins = [
|
|
|
|
// creates a manifest.json mapping of name to hashed output used in template files
|
2020-03-26 19:55:22 -04:00
|
|
|
new ManifestPlugin({
|
|
|
|
publicPath: output.publicPath,
|
|
|
|
seed: { app: 'superset' },
|
2018-09-04 13:39:05 -04:00
|
|
|
// This enables us to include all relevant files for an entry
|
2020-03-26 19:55:22 -04:00
|
|
|
generate: (seed, files, entrypoints) => {
|
|
|
|
// Each entrypoint's chunk files in the format of
|
|
|
|
// {
|
|
|
|
// entry: {
|
|
|
|
// css: [],
|
|
|
|
// js: []
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
const entryFiles = {};
|
|
|
|
for (const [entry, chunks] of Object.entries(entrypoints)) {
|
|
|
|
entryFiles[entry] = {
|
|
|
|
css: chunks
|
|
|
|
.filter(x => x.endsWith('.css'))
|
|
|
|
.map(x => path.join(output.publicPath, x)),
|
|
|
|
js: chunks
|
|
|
|
.filter(x => x.endsWith('.js'))
|
|
|
|
.map(x => path.join(output.publicPath, x)),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
...seed,
|
|
|
|
entrypoints: entryFiles,
|
|
|
|
};
|
|
|
|
},
|
2018-09-04 13:39:05 -04:00
|
|
|
// Also write to disk when using devServer
|
|
|
|
// instead of only keeping manifest.json in memory
|
|
|
|
// This is required to make devServer work with flask.
|
2020-03-26 19:55:22 -04:00
|
|
|
writeToFileEmit: isDevMode,
|
2018-09-04 13:39:05 -04:00
|
|
|
}),
|
|
|
|
|
|
|
|
// create fresh dist/ upon build
|
2020-02-09 20:53:56 -05:00
|
|
|
new CleanWebpackPlugin({
|
|
|
|
dry: false,
|
|
|
|
// required because the build directory is outside the frontend directory:
|
|
|
|
dangerouslyAllowCleanPatternsOutsideProject: true,
|
|
|
|
}),
|
2018-09-11 13:35:52 -04:00
|
|
|
|
|
|
|
// expose mode variable to other modules
|
|
|
|
new webpack.DefinePlugin({
|
|
|
|
'process.env.WEBPACK_MODE': JSON.stringify(mode),
|
|
|
|
}),
|
2018-10-24 01:33:51 -04:00
|
|
|
|
|
|
|
// runs type checking on a separate process to speed up the build
|
|
|
|
new ForkTsCheckerWebpackPlugin({
|
2020-03-19 17:57:39 -04:00
|
|
|
eslint: true,
|
2018-10-24 01:33:51 -04:00
|
|
|
checkSyntacticErrors: true,
|
|
|
|
}),
|
2020-02-09 20:53:56 -05:00
|
|
|
|
2020-08-17 18:27:01 -04:00
|
|
|
new CopyPlugin({
|
|
|
|
patterns: [
|
2020-03-08 13:03:58 -04:00
|
|
|
'package.json',
|
|
|
|
{ from: 'images', to: 'images' },
|
|
|
|
{ from: 'stylesheets', to: 'stylesheets' },
|
|
|
|
],
|
2020-08-17 18:27:01 -04:00
|
|
|
}),
|
2018-09-04 13:39:05 -04:00
|
|
|
];
|
2020-05-12 19:09:18 -04:00
|
|
|
if (!process.env.CI) {
|
|
|
|
plugins.push(new webpack.ProgressPlugin());
|
|
|
|
}
|
2020-03-19 17:57:39 -04:00
|
|
|
if (!isDevMode) {
|
2018-09-04 13:39:05 -04:00
|
|
|
// text loading (webpack 4+)
|
2019-11-27 17:02:48 -05:00
|
|
|
plugins.push(
|
|
|
|
new MiniCssExtractPlugin({
|
|
|
|
filename: '[name].[chunkhash].entry.css',
|
|
|
|
chunkFilename: '[name].[chunkhash].chunk.css',
|
|
|
|
}),
|
|
|
|
);
|
2018-09-05 12:17:18 -04:00
|
|
|
plugins.push(new OptimizeCSSAssetsPlugin());
|
2018-09-04 13:39:05 -04:00
|
|
|
}
|
|
|
|
|
2020-05-24 22:50:08 -04:00
|
|
|
const PREAMBLE = [path.join(APP_DIR, '/src/preamble.ts')];
|
2020-03-19 17:57:39 -04:00
|
|
|
if (isDevMode) {
|
2020-05-24 22:50:08 -04:00
|
|
|
// A Superset webpage normally includes two JS bundles in dev, `theme.ts` and
|
2020-03-19 17:57:39 -04:00
|
|
|
// the main entrypoint. Only the main entry should have the dev server client,
|
|
|
|
// otherwise the websocket client will initialize twice, creating two sockets.
|
|
|
|
// Ref: https://github.com/gaearon/react-hot-loader/issues/141
|
|
|
|
PREAMBLE.unshift(
|
|
|
|
`webpack-dev-server/client?http://localhost:${devserverPort}`,
|
|
|
|
);
|
|
|
|
}
|
2018-10-30 17:51:44 -04:00
|
|
|
|
|
|
|
function addPreamble(entry) {
|
|
|
|
return PREAMBLE.concat([path.join(APP_DIR, entry)]);
|
|
|
|
}
|
|
|
|
|
2020-03-19 17:57:39 -04:00
|
|
|
const babelLoader = {
|
|
|
|
loader: 'babel-loader',
|
|
|
|
options: {
|
|
|
|
cacheDirectory: true,
|
2020-03-26 19:55:22 -04:00
|
|
|
// disable gzip compression for cache files
|
|
|
|
// faster when there are millions of small files
|
2020-03-19 17:57:39 -04:00
|
|
|
cacheCompression: false,
|
2020-04-13 16:39:55 -04:00
|
|
|
plugins: ['emotion'],
|
2020-04-30 00:54:07 -04:00
|
|
|
presets: [
|
|
|
|
[
|
|
|
|
'@emotion/babel-preset-css-prop',
|
|
|
|
{
|
|
|
|
autoLabel: true,
|
|
|
|
labelFormat: '[local]',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
2020-03-19 17:57:39 -04:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2016-07-14 22:50:47 -04:00
|
|
|
const config = {
|
2017-07-25 16:57:29 -04:00
|
|
|
node: {
|
|
|
|
fs: 'empty',
|
|
|
|
},
|
2016-03-18 02:44:58 -04:00
|
|
|
entry: {
|
2020-05-24 22:50:08 -04:00
|
|
|
theme: path.join(APP_DIR, '/src/theme.ts'),
|
2018-10-30 17:51:44 -04:00
|
|
|
preamble: PREAMBLE,
|
2020-06-22 11:14:27 -04:00
|
|
|
addSlice: addPreamble('/src/addSlice/index.tsx'),
|
2018-10-30 17:51:44 -04:00
|
|
|
explore: addPreamble('/src/explore/index.jsx'),
|
|
|
|
dashboard: addPreamble('/src/dashboard/index.jsx'),
|
2020-07-14 19:39:56 -04:00
|
|
|
sqllab: addPreamble('/src/SqlLab/index.tsx'),
|
2020-07-15 11:38:43 -04:00
|
|
|
welcome: addPreamble('/src/welcome/index.tsx'),
|
2020-07-14 19:39:37 -04:00
|
|
|
profile: addPreamble('/src/profile/index.tsx'),
|
2019-05-17 20:31:02 -04:00
|
|
|
showSavedQuery: [path.join(APP_DIR, '/src/showSavedQuery/index.jsx')],
|
2016-03-18 02:44:58 -04:00
|
|
|
},
|
2018-09-04 13:39:05 -04:00
|
|
|
output,
|
2020-03-19 17:57:39 -04:00
|
|
|
stats: 'minimal',
|
|
|
|
performance: {
|
|
|
|
assetFilter(assetFilename) {
|
|
|
|
// don't throw size limit warning on geojson and font files
|
|
|
|
return !/\.(map|geojson|woff2)$/.test(assetFilename);
|
|
|
|
},
|
|
|
|
},
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
optimization: {
|
2020-06-29 00:37:04 -04:00
|
|
|
sideEffects: true,
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
splitChunks: {
|
|
|
|
chunks: 'all',
|
|
|
|
automaticNameDelimiter: '-',
|
2018-09-27 15:49:05 -04:00
|
|
|
minChunks: 2,
|
|
|
|
cacheGroups: {
|
|
|
|
default: false,
|
|
|
|
major: {
|
|
|
|
name: 'vendors-major',
|
2020-03-19 17:57:39 -04:00
|
|
|
test: /\/node_modules\/(brace|react|react-dom|@superset-ui\/translation|webpack.*|@babel.*)\//,
|
2018-09-27 15:49:05 -04:00
|
|
|
},
|
|
|
|
},
|
2018-06-20 15:07:42 -04:00
|
|
|
},
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
},
|
|
|
|
resolve: {
|
2018-10-24 01:33:51 -04:00
|
|
|
alias: {
|
|
|
|
src: path.resolve(APP_DIR, './src'),
|
2020-03-19 17:57:39 -04:00
|
|
|
'react-dom': '@hot-loader/react-dom',
|
2020-04-13 16:39:55 -04:00
|
|
|
stylesheets: path.resolve(APP_DIR, './stylesheets'),
|
2020-06-16 20:30:10 -04:00
|
|
|
images: path.resolve(APP_DIR, './images'),
|
2020-07-16 19:07:49 -04:00
|
|
|
spec: path.resolve(APP_DIR, './spec'),
|
2018-10-24 01:33:51 -04:00
|
|
|
},
|
|
|
|
extensions: ['.ts', '.tsx', '.js', '.jsx'],
|
2019-02-14 20:57:34 -05:00
|
|
|
symlinks: false,
|
Map visualization (#650)
* simple mapbox viz
use react-map-gl
superclustering of long/lat points
Added hook for map style, huge performance boost from bounding box fix, added count text on clusters
variable gradient size based on metric count
Ability to aggregate over any point property
This needed a change in the supercluster npm module, a PR was placed here:
https://github.com/mapbox/supercluster/pull/12
Aggregator function option in explore, tweaked visual defaults
better radius size management
clustering radius, point metric/unit options
scale cluster labels that don't fit, non-numeric labels for points
Minor fixes, label field affects points, text changes
serve mapbox apikey for slice
global opacity, viewport saves (hacky), bug in point labels
fixing mapbox-gl dependency
mapbox_api_key in config
expose row_limit, fix minor bugs
Add renderWhileDragging flag, groupby. Only show numerical columns for point radius
Implicitly group by lng/lat columns and error when label doesn't match groupby
'Fix' radius in miles problem, still some jankiness
derived fields cannot be typed as of now -> reverting numerical number change
better grouping error checking, expose count(*) for labelling
Custom colour for clusters/points + smart text colouring
Fixed bad positioning and overflow in explore view + small bugs + added thumbnail
* landscaping & eslint & use izip
* landscapin'
* address js code review
2016-06-24 17:16:51 -04:00
|
|
|
},
|
2018-10-24 01:33:51 -04:00
|
|
|
context: APP_DIR, // to automatically find tsconfig.json
|
2016-03-18 02:44:58 -04:00
|
|
|
module: {
|
2018-09-27 15:49:05 -04:00
|
|
|
// Uglifying mapbox-gl results in undefined errors, see
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
// https://github.com/mapbox/mapbox-gl-js/issues/4359#issuecomment-288001933
|
|
|
|
noParse: /(mapbox-gl)\.js$/,
|
2018-06-11 00:43:37 -04:00
|
|
|
rules: [
|
2020-06-30 14:38:36 -04:00
|
|
|
{
|
|
|
|
test: /datatables\.net.*/,
|
|
|
|
loader: 'imports-loader?define=>false',
|
|
|
|
},
|
2018-10-24 01:33:51 -04:00
|
|
|
{
|
|
|
|
test: /\.tsx?$/,
|
2020-08-19 15:54:26 -04:00
|
|
|
exclude: [/\.test.tsx?$/],
|
2018-10-24 01:33:51 -04:00
|
|
|
use: [
|
2020-03-19 17:57:39 -04:00
|
|
|
'thread-loader',
|
|
|
|
babelLoader,
|
2018-10-24 01:33:51 -04:00
|
|
|
{
|
|
|
|
loader: 'ts-loader',
|
|
|
|
options: {
|
|
|
|
// transpile only in happyPack mode
|
|
|
|
// type checking is done via fork-ts-checker-webpack-plugin
|
|
|
|
happyPackMode: true,
|
2020-03-19 17:57:39 -04:00
|
|
|
transpileOnly: true,
|
2020-03-30 12:31:46 -04:00
|
|
|
// must override compiler options here, even though we have set
|
|
|
|
// the same options in `tsconfig.json`, because they may still
|
|
|
|
// be overriden by `tsconfig.json` in node_modules subdirectories.
|
|
|
|
compilerOptions: {
|
|
|
|
esModuleInterop: false,
|
|
|
|
importHelpers: false,
|
|
|
|
module: 'esnext',
|
|
|
|
target: 'esnext',
|
|
|
|
},
|
2018-10-24 01:33:51 -04:00
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
2016-03-18 02:44:58 -04:00
|
|
|
{
|
2016-07-14 22:50:47 -04:00
|
|
|
test: /\.jsx?$/,
|
2020-08-19 15:54:26 -04:00
|
|
|
// include source code for plugins, but exclude node_modules and test files within them
|
|
|
|
exclude: [/superset-ui.*\/node_modules\//, /\.test.jsx?$/],
|
2020-07-22 13:21:25 -04:00
|
|
|
include: [
|
|
|
|
new RegExp(`${APP_DIR}/src`),
|
|
|
|
/superset-ui.*\/src/,
|
|
|
|
new RegExp(`${APP_DIR}/.storybook`),
|
|
|
|
],
|
2020-03-19 17:57:39 -04:00
|
|
|
use: [babelLoader],
|
2019-02-14 20:57:34 -05:00
|
|
|
},
|
2016-03-18 02:44:58 -04:00
|
|
|
{
|
|
|
|
test: /\.css$/,
|
2020-03-19 17:57:39 -04:00
|
|
|
include: [APP_DIR, /superset-ui.+\/src/],
|
2018-09-04 13:39:05 -04:00
|
|
|
use: [
|
2018-09-05 12:17:18 -04:00
|
|
|
isDevMode ? 'style-loader' : MiniCssExtractPlugin.loader,
|
2019-11-26 13:09:39 -05:00
|
|
|
{
|
|
|
|
loader: 'css-loader',
|
|
|
|
options: {
|
2019-12-02 20:20:43 -05:00
|
|
|
sourceMap: isDevMode,
|
2019-11-26 13:09:39 -05:00
|
|
|
},
|
|
|
|
},
|
2018-09-04 13:39:05 -04:00
|
|
|
],
|
2017-08-09 12:52:43 -04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
test: /\.less$/,
|
|
|
|
include: APP_DIR,
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
use: [
|
2018-09-05 12:17:18 -04:00
|
|
|
isDevMode ? 'style-loader' : MiniCssExtractPlugin.loader,
|
2019-11-26 13:09:39 -05:00
|
|
|
{
|
|
|
|
loader: 'css-loader',
|
|
|
|
options: {
|
2019-12-02 20:20:43 -05:00
|
|
|
sourceMap: isDevMode,
|
2019-11-26 13:09:39 -05:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
loader: 'less-loader',
|
|
|
|
options: {
|
2019-12-02 20:20:43 -05:00
|
|
|
sourceMap: isDevMode,
|
2020-08-05 16:50:30 -04:00
|
|
|
javascriptEnabled: true,
|
2019-11-26 13:09:39 -05:00
|
|
|
},
|
|
|
|
},
|
[webpack 4] third time's the charm ;) (#5370)
* [perf] add webpack 4 + SplitChunks + lazy load visualizations (#5240)
* [webpack] setup lazy loading for all visualizations
* [lazy-load] push renderVis function to <Chart /> state
* no mapbox token
* [lazy loading] use native webpack import func to fix chunk names, add babel-plugin-syntax-dynamic-import, fix rebase bug.
* fix geojson import, undefined t, and fix async css bug
* [lazy load] actually add babel-plugin-syntax-dynamic-import
* [webpack] working dev version of webpack v4
* [webpack 4] fix url issues, use mini-css-extract-plugin and webpack-assets-manifest plugins
* [webpack 4] use splitchunks for all files, update templates to multi-file entrypoints
* [webpack 4] multiple theme entry files for markup vis css, don't uglify mapbox
* [webpack 4] lint python manifest changes, update yarn lock.
* [webpack 4] fix tests with babel-plugin-dynamic-import-node
* [webpack 4] only use 'dynamic-import-node' plugin in tests, update <Chart /> vis promise when vis type changes
* [webpack 4] clean up package.json and yarn.lock after rebase
* [webpack 4] lint?
* [webpack 4] lint for real
* [webpack 4][istanbul] ignore visualizations/index.js
* [webpack 4] fix rebase bug, update dashboard/deprecated/chart/Chart.jsx to use vis promises.
* [webpack 4] lint and test
* [webpack 4] yarn.lock
2018-07-17 16:55:03 -04:00
|
|
|
],
|
2016-03-18 02:44:58 -04:00
|
|
|
},
|
2016-07-14 22:50:47 -04:00
|
|
|
/* for css linking images */
|
2016-07-27 19:57:05 -04:00
|
|
|
{
|
|
|
|
test: /\.png$/,
|
2018-10-11 23:55:40 -04:00
|
|
|
loader: 'url-loader',
|
|
|
|
options: {
|
|
|
|
limit: 10000,
|
|
|
|
name: '[name].[hash:8].[ext]',
|
|
|
|
},
|
2016-07-27 19:57:05 -04:00
|
|
|
},
|
2020-06-16 20:30:10 -04:00
|
|
|
{
|
|
|
|
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
|
|
|
|
issuer: {
|
|
|
|
test: /\.(j|t)sx?$/,
|
|
|
|
},
|
|
|
|
use: ['@svgr/webpack'],
|
|
|
|
},
|
2016-07-27 19:57:05 -04:00
|
|
|
{
|
2018-10-11 23:55:40 -04:00
|
|
|
test: /\.(jpg|gif)$/,
|
2016-07-27 19:57:05 -04:00
|
|
|
loader: 'file-loader',
|
2018-10-11 23:55:40 -04:00
|
|
|
options: {
|
|
|
|
name: '[name].[hash:8].[ext]',
|
|
|
|
},
|
2016-07-27 19:57:05 -04:00
|
|
|
},
|
2016-07-14 22:50:47 -04:00
|
|
|
/* for font-awesome */
|
2016-07-27 19:57:05 -04:00
|
|
|
{
|
|
|
|
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
2017-04-03 16:05:13 -04:00
|
|
|
loader: 'url-loader?limit=10000&mimetype=application/font-woff',
|
2016-07-27 19:57:05 -04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
|
|
|
loader: 'file-loader',
|
|
|
|
},
|
Map visualization (#650)
* simple mapbox viz
use react-map-gl
superclustering of long/lat points
Added hook for map style, huge performance boost from bounding box fix, added count text on clusters
variable gradient size based on metric count
Ability to aggregate over any point property
This needed a change in the supercluster npm module, a PR was placed here:
https://github.com/mapbox/supercluster/pull/12
Aggregator function option in explore, tweaked visual defaults
better radius size management
clustering radius, point metric/unit options
scale cluster labels that don't fit, non-numeric labels for points
Minor fixes, label field affects points, text changes
serve mapbox apikey for slice
global opacity, viewport saves (hacky), bug in point labels
fixing mapbox-gl dependency
mapbox_api_key in config
expose row_limit, fix minor bugs
Add renderWhileDragging flag, groupby. Only show numerical columns for point radius
Implicitly group by lng/lat columns and error when label doesn't match groupby
'Fix' radius in miles problem, still some jankiness
derived fields cannot be typed as of now -> reverting numerical number change
better grouping error checking, expose count(*) for labelling
Custom colour for clusters/points + smart text colouring
Fixed bad positioning and overflow in explore view + small bugs + added thumbnail
* landscaping & eslint & use izip
* landscapin'
* address js code review
2016-06-24 17:16:51 -04:00
|
|
|
],
|
2016-03-18 02:44:58 -04:00
|
|
|
},
|
2016-07-14 22:50:47 -04:00
|
|
|
externals: {
|
|
|
|
cheerio: 'window',
|
|
|
|
'react/lib/ExecutionEnvironment': true,
|
2016-07-21 00:32:20 -04:00
|
|
|
'react/lib/ReactContext': true,
|
2016-07-14 22:50:47 -04:00
|
|
|
},
|
2018-09-04 13:39:05 -04:00
|
|
|
plugins,
|
2020-03-17 18:37:07 -04:00
|
|
|
devtool: false,
|
|
|
|
};
|
|
|
|
|
2020-03-26 19:55:22 -04:00
|
|
|
let proxyConfig = getProxyConfig();
|
2020-03-17 18:37:07 -04:00
|
|
|
|
|
|
|
if (isDevMode) {
|
2020-03-19 17:57:39 -04:00
|
|
|
config.devtool = 'eval-cheap-module-source-map';
|
2020-03-17 18:37:07 -04:00
|
|
|
config.devServer = {
|
2020-03-26 19:55:22 -04:00
|
|
|
before(app, server, compiler) {
|
|
|
|
// load proxy config when manifest updates
|
|
|
|
const hook = compiler.hooks.webpackManifestPluginAfterEmit;
|
|
|
|
hook.tap('ManifestPlugin', manifest => {
|
|
|
|
proxyConfig = getProxyConfig(manifest);
|
|
|
|
});
|
2020-03-17 18:37:07 -04:00
|
|
|
},
|
2018-09-04 13:39:05 -04:00
|
|
|
historyApiFallback: true,
|
|
|
|
hot: true,
|
2020-03-19 17:57:39 -04:00
|
|
|
injectClient: false,
|
|
|
|
injectHot: true,
|
2018-09-04 13:39:05 -04:00
|
|
|
inline: true,
|
2020-02-25 11:44:26 -05:00
|
|
|
stats: 'minimal',
|
2018-09-04 13:39:05 -04:00
|
|
|
overlay: true,
|
|
|
|
port: devserverPort,
|
|
|
|
// Only serves bundled files from webpack-dev-server
|
|
|
|
// and proxy everything else to Superset backend
|
2020-03-17 18:37:07 -04:00
|
|
|
proxy: [
|
|
|
|
// functions are called for every request
|
|
|
|
() => {
|
|
|
|
return proxyConfig;
|
|
|
|
},
|
|
|
|
],
|
2020-02-09 20:53:56 -05:00
|
|
|
contentBase: path.join(process.cwd(), '../static/assets'),
|
2020-03-17 18:37:07 -04:00
|
|
|
};
|
2020-03-19 17:57:39 -04:00
|
|
|
|
|
|
|
// find all the symlinked plugins and use their source code for imports
|
|
|
|
let hasSymlink = false;
|
|
|
|
for (const [pkg, version] of Object.entries(packageConfig.dependencies)) {
|
|
|
|
const srcPath = `./node_modules/${pkg}/src`;
|
|
|
|
if (/superset-ui/.test(pkg) && fs.existsSync(srcPath)) {
|
|
|
|
console.log(
|
|
|
|
`[Superset Plugin] Use symlink source for ${pkg} @ ${version}`,
|
|
|
|
);
|
|
|
|
// only allow exact match so imports like `@superset-ui/plugin-name/lib`
|
|
|
|
// and `@superset-ui/plugin-name/esm` can still work.
|
|
|
|
config.resolve.alias[`${pkg}$`] = `${pkg}/src`;
|
|
|
|
hasSymlink = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasSymlink) {
|
|
|
|
console.log(''); // pure cosmetic new line
|
|
|
|
}
|
2020-03-17 18:37:07 -04:00
|
|
|
} else {
|
2018-09-27 15:49:05 -04:00
|
|
|
config.optimization.minimizer = [
|
|
|
|
new TerserPlugin({
|
2019-02-15 11:53:06 -05:00
|
|
|
cache: '.terser-plugin-cache/',
|
2018-09-27 15:49:05 -04:00
|
|
|
parallel: true,
|
|
|
|
extractComments: true,
|
|
|
|
}),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bundle analyzer is disabled by default
|
|
|
|
// Pass flag --analyzeBundle=true to enable
|
|
|
|
// e.g. npm run build -- --analyzeBundle=true
|
|
|
|
if (analyzeBundle) {
|
|
|
|
config.plugins.push(new BundleAnalyzerPlugin());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Speed measurement is disabled by default
|
|
|
|
// Pass flag --measure=true to enable
|
|
|
|
// e.g. npm run build -- --measure=true
|
|
|
|
const smp = new SpeedMeasurePlugin({
|
|
|
|
disable: !measure,
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = smp.wrap(config);
|