UNPKG

@devup-ui/webpack-plugin

Version:

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

2 lines (1 loc) 3.98 kB
var{defineProperty:l,getOwnPropertyNames:D,getOwnPropertyDescriptor:v}=Object,F=Object.prototype.hasOwnProperty;var c=new WeakMap,k=(i)=>{var t=c.get(i),o;if(t)return t;if(t=l({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function")D(i).map((n)=>!F.call(t,n)&&l(t,n,{get:()=>i[n],enumerable:!(o=v(i,n))||o.enumerable}));return c.set(i,t),t};var w=(i,t)=>{for(var o in t)l(i,o,{get:t[o],enumerable:!0,configurable:!0,set:(n)=>t[o]=()=>n})};var b={};w(b,{DevupUIWebpackPlugin:()=>h});module.exports=k(b);var s=require("node:fs"),a=require("node:fs/promises"),u=require("node:module"),p=require("node:path"),e=require("@devup-ui/wasm");class h{options;sheetFile;classMapFile;fileMapFile;constructor({package:i="@devup-ui/react",devupFile:t="devup.json",distDir:o="df",cssDir:n=p.resolve(o,"devup-ui"),watch:r=!1,debug:f=!1,include:d=[],singleCss:g=!1,prefix:m}={}){this.options={package:i,cssDir:n,devupFile:t,distDir:o,watch:r,debug:f,include:d,singleCss:g,prefix:m},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 i=s.existsSync(this.options.devupFile)?s.readFileSync(this.options.devupFile,"utf-8"):void 0;if(i){e.registerTheme(JSON.parse(i)?.theme??{});let t=e.getThemeInterface(this.options.package,"CustomColors","DevupThemeTypography","DevupTheme");if(t)s.writeFileSync(p.join(this.options.distDir,"theme.d.ts"),t,{encoding:"utf-8"})}else e.registerTheme({})}catch(i){console.error(i),e.registerTheme({})}if(!s.existsSync(this.options.cssDir))s.mkdirSync(this.options.cssDir,{recursive:!0});if(this.options.watch)s.writeFileSync(p.join(this.options.cssDir,"devup-ui.css"),e.getCss(null,!1))}apply(i){if(e.setDebug(this.options.debug),this.options.prefix)e.setPrefix(this.options.prefix);let t=s.existsSync(this.options.devupFile);if(!s.existsSync(this.options.distDir))s.mkdirSync(this.options.distDir,{recursive:!0});if(s.writeFileSync(p.join(this.options.distDir,".gitignore"),"*","utf-8"),this.options.watch)try{if(s.existsSync(this.sheetFile))e.importSheet(JSON.parse(s.readFileSync(this.sheetFile,"utf-8")));if(s.existsSync(this.classMapFile))e.importClassMap(JSON.parse(s.readFileSync(this.classMapFile,"utf-8")));if(s.existsSync(this.fileMapFile))e.importFileMap(JSON.parse(s.readFileSync(this.fileMapFile,"utf-8")))}catch(o){console.error(o),e.importSheet({}),e.importClassMap({}),e.importFileMap({})}if(this.writeDataFiles(),this.options.watch){let o=null;i.hooks.watchRun.tapPromise("DevupUIWebpackPlugin",async()=>{if(t){let r=(await a.stat(this.options.devupFile)).mtimeMs;if(o&&o!==r)this.writeDataFiles();o=r}})}if(t)i.hooks.afterCompile.tap("DevupUIWebpackPlugin",(o)=>{o.fileDependencies.add(p.resolve(this.options.devupFile))});if(i.options.plugins.push(new i.webpack.DefinePlugin({"process.env.DEVUP_UI_DEFAULT_THEME":JSON.stringify(e.getDefaultTheme())})),!this.options.watch)i.hooks.done.tapPromise("DevupUIWebpackPlugin",async(o)=>{if(!o.hasErrors())await a.writeFile(p.join(this.options.cssDir,"devup-ui.css"),e.getCss(null,!1),"utf-8")});i.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:u.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:u.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}}]})}}