/*--------------------------------------------------------------------------------------------- * 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'); 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 node: { __dirname: false // leave the __dirname-behaviour intact }, resolve: { conditionNames: ['import', 'require'], mainFields: ['module', 'main'], extensions: ['.ts', '.js'] // support ts-files and js-files }, module: { rules: [{ test: /\.ts$/, exclude: /node_modules/, use: [{ // 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 }, 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, 'out'), libraryTarget: "commonjs", }, // yes, really source maps devtool: 'source-map' }; return merge(defaultConfig, extConfig); };