HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode-jobs/node_modules/laravel-mix/src/webpackPlugins/Css/AppendVueStylesPlugin.js
// @ts-check

/**
 * This plugin ensures that vue styles are always appended to the end of CSS files
 */
class AppendVueStylesPlugin {
    /** @param {import("webpack").Compiler} compiler */
    apply(compiler) {
        const name = 'AppendVueStylesPlugin';

        compiler.hooks.compilation.tap(name, compilation => {
            compilation.hooks.optimizeChunks.tap(name, chunks => {
                this.reorderModules(compilation.chunkGraph, chunks);
            });
        });
    }

    /**
     *
     * @param {import("webpack").ChunkGraph} graph
     * @param {Iterable<import("webpack").Chunk>} chunks
     */
    reorderModules(graph, chunks) {
        const queue = this.collectCssChunks(graph, chunks);

        // Find the last module in the bundle
        let largestIndex = 0;

        for (const { module, group } of queue) {
            largestIndex = Math.max(largestIndex, group.getModulePostOrderIndex(module));
        }

        // Push all vue assets after it in their original order
        for (const { module, group } of queue) {
            if (module.identifier().includes('?vue')) {
                group.setModulePostOrderIndex(
                    module,
                    largestIndex + group.getModulePostOrderIndex(module)
                );
            }
        }
    }

    /**
     * @param {import("webpack").ChunkGraph} graph
     * @param {Iterable<import("webpack").Chunk>} chunks
     */
    collectCssChunks(graph, chunks) {
        const queue = [];

        for (const chunk of chunks) {
            for (const module of graph.getChunkModulesIterable(chunk)) {
                if (module.type !== 'css/mini-extract') {
                    continue;
                }

                for (const group of chunk.groupsIterable) {
                    queue.push({ module, chunk, group });
                }
            }
        }

        return queue;
    }
}

module.exports = AppendVueStylesPlugin;