UNPKG

@devup-ui/webpack-plugin

Version:

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

2 lines (1 loc) 3.75 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("node:fs"),l=require("node:fs/promises"),c=require("node:module"),o=require("node:path"),i=require("@devup-ui/wasm");var p=typeof document<"u"?document.currentScript:null;class m{options;sheetFile;classMapFile;fileMapFile;constructor({package:s="@devup-ui/react",devupFile:n="devup.json",distDir:t="df",cssDir:a=o.resolve(t,"devup-ui"),watch:r=!1,debug:u=!1,include:h=[],singleCss:d=!1,prefix:f}={}){this.options={package:s,cssDir:a,devupFile:n,distDir:t,watch:r,debug:u,include:h,singleCss:d,prefix:f},this.sheetFile=o.join(this.options.distDir,"sheet.json"),this.classMapFile=o.join(this.options.distDir,"classMap.json"),this.fileMapFile=o.join(this.options.distDir,"fileMap.json")}writeDataFiles(){try{const s=e.existsSync(this.options.devupFile)?e.readFileSync(this.options.devupFile,"utf-8"):void 0;if(s){i.registerTheme(JSON.parse(s)?.theme??{});const n=i.getThemeInterface(this.options.package,"CustomColors","DevupThemeTypography","DevupTheme");n&&e.writeFileSync(o.join(this.options.distDir,"theme.d.ts"),n,{encoding:"utf-8"})}else i.registerTheme({})}catch(s){console.error(s),i.registerTheme({})}e.existsSync(this.options.cssDir)||e.mkdirSync(this.options.cssDir,{recursive:!0}),this.options.watch&&e.writeFileSync(o.join(this.options.cssDir,"devup-ui.css"),i.getCss(null,!1))}apply(s){i.setDebug(this.options.debug),this.options.prefix&&i.setPrefix(this.options.prefix);const n=e.existsSync(this.options.devupFile);if(e.existsSync(this.options.distDir)||e.mkdirSync(this.options.distDir,{recursive:!0}),e.writeFileSync(o.join(this.options.distDir,".gitignore"),"*","utf-8"),this.options.watch)try{e.existsSync(this.sheetFile)&&i.importSheet(JSON.parse(e.readFileSync(this.sheetFile,"utf-8"))),e.existsSync(this.classMapFile)&&i.importClassMap(JSON.parse(e.readFileSync(this.classMapFile,"utf-8"))),e.existsSync(this.fileMapFile)&&i.importFileMap(JSON.parse(e.readFileSync(this.fileMapFile,"utf-8")))}catch(t){console.error(t),i.importSheet({}),i.importClassMap({}),i.importFileMap({})}if(this.writeDataFiles(),this.options.watch){let t=null;s.hooks.watchRun.tapPromise("DevupUIWebpackPlugin",async()=>{if(n){const r=(await l.stat(this.options.devupFile)).mtimeMs;t&&t!==r&&this.writeDataFiles(),t=r}})}n&&s.hooks.afterCompile.tap("DevupUIWebpackPlugin",t=>{t.fileDependencies.add(o.resolve(this.options.devupFile))}),s.options.plugins.push(new s.webpack.DefinePlugin({"process.env.DEVUP_UI_DEFAULT_THEME":JSON.stringify(i.getDefaultTheme())})),this.options.watch||s.hooks.done.tapPromise("DevupUIWebpackPlugin",async t=>{t.hasErrors()||await l.writeFile(o.join(this.options.cssDir,"devup-ui.css"),i.getCss(null,!1),"utf-8")}),s.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(typeof document>"u"?require("url").pathToFileURL(__filename).href:p&&p.tagName.toUpperCase()==="SCRIPT"&&p.src||new URL("plugin.cjs",document.baseURI).href).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(typeof document>"u"?require("url").pathToFileURL(__filename).href:p&&p.tagName.toUpperCase()==="SCRIPT"&&p.src||new URL("plugin.cjs",document.baseURI).href).resolve("@devup-ui/webpack-plugin/css-loader"),options:{watch:this.options.watch}}]})}}exports.DevupUIWebpackPlugin=m;