/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as webpack from "webpack"; import * as path from "path"; import * as HtmlWebpackPlugin from "html-webpack-plugin"; import { CleanWebpackPlugin } from "clean-webpack-plugin"; const MiniCssExtractPlugin = require("mini-css-extract-plugin"); import * as CopyPlugin from "copy-webpack-plugin"; const r = (file: string) => path.resolve(__dirname, file); module.exports = { entry: { index: r("src/website/index.tsx"), playgroundRunner: r("src/runner/index.ts"), monacoLoader: r("src/website/monaco-loader-chunk.ts"), }, optimization: { runtimeChunk: "single", }, output: { path: r("dist"), devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]", }, resolve: { extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"], }, devtool: "source-map", devServer: { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization", }, allowedHosts: "all", watchFiles: [], }, module: { rules: [ { test: /\.css$/, use: [ /*"style-loader"*/ MiniCssExtractPlugin.loader, "css-loader", ], }, { test: /\.scss$/, use: [ /*"style-loader",*/ MiniCssExtractPlugin.loader, "css-loader", "sass-loader", ], }, { test: /\.(jpe?g|png|gif|eot|ttf|svg|woff|woff2|md)$/i, loader: "file-loader", }, { test: /\.tsx?$/, loader: "ts-loader", options: { transpileOnly: true }, }, { test: /\.txt$/i, use: "raw-loader" }, ], }, plugins: [ new webpack.DefinePlugin({ "process.env": { YEAR: JSON.stringify(new Date().getFullYear()), }, }), new CleanWebpackPlugin(), new MiniCssExtractPlugin({ filename: "[name].css", chunkFilename: "[id].css", }), new HtmlWebpackPlugin({ chunks: ["monacoLoader", "index"], templateContent: getHtml(), chunksSortMode: "manual", }), new HtmlWebpackPlugin({ chunks: ["index"], filename: "playground.html", templateContent: getHtml(), }), new HtmlWebpackPlugin({ chunks: ["playgroundRunner"], filename: "playgroundRunner.html", templateContent: getHtml(), }), new HtmlWebpackPlugin({ chunks: ["index"], filename: "docs.html", templateContent: getHtml(), }), new HtmlWebpackPlugin({ chunks: ["index"], filename: "monarch.html", templateContent: getHtml(), }), new CopyPlugin({ patterns: [{ from: "./static", to: "./" }], }), new CopyPlugin({ patterns: [{ from: "./typedoc/dist", to: "./typedoc/" }], }), new CopyPlugin({ patterns: [ { from: "./node_modules/monaco-editor/", to: "./node_modules/monaco-editor/", // This disables minification for js files info: { minimized: true }, }, ], }), new CopyPlugin({ patterns: [ { from: "../node_modules/monaco-editor-core/", to: "./node_modules/monaco-editor-core/", // This disables minification for js files info: { minimized: true }, }, ], }), new CopyPlugin({ patterns: [{ from: "../out/languages/", to: "./out/languages/" }], }), ], } as webpack.Configuration; function getHtml(): string { return `