var webpack = require('webpack'), path = require('path'), CopyWebpackPlugin = require('copy-webpack-plugin'), HtmlWebpackPlugin = require('html-webpack-plugin'); const ASSET_PATH = process.env.ASSET_PATH || '/'; var alias = {}; var fileExtensions = [ 'jpg', 'jpeg', 'png', 'gif', 'eot', 'otf', 'svg', 'ttf', 'woff', 'woff2', ]; var options = { ignoreWarnings: [ /Circular dependency between chunks with runtime/, /ResizeObserver loop completed with undelivered notifications/, ], mode: 'development', entry: { app: path.join(__dirname, 'app.tsx'), }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'build'), clean: true, publicPath: ASSET_PATH, }, module: { rules: [ { test: new RegExp('.(' + fileExtensions.join('|') + ')$'), type: 'asset/resource', exclude: /node_modules/, }, { test: /\.html$/, loader: 'html-loader', exclude: /node_modules/, }, { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: [ { loader: require.resolve('ts-loader'), }, ], }, { test: /\.(js|jsx)$/, use: [ { loader: 'source-map-loader', }, { loader: require.resolve('babel-loader'), }, ], exclude: /node_modules/, }, ], }, resolve: { alias: alias, extensions: fileExtensions .map((extension) => '.' + extension) .concat(['.js', '.jsx', '.ts', '.tsx', '.css']), }, plugins: [ new CopyWebpackPlugin({ patterns: [ { from: 'node_modules/tlsn-js/build', to: path.join(__dirname, 'build'), force: true, }, ], }), new HtmlWebpackPlugin({ template: path.join(__dirname, 'index.ejs'), filename: 'index.html', cache: false, }), new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'], }), ].filter(Boolean), // Required by wasm-bindgen-rayon, in order to use SharedArrayBuffer on the Web // Ref: // - https://github.com/GoogleChromeLabs/wasm-bindgen-rayon#setting-up // - https://web.dev/i18n/en/coop-coep/ devServer: { headers: { 'Cross-Origin-Embedder-Policy': 'require-corp', 'Cross-Origin-Opener-Policy': 'same-origin', }, }, }; module.exports = options;