@osaedasia/oresume
Version:
A user-friendly library for generating complete Single Page Applications (SPAs)
2 lines (1 loc) • 2.23 kB
JavaScript
import e from"path";import s from"fs";import{DELIMITER_START as i,DELIMITER_END as t,Scribe as n}from"@osaedasia/scribe";function r(e){return{name:"[785dd10e-5f13-44bf-abd4-8109eaaae8dd] oresume-css-plugin",async configResolved(s){const i=new c(s,e);await i.generate()},transformIndexHtml:e=>e.includes(`/${c.cssFileName}`)?e:e.replace(/<\/head>/i,` <link rel="stylesheet" href="/${c.cssFileName}">\n</head>`)}}class c{static cssFileName="generated-oresume.css";_scribePrefix=`${i}[oresume-css]${t}`;_viteConfig;_cssContent;_cssFilePath;constructor(s,i){n.log(`${this._scribePrefix} Initializing CSS generator...`,["Cyan"]),this._viteConfig=s,this._cssContent=this._generateCssContent(i);const t=this._viteConfig.root||process.cwd(),r=e.resolve(process.cwd(),t);this._cssFilePath=this._getCssFilePath(r)}async generate(){n.log(`${this._scribePrefix} Starting CSS generation...`,["Cyan"]),await this._writeCssFile(this._cssFilePath)}_generateCssContent(e){n.log(`${this._scribePrefix} Processing ${e.length} theme(s)...`,["Cyan"]);let s="\n/*\n * This code was generated by the 'OresumeCSSPlugin'.\n *\n * Changes to this file may cause incorrect behavior and will be lost if\n * the code is regenerated.\n */\n\n";for(const i of e)s+=`${i.cssContent.trim()}\n`;return n.log(`${this._scribePrefix} content generated successfully. Length: ${s.length} characters`,["Green"]),s.trim()}_getCssFilePath(s){const i=this._viteConfig.publicDir||"public",t=e.isAbsolute(i)?i:e.resolve(s,i);return e.resolve(t,c.cssFileName)}async _writeCssFile(i){const t=e.dirname(i);n.log(`${this._scribePrefix} Checking CSS file location...`,["Cyan"]),s.existsSync(t)||(n.log(`${this._scribePrefix} Creating directory: ${t}`,["LightBlue"]),s.mkdirSync(t,{recursive:!0}));let r=!0;if(s.existsSync(i)){n.log(`${this._scribePrefix} Checking for CSS content changes...`,["Cyan"]);r=await s.promises.readFile(i,"utf-8")!==this._cssContent}r?(n.log(`${this._scribePrefix} Writing CSS file to: ${i}`,["LightBlue"]),await s.promises.writeFile(i,this._cssContent,"utf-8"),n.log(`${this._scribePrefix} CSS file generated successfully`,["Green"])):n.log(`${this._scribePrefix} No changes detected, skipping CSS generation`,["Yellow"])}}export{r as OresumeCSSPlugin};