"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const webpack = require("webpack");
const path_1 = require("path");
const AsyncDependenciesBlock = require('webpack/lib/AsyncDependenciesBlock');
const ContextElementDependency = require('webpack/lib/dependencies/ContextElementDependency');
const ImportDependency = require('webpack/lib/dependencies/ImportDependency');
// This just extends webpack.NamedChunksPlugin to prevent name collisions.
class NamedLazyChunksWebpackPlugin extends webpack.NamedChunksPlugin {
    constructor() {
        // Append a dot and number if the name already exists.
        const nameMap = new Map();
        function getUniqueName(baseName, request) {
            let name = baseName;
            let num = 0;
            while (nameMap.has(name) && nameMap.get(name) !== request) {
                name = `${baseName}.${num++}`;
            }
            nameMap.set(name, request);
            return name;
        }
        const nameResolver = (chunk) => {
            // Entry chunks have a name already, use it.
            if (chunk.name) {
                return chunk.name;
            }
            // Try to figure out if it's a lazy loaded route or import().
            if (chunk.blocks
                && chunk.blocks.length > 0
                && chunk.blocks[0] instanceof AsyncDependenciesBlock
                && chunk.blocks[0].dependencies.length === 1
                && (chunk.blocks[0].dependencies[0] instanceof ContextElementDependency
                    || chunk.blocks[0].dependencies[0] instanceof ImportDependency)) {
                // Create chunkname from file request, stripping ngfactory and extension.
                const request = chunk.blocks[0].dependencies[0].request;
                const chunkName = path_1.basename(request).replace(/(\.ngfactory)?\.(js|ts)$/, '');
                if (!chunkName || chunkName === '') {
                    // Bail out if something went wrong with the name.
                    return null;
                }
                return getUniqueName(chunkName, request);
            }
            return null;
        };
        super(nameResolver);
    }
}
exports.NamedLazyChunksWebpackPlugin = NamedLazyChunksWebpackPlugin;
//# sourceMappingURL=/users/hansl/sources/hansl/angular-cli/plugins/named-lazy-chunks-webpack-plugin.js.map