UNPKG

vite-plugin-rttist

Version:

RTTIST plugin adding support for advanced reflection features to Vite

3 lines (2 loc) 2.38 kB
import{ModuleSystem as I,PackageInfo as P,transform as E}from"@rttist/ts-loader-wasm";import{FsCachedStorage as h,IncrementalGenerator as b,LogBuffer as j,Logger as w,ConfigProvider as D,printInitialMessage as F}from"@rttist/typegen";import*as d from"fs";import*as R from"path";var k=/\.[mc]?tsx?/i,M=/<script .*>([\s\S]*)<\/script>/gi;async function _(o){if(!o.projectRoot||o.projectRoot.length===0)throw new Error("projectRoot is required");let t=await D.getConfig({projectRoot:o.projectRoot,typecheck:!0,watch:!1,force:!1}),a=new w("vite-plugin-rttist",void 0,j.autoFlush);w.setLevel(t.logLevel);let c=o.tsRootDir??t.tsRootDir;if(!o.packageInfo||!o.packageInfo.rootDir||o.packageInfo.rootDir.length===0)throw new Error("packageInfo.rootDir is required");if(!o.packageInfo.name||o.packageInfo.name.length===0)throw new Error("packageInfo.name is required");F(a,t);let i=new h(t),l=new h(t),n=new b(t,a,l,i);await n.initialize();let f=t.cacheDir.replace(/\\/g,"/"),g=`${f}/metadata.typelib.ts`,v=R.relative(t.projectRoot,t.cacheDir);function y(e){return e.startsWith(f)}return await n.generate([],!1,!0),{name:"vite-plugin-rttist",enforce:"pre",resolveId(e){if(e==="rttist/typelib"||e==="virtual:typelib")return g},async handleHotUpdate(e){if(y(e.file)&&n.isGenerating())return a.debug(`HMR: preventing update because generating is currently in progress. File: `,e.file),[];if(n.isProjectFile(e.file)){let r=await e.read();l.updateMemoryCacheOnly(e.file,r);let m=e.file.replace(`${t.normalizedProjectRoot}/`,"");l.updateMemoryCacheOnly(m,r);let u=await n.generate([e.file],!1,!1),p=Object.values(u).map(s=>e.server.moduleGraph.getModuleById(s.metadataSourceFilePath.replace(/\\/g,"/"))).filter(s=>s!==void 0);return a.debug("ModuleNodes that should be updated:",[...e.modules,...p].map(s=>s?.id)),[...e.modules,...p]}},async load(e){if(e===g){let r=await i.read(g);if(r)return r}if(e.startsWith(f))return await i.read(e);if(n.isProjectFile(e)){if(e.endsWith(".vue")){let r=await d.promises.readFile(e,"utf8");return r=r.replace(M,(m,u)=>C(u,e,c,o,t)),r}if(k.test(e)){let r=await d.promises.readFile(e,"utf8");return r=C(r,e,c,o,t),r}}},config(e,r){return{server:{watch:{ignored:[new RegExp(`${v}/.*?.json`)]}}}}}}function C(o,t,a,c,i){return E(o,t,new P(c.packageInfo.name,a),{module:I.Preserve,runtimeGenericClasses:i.useRuntimeGenericClasses})}export{_ as rttistPlugin};