79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
// Copyright 2023 The Perses Authors
|
|
// Licensed 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.
|
|
|
|
import fs from 'fs';
|
|
import { Configuration } from 'webpack';
|
|
import { Configuration as DevServerConfig, ServerConfiguration } from 'webpack-dev-server';
|
|
import { merge } from 'webpack-merge';
|
|
import { commonConfig } from './webpack.common';
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
require('dotenv-defaults').config();
|
|
|
|
declare module 'webpack' {
|
|
interface Configuration {
|
|
devServer?: DevServerConfig | undefined;
|
|
}
|
|
}
|
|
|
|
// Get dev server HTTP options (note: HTTP2 is not currently supported by webpack since we're on Node 16)
|
|
function getServerConfig(): ServerConfiguration | undefined {
|
|
// Just use regular HTTP by default
|
|
if (process.env.HTTPS !== 'true') {
|
|
return undefined;
|
|
}
|
|
|
|
// Support the same HTTPS options as Creact React App if HTTPS is set
|
|
if (process.env.SSL_KEY_FILE === undefined || process.env.SSL_CRT_FILE === undefined) {
|
|
// Use the default self-signed cert
|
|
return { type: 'https' };
|
|
}
|
|
|
|
// Use a custom cert
|
|
return {
|
|
type: 'https',
|
|
options: {
|
|
key: fs.readFileSync(process.env.SSL_KEY_FILE),
|
|
cert: fs.readFileSync(process.env.SSL_CRT_FILE),
|
|
},
|
|
};
|
|
}
|
|
|
|
// Webpack configuration in dev
|
|
const devConfig: Configuration = {
|
|
mode: 'development',
|
|
devtool: 'cheap-module-source-map',
|
|
|
|
output: {
|
|
pathinfo: true,
|
|
},
|
|
|
|
watchOptions: {
|
|
aggregateTimeout: 300,
|
|
},
|
|
|
|
devServer: {
|
|
port: parseInt(process.env.PORT ?? '3000'),
|
|
open: true,
|
|
server: getServerConfig(),
|
|
historyApiFallback: true,
|
|
allowedHosts: 'all',
|
|
proxy: {
|
|
'/api': 'http://localhost:9093',
|
|
},
|
|
},
|
|
cache: true,
|
|
};
|
|
|
|
const merged = merge(commonConfig, devConfig);
|
|
export default merged;
|