const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const UpdateVersionPlugin = require("./updateVersionPlugin");
//const ChangeScriptSourcePlugin = require('./changeScriptSourcePlugin');
const CopyPlugin = require("copy-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin;
module.exports = {
entry: path.resolve(__dirname, "js/main.js"),
output: {
path: path.resolve(__dirname, "build", "js"),
filename: "[name].[contenthash].js",
library: "ivprogCore",
libraryTarget: "umd",
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
{
test: /\.csv$/,
use: [
{
loader: path.resolve(__dirname, "i18n_csv_loader"),
},
],
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [".tsx", ".ts", ".js", ".csv"],
fallback: {
fs: false,
},
},
stats: {
colors: true,
},
plugins: [
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [path.resolve(__dirname, "build/**/*")],
watch: true,
}),
new UpdateVersionPlugin(),
new HtmlWebpackPlugin({
template: "./templates/index.html",
filename: path.resolve(__dirname, "build", "index.html"),
}),
new HtmlWebpackPlugin({
template: "./templates/runner.html",
filename: path.resolve(__dirname, "build", "runner.html"),
}),
new HtmlWebpackPlugin({
template: "./templates/process.html",
filename: path.resolve(__dirname, "build", "process.html"),
}),
/*new ChangeScriptSourcePlugin(),*/
new CopyPlugin({
patterns: [
{
from: "js/iassign-integration-functions.js",
to: path.resolve(__dirname, "build/js"),
},
{
from: "css/ivprog-visual-1.0.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "css/ivprog-term.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "css/ivprog-assessment.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "css/ivprog-editor.css",
to: path.resolve(__dirname, "build/css"),
},
{ from: "css/roboto.css", to: path.resolve(__dirname, "build/css") },
{ from: "css/fonts/", to: path.resolve(__dirname, "build/css/fonts") },
{ from: "js/Sortable.js", to: path.resolve(__dirname, "build/js") },
{ from: "js/jquery.min.js", to: path.resolve(__dirname, "build/js") },
{
from: "js/jquery-ui.min.js",
to: path.resolve(__dirname, "build/js"),
},
{ from: "js/semantic.min.js", to: path.resolve(__dirname, "build/js") },
{
from: "js/filesaver.min.js",
to: path.resolve(__dirname, "build/js"),
},
{
from: "css/semantic.min.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "css/themes/",
to: path.resolve(__dirname, "build/css/themes"),
},
{
from: "img/trash-icon.png",
to: path.resolve(__dirname, "build/img"),
},
{ from: "img/empty.svg", to: path.resolve(__dirname, "build/img") },
{ from: "img/new_line.svg", to: path.resolve(__dirname, "build/img") },
{
from: "img/no_new_line.svg",
to: path.resolve(__dirname, "build/img"),
},
{
from: "js/jquery.json-editor.min.js",
to: path.resolve(__dirname, "build/js"),
},
{
from: "node_modules/codemirror/lib/codemirror.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "node_modules/codemirror/addon/hint/show-hint.css",
to: path.resolve(__dirname, "build/css"),
},
{
from: "node_modules/codemirror/theme/ttcn.css",
to: path.resolve(__dirname, "build/css"),
},
/*{from:'index.html', to:path.resolve(__dirname, 'build')},
{from:'runner.html', to:path.resolve(__dirname, 'build')},*/
],
}),
],
optimization: {
splitChunks: {
chunks: "all",
},
},
devtool: "source-map",
watchOptions: {
ignored: [path.resolve(__dirname, ".ima_version.json")],
},
};