//@ts-check // eslint-disable-next-line @typescript-eslint/naming-convention const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); // eslint-disable-next-line @typescript-eslint/naming-convention const { DefinePlugin } = require('webpack'); const webpack = require('webpack'); 'use strict'; const path = require('path'); //@ts-check /** @typedef {import('webpack').Configuration} WebpackConfig **/ /** @type WebpackConfig */ const extensionConfig = { target: 'node', // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') entry: './src/extension/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ output: { // the bundle is stored in the 'out' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ path: path.resolve(__dirname, 'out'), filename: 'extension.js', libraryTarget: 'commonjs2' }, externals: { vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ // modules added here also need to be added in the .vscodeignore file 'oxigraph': 'commonjs oxigraph', }, resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader extensions: ['.ts', '.js'], }, module: { rules: [ { test: /\.ts$/, exclude: /node_modules/, use: [ { loader: 'ts-loader' } ] } ] }, devtool: 'nosources-source-map', infrastructureLogging: { level: "log", // enables logging required for problem matchers }, }; const rendererConfig = { performance: { hints: false, maxEntrypointSize: 512000, maxAssetSize: 512000 }, mode: "none", devtool: 'nosources-source-map', target: 'web', entry: "./src/renderer/sparql-result-json.tsx", output: { path: path.resolve(__dirname, "out"), filename: "renderer.js", publicPath: '', libraryTarget: "module", chunkFormat: "module" }, externals: { vscode: 'commonjs vscode', }, resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx', '.css'], fallback: { "util": require.resolve("util/") } }, experiments: { outputModule: true, }, module: { rules: [ // Allow importing ts(x) files: { test: /\.tsx?$/, loader: 'ts-loader', options: { configFile: path.join(path.dirname('./src/renderer/sparql-result-json.tsx'), 'tsconfig.json'), // transpileOnly enables hot-module-replacement transpileOnly: true, compilerOptions: { // Overwrite the noEmit from the client's tsconfig noEmit: false, }, }, }, // Allow importing CSS modules: { test: /\.css$/, use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 1, modules: false, }, }, ], }, ], }, plugins: [ new ForkTsCheckerWebpackPlugin({ typescript: { configFile: path.join(path.dirname('./src/renderer/sparql-result-json.tsx'), 'tsconfig.json'), }, }), new DefinePlugin({ // Path from the output filename to the output directory // eslint-disable-next-line @typescript-eslint/naming-convention __webpack_relative_entrypoint_to_root__: JSON.stringify( path.posix.relative(path.posix.dirname(`/index.js`), '/'), ), scriptUrl: 'import.meta.url', }), ], }; const webExtensionConfig = { mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') target: 'webworker', // extensions run in a webworker context entry: { 'extension': './src/webview/index.tsx' }, output: { filename: '[name].js', path: path.join(__dirname, './out/web'), libraryTarget: 'commonjs', devtoolModuleFilenameTemplate: '../../[resource-path]' }, resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx', '.css'], mainFields: ['browser', 'module', 'main'], // look for `browser` entry point in imported node modules alias: { // provides alternate implementation for node module and source files }, fallback: { // Webpack 5 no longer polyfills Node.js core modules automatically. // see https://webpack.js.org/configuration/resolve/#resolvefallback // for the list of Node.js core module polyfills. 'assert': require.resolve('assert') } }, module: { rules: [{ test: /\.ts|\.tsx$/, exclude: /node_modules/, use: [{ loader: 'ts-loader' }] }, // Allow importing CSS modules: { test: /\.css$/, use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 1, modules: false, }, }, ], } ] }, plugins: [ new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 // disable chunks by default since web extensions must be a single bundle }), new webpack.ProvidePlugin({ process: 'process/browser', // provide a shim for the global `process` variable }), new ForkTsCheckerWebpackPlugin({ typescript: { configFile: path.join(path.dirname('./src/webview/index.tsx'), 'tsconfig.json'), }, }), ], externals: { 'vscode': 'commonjs vscode', // ignored because it doesn't exist }, performance: { hints: false }, devtool: 'nosources-source-map', // create a source map that points to the original source file infrastructureLogging: { level: "log", // enables logging required for problem matchers }, }; module.exports = [extensionConfig, rendererConfig, webExtensionConfig];