blob: eacd4e4efefa8ac174336c4e04d06dceabfd4343 [file] [edit]
/*
* Copyright (C) 2025 Apple Inc. All rights reserved.
* Copyright 2025 Google LLC
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
import path from "path";
import webpack from "webpack";
import TerserPlugin from "terser-webpack-plugin";
import UnicodeEscapePlugin from "@dapplets/unicode-escape-webpack-plugin";
import { LicenseWebpackPlugin } from "license-webpack-plugin";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
function createConfig({ filename, minify }) {
return {
mode: "production",
devtool: "source-map",
target: "web",
entry: "./src/test.mjs",
output: {
path: path.resolve(__dirname, "dist"),
filename: filename,
library: {
name: "D3Test",
type: "globalThis",
},
libraryTarget: "assign",
},
plugins: [
new webpack.ProvidePlugin({
TextEncoder: [path.resolve(__dirname, "src/mock/text-encoding-mock.js"), "TextEncoder"],
TextDecoder: [path.resolve(__dirname, "src/mock/text-encoding-mock.js"), "TextDecoder"],
process: "process/browser",
Buffer: ["buffer", "Buffer"],
}),
new webpack.BannerPlugin({
banner: `For license information, please see ${filename}.LICENSE.txt`,
}),
new UnicodeEscapePlugin({
test: /\.(js|jsx|ts|tsx)$/, // Escape Unicode in JavaScript and TypeScript files
}),
new LicenseWebpackPlugin({
perChunkOutput: true,
outputFilename: "LICENSE.txt",
}),
],
module: {
rules: [
{
test: /\.c?js$/,
exclude: path.resolve(__dirname, "src/data"),
use: {
loader: "babel-loader",
options: {
plugins: [ "../utils/BabelCacheBuster.mjs" ],
},
},
},
]
},
optimization: {
minimizer: [
new TerserPlugin({
extractComments: false,
terserOptions: {
mangle: minify,
format: {
// Keep this comment for cache-busting.
comments: /ThouShaltNotCache/i,
},
},
}),
],
},
resolve: {
fallback: {
"assert": "assert/",
"buffer": "buffer/",
"canvas": false,
"child_process": false,
"crypto": false,
"fs": false,
"http": "stream-http",
"https": false,
"net": false,
"os": "os-browserify/browser",
"path": "path-browserify",
"stream": "stream-browserify",
"tls": false,
"url": "url/",
"util": "util/",
"vm": false,
"zlib": false,
},
},
performance: {
hints: false
},
};
};
export default [
createConfig({ filename: "bundle.min.js", minify: true }),
createConfig({ filename: "bundle.js", minify: false })
];