From e01a5e79337f31e656ed6d87c3cc168a06f0f27a Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Fri, 23 May 2025 14:22:55 -0500 Subject: material symbols plugin added. Cleanup more make better --- atlas-plugin.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 atlas-plugin.js (limited to 'atlas-plugin.js') diff --git a/atlas-plugin.js b/atlas-plugin.js new file mode 100644 index 0000000..69f1174 --- /dev/null +++ b/atlas-plugin.js @@ -0,0 +1,36 @@ +const fs = require("fs") +const path = require("path") +const { RawSource } = require("webpack-sources") +const { generateAtlasViews } = require("./utils.js") + + +class SVGSymbolAtlasViewPlugin { + constructor(options = {}) { + this.suffix = options.suffix || ".svg" + this.symbolId = options.symbolId || null + } + + apply(compiler) { + compiler.hooks.thisCompilation.tap("SVGSymbolAtlasViewPlugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "SVGSymbolAtlasViewPlugin", + stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE, + }, + (assets) => { + for (const assetName in assets) { + if (assetName.endsWith(this.suffix)) { + const originalSVG = assets[assetName].source().toString() + const atlasSVG = generateAtlasViews(originalSVG, this.symbolId) + + // Replace old SVG asset with new SVG + compilation.updateAsset(assetName, new RawSource(atlasSVG)) + } + } + } + ) + }) + } +} + +module.exports = SVGSymbolAtlasViewPlugin -- cgit v1.2.3