"use strict";
/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.SuppressExtractedTextChunksWebpackPlugin = void 0;
/**
 * Remove .js files from entry points consisting entirely of stylesheets.
 * To be used together with mini-css-extract-plugin.
 */
class SuppressExtractedTextChunksWebpackPlugin {
    apply(compiler) {
        compiler.hooks.compilation.tap('SuppressExtractedTextChunks', (compilation) => {
            compilation.hooks.chunkAsset.tap('SuppressExtractedTextChunks', (chunk, filename) => {
                // Remove only JavaScript assets
                if (!filename.endsWith('.js')) {
                    return;
                }
                // Only chunks with a css asset should have JavaScript assets removed
                let hasCssFile = false;
                for (const file of chunk.files) {
                    if (file.endsWith('.css')) {
                        hasCssFile = true;
                        break;
                    }
                }
                if (!hasCssFile) {
                    return;
                }
                // Only chunks with all CSS entry dependencies should have JavaScript assets removed
                let cssOnly = false;
                const entryModules = compilation.chunkGraph.getChunkEntryModulesIterable(chunk);
                for (const module of entryModules) {
                    cssOnly = module.dependencies.every((dependency) => dependency.constructor.name === 'CssDependency');
                    if (!cssOnly) {
                        break;
                    }
                }
                if (cssOnly) {
                    chunk.files.delete(filename);
                    compilation.deleteAsset(filename);
                }
            });
        });
    }
}
exports.SuppressExtractedTextChunksWebpackPlugin = SuppressExtractedTextChunksWebpackPlugin;
