/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ //@ts-check /** @typedef {import('webpack').Configuration} WebpackConfig **/ 'use strict'; const path = require('path'); const merge = require('merge-options'); const CopyWebpackPlugin = require('copy-webpack-plugin'); module.exports = function withDefaults(/**@type WebpackConfig*/extConfig) { /** @type WebpackConfig */ let defaultConfig = { mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') target: 'node', // extensions run in a node context resolve: { mainFields: ['main'], // prefer the main-entry of package.json files extensions: ['.ts', '.js'] // support ts-files and js-files }, module: { rules: [{ test: /\.ts$/, exclude: /node_modules/, use: [{ // vscode-nls-dev loader: // * rewrite nls-calls loader: 'vscode-nls-dev/lib/webpack-loader', options: { base: path.join(extConfig.context, 'src') } }, { // configure TypeScript loader: // * enable sources maps for end-to-end source maps loader: 'ts-loader', options: { compilerOptions: { "sourceMap": true, } } }] }] }, externals: { 'vscode': 'commonjs vscode', // ignored because it doesn't exist "vscode-extension-telemetry": 'commonjs vscode-extension-telemetry', // commonly used "vscode-nls": 'commonjs vscode-nls', }, output: { // all output goes into `dist`. // packaging depends on that and this must always be like it filename: '[name].js', path: path.join(extConfig.context, 'dist'), libraryTarget: "commonjs", }, // yes, really source maps devtool: 'source-map', plugins: [ new CopyWebpackPlugin([ { from: './out/**/*', to: '.', ignore: ['*.js', '*.js.map'], flatten: true } ]) ], }; return merge(defaultConfig, extConfig); };