UNPKG

@webdiscus/pug-loader

Version:

Pug loader renders Pug files into HTML or compiles them into a template function.

105 lines (91 loc) 2.43 kB
const { isInline } = require('./Utils'); /** * Store of script files from `script` tag for sharing with the plugin. */ class ScriptCollection { static files = new Map(); /** * @param {string} file The source file. * @return {boolean} */ static has(file) { return this.files.has(file); } /** * Add a unique script file by current issuer. * * @param {string} resource The source file, including query. * @param {string} issuer The issuer of resource. */ static add(resource, issuer) { const [file] = resource.split('?', 1); let item = this.files.get(file); if (!item) { item = { name: undefined, file, inline: isInline(resource), issuers: [], chunkFiles: new Set(), }; this.files.set(file, item); } // add only unique issuer if (!item.issuers.find(({ request }) => request === issuer)) { item.issuers.push({ request: issuer, assets: new Map(), }); } } /** * Set asset name, the filename part w/o path, hash, extension. * One script can be used in many templates. * * @param {string} file The source file of script. * @param {string} name The unique name of entry point. */ static setName(file, name) { let item = this.files.get(file); if (item) { item.name = name; } } /** * @param {string} entryPoint The source file of an entry point. * @param {string} filename The output asset filename of issuer. */ static setIssuerFilename(entryPoint, filename) { for (let { issuers } of this.files.values()) { const item = issuers.find(({ request }) => request === entryPoint); if (item) { // the key is an issuer output filename // the value is an array of script output filenames, will be defined later, in 'afterProcessAssets' item.assets.set(filename, []); } } } static getEntity(sourceFile) { return this.files.get(sourceFile); } static getAll() { return this.files; } /** * Clear cache. * Called only once, when the plugin is applied. */ static clear() { this.files.clear(); } /** * Reset settings. * Called before each compilation after changes by `webpack serv/watch`. */ static reset() { this.files.forEach((item, key) => { item.chunkFiles.clear(); }); } } module.exports = ScriptCollection;