UNPKG

@devup-ui/webpack-plugin

Version:

Zero Config, Zero FOUC, Zero Runtime, CSS in JS Preprocessor

2 lines (1 loc) 3.92 kB
var{defineProperty:l,getOwnPropertyNames:v,getOwnPropertyDescriptor:F}=Object,k=Object.prototype.hasOwnProperty;var h=new WeakMap,w=(e)=>{var t=h.get(e),s;if(t)return t;if(t=l({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")v(e).map((n)=>!k.call(t,n)&&l(t,n,{get:()=>e[n],enumerable:!(s=F(e,n))||s.enumerable}));return h.set(e,t),t};var b=(e,t)=>{for(var s in t)l(e,s,{get:t[s],enumerable:!0,configurable:!0,set:(n)=>t[s]=()=>n})};var M={};b(M,{DevupUIWebpackPlugin:()=>u});module.exports=w(M);var o=require("node:fs"),a=require("node:fs/promises"),c=require("node:module"),p=require("node:path"),f=require("@devup-ui/plugin-utils"),i=require("@devup-ui/wasm");class u{options;sheetFile;classMapFile;fileMapFile;constructor({package:e="@devup-ui/react",devupFile:t="devup.json",distDir:s="df",cssDir:n=p.resolve(s,"devup-ui"),watch:r=!1,debug:d=!1,include:g=[],singleCss:m=!1,prefix:D}={}){this.options={package:e,cssDir:n,devupFile:t,distDir:s,watch:r,debug:d,include:g,singleCss:m,prefix:D},this.sheetFile=p.join(this.options.distDir,"sheet.json"),this.classMapFile=p.join(this.options.distDir,"classMap.json"),this.fileMapFile=p.join(this.options.distDir,"fileMap.json")}writeDataFiles(){try{let t=f.loadDevupConfigSync(this.options.devupFile).theme??{};i.registerTheme(t);let s=i.getThemeInterface(this.options.package,"CustomColors","DevupThemeTypography","DevupTheme");if(s)o.writeFileSync(p.join(this.options.distDir,"theme.d.ts"),s,{encoding:"utf-8"})}catch(e){console.error(e),i.registerTheme({})}if(!o.existsSync(this.options.cssDir))o.mkdirSync(this.options.cssDir,{recursive:!0});if(this.options.watch)o.writeFileSync(p.join(this.options.cssDir,"devup-ui.css"),i.getCss(null,!1))}apply(e){if(i.setDebug(this.options.debug),this.options.prefix)i.setPrefix(this.options.prefix);let t=o.existsSync(this.options.devupFile);if(!o.existsSync(this.options.distDir))o.mkdirSync(this.options.distDir,{recursive:!0});if(o.writeFileSync(p.join(this.options.distDir,".gitignore"),"*","utf-8"),this.options.watch)try{if(o.existsSync(this.sheetFile))i.importSheet(JSON.parse(o.readFileSync(this.sheetFile,"utf-8")));if(o.existsSync(this.classMapFile))i.importClassMap(JSON.parse(o.readFileSync(this.classMapFile,"utf-8")));if(o.existsSync(this.fileMapFile))i.importFileMap(JSON.parse(o.readFileSync(this.fileMapFile,"utf-8")))}catch(s){console.error(s),i.importSheet({}),i.importClassMap({}),i.importFileMap({})}if(this.writeDataFiles(),this.options.watch){let s=null;e.hooks.watchRun.tapPromise("DevupUIWebpackPlugin",async()=>{if(t){let r=(await a.stat(this.options.devupFile)).mtimeMs;if(s&&s!==r)this.writeDataFiles();s=r}})}if(t)e.hooks.afterCompile.tap("DevupUIWebpackPlugin",(s)=>{s.fileDependencies.add(p.resolve(this.options.devupFile))});if(e.options.plugins.push(new e.webpack.DefinePlugin({"process.env.DEVUP_UI_DEFAULT_THEME":JSON.stringify(i.getDefaultTheme())})),!this.options.watch)e.hooks.done.tapPromise("DevupUIWebpackPlugin",async(s)=>{if(!s.hasErrors())await a.writeFile(p.join(this.options.cssDir,"devup-ui.css"),i.getCss(null,!1),"utf-8")});e.options.module.rules.push({test:/\.(tsx|ts|js|mjs|jsx)$/,exclude:new RegExp(`(node_modules(?!.*(${["@devup-ui",...this.options.include].join("|").replaceAll("/","[\\/\\\\_]")})([\\/\\\\.]|$)))|(.mdx.[tj]sx?$)`),enforce:"pre",use:[{loader:c.createRequire("file:///home/runner/work/devup-ui/devup-ui/packages/webpack-plugin/src/plugin.ts").resolve("@devup-ui/webpack-plugin/loader"),options:{package:this.options.package,cssDir:this.options.cssDir,sheetFile:this.sheetFile,classMapFile:this.classMapFile,fileMapFile:this.fileMapFile,watch:this.options.watch,singleCss:this.options.singleCss}}]},{test:this.options.cssDir,enforce:"pre",use:[{loader:c.createRequire("file:///home/runner/work/devup-ui/devup-ui/packages/webpack-plugin/src/plugin.ts").resolve("@devup-ui/webpack-plugin/css-loader"),options:{watch:this.options.watch}}]})}}