@teacss/vite 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/impl.d.ts +6 -0
- package/dist/impl.js +2 -0
- package/dist/index.d.ts +5 -32
- package/dist/index.js +1 -2
- package/dist/types-BplrH0_C.d.ts +32 -0
- package/package.json +6 -5
package/dist/impl.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { n as TeacssVitePluginConfig } from "./types-BplrH0_C.js";
|
|
2
|
+
import { UserConfigDefaults } from "@teacss/core";
|
|
3
|
+
import { Plugin } from "vite";
|
|
4
|
+
//#region src/impl.d.ts
|
|
5
|
+
export declare function createTeacssPlugins<Theme extends object>(configOrPath?: TeacssVitePluginConfig<Theme> | string, defaults?: UserConfigDefaults): Plugin[];
|
|
6
|
+
//#endregion
|
package/dist/impl.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createHash as e}from"node:crypto";import{mkdtempSync as t,realpathSync as n,rmSync as r,watch as i,writeFileSync as a}from"node:fs";import{tmpdir as o}from"node:os";import{basename as s,join as c,posix as l,resolve as u}from"node:path";import d from"node:process";import f from"@jridgewell/remapping";import{entryDiscoveryFiles as p}from"@teacss/config";import{SourceWatchRegistry as m,createSourceDeclarationCheck as h,planSourceWatches as g,probeSourceDeclarations as _,sourceDeclarationMemberPaths as v,sourceDeclarationStateOf as ee,sourceDeclarationWatchTargets as y}from"@teacss/config/internal/source-scan";import{CSS_PLACEHOLDER as b,isCssId as x}from"@teacss/core";import{prepareEasingCss as te,prepareEasingStylesheet as ne}from"@teacss/directives/internal/easing";import{applyTransformerPipeline as re,createContext as ie,getModuleOutput as ae}from"@teacss/runtime";import{bundledAssetName as S,collectBundledAssets as oe,rewriteBundledAssets as se}from"@teacss/runtime/internal/bundled-assets";import ce from"magic-string";import{normalizePath as C,preprocessCSS as le,transformWithEsbuild as ue}from"vite";function w(e){return e.includes(`@apply`)||e.includes(`--at-apply`)||e.includes(`@screen`)||e.includes(`theme(`)||e.includes(`icon(`)}const T=async()=>{let{default:e}=await import(`@teacss/directives`);return e()};function de(e=T){let t;return{name:`@teacss/directives`,idFilter:x,async transform(n,r,i){if(w(n.original))return await(await(t??=e())).transform?.(n,r,i)}}}function fe(e,t,n){let r,a=!1,o=0,s,c=Promise.resolve(),l=new m((e,t,n)=>i(e,{recursive:n},t),()=>f(),n),u=h(e,async e=>{await c,!a&&e.signature!==r?.signature&&await f()},n);function d(){l.reconcile(g(y(e())))}function f(){if(!a)return c=c.then(async()=>{if(a)return;d();let n=o,i=s,c=await _(e()),l=await i;if(a||n!==o||(l&&(r=l),s=void 0,c.signature===r?.signature))return;let u=r;r=c;try{await t()}catch(e){throw r=u,e}!a&&n===o&&(r=c)}).catch(n),c}function p(){a=!0,u.retire(),l.retire()}return{resolved(){a||(d(),o++,s=_(e(),!0,r),s.catch(n),f())},retire:p,async close(){p(),await u.close(),await c}}}const pe=new Set([`virtual:teacss.css`,`teacss.css`]),E=`/*! ${b} */`,me=`teacss:css-ready`;function D(e,t,n){let r=e.lastIndexOf(t);return r<0||r+t.length!==e.length||r>0&&e[r-1]!==`/`?e:`${e.slice(0,r)}${n}`}function he(e,t,n){let r;try{r=JSON.parse(e)}catch{return e}let i=!1,a=e=>{if(typeof e==`string`){let r=D(e,t,n);return i||=r!==e,r}if(Array.isArray(e))return e.map(a);if(e&&typeof e==`object`)for(let[t,n]of Object.entries(e))e[t]=a(n);return e};return a(r),i?JSON.stringify(r,void 0,2):e}function ge(e,t){let n=0,r=``;for(let i=t;i<e.length;i++){let t=e[i];if(r){t===`\\`?i++:t===r&&(r=``);continue}if(t===`"`||t===`'`||t==="`")r=t;else if(t===`[`)n++;else if(t===`]`&&--n===0)return i}return-1}function O(e,t,n=0){for(let r=n;r<e.length;r++){let n=e[r];if(n===`'`||n===`"`||n==="`"){let t=n;for(r++;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t)break;continue}if(n===`/`&&e[r+1]===`/`){let t=e.indexOf(`
|
|
2
|
+
`,r+2);if(t<0)return-1;r=t;continue}if(n===`/`&&e[r+1]===`*`){let t=e.indexOf(`*/`,r+2);if(t<0)return-1;r=t+1;continue}if(e.startsWith(t,r))return r}return-1}function _e(e,t,n){let r=O(e,`const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=`);if(r<0)return e;let i=r+56;if(e[i]!==`[`)return e;let a=ge(e,i);if(a<0||!e.startsWith(`)))=>i.map(i=>d[i]);`,a+1)||O(e,`__vite__mapDeps([`,a+20+1)<0)return e;let o=JSON.stringify(t),s=e.slice(i,a+1),c=s.replaceAll(o,JSON.stringify(n));return c===s?e:`${e.slice(0,i)}${c}${e.slice(a+1)}`}const k={chrome:`chrome`,edge:`edge`,firefox:`firefox`,hermes:!1,ie:`ie`,ios:`ios_saf`,node:!1,opera:`opera`,rhino:!1,safari:`safari`},A={2015:[`chrome49`,`edge13`,`safari10`,`ios10`,`firefox44`,`opera36`],2016:[`chrome50`,`edge13`,`safari10`,`ios10`,`firefox43`,`opera37`],2017:[`chrome58`,`edge15`,`safari11`,`ios11`,`firefox52`,`opera45`],2018:[`chrome63`,`edge79`,`safari12`,`ios12`,`firefox58`,`opera50`],2019:[`chrome73`,`edge79`,`safari12.1`,`ios12.1`,`firefox64`,`opera60`],2020:[`chrome80`,`edge80`,`safari14.1`,`ios14.5`,`firefox80`,`opera67`],2021:[`chrome85`,`edge85`,`safari14.1`,`ios14.5`,`firefox80`,`opera71`],2022:[`chrome94`,`edge94`,`safari16.4`,`ios16.4`,`firefox93`,`opera80`],2023:[`chrome110`,`edge110`,`safari16.4`,`ios16.4`,`firefox146`,`opera96`],2024:[`chrome119`,`edge119`,`safari17.4`,`ios17.4`,`firefox145`,`opera105`],2025:[`chrome136`,`edge136`,`safari26.0`,`ios26.0`,`firefox138`,`opera121`]};function ve(e){let t={},n=(Array.isArray(e)?e:e?[e]:[]).flatMap(e=>{let t=/^es(6|\d{4})$/.exec(e);if(!t)return e;let n=t[1]===`6`?2015:Number(t[1]),r=A[n];if(!r)throw Error(`Unsupported target "${e}"`);return r});for(let e of n){if(e===`esnext`)continue;let n=/^([a-z_]+)(\d+)(?:\.(\d+))?$/i.exec(e),r=n&&k[n[1].toLowerCase()];if(r===!1)continue;if(!n||!r)throw Error(`Unsupported target "${e}"`);let i=Number(n[2])<<16|Number(n[3]??0)<<8;(!t[r]||i<t[r])&&(t[r]=i)}return t}function j(i,m={}){let h,g=i;if(i&&typeof i==`object`){h=i.lightningcss;let e={...i};delete e.lightningcss,delete e.mode,g=Object.keys(e).length?e:void 0}let _,y=ie(g,{envMode:d.env.NODE_ENV===`development`?`dev`:`build`,...m,transformers:[...m.transformers??[],de()]},e=>{_=ee(e)}),b=`/__tea.css`,x,w=!1,T=!0,D,ge,O,k,A=!1,j,M,N=new Set,P,F,I,ye=0;async function L(){P??=fe(()=>_,async()=>{w?await He():I&&a(I,String(++ye))},e=>x?.logger.error(e instanceof Error?e.message:String(e)));try{await P.resolved()}catch(e){throw P.retire(),P=void 0,e}}async function R(){let e=P;P=void 0,await e?.close(),F&&r(F,{recursive:!0,force:!0}),F=void 0,I=void 0}function be(e){let t=new Set(v(_).map(C));for(let n of N)t.has(n)||e(n);I&&e(I)}let z=new Map,B=new Map,V=new Map,H=new Set,U,W,G=0,xe=!1,K,q,J=0,Y=0,X,Z;function Se(){Z=void 0}function Ce(e=y.root){let t=y.getConfigFileList().map(C),n=new Set(t);if(typeof g==`object`){N=n;return}let r=C(typeof g==`string`?u(e,g):e);if(!t.includes(r))for(let e of p)n.add(C(c(r,e)));N=n}async function we(){let{prefix:e}=await y.getVMPRegexes();return b=`/${e}.css`,b}let Te=new Map,Q=new WeakMap,$=new WeakMap;function Ee(e){let t=S(e);return Te.set(t,e),`${x?.base??`/`}__teacss_fonts/${t}`}async function De(){let e=`url(${JSON.stringify(`${x?.base??`/`}__teacss_fonts/`).slice(0,-1)}`,t=(await se(await Oe(),Ee)).toString().replaceAll(e,`URL${e.slice(3)}`);return T=/@import/i.test(t),t}async function Oe(){await y.flushTasks();let e=Z;if(e&&e.config===y.generator.config&&e.tokens.length===y.tokens.size){let t=0,n=!0;for(let r of y.tokens)if(e.tokens[t++]!==r){n=!1;break}if(n)return await e.promise}let t=[...y.tokens],n={config:y.generator.config,promise:y.generator.generate(t,{minify:!1}).then(({css:e})=>e),tokens:t};Z=n;try{return await n.promise}catch(e){throw Z===n&&(Z=void 0),e}}async function ke(){let e=await Oe(),t=x;if(!t||!(`environments`in t))return e;let n=u(t.root,b.slice(1)),r=t.css.transformer===`lightningcss`,i=r?ne(e):e;if(r&&t.build.cssMinify===`lightningcss`&&!/@import/i.test(i))return Ae(i,n,t);let a=r&&t.build.cssMinify?{...t,build:{...t.build,cssMinify:!1}}:t,o=(await le(i,n,a)).code;if(!t.build.cssMinify)return o;if(t.build.cssMinify===`esbuild`){let e=t.esbuild||{},r={charset:e.charset,legalComments:e.legalComments,logLevel:e.logLevel,logLimit:e.logLimit,logOverride:e.logOverride},i=e.minifyIdentifiers!=null||e.minifySyntax!=null||e.minifyWhitespace!=null?{minifyIdentifiers:e.minifyIdentifiers??!0,minifySyntax:e.minifySyntax??!0,minifyWhitespace:e.minifyWhitespace??!0}:{minify:!0},a=await ue(o,n,{...r,...i,loader:`css`,sourcemap:!1,target:t.build.cssTarget||void 0},void 0,t,void 0,!0);for(let e of a.warnings)t.logger.warn(`[esbuild css minify] ${e.text}`);return a.code}return Ae(ne(o),n,t)}async function Ae(e,t,n){let{transform:r}=await import(`lightningcss`),i=n.css.lightningcss?.visitor,a=r({...n.css.lightningcss,visitor:i===D?ge:i,code:Buffer.from(e),cssModules:void 0,filename:t,minify:!0,targets:ve(n.build.cssTarget)});for(let e of a.warnings)n.logger.warn(`[lightningcss minify] ${e.message}`);return new TextDecoder().decode(a.code)}function je(){if(!O)return;let e=O;U&&clearTimeout(U),U=setTimeout(()=>{U=void 0;let t=W,n=(async()=>{if(t&&await t.catch(()=>{}),O!==e||(A?Y:J)>=G||(await Be(),await e.waitForRequestsIdle?.(),O!==e||(A?Y:J)>=G))return;let n=G,r=e.moduleGraph.getModuleById(b);if(!r){J=n,A&&(Y=n);return}A?(e.moduleGraph.invalidateModule(r),e.watcher.emit(`change`,r.file??b),Y=n,J=n):(e.moduleGraph.invalidateModule(r),J=n)})();W=n,n.then(()=>{W===n&&(W=void 0,O===e&&(A?Y:J)<G&&je())},t=>{W===n&&(W=void 0),e.config.logger.error(`TeaCSS failed to invalidate its virtual stylesheet`,{error:t})})},20)}function Me(){Se(),O&&(G++,je())}function Ne(e){if(!O)return;let t=!1;for(let n of e){let e=O.moduleGraph.getModuleById(n);e&&(O.moduleGraph.invalidateModule(e),t=!0)}t&&O.ws.send({type:`full-reload`})}function Pe(){U&&clearTimeout(U),U=void 0,A=!1,j?.(),j=void 0,M?.(),M=void 0,O=void 0,W=void 0}function Fe(){k??=y.onInvalidate(Me)}function Ie(){Se(),Pe(),k?.(),k=void 0}async function Le(e,t){let n={};z.set(t,n),B.set(t,e);try{let r=await re(y,e,t);return z.get(t)===n?(r?V.set(t,r.code):V.delete(t),y.filter(e,t)?await y.extract(r?.code??e,t):y.modules.has(t)&&await y.extract(``,t),r??null):r??null}finally{z.get(t)===n&&z.delete(t)}}async function Re(e,t){X&&await X;let n=Le(e,t),r=n.then(()=>{},()=>{});H.add(r);try{return await n}finally{H.delete(r)}}async function ze(e){let t=new Set(e),n=new Set([...B.keys(),...V.keys()]),r=[];for(let e of n)t.has(e)||(z.delete(e),B.delete(e),V.delete(e),r.push(y.extract(``,e)));await Promise.all(r)}async function Be(){for(;H.size;)await Promise.all(H)}async function Ve(){let e=Array.from(B),t=new Map(e.map(([e,t])=>[e,V.get(e)??t]));try{await y.reloadConfig()}finally{Ce(y.root),(O||I)&&await L()}await we();let n=[];for(let[r,i]of e){let e=ae(y,r)??i;e===i?V.delete(r):V.set(r,e),e!==t.get(r)&&n.push(r)}Ne(n)}async function He(){let e=X,t=(async()=>{e&&await e.catch(()=>{}),await Be(),await Ve()})();X=t;try{await t}finally{X===t&&(X=void 0)}}let Ue={name:`teacss`,enforce:`pre`,config(e,t){if(h===!1)return;let n=typeof h==`object`?h:void 0,r={};return e.css?.transformer===void 0&&(t.command===`build`||h!==void 0)&&(r.css={transformer:`lightningcss`,...n?{lightningcss:n}:{}}),e.build?.cssMinify===void 0&&(r.build={cssMinify:`lightningcss`}),r},async configResolved(e){if(x=e,e.css.transformer===`lightningcss`){let{createEasingImportVisitor:t}=await import(`./easing-imports-DvRhTc2n.js`),n=e.css.lightningcss??{};ge=n.visitor,D=t(n,!0,e=>w&&e===b&&!T),e.css.lightningcss={...n,visitor:D}}w=e.command===`serve`,await y.updateRoot(e.root),Ce(e.root),await we(),Fe()},async buildStart(){Q.set(this.environment??y,new Map),$.set(this.environment??y,new Set),xe=!1,K=void 0,q=void 0,Fe(),Ce(),!w&&x?.build?.watch?(I||(F=n(t(c(o(),`teacss-vite-watch-`))),I=c(F,`invalidate`),a(I,`0`)),be(e=>this.addWatchFile(e)),await L()):be(e=>this.addWatchFile(e))},async buildEnd(t){if(w||t)return;if(typeof this.getModuleIds==`function`&&await ze(this.getModuleIds()),!(xe||typeof this.getModuleInfo==`function`&&this.getModuleInfo(b)!=null)){q=void 0;return}K=await ke();let n=Q.get(this.environment??y)??new Map;Q.set(this.environment??y,n);for(let{asset:e}of oe(K))n.has(e.digest)||n.set(e.digest,this.emitFile({type:`asset`,name:S(e),source:e.bytes}));q=e(`sha256`).update(K).digest(`hex`)},configureServer(e){Pe(),O=e,e.middlewares?.use((t,n,r)=>{let i=`${e.config.base}__teacss_fonts/`,a=t.url?.split(`?`,1)[0],o=a?.startsWith(i)?Te.get(a.slice(i.length)):void 0;if(!o)return r();n.setHeader(`Content-Type`,`font/woff2`),n.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`),n.end(o.bytes)}),L().catch(t=>e.config?.logger.error(String(t))),Fe();let t=()=>{O===e&&(A=!0,Y<G&&je())};if(e.hot?.on(me,t),j=()=>e.hot?.off(me,t),e.httpServer){let t=()=>{O===e&&(Ie(),R())};e.httpServer.once(`close`,t),M=()=>e.httpServer?.off(`close`,t)}},async closeBundle(){Ie(),(w||!x?.build?.watch)&&await R()},async closeWatcher(){Ie(),await R()},transformIndexHtml:{order:`pre`,async handler(e,{filename:t}){y.filter(e,t)?await y.extract(e,t):y.modules.has(t)&&await y.extract(``,t)}},async resolveId(e){return pe.has(e)||pe.has(e.replace(/^\//,``))||e.startsWith(`${b}?`)?b:null},async load(e){return e===b?w?await De():(xe=!0,E):null},async transform(e,t){if(t===b)return null;let n=await Re(e,t);if(!w||!/\.css(?:$|\?)/i.test(t))return n;let r=await se(n?.code??e,Ee);if(!r.hasChanged())return n;let i=r.generateMap({hires:!0,includeContent:!0,source:t});return{code:r.toString(),map:n?.map?f([i,n.map],()=>null).toString():i}},async watchChange(e,t){if(e===I||N.has(C(e)))try{await He()}finally{be(e=>this.addWatchFile(e))}else X&&await X;if(t.event===`delete`){let t=new Set([e]);for(let n of[...y.modules.keys(),...z.keys(),...B.keys()])(n===e||n.startsWith(`${e}?`))&&t.add(n);for(let e of t)z.delete(e),B.delete(e),V.delete(e);await Promise.all(Array.from(t,e=>y.extract(``,e)))}},async generateBundle(e,t){if(w)return;let n,r=Q.get(this.environment??y)??new Map;for(let[i,a]of Object.entries(t)){if(a.type!==`asset`||!a.fileName.endsWith(`.css`))continue;let o=typeof a.source==`string`?a.source:new TextDecoder().decode(a.source);if(!o.includes(E)&&!o.includes(`;teacss=v1-`))continue;o.includes(E)&&(n??=K??await ke());let c=new Set,u=async e=>(await se(o.replaceAll(E,n??``),t=>{let n=r.get(t.digest);n||(n=this.emitFile({type:`asset`,name:S(t),source:t.bytes}),r.set(t.digest,n));let i=this.getFileName(n);c.add(i);let a=x?.base??`/`;return a===`./`||a===``?`./${l.relative(l.dirname(e),i)}`:`${a}${i}`})).toString(),d=await u(a.fileName);for(let e of Object.values(t))if(e.type===`chunk`&&e.viteMetadata?.importedCss.has(a.fileName))for(let t of c)e.viteMetadata.importedAssets.add(t);let f=typeof e.assetFileNames!=`string`||e.assetFileNames.includes(`[hash`);if(typeof e.assetFileNames==`function`){let t={name:a.name,names:a.names,originalFileName:a.originalFileName??void 0,originalFileNames:a.originalFileNames,type:`asset`},n=e.assetFileNames({...t,source:a.source}),r=e.assetFileNames({...t,source:d});f=r.includes(`[hash`)||r!==n}if(!x||!(`environments`in x)||!f){a.source=d;continue}let p=e=>this.getFileName(this.emitFile({type:`asset`,name:a.name||s(a.fileName),...a.originalFileName?{originalFileName:a.originalFileName}:{},source:e})),m=p(d),h=await u(m);if(h!==d){let e=$.get(this.environment??y)??new Set;if(e.add(m),$.set(this.environment??y,e),d=h,m=p(d),await u(m)!==d)throw Error(`TeaCSS CSS output naming changes its font-relative directory after URL resolution`)}let g=new Set,_=x.build.manifest,v=x.build.ssrManifest;_&&g.add(typeof _==`string`?_:`.vite/manifest.json`),v&&g.add(typeof v==`string`?v:`.vite/ssr-manifest.json`);for(let e of Object.values(t))e.viteMetadata?.importedCss.delete(a.fileName)&&e.viteMetadata.importedCss.add(m),e.type===`chunk`?e.code=_e(e.code,a.fileName,m):e!==a&&typeof e.source==`string`&&g.has(e.fileName)&&(e.source=he(e.source,a.fileName,m));delete t[i]}}},We={name:`teacss:api`,enforce:`post`,api:{getContext:()=>y,getMode:()=>`global`},transform(e,t){return!w||t!==b||!e.includes(`import.meta.hot`)?null:`${e}\nimport.meta.hot.send(${JSON.stringify(me)});`},augmentChunkHash(){return q},generateBundle:{order:`post`,async handler(e,t){let n=Ue.generateBundle;typeof n==`function`&&await n.call(this,e,t,!1);let r=$.get(this.environment??y);for(let e of r??[])delete t[e];r?.clear()}}};function Ge(e){return{name:e?`teacss:easing-source`:`teacss:easing-output`,enforce:e,transform(t,n){let r=x;if(!r||r.css.transformer!==`lightningcss`&&r.build.cssMinify!==`lightningcss`||!/\.(?:css|scss|sass|less|styl|stylus|sss)(?:$|\?)/i.test(n)||/[?&](?:raw|url)(?:&|$)/.test(n)||e&&(r.css.transformer!==`lightningcss`||!/\.css(?:$|\?)/i.test(n)))return null;let i=new ce(t);return te(i),i.hasChanged()?{code:i.toString(),map:i.generateMap({hires:!0,includeContent:!0,source:n})}:null}}}return[Ue,We,Ge(`pre`),Ge()]}export{j as createTeacssPlugins};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,35 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export interface TeacssVitePluginConfig<Theme extends object = object> extends UserConfig<Theme> {
|
|
5
|
-
/**
|
|
6
|
-
* Generation mode. Only `global` is supported (a single virtual stylesheet
|
|
7
|
-
* collecting every utility found across the project).
|
|
8
|
-
*
|
|
9
|
-
* @default "global"
|
|
10
|
-
*/
|
|
11
|
-
mode?: "global";
|
|
12
|
-
/**
|
|
13
|
-
* Drive Vite's CSS pipeline with **lightningcss** instead of PostCSS + esbuild:
|
|
14
|
-
* sets `css.transformer: "lightningcss"` (replaces PostCSS) and
|
|
15
|
-
* `build.cssMinify: "lightningcss"` (replaces esbuild's CSS minifier). On by
|
|
16
|
-
* default — pass `false` to keep Vite's PostCSS + esbuild pipeline, or an
|
|
17
|
-
* object to forward lightningcss options (e.g. `targets`, `drafts`). Only
|
|
18
|
-
* fields you haven't set yourself are touched, so an explicit
|
|
19
|
-
* `css.transformer` / `build.cssMinify` always wins. Left unset, the
|
|
20
|
-
* transformer applies to builds only and the dev server keeps PostCSS;
|
|
21
|
-
* `true` or an options object applies it to the dev server too.
|
|
22
|
-
*
|
|
23
|
-
* @default true
|
|
24
|
-
*/
|
|
25
|
-
lightningcss?: boolean | LightningCSSOptions;
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
1
|
+
import { n as TeacssVitePluginConfig, t as TeacssVitePluginAPI } from "./types-BplrH0_C.js";
|
|
2
|
+
import { UserConfigDefaults } from "@teacss/core";
|
|
3
|
+
import { Plugin } from "vite";
|
|
28
4
|
//#region src/index.d.ts
|
|
29
5
|
export declare function defineConfig<Theme extends object>(config: TeacssVitePluginConfig<Theme>): TeacssVitePluginConfig<Theme>;
|
|
30
|
-
export interface TeacssVitePluginAPI {
|
|
31
|
-
getContext: () => TeacssPluginContext<TeacssVitePluginConfig>;
|
|
32
|
-
getMode: () => "global";
|
|
33
|
-
}
|
|
34
6
|
export declare function pluginTeacss<Theme extends object>(configOrPath?: TeacssVitePluginConfig<Theme> | string, defaults?: UserConfigDefaults): Plugin[];
|
|
35
|
-
//#endregion
|
|
7
|
+
//#endregion
|
|
8
|
+
export { TeacssVitePluginAPI, TeacssVitePluginConfig };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`,r+2);if(t<0)return-1;r=t;continue}if(n===`/`&&e[r+1]===`*`){let t=e.indexOf(`*/`,r+2);if(t<0)return-1;r=t+1;continue}if(e.startsWith(t,r))return r}return-1}function ge(e,t,n){let r=j(e,`const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=`);if(r<0)return e;let i=r+56;if(e[i]!==`[`)return e;let a=A(e,i);if(a<0||!e.startsWith(`)))=>i.map(i=>d[i]);`,a+1)||j(e,`__vite__mapDeps([`,a+20+1)<0)return e;let o=JSON.stringify(t),s=e.slice(i,a+1),c=s.replaceAll(o,JSON.stringify(n));return c===s?e:`${e.slice(0,i)}${c}${e.slice(a+1)}`}const M={chrome:`chrome`,edge:`edge`,firefox:`firefox`,hermes:!1,ie:`ie`,ios:`ios_saf`,node:!1,opera:`opera`,rhino:!1,safari:`safari`},N={2015:[`chrome49`,`edge13`,`safari10`,`ios10`,`firefox44`,`opera36`],2016:[`chrome50`,`edge13`,`safari10`,`ios10`,`firefox43`,`opera37`],2017:[`chrome58`,`edge15`,`safari11`,`ios11`,`firefox52`,`opera45`],2018:[`chrome63`,`edge79`,`safari12`,`ios12`,`firefox58`,`opera50`],2019:[`chrome73`,`edge79`,`safari12.1`,`ios12.1`,`firefox64`,`opera60`],2020:[`chrome80`,`edge80`,`safari14.1`,`ios14.5`,`firefox80`,`opera67`],2021:[`chrome85`,`edge85`,`safari14.1`,`ios14.5`,`firefox80`,`opera71`],2022:[`chrome94`,`edge94`,`safari16.4`,`ios16.4`,`firefox93`,`opera80`],2023:[`chrome110`,`edge110`,`safari16.4`,`ios16.4`,`firefox146`,`opera96`],2024:[`chrome119`,`edge119`,`safari17.4`,`ios17.4`,`firefox145`,`opera105`],2025:[`chrome136`,`edge136`,`safari26.0`,`ios26.0`,`firefox138`,`opera121`]};function _e(e){let t={},n=(Array.isArray(e)?e:e?[e]:[]).flatMap(e=>{let t=/^es(6|\d{4})$/.exec(e);if(!t)return e;let n=t[1]===`6`?2015:Number(t[1]),r=N[n];if(!r)throw Error(`Unsupported target "${e}"`);return r});for(let e of n){if(e===`esnext`)continue;let n=/^([a-z_]+)(\d+)(?:\.(\d+))?$/i.exec(e),r=n&&M[n[1].toLowerCase()];if(r===!1)continue;if(!n||!r)throw Error(`Unsupported target "${e}"`);let i=Number(n[2])<<16|Number(n[3]??0)<<8;(!t[r]||i<t[r])&&(t[r]=i)}return t}function P(i,m={}){let h,g=i;if(i&&typeof i==`object`){h=i.lightningcss;let e={...i};delete e.lightningcss,delete e.mode,g=Object.keys(e).length?e:void 0}let _,y=ie(g,{envMode:d.env.NODE_ENV===`development`?`dev`:`build`,...m,transformers:[...m.transformers??[],de()]},e=>{_=ee(e)}),b=`/__tea.css`,x,C=!1,T=!0,E,pe,k,A,j=!1,M,N,P=new Set,F,I,L,ve=0;async function ye(){F??=fe(()=>_,async()=>{C?await He():L&&a(L,String(++ve))},e=>x?.logger.error(e instanceof Error?e.message:String(e)));try{await F.resolved()}catch(e){throw F.retire(),F=void 0,e}}async function be(){let e=F;F=void 0,await e?.close(),I&&r(I,{recursive:!0,force:!0}),I=void 0,L=void 0}function xe(e){let t=new Set(v(_).map(w));for(let n of P)t.has(n)||e(n);L&&e(L)}let R=new Map,z=new Map,B=new Map,V=new Set,H,U,W=0,G=!1,K,q,J=0,Y=0,X,Z;function Se(){Z=void 0}function Ce(e=y.root){let t=y.getConfigFileList().map(w),n=new Set(t);if(typeof g==`object`){P=n;return}let r=w(typeof g==`string`?u(e,g):e);if(!t.includes(r))for(let e of p)n.add(w(c(r,e)));P=n}async function we(){let{prefix:e}=await y.getVMPRegexes();return b=`/${e}.css`,b}let Te=new Map,Q=new WeakMap,$=new WeakMap;function Ee(e){let t=oe(e);return Te.set(t,e),`${x?.base??`/`}__teacss_fonts/${t}`}async function De(){let e=`url(${JSON.stringify(`${x?.base??`/`}__teacss_fonts/`).slice(0,-1)}`,t=(await S(await Oe(),Ee)).toString().replaceAll(e,`URL${e.slice(3)}`);return T=/@import/i.test(t),t}async function Oe(){await y.flushTasks();let e=Z;if(e&&e.config===y.generator.config&&e.tokens.length===y.tokens.size){let t=0,n=!0;for(let r of y.tokens)if(e.tokens[t++]!==r){n=!1;break}if(n)return await e.promise}let t=[...y.tokens],n={config:y.generator.config,promise:y.generator.generate(t,{minify:!1}).then(({css:e})=>e),tokens:t};Z=n;try{return await n.promise}catch(e){throw Z===n&&(Z=void 0),e}}async function ke(){let e=await Oe(),t=x;if(!t||!(`environments`in t))return e;let n=u(t.root,b.slice(1)),r=t.css.transformer===`lightningcss`,i=r?ne(e):e;if(r&&t.build.cssMinify===`lightningcss`&&!/@import/i.test(i))return Ae(i,n,t);let a=r&&t.build.cssMinify?{...t,build:{...t.build,cssMinify:!1}}:t,o=(await le(i,n,a)).code;if(!t.build.cssMinify)return o;if(t.build.cssMinify===`esbuild`){let e=t.esbuild||{},r={charset:e.charset,legalComments:e.legalComments,logLevel:e.logLevel,logLimit:e.logLimit,logOverride:e.logOverride},i=e.minifyIdentifiers!=null||e.minifySyntax!=null||e.minifyWhitespace!=null?{minifyIdentifiers:e.minifyIdentifiers??!0,minifySyntax:e.minifySyntax??!0,minifyWhitespace:e.minifyWhitespace??!0}:{minify:!0},a=await ue(o,n,{...r,...i,loader:`css`,sourcemap:!1,target:t.build.cssTarget||void 0},void 0,t,void 0,!0);for(let e of a.warnings)t.logger.warn(`[esbuild css minify] ${e.text}`);return a.code}return Ae(ne(o),n,t)}async function Ae(e,t,n){let{transform:r}=await import(`lightningcss`),i=n.css.lightningcss?.visitor,a=r({...n.css.lightningcss,visitor:i===E?pe:i,code:Buffer.from(e),cssModules:void 0,filename:t,minify:!0,targets:_e(n.build.cssTarget)});for(let e of a.warnings)n.logger.warn(`[lightningcss minify] ${e.message}`);return new TextDecoder().decode(a.code)}function je(){if(!k)return;let e=k;H&&clearTimeout(H),H=setTimeout(()=>{H=void 0;let t=U,n=(async()=>{if(t&&await t.catch(()=>{}),k!==e||(j?Y:J)>=W||(await Be(),await e.waitForRequestsIdle?.(),k!==e||(j?Y:J)>=W))return;let n=W,r=e.moduleGraph.getModuleById(b);if(!r){J=n,j&&(Y=n);return}j?(e.moduleGraph.invalidateModule(r),e.watcher.emit(`change`,r.file??b),Y=n,J=n):(e.moduleGraph.invalidateModule(r),J=n)})();U=n,n.then(()=>{U===n&&(U=void 0,k===e&&(j?Y:J)<W&&je())},t=>{U===n&&(U=void 0),e.config.logger.error(`TeaCSS failed to invalidate its virtual stylesheet`,{error:t})})},20)}function Me(){Se(),k&&(W++,je())}function Ne(e){if(!k)return;let t=!1;for(let n of e){let e=k.moduleGraph.getModuleById(n);e&&(k.moduleGraph.invalidateModule(e),t=!0)}t&&k.ws.send({type:`full-reload`})}function Pe(){H&&clearTimeout(H),H=void 0,j=!1,M?.(),M=void 0,N?.(),N=void 0,k=void 0,U=void 0}function Fe(){A??=y.onInvalidate(Me)}function Ie(){Se(),Pe(),A?.(),A=void 0}async function Le(e,t){let n={};R.set(t,n),z.set(t,e);try{let r=await re(y,e,t);return R.get(t)===n?(r?B.set(t,r.code):B.delete(t),y.filter(e,t)?await y.extract(r?.code??e,t):y.modules.has(t)&&await y.extract(``,t),r??null):r??null}finally{R.get(t)===n&&R.delete(t)}}async function Re(e,t){X&&await X;let n=Le(e,t),r=n.then(()=>{},()=>{});V.add(r);try{return await n}finally{V.delete(r)}}async function ze(e){let t=new Set(e),n=new Set([...z.keys(),...B.keys()]),r=[];for(let e of n)t.has(e)||(R.delete(e),z.delete(e),B.delete(e),r.push(y.extract(``,e)));await Promise.all(r)}async function Be(){for(;V.size;)await Promise.all(V)}async function Ve(){let e=Array.from(z),t=new Map(e.map(([e,t])=>[e,B.get(e)??t]));try{await y.reloadConfig()}finally{Ce(y.root),(k||L)&&await ye()}await we();let n=[];for(let[r,i]of e){let e=ae(y,r)??i;e===i?B.delete(r):B.set(r,e),e!==t.get(r)&&n.push(r)}Ne(n)}async function He(){let e=X,t=(async()=>{e&&await e.catch(()=>{}),await Be(),await Ve()})();X=t;try{await t}finally{X===t&&(X=void 0)}}let Ue={name:`teacss`,enforce:`pre`,config(e,t){if(h===!1)return;let n=typeof h==`object`?h:void 0,r={};return e.css?.transformer===void 0&&(t.command===`build`||h!==void 0)&&(r.css={transformer:`lightningcss`,...n?{lightningcss:n}:{}}),e.build?.cssMinify===void 0&&(r.build={cssMinify:`lightningcss`}),r},async configResolved(e){if(x=e,e.css.transformer===`lightningcss`){let{createEasingImportVisitor:t}=await import(`./easing-imports-DvRhTc2n.js`),n=e.css.lightningcss??{};pe=n.visitor,E=t(n,!0,e=>C&&e===b&&!T),e.css.lightningcss={...n,visitor:E}}C=e.command===`serve`,await y.updateRoot(e.root),Ce(e.root),await we(),Fe()},async buildStart(){Q.set(this.environment??y,new Map),$.set(this.environment??y,new Set),G=!1,K=void 0,q=void 0,Fe(),Ce(),!C&&x?.build?.watch?(L||(I=n(t(c(o(),`teacss-vite-watch-`))),L=c(I,`invalidate`),a(L,`0`)),xe(e=>this.addWatchFile(e)),await ye()):xe(e=>this.addWatchFile(e))},async buildEnd(t){if(C||t)return;if(typeof this.getModuleIds==`function`&&await ze(this.getModuleIds()),!(G||typeof this.getModuleInfo==`function`&&this.getModuleInfo(b)!=null)){q=void 0;return}K=await ke();let n=Q.get(this.environment??y)??new Map;Q.set(this.environment??y,n);for(let{asset:e}of se(K))n.has(e.digest)||n.set(e.digest,this.emitFile({type:`asset`,name:oe(e),source:e.bytes}));q=e(`sha256`).update(K).digest(`hex`)},configureServer(e){Pe(),k=e,e.middlewares?.use((t,n,r)=>{let i=`${e.config.base}__teacss_fonts/`,a=t.url?.split(`?`,1)[0],o=a?.startsWith(i)?Te.get(a.slice(i.length)):void 0;if(!o)return r();n.setHeader(`Content-Type`,`font/woff2`),n.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`),n.end(o.bytes)}),ye().catch(t=>e.config?.logger.error(String(t))),Fe();let t=()=>{k===e&&(j=!0,Y<W&&je())};if(e.hot?.on(O,t),M=()=>e.hot?.off(O,t),e.httpServer){let t=()=>{k===e&&(Ie(),be())};e.httpServer.once(`close`,t),N=()=>e.httpServer?.off(`close`,t)}},async closeBundle(){Ie(),(C||!x?.build?.watch)&&await be()},async closeWatcher(){Ie(),await be()},transformIndexHtml:{order:`pre`,async handler(e,{filename:t}){y.filter(e,t)?await y.extract(e,t):y.modules.has(t)&&await y.extract(``,t)}},async resolveId(e){return me.has(e)||me.has(e.replace(/^\//,``))||e.startsWith(`${b}?`)?b:null},async load(e){return e===b?C?await De():(G=!0,D):null},async transform(e,t){if(t===b)return null;let n=await Re(e,t);if(!C||!/\.css(?:$|\?)/i.test(t))return n;let r=await S(n?.code??e,Ee);if(!r.hasChanged())return n;let i=r.generateMap({hires:!0,includeContent:!0,source:t});return{code:r.toString(),map:n?.map?f([i,n.map],()=>null).toString():i}},async watchChange(e,t){if(e===L||P.has(w(e)))try{await He()}finally{xe(e=>this.addWatchFile(e))}else X&&await X;if(t.event===`delete`){let t=new Set([e]);for(let n of[...y.modules.keys(),...R.keys(),...z.keys()])(n===e||n.startsWith(`${e}?`))&&t.add(n);for(let e of t)R.delete(e),z.delete(e),B.delete(e);await Promise.all(Array.from(t,e=>y.extract(``,e)))}},async generateBundle(e,t){if(C)return;let n,r=Q.get(this.environment??y)??new Map;for(let[i,a]of Object.entries(t)){if(a.type!==`asset`||!a.fileName.endsWith(`.css`))continue;let o=typeof a.source==`string`?a.source:new TextDecoder().decode(a.source);if(!o.includes(D)&&!o.includes(`;teacss=v1-`))continue;o.includes(D)&&(n??=K??await ke());let c=new Set,u=async e=>(await S(o.replaceAll(D,n??``),t=>{let n=r.get(t.digest);n||(n=this.emitFile({type:`asset`,name:oe(t),source:t.bytes}),r.set(t.digest,n));let i=this.getFileName(n);c.add(i);let a=x?.base??`/`;return a===`./`||a===``?`./${l.relative(l.dirname(e),i)}`:`${a}${i}`})).toString(),d=await u(a.fileName);for(let e of Object.values(t))if(e.type===`chunk`&&e.viteMetadata?.importedCss.has(a.fileName))for(let t of c)e.viteMetadata.importedAssets.add(t);let f=typeof e.assetFileNames!=`string`||e.assetFileNames.includes(`[hash`);if(typeof e.assetFileNames==`function`){let t={name:a.name,names:a.names,originalFileName:a.originalFileName??void 0,originalFileNames:a.originalFileNames,type:`asset`},n=e.assetFileNames({...t,source:a.source}),r=e.assetFileNames({...t,source:d});f=r.includes(`[hash`)||r!==n}if(!x||!(`environments`in x)||!f){a.source=d;continue}let p=e=>this.getFileName(this.emitFile({type:`asset`,name:a.name||s(a.fileName),...a.originalFileName?{originalFileName:a.originalFileName}:{},source:e})),m=p(d),h=await u(m);if(h!==d){let e=$.get(this.environment??y)??new Set;if(e.add(m),$.set(this.environment??y,e),d=h,m=p(d),await u(m)!==d)throw Error(`TeaCSS CSS output naming changes its font-relative directory after URL resolution`)}let g=new Set,_=x.build.manifest,v=x.build.ssrManifest;_&&g.add(typeof _==`string`?_:`.vite/manifest.json`),v&&g.add(typeof v==`string`?v:`.vite/ssr-manifest.json`);for(let e of Object.values(t))e.viteMetadata?.importedCss.delete(a.fileName)&&e.viteMetadata.importedCss.add(m),e.type===`chunk`?e.code=ge(e.code,a.fileName,m):e!==a&&typeof e.source==`string`&&g.has(e.fileName)&&(e.source=he(e.source,a.fileName,m));delete t[i]}}},We={name:`teacss:api`,enforce:`post`,api:{getContext:()=>y,getMode:()=>`global`},transform(e,t){return!C||t!==b||!e.includes(`import.meta.hot`)?null:`${e}\nimport.meta.hot.send(${JSON.stringify(O)});`},augmentChunkHash(){return q},generateBundle:{order:`post`,async handler(e,t){let n=Ue.generateBundle;typeof n==`function`&&await n.call(this,e,t,!1);let r=$.get(this.environment??y);for(let e of r??[])delete t[e];r?.clear()}}};function Ge(e){return{name:e?`teacss:easing-source`:`teacss:easing-output`,enforce:e,transform(t,n){let r=x;if(!r||r.css.transformer!==`lightningcss`&&r.build.cssMinify!==`lightningcss`||!/\.(?:css|scss|sass|less|styl|stylus|sss)(?:$|\?)/i.test(n)||/[?&](?:raw|url)(?:&|$)/.test(n)||e&&(r.css.transformer!==`lightningcss`||!/\.css(?:$|\?)/i.test(n)))return null;let i=new ce(t);return te(i),i.hasChanged()?{code:i.toString(),map:i.generateMap({hires:!0,includeContent:!0,source:n})}:null}}}return[Ue,We,Ge(`pre`),Ge()]}export{pe as defineConfig,P as pluginTeacss};
|
|
1
|
+
import{createRequire as e}from"node:module";import{enableNodeCompileCache as t}from"@teacss/runtime/internal/compile-cache";function n(e){return e}t();const r=e(import.meta.url);function i(e,t={}){let n,i=()=>(n??=r("./impl.js").createTeacssPlugins(e,t),n),a=(e,t)=>function(...n){return i()[e][t].call(this,...n)},o=(e,t)=>function(...n){return i()[e][t].handler.call(this,...n)};return[{name:`teacss`,enforce:`pre`,config:a(0,`config`),configResolved:a(0,`configResolved`),buildStart:a(0,`buildStart`),buildEnd:a(0,`buildEnd`),configureServer:a(0,`configureServer`),closeBundle:a(0,`closeBundle`),closeWatcher:a(0,`closeWatcher`),transformIndexHtml:{order:`pre`,handler:o(0,`transformIndexHtml`)},resolveId:a(0,`resolveId`),load:a(0,`load`),transform:a(0,`transform`),watchChange:a(0,`watchChange`),generateBundle:a(0,`generateBundle`)},{name:`teacss:api`,enforce:`post`,api:{getContext:()=>i()[1].api?.getContext(),getMode:()=>`global`},transform:a(1,`transform`),augmentChunkHash:a(1,`augmentChunkHash`),generateBundle:{order:`post`,handler:o(1,`generateBundle`)}},{name:`teacss:easing-source`,enforce:`pre`,transform:a(2,`transform`)},{name:`teacss:easing-output`,enforce:void 0,transform:a(3,`transform`)}]}export{n as defineConfig,i as pluginTeacss};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { TeacssPluginContext, UserConfig } from "@teacss/core";
|
|
2
|
+
import { LightningCSSOptions } from "vite";
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
interface TeacssVitePluginConfig<Theme extends object = object> extends UserConfig<Theme> {
|
|
5
|
+
/**
|
|
6
|
+
* Generation mode. Only `global` is supported (a single virtual stylesheet
|
|
7
|
+
* collecting every utility found across the project).
|
|
8
|
+
*
|
|
9
|
+
* @default "global"
|
|
10
|
+
*/
|
|
11
|
+
mode?: "global";
|
|
12
|
+
/**
|
|
13
|
+
* Drive Vite's CSS pipeline with **lightningcss** instead of PostCSS + esbuild:
|
|
14
|
+
* sets `css.transformer: "lightningcss"` (replaces PostCSS) and
|
|
15
|
+
* `build.cssMinify: "lightningcss"` (replaces esbuild's CSS minifier). On by
|
|
16
|
+
* default — pass `false` to keep Vite's PostCSS + esbuild pipeline, or an
|
|
17
|
+
* object to forward lightningcss options (e.g. `targets`, `drafts`). Only
|
|
18
|
+
* fields you haven't set yourself are touched, so an explicit
|
|
19
|
+
* `css.transformer` / `build.cssMinify` always wins. Left unset, the
|
|
20
|
+
* transformer applies to builds only and the dev server keeps PostCSS;
|
|
21
|
+
* `true` or an options object applies it to the dev server too.
|
|
22
|
+
*
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
25
|
+
lightningcss?: boolean | LightningCSSOptions;
|
|
26
|
+
}
|
|
27
|
+
interface TeacssVitePluginAPI {
|
|
28
|
+
getContext: () => TeacssPluginContext<TeacssVitePluginConfig>;
|
|
29
|
+
getMode: () => "global";
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { TeacssVitePluginConfig as n, TeacssVitePluginAPI as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teacss/vite",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Vite plugin for TeaCSS.",
|
|
5
5
|
"homepage": "https://css.teasim.com",
|
|
6
6
|
"funding": "https://github.com/sponsors/billgo",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"type": "module",
|
|
11
11
|
"exports": {
|
|
12
12
|
".": "./dist/index.js",
|
|
13
|
+
"./impl": "./dist/impl.js",
|
|
13
14
|
"./package.json": "./package.json"
|
|
14
15
|
},
|
|
15
16
|
"types": "./dist/index.d.ts",
|
|
@@ -23,11 +24,11 @@
|
|
|
23
24
|
},
|
|
24
25
|
"dependencies": {
|
|
25
26
|
"@jridgewell/remapping": "^2.3.5",
|
|
26
|
-
"@teacss/config": "0.9.
|
|
27
|
-
"@teacss/core": "0.9.
|
|
28
|
-
"@teacss/directives": "0.9.
|
|
27
|
+
"@teacss/config": "0.9.3",
|
|
28
|
+
"@teacss/core": "0.9.3",
|
|
29
|
+
"@teacss/directives": "0.9.3",
|
|
29
30
|
"@teacss/engine": "0.9.3",
|
|
30
|
-
"@teacss/runtime": "0.9.
|
|
31
|
+
"@teacss/runtime": "0.9.3",
|
|
31
32
|
"lightningcss": "^1.33.0",
|
|
32
33
|
"magic-string": "^1.2.3"
|
|
33
34
|
},
|