UNPKG

@devup-ui/next-plugin

Version:

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

4 lines (3 loc) 9.5 kB
var{defineProperty:Z,getOwnPropertyNames:Te,getOwnPropertyDescriptor:De}=Object,Ne=Object.prototype.hasOwnProperty;function Oe(e){return this[e]}var Ee=(e)=>{var t=(ue??=new WeakMap).get(e),n;if(t)return t;if(t=Z({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var r of Te(e))if(!Ne.call(t,r))Z(t,r,{get:Oe.bind(e,r),enumerable:!(n=De(e,r))||n.enumerable})}return ue.set(e,t),t},ue;var je=(e)=>e;function Ie(e,t){this[e]=je.bind(null,t)}var Ae=(e,t)=>{for(var n in t)Z(e,n,{get:t[n],enumerable:!0,configurable:!0,set:Ie.bind(t,n)})};var Ve={};Ae(Ve,{DevupUI:()=>Me});module.exports=Ee(Ve);var u=require("node:fs"),c=require("node:path"),d=require("@devup-ui/plugin-utils"),s=require("@devup-ui/wasm"),Pe=require("@devup-ui/webpack-plugin");var B=require("node:fs"),de=require("node:http"),S=require("node:path"),fe=require("@devup-ui/plugin-utils"),h=require("@devup-ui/wasm"),ee=new Map,q=new Map;function I(e,t){q.set(e,t);let r=(ee.get(e)??Promise.resolve()).catch(()=>{}).then(()=>new Promise((i,o)=>{let l=q.get(e);if(l===void 0){i();return}q.delete(e),B.writeFile(e,l,"utf-8",(f)=>f?o(f):i())}));return ee.set(e,r),r}function Be(){return Promise.allSettled([...ee.values()]).then(()=>{return})}function $e(e){return new Promise((t,n)=>{let r=[];e.on("data",(i)=>r.push(i)),e.on("end",()=>t(Buffer.concat(r).toString("utf-8"))),e.on("error",n)})}var A=null,G=0,te=0,re=0,W=0,me=2500,ge=1e4,V=60000;function he(e){return te>0&&G===0&&W===0&&e-re>=ge}function Re(){if(_.size===0)return!1;for(let e of _)if(!T.has(e))return!1;return!0}function Ue(){let e=Date.now();return new Promise((t)=>{let n=()=>{let r=Date.now();if(r-e>V){t();return}if(Re()){t();return}if(_.size>0&&he(r)){t();return}if(_.size===0&&te>0&&G===0&&W===0&&r-re>=me){t();return}setTimeout(n,25)};n()})}var T=new Set,J=new Map,we=new Map,pe={},_=new Set;function We(e){let t=new Map;for(let[n,r]of Object.entries(e)){if(r==="@global")continue;let i=t.get(r);if(!i)i=new Set([r]),t.set(r,i);i.add(n)}return t}function _e(e){let t=we.get(e)??new Set([e]),n=Date.now();return new Promise((r)=>{let i=()=>{let o=!0;for(let f of t)if(!T.has(f)){o=!1;break}if(o){r();return}let l=Date.now();if(he(l)){let f=[...t].filter((w)=>!T.has(w));console.info(`[devup-ui] coordinator: serving bucket "${e}" through the legacy quiet fallback; treating unreported member(s) as erased imports: ${f.join(", ")}`),r();return}if(l-n>V){let f=[...t].filter((w)=>!T.has(w));console.warn(`[devup-ui] coordinator: bucket "${e}" not complete after ${V}ms; serving partial CSS (missing: ${f.join(", ")})`),r();return}setTimeout(i,25)};i()})}function ve(e){let{package:t,cssDir:n,singleCss:r,sheetFile:i,classMapFile:o,fileMapFile:l,importAliases:f,coordinatorPortFile:w}=e;me=e.idleThresholdMs??2500,ge=e.quietMs??1e4,V=e.maxWaitMs??60000,pe=e.canonicalMap,we=We(e.canonicalMap),_=new Set(e.expectedBaseFiles??[]),T.clear();for(let a of e.prewarmedFiles??[])T.add(a);return J.clear(),A=de.createServer(async(a,p)=>{let v=new URL(a.url??"/",`http://${a.headers.host}`);if(a.method==="GET"&&v.pathname==="/health"){p.writeHead(200,{"Content-Type":"text/plain"}),p.end("ok");return}if(a.method==="GET"&&v.pathname==="/css"){let F=v.searchParams.get("fileNum"),b=v.searchParams.get("importMainCss")==="true",x=v.searchParams.get("waitForIdle")==="true",m=F!=null?parseInt(F):void 0;if(x)if(m!=null&&J.has(m))await _e(J.get(m));else await Ue();p.writeHead(200,{"Content-Type":"text/css"}),p.end(h.getCss(m??null,b));return}if(a.method==="POST"&&v.pathname==="/extract"){W++;let F=!1,b;try{let x=JSON.parse(await $e(a));G++,W--,F=!0;let{filename:m,code:D,resourcePath:N}=x;b=m;let O=S.relative(S.dirname(N),n).replaceAll("\\","/");if(!O.startsWith("./"))O=`./${O}`;let g=h.codeExtract(m,D,t,O,r,!1,!0,f),R=g.code;if(!r&&R)R=R.replace(/devup-ui-(\d+)\.css/g,"devup-ui.css?fileNum=$1");let M=[];if(g.updatedBaseStyle)M.push(I(S.join(n,"devup-ui.css"),`${h.getCss(null,!1)} /* ${Date.now()} */`));if(g.cssFile){let E=fe.getFileNumByFilename(g.cssFile);if(E!=null)J.set(E,pe[m]??m);if(M.push(I(S.join(n,S.basename(g.cssFile)),h.getCss(E,!0)),I(i,h.exportSheet()),I(o,h.exportClassMap()),I(l,h.exportFileMap())),!r&&!g.updatedBaseStyle&&g.css!=null)M.push(I(S.join(n,"devup-ui.css"),`${h.getCss(null,!1)} /* ${Date.now()} */`))}await Promise.all(M),p.writeHead(200,{"Content-Type":"application/json"}),p.end(JSON.stringify({code:R,map:g.map,cssFile:g.cssFile,updatedBaseStyle:g.updatedBaseStyle}))}catch(x){p.writeHead(500,{"Content-Type":"application/json"}),p.end(JSON.stringify({error:x instanceof Error?x.message:String(x)}))}finally{if(F)G--;else W--;if(b!=null)T.add(b);te++,re=Date.now()}return}p.writeHead(404,{"Content-Type":"text/plain"}),p.end("Not Found")}),A.listen(0,"127.0.0.1",()=>{let a=A.address();if(a&&typeof a!=="string")B.writeFileSync(w,String(a.port),"utf-8")}),{close:()=>{if(Be(),A){A.close(),A=null;try{B.unlinkSync(w)}catch{}}}}}var xe=require("node:fs"),Fe=require("node:module"),P=require("node:path"),He=/\.(?:tsx?|jsx?|mjs)$/;function ne(e){if(e.startsWith("#")||e.startsWith("node:"))return;let[t,n]=e.split("/");if(!t)return;if(!t.startsWith("@"))return t;return n?`${t}/${n}`:void 0}function Je(e,t,n){let r=ne(t);return e.startsWith("@devup-ui/")||e.startsWith("@devup-editor/")||e===r||n.some((i)=>e===ne(i))}function Ge(e){if(P.extname(e)!==".cjs")return e;let t=`${e.slice(0,-4)}.mjs`;return xe.existsSync(t)?t:e}function se(e,t){return P.relative(e,P.resolve(e,t)).replaceAll("\\","/")}function Se({cwd:e,graph:t,expectedBaseFiles:n,libPackage:r,include:i}){let o=P.resolve(e),l=new Set(n.map((a)=>se(o,a)));for(let a of t.files)l.add(se(o,a));let f=new Set;for(let a of t.externalImports?.values()??[])for(let p of a)f.add(p);let w=Fe.createRequire(P.join(o,"package.json"));for(let a of[...f].sort()){let p=ne(a);if(!p||!Je(p,r,i))continue;try{let v=Ge(w.resolve(a));if(!He.test(v))continue;l.add(se(o,v))}catch{}}return[...l].sort()}function Me(e,t={}){if(process.env.TURBOPACK==="1"||process.env.TURBOPACK==="auto"){e??={},e.turbopack??={},e.turbopack.rules??={};let{package:i="@devup-ui/react",distDir:o="df",cssDir:l=c.resolve(o,"devup-ui"),singleCss:f=!1,devupFile:w="devup.json",include:a=[],prefix:p,shorthands:v,atomHoist:F,importAliases:b}=t;if(s.registerShorthands(v??{}),p)s.setPrefix(p);let x=d.mergeImportAliases(b),m=c.join(o,"sheet.json"),D=c.join(o,"classMap.json"),N=c.join(o,"fileMap.json"),O=c.join(o,"canonicalMap.json"),g=c.join(o,".gitignore");if(!u.existsSync(o))u.mkdirSync(o,{recursive:!0});if(!u.existsSync(l))u.mkdirSync(l,{recursive:!0});if(!u.existsSync(g))u.writeFileSync(g,"*");try{s.importSheet(JSON.parse(u.readFileSync(m,"utf-8"))),s.importClassMap(JSON.parse(u.readFileSync(D,"utf-8"))),s.importFileMap(JSON.parse(u.readFileSync(N,"utf-8")))}catch{}let M=d.loadDevupConfigSync(w).theme??{};s.registerTheme(M);let E=s.getThemeInterface(...d.createThemeInterfaceArgs(i));if(E)u.writeFileSync(c.join(o,"theme.d.ts"),E);let be=d.createNodeModulesExcludeRegex(a,".mdx.[tj]sx?$"),H=c.join(o,"coordinator.port"),ie=F!==void 0&&Number.isFinite(F)&&F>0,L=process.env.NODE_ENV==="development",U={},z=[],K;try{let y=c.resolve(process.cwd(),"src"),j=c.resolve(process.cwd(),"tsconfig.json"),C=process.cwd(),k=d.buildStaticImportGraph(y,j);K=k;let Q=ie?void 0:process.env.DEVUP_HOIST_V?Number(process.env.DEVUP_HOIST_V):void 0;if(U=d.buildCanonicalMap({srcDir:y,tsconfigPath:j,cwd:C,hoistV:Q,graph:k}),s.importCanonicalMap(U),u.writeFileSync(O,JSON.stringify(U)),z=d.computeCompiledFiles({srcDir:y,tsconfigPath:j,cwd:C,graph:k}),ie){let ke=d.computeFileRoutes({srcDir:y,tsconfigPath:j,cwd:C,graph:k}),Y=d.planAtomHoist(U,ke,F);if(Y)s.importFileRoutes(Y.reachByBucket),s.setAtomHoist(Y.threshold);else console.info("[devup-ui] atomHoist is set but fewer than 2 routes were detected; atom hoisting is a no-op.")}}catch{}let oe=[];if(!L&&K){let y=process.cwd(),j=Se({cwd:y,graph:K,expectedBaseFiles:z,libPackage:i,include:a});for(let C of j){let k=c.resolve(y,C),Q=`./${c.relative(c.dirname(k),l).replaceAll("\\","/")}`;s.codeExtract(C,u.readFileSync(k,"utf-8"),i,Q,f,!1,!0,x),oe.push(C)}}u.writeFileSync(c.join(l,"devup-ui.css"),s.getCss(null,!1));try{u.unlinkSync(H)}catch{}let ye=ve({package:i,cssDir:l,singleCss:f,sheetFile:m,classMapFile:D,fileMapFile:N,importAliases:x,coordinatorPortFile:H,canonicalMap:U,expectedBaseFiles:z,prewarmedFiles:oe});process.on("exit",()=>{ye.close()});let ae=JSON.parse(s.exportSheet()),ce=JSON.parse(s.exportClassMap()),le=JSON.parse(s.exportFileMap()),X=s.getDefaultTheme();if(X)process.env.DEVUP_UI_DEFAULT_THEME=X,e.env??={},Object.assign(e.env,{DEVUP_UI_DEFAULT_THEME:X});let Ce={[`./${c.relative(process.cwd(),l).replaceAll("\\","/")}/*.css`]:[{loader:"@devup-ui/next-plugin/css-loader",options:{watch:L,coordinatorPortFile:H,sheetFile:m,classMapFile:D,fileMapFile:N,themeFile:w,defaultSheet:ae,defaultClassMap:ce,defaultFileMap:le,theme:M}}],"*.{tsx,ts,jsx,js,mjs}":{loaders:[{loader:"@devup-ui/next-plugin/loader",options:{package:i,cssDir:l,coordinatorPortFile:H,sheetFile:m,classMapFile:D,fileMapFile:N,themeFile:w,defaultSheet:ae,defaultClassMap:ce,defaultFileMap:le,watch:L,singleCss:f,theme:M,importAliases:x}}],condition:{not:{path:be}}}};return Object.assign(e.turbopack.rules,Ce),e}let{webpack:r}=e;return e.webpack=(i,o)=>{if(t.cssDir??=c.resolve(o.dev?t.distDir??"df":".next/cache",`devup-ui_${o.buildId}`),i.plugins.push(new Pe.DevupUIWebpackPlugin({...t,watch:o.dev})),typeof r==="function")return r(i,o);return i},e}