vscode-cosmosdb/webpack.config.ext.js

164 строки
6.2 KiB
JavaScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
const webpack = require('webpack');
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = (env, { mode }) => {
const isDev = mode === 'development';
return {
target: 'node',
mode: mode || 'none',
node: { __filename: false, __dirname: false },
entry: {
// 'extension.bundle.ts': './src/extension.ts', // Is still necessary?
'./mongo-languageServer.bundle': './src/mongo/languageServer.ts',
main: './main.ts',
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
chunkFormat: 'commonjs',
libraryTarget: 'commonjs2',
devtoolModuleFilenameTemplate: '[resource-path]',
},
optimization: {
minimize: !isDev,
minimizer: [
new TerserPlugin({
// TODO: Code should not rely on function names
// https://msdata.visualstudio.com/CosmosDB/_workitems/edit/3594054
// minify: TerserPlugin.swcMinify, // SWC minify doesn't have "keep_fnames" option
terserOptions: {
keep_classnames: true,
keep_fnames: true,
},
}),
],
},
externalsType: 'node-commonjs',
externals: {
vs: 'vs',
vscode: 'commonjs vscode',
/* Mongodb optional dependencies */
kerberos: 'commonjs kerberos',
'@mongodb-js/zstd': 'commonjs @mongodb-js/zstd',
'@aws-sdk/credential-providers': 'commonjs @aws-sdk/credential-providers',
'gcp-metadata': 'commonjs gcp-metadata',
snappy: 'commonjs snappy',
socks: 'commonjs socks',
aws4: 'commonjs aws4',
'mongodb-client-encryption': 'commonjs mongodb-client-encryption',
/* PG optional dependencies */
'pg-native': 'commonjs pg-native',
},
resolve: {
roots: [__dirname],
extensions: ['.js', '.ts'],
},
module: {
rules: [
{
test: /\.(ts)$/iu,
use: {
loader: 'swc-loader',
options: {
module: {
type: 'commonjs',
},
isModule: true,
sourceMaps: isDev,
jsc: {
baseUrl: path.resolve(__dirname, './'), // Set absolute path here
keepClassNames: true,
target: 'es2022',
parser: {
syntax: 'typescript',
tsx: true,
functionBind: false,
decorators: true,
dynamicImport: true,
},
},
},
},
},
],
},
plugins: [
new webpack.EnvironmentPlugin({
NODE_ENV: mode,
IS_BUNDLE: 'true',
DEVSERVER: isDev ? 'true' : '',
}),
// Copy everything what is needed to run the extension
// - We can't bundle everything into one file because system-dependent binaries in node_modules
// - We mustn't change source code as it does the old packaging script
// - The dist folder should be ready to be published to the marketplace and be only one working folder
new CopyWebpackPlugin({
patterns: [
{
from: 'grammar',
to: 'grammar',
},
{
from: 'resources',
to: 'resources',
},
{
from: 'package.json',
to: 'package.json',
},
{
from: 'CHANGELOG.md',
to: 'CHANGELOG.md',
},
{
from: 'LICENSE.md',
to: 'LICENSE.md',
},
{
from: 'NOTICE.html',
to: 'NOTICE.html',
},
{
from: 'README.md',
to: 'README.md',
transform(content, absoluteFrom) {
let data = content.toString();
return data.replace(
/<!-- region exclude-from-marketplace -->.*?<!-- endregion exclude-from-marketplace -->/gis,
'',
);
},
},
{
from: 'SECURITY.md',
to: 'SECURITY.md',
},
{
from: 'SUPPORT.md',
to: 'SUPPORT.md',
},
{
from: '.vscodeignore',
to: '.vscodeignore',
toType: 'file',
},
],
}),
].filter(Boolean),
devtool: isDev ? 'source-map' : false,
infrastructureLogging: {
level: 'log', // enables logging required for problem matchers
},
};
};