UNPKG

@stylezjs/postcss-plugin

Version:

@stylezjs/postcss-plugin is a PostCSS plugin for integrating `@stylezjs/stylez` to generate static CSS styles. Stylez → 'Z' of Zero Runtime.

8 lines (7 loc) 5.91 kB
{ "version": 3, "sources": ["../src/index.ts", "../src/scripts/extractor.ts"], "sourcesContent": ["import { writeFileSync } from 'node:fs';\n\nimport autoprefixer from 'autoprefixer';\nimport postcss from 'postcss';\nimport { parse } from 'postcss-js';\nimport nested from 'postcss-nested';\n\nimport { extractStylesFromFiles } from './scripts/extractor.js';\n\nconst state = {\n duplicatesFound: false,\n processed: false,\n};\n\ninterface PluginOptions {\n patterns?: string[];\n}\n\nconst plugin: postcss.PluginCreator<PluginOptions> = (opts) => ({\n async Once(root: postcss.Root) {\n if (state.duplicatesFound) return;\n\n const atRule = root.first as postcss.AtRule | undefined;\n const filePath = atRule?.source?.input?.file;\n\n if (atRule?.name === 'stylez' && filePath?.includes(process.cwd())) {\n if (state.processed) {\n state.duplicatesFound = true;\n process.stdout.write(\n '\u26D4\uFE0F Multiple @stylez files detected. Remove duplicates before processing.\\n\\n',\n );\n return;\n }\n\n try {\n state.processed = true;\n\n const styles = await extractStylesFromFiles(opts?.patterns ?? []);\n\n if (state.duplicatesFound) return;\n\n root.removeAll();\n\n const result = await postcss([nested, autoprefixer]).process(styles, {\n from: undefined,\n parser: parse,\n });\n\n if (result.css.length === 0) return;\n\n const finalCSS = `@stylez;\\n\\n${result.css}`;\n\n writeFileSync(filePath, finalCSS);\n\n process.stdout.write(`\uD83C\uDFA8 Styles saved to: ${filePath}\\n\\n`);\n } catch {\n process.stdout.write('Issue saving styles');\n }\n }\n },\n\n postcssPlugin: '@stylezjs/postcss-plugin',\n});\n\nplugin.postcss = true;\n\nexport default plugin;\n\n// Test\n// void (async () => {\n// const styles = await extractStylesFromFiles(['src/test/**/*.mts']);\n\n// if (state.duplicatesFound) return;\n\n// const result = await postcss([nested, autoprefixer]).process(styles, {\n// from: undefined,\n// parser: parse,\n// });\n\n// if (result.css.length === 0) return;\n\n// const finalCSS = `@stylez;\\n\\n${result.css}`;\n\n// // writeFileSync(filePath, finalCSS);\n\n// process.stdout.write(finalCSS);\n// })();\n", "/* eslint-disable @typescript-eslint/no-require-imports */\n/* eslint-disable no-await-in-loop */\n\nimport pkg from 'fast-glob';\nconst { glob } = pkg;\n\nimport { build } from 'esbuild';\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport path from 'path';\n\nconst tmpDir = './.tmp';\nif (!existsSync(tmpDir)) {\n mkdirSync(tmpDir, { recursive: true });\n}\n\nexport const extractStylesFromFiles = async (patterns: string[]) => {\n const entryFiles = await glob(patterns);\n const format = process.env.BUILD_FORMAT as 'cjs' | 'esm';\n\n for (const entry of entryFiles) {\n const tmpFile = path.join(tmpDir, `tmp-${path.basename(entry)}.js`);\n\n await build({\n bundle: true,\n entryPoints: [entry],\n external: ['@stylezjs/stylez'],\n format,\n minify: true,\n outfile: tmpFile,\n platform: 'node',\n });\n\n if (format === 'esm') {\n await import(path.resolve(tmpFile));\n } else {\n require(path.resolve(tmpFile));\n }\n\n rmSync(tmpDir, { force: true, recursive: true });\n }\n\n let finalCss;\n if (format === 'esm') {\n const { getAllCss } = await import('@stylezjs/stylez');\n finalCss = getAllCss();\n } else {\n const { getAllCss } = require('@stylezjs/stylez');\n finalCss = getAllCss();\n }\n\n return finalCss;\n};\n"], "mappings": "yPAAA,OAAS,iBAAAA,MAAqB,UAE9B,OAAOC,MAAkB,eACzB,OAAOC,MAAa,UACpB,OAAS,SAAAC,MAAa,aACtB,OAAOC,MAAY,iBCFnB,OAAOC,MAAS,YAGhB,OAAS,SAAAC,MAAa,UACtB,OAAS,cAAAC,EAAY,aAAAC,EAAW,UAAAC,MAAc,KAC9C,OAAOC,MAAU,OAJjB,GAAM,CAAE,KAAAC,CAAK,EAAIC,EAMXC,EAAS,SACVC,EAAWD,CAAM,GACpBE,EAAUF,EAAQ,CAAE,UAAW,EAAK,CAAC,EAGhC,IAAMG,EAAyB,MAAOC,GAAuB,CAClE,IAAMC,EAAa,MAAMP,EAAKM,CAAQ,EAChCE,EAAS,MAEf,QAAWC,KAASF,EAAY,CAC9B,IAAMG,EAAUC,EAAK,KAAKT,EAAQ,OAAOS,EAAK,SAASF,CAAK,CAAC,KAAK,EAElE,MAAMG,EAAM,CACV,OAAQ,GACR,YAAa,CAACH,CAAK,EACnB,SAAU,CAAC,kBAAkB,EAC7B,OAAAD,EACA,OAAQ,GACR,QAASE,EACT,SAAU,MACZ,CAAC,EAEGF,IAAW,MACb,MAAM,OAAOG,EAAK,QAAQD,CAAO,GAEjCG,EAAQF,EAAK,QAAQD,CAAO,CAAC,EAG/BI,EAAOZ,EAAQ,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CACjD,CAEA,IAAIa,EACJ,GAAIP,IAAW,MAAO,CACpB,GAAM,CAAE,UAAAQ,CAAU,EAAI,KAAM,QAAO,kBAAkB,EACrDD,EAAWC,EAAU,CACvB,KAAO,CACL,GAAM,CAAE,UAAAA,CAAU,EAAI,EAAQ,kBAAkB,EAChDD,EAAWC,EAAU,CACvB,CAEA,OAAOD,CACT,ED1CA,IAAME,EAAQ,CACZ,gBAAiB,GACjB,UAAW,EACb,EAMMC,EAAgDC,IAAU,CAC9D,MAAM,KAAKC,EAAoB,CAC7B,GAAIH,EAAM,gBAAiB,OAE3B,IAAMI,EAASD,EAAK,MACdE,EAAWD,GAAQ,QAAQ,OAAO,KAExC,GAAIA,GAAQ,OAAS,UAAYC,GAAU,SAAS,QAAQ,IAAI,CAAC,EAAG,CAClE,GAAIL,EAAM,UAAW,CACnBA,EAAM,gBAAkB,GACxB,QAAQ,OAAO,MACb;AAAA;AAAA,CACF,EACA,MACF,CAEA,GAAI,CACFA,EAAM,UAAY,GAElB,IAAMM,EAAS,MAAMC,EAAuBL,GAAM,UAAY,CAAC,CAAC,EAEhE,GAAIF,EAAM,gBAAiB,OAE3BG,EAAK,UAAU,EAEf,IAAMK,EAAS,MAAMC,EAAQ,CAACC,EAAQC,CAAY,CAAC,EAAE,QAAQL,EAAQ,CACnE,KAAM,OACN,OAAQM,CACV,CAAC,EAED,GAAIJ,EAAO,IAAI,SAAW,EAAG,OAE7B,IAAMK,EAAW;AAAA;AAAA,EAAeL,EAAO,GAAG,GAE1CM,EAAcT,EAAUQ,CAAQ,EAEhC,QAAQ,OAAO,MAAM,8BAAuBR,CAAQ;AAAA;AAAA,CAAM,CAC5D,MAAQ,CACN,QAAQ,OAAO,MAAM,qBAAqB,CAC5C,CACF,CACF,EAEA,cAAe,0BACjB,GAEAJ,EAAO,QAAU,GAEjB,IAAOc,EAAQd", "names": ["writeFileSync", "autoprefixer", "postcss", "parse", "nested", "pkg", "build", "existsSync", "mkdirSync", "rmSync", "path", "glob", "pkg", "tmpDir", "existsSync", "mkdirSync", "extractStylesFromFiles", "patterns", "entryFiles", "format", "entry", "tmpFile", "path", "build", "__require", "rmSync", "finalCss", "getAllCss", "state", "plugin", "opts", "root", "atRule", "filePath", "styles", "extractStylesFromFiles", "result", "postcss", "nested", "autoprefixer", "parse", "finalCSS", "writeFileSync", "index_default"] }