@teacss/vite 0.8.2 → 0.8.5

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/README.md CHANGED
@@ -27,6 +27,19 @@ passes generated rules through Vite's CSS transform and minifier, and includes
27
27
  the final CSS digest in dependent chunk hashes. Fixed asset names stay fixed.
28
28
  Generated utility CSS has no build sourcemap.
29
29
 
30
+ When Lightning CSS is configured, calculated Bézier x coordinates are guarded
31
+ before direct CSS/CSS Modules parsing and generated-preflight optimization.
32
+ With the PostCSS transformer, the guard runs after user plugins and imports,
33
+ before Lightning CSS minification. Authored source maps are retained.
34
+ Native Lightning CSS processing captures the exact CSS returned by Vite's
35
+ resolver, including compiled Sass and Less in entries and imports. Original
36
+ source locations identify proven calculated timing values for repair before
37
+ minification. CSS Modules, assets, source maps and user visitors retain their
38
+ native behavior. Preprocessor hooks run once; compiler options, worker selection
39
+ and import resolution remain Vite-owned. No transformer change is needed.
40
+ See the [easing audit](../../docs/knowledge/steps-and-cubic-bezier-easing.md#authored-css-exposure)
41
+ for coverage and limitations.
42
+
30
43
  Astro projects should use `@teacss/astro`. Add `@teacss/inspector` only for
31
44
  development inspection.
32
45
 
@@ -0,0 +1 @@
1
+ import{readFileSync as e}from"node:fs";import{prepareEasingStylesheet as t}from"@teacss/directives/internal/easing";import{composeVisitors as n,transform as r}from"lightningcss";const i=new Set([`animation`,`animation-timing-function`,`transition`,`transition-timing-function`]);function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e){if(!a(e)||typeof e.type!=`string`||!a(e.value)||!a(e.value.loc))return;let{line:t,column:n}=e.value.loc;if(typeof t==`number`&&typeof n==`number`&&typeof e.value.loc.source_index==`number`)return{type:e.type,value:e.value,key:`${e.type}:${t}:${n}`}}function s(e,t=[]){if(Array.isArray(e))for(let n of e)s(n,t);else if(a(e)){let n=o(e);n&&t.push(n);for(let n of Object.values(e))s(n,t)}return t}function c(e,t=[]){if(Array.isArray(e))for(let n of e)c(n,t);else if(a(e)){if(o(e))return t;if(Array.isArray(e.declarations)&&Array.isArray(e.importantDeclarations))t.push(e);else for(let n of Object.values(e))c(n,t)}return t}function l(e){return a(e)&&typeof e.property==`string`&&i.has(e.property)}function u(e,t){return JSON.stringify(e)===JSON.stringify(t)}function d(e,t,n){let i=[];return r({...n,filename:t,code:Buffer.from(e),minify:!1,sourceMap:!1,visitor:{StyleSheet(e){i=s(e.rules)}}}),i}function f(n,r,i){let a=new Map;if(i===void 0&&!/\.css$/i.test(n))return a;let o=i??e(n,`utf8`),s=t(o);if(o===s)return a;let f=d(o,n,r),p=d(s,n,r);if(f.length!==p.length)return a;for(let e=0;e<f.length;e++){let t=f[e],n=p[e];if(t.type!==n.type)continue;let r=c(t.value),i=c(n.value);if(r.length!==i.length)continue;let o=[];for(let e=0;e<r.length;e++)for(let t of[`declarations`,`importantDeclarations`]){let n=r[e][t].filter(l),a=i[e][t].filter(l);n.length===a.length&&!u(n,a)&&o.push({before:n,after:a,block:e,field:t})}o.length&&a.set(t.key,o)}return a}function p(e,t=!1){return function(r){function i(e){if(t&&typeof e?.resolver?.read!=`function`&&!(e?.code instanceof Uint8Array))throw Error(`TeaCSS requires the Lightning CSS visitor factory to expose native source input before parsing.`)}i(this);let d=typeof e.visitor==`function`?e.visitor.call(this,r):e.visitor;i(this);let p=new Map;this?.code&&p.set(this.filename,Buffer.from(this.code).toString());let m=this?.resolver,h=m?.read;this&&m&&h&&(this.resolver={...m,resolve:m.resolve?.bind(m),async read(e){let t=await h.call(m,e);return p.set(e,t),t}});let g=n([{Rule(){},RuleExit(){},Declaration(){}},d??{}]),_=[],v=this,y=e,b=!1,x=[],S=new Map,C=[];function w(e){if(!a(e.value.loc))return;let n=e.value.loc.source_index;if(typeof n!=`number`)return;let r=p.get(_[n]);if(t&&r===void 0)throw Error(`TeaCSS did not capture Lightning CSS input for ${_[n]}. The native source boundary is incompatible.`);if(n===0&&r===void 0)return;let i=S.get(n);return i||(i=f(_[n],y,r),S.set(n,i)),i.get(e.key)}function T(e){let t=w(e);if(!t)return;let n=c(e.value);for(let e of t){let t=n[e.block]?.[e.field];if(!t||!u(t.filter(l),e.before))continue;let r=0;for(let n=0;n<t.length;n++)l(t[n])&&(t[n]=e.after[r++])}}return{...d,StyleSheet(t){_=t.sources;let n=/\.module\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/.test(_[0]);if(y=v?{...v,cssModules:v.cssModules??!1}:{...e,cssModules:n?e.cssModules??!0:!1},!d?.StyleSheet)return;for(let e of s(t.rules))T(e);let r=d.StyleSheet(t);return b=!!r,r},Rule(e){C=[];let t=b||x.at(-1)?.authoritative===!0;x.push({authoritative:t,exits:1});let n=o(e),r=!t&&n?w(n):void 0;if(n&&r){let e=c(n.value);for(let t=0;t<e.length;t++)for(let n of[`importantDeclarations`,`declarations`]){let i=e[t][n].filter(l),a=r.find(e=>e.block===t&&e.field===n&&u(i,e.before));for(let e=0;e<i.length;e++)C.push({before:i[e],after:a?.after[e]??i[e]})}}if(!d?.Rule)return;if(!t)for(let t of s(e))T(t);let i=g.Rule(e);if(i){C=[];let e=x[x.length-1];e.authoritative=!0,e.exits=Array.isArray(i)?i.length:1,e.exits===0&&x.pop()}return i},RuleExit(e){let t=x.at(-1);return t&&--t.exits===0&&x.pop(),g.RuleExit(e)},Declaration(e){let t=e;if(l(e)){let n=C.shift();n&&u(e,n.before)?t=n.after:C=[]}let n=g.Declaration(t);if(n)return n;if(!u(e,t))return t}}}}export{p as createEasingImportVisitor};
package/dist/index.js CHANGED
@@ -1,2 +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,resolve as l}from"node:path";import u from"node:process";import{entryDiscoveryFiles as d}from"@teacss/config";import{SourceWatchRegistry as f,createSourceDeclarationCheck as p,planSourceWatches as m,probeSourceDeclarations as h,sourceDeclarationMemberPaths as g,sourceDeclarationStateOf as _,sourceDeclarationWatchTargets as v}from"@teacss/config/internal/source-scan";import{CSS_PLACEHOLDER as y,isCssId as b}from"@teacss/core";import{applyTransformerPipeline as ee,createContext as te,getModuleOutput as ne}from"@teacss/runtime";import{normalizePath as x,preprocessCSS as re,transformWithEsbuild as ie}from"vite";function S(e){return e.includes(`@apply`)||e.includes(`--at-apply`)||e.includes(`@screen`)||e.includes(`theme(`)||e.includes(`icon(`)}const C=async()=>{let{default:e}=await import(`@teacss/directives`);return e()};function ae(e=C){let t;return{name:`@teacss/directives`,idFilter:b,async transform(n,r,i){if(S(n.original))return await(await(t??=e())).transform?.(n,r,i)}}}function oe(e,t,n){let r,a=!1,o=0,s,c=Promise.resolve(),l=new f((e,t,n)=>i(e,{recursive:n},t),()=>g(),n),u=p(e,async e=>{await c,!a&&e.signature!==r?.signature&&await g()},n);function d(){l.reconcile(m(v(e())))}function g(){if(!a)return c=c.then(async()=>{if(a)return;d();let n=o,i=s,c=await h(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 _(){a=!0,u.retire(),l.retire()}return{resolved(){a||(d(),o++,s=h(e(),!0,r),s.catch(n),g())},retire:_,async close(){_(),await u.close(),await c}}}function w(e){return e}const se=new Set([`virtual:teacss.css`,`teacss.css`]),T=`/*! ${y} */`,E=`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 ce(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 O(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 k(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 le(e,t,n){let r=k(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=O(e,i);if(a<0||!e.startsWith(`)))=>i.map(i=>d[i]);`,a+1)||k(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 A={chrome:`chrome`,edge:`edge`,firefox:`firefox`,hermes:!1,ie:`ie`,ios:`ios_saf`,node:!1,opera:`opera`,rhino:!1,safari:`safari`},j={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 ue(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=j[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&&A[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 M(i,f={}){let p,m=i;if(i&&typeof i==`object`){p=i.lightningcss;let e={...i};delete e.lightningcss,delete e.mode,m=Object.keys(e).length?e:void 0}let h,v=te(m,{envMode:u.env.NODE_ENV===`development`?`dev`:`build`,...f,transformers:[...f.transformers??[],ae()]},e=>{h=_(e)}),y=`/__tea.css`,b,S=!1,C,w,D=!1,O,k,A=new Set,j,M,N,de=0;async function P(){j??=oe(()=>h,async()=>{S?await Te():N&&a(N,String(++de))},e=>b?.logger.error(e instanceof Error?e.message:String(e)));try{await j.resolved()}catch(e){throw j.retire(),j=void 0,e}}async function F(){let e=j;j=void 0,await e?.close(),M&&r(M,{recursive:!0,force:!0}),M=void 0,N=void 0}function I(e){let t=new Set(g(h).map(x));for(let n of A)t.has(n)||e(n);N&&e(N)}let L=new Map,R=new Map,z=new Map,B=new Set,V,H,U=0,W=!1,G,K,q=0,J=0,Y,X;function fe(){X=void 0}function Z(e=v.root){let t=v.getConfigFileList().map(x),n=new Set(t);if(typeof m==`object`){A=n;return}let r=x(typeof m==`string`?l(e,m):e);if(!t.includes(r))for(let e of d)n.add(x(c(r,e)));A=n}async function pe(){let{prefix:e}=await v.getVMPRegexes();return y=`/${e}.css`,y}async function me(){await v.flushTasks();let e=X;if(e&&e.config===v.generator.config&&e.tokens.length===v.tokens.size){let t=0,n=!0;for(let r of v.tokens)if(e.tokens[t++]!==r){n=!1;break}if(n)return await e.promise}let t=[...v.tokens],n={config:v.generator.config,promise:v.generator.generate(t,{minify:!1}).then(({css:e})=>e),tokens:t};X=n;try{return await n.promise}catch(e){throw X===n&&(X=void 0),e}}async function he(){let e=await me(),t=b;if(!t||!(`environments`in t))return e;let n=l(t.root,y.slice(1)),r=t.css.transformer===`lightningcss`&&t.build.cssMinify?{...t,build:{...t.build,cssMinify:!1}}:t,i=(await re(e,n,r)).code;if(!t.build.cssMinify)return i;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},a=e.minifyIdentifiers!=null||e.minifySyntax!=null||e.minifyWhitespace!=null?{minifyIdentifiers:e.minifyIdentifiers??!0,minifySyntax:e.minifySyntax??!0,minifyWhitespace:e.minifyWhitespace??!0}:{minify:!0},o=await ie(i,n,{...r,...a,loader:`css`,sourcemap:!1,target:t.build.cssTarget||void 0},void 0,t,void 0,!0);for(let e of o.warnings)t.logger.warn(`[esbuild css minify] ${e.text}`);return o.code}let{transform:a}=await import(`lightningcss`),o=a({...t.css.lightningcss,code:Buffer.from(i),cssModules:void 0,filename:n,minify:!0,targets:ue(t.build.cssTarget)});for(let e of o.warnings)t.logger.warn(`[lightningcss minify] ${e.message}`);return new TextDecoder().decode(o.code)}function Q(){if(!C)return;let e=C;V&&clearTimeout(V),V=setTimeout(()=>{V=void 0;let t=H,n=(async()=>{if(t&&await t.catch(()=>{}),C!==e||(D?J:q)>=U||(await Ce(),await e.waitForRequestsIdle?.(),C!==e||(D?J:q)>=U))return;let n=U,r=e.moduleGraph.getModuleById(y);if(!r){q=n,D&&(J=n);return}D?(e.moduleGraph.invalidateModule(r),e.watcher.emit(`change`,r.file??y),J=n,q=n):(e.moduleGraph.invalidateModule(r),q=n)})();H=n,n.then(()=>{H===n&&(H=void 0,C===e&&(D?J:q)<U&&Q())},t=>{H===n&&(H=void 0),e.config.logger.error(`TeaCSS failed to invalidate its virtual stylesheet`,{error:t})})},20)}function ge(){fe(),C&&(U++,Q())}function _e(e){if(!C)return;let t=!1;for(let n of e){let e=C.moduleGraph.getModuleById(n);e&&(C.moduleGraph.invalidateModule(e),t=!0)}t&&C.ws.send({type:`full-reload`})}function ve(){V&&clearTimeout(V),V=void 0,D=!1,O?.(),O=void 0,k?.(),k=void 0,C=void 0,H=void 0}function $(){w??=v.onInvalidate(ge)}function ye(){fe(),ve(),w?.(),w=void 0}async function be(e,t){let n={};L.set(t,n),R.set(t,e);try{let r=await ee(v,e,t);return L.get(t)===n?(r?z.set(t,r.code):z.delete(t),v.filter(e,t)?await v.extract(r?.code??e,t):v.modules.has(t)&&await v.extract(``,t),r??null):r??null}finally{L.get(t)===n&&L.delete(t)}}async function xe(e,t){Y&&await Y;let n=be(e,t),r=n.then(()=>{},()=>{});B.add(r);try{return await n}finally{B.delete(r)}}async function Se(e){let t=new Set(e),n=new Set([...R.keys(),...z.keys()]),r=[];for(let e of n)t.has(e)||(L.delete(e),R.delete(e),z.delete(e),r.push(v.extract(``,e)));await Promise.all(r)}async function Ce(){for(;B.size;)await Promise.all(B)}async function we(){let e=Array.from(R),t=new Map(e.map(([e,t])=>[e,z.get(e)??t]));try{await v.reloadConfig()}finally{Z(v.root),(C||N)&&await P()}await pe();let n=[];for(let[r,i]of e){let e=ne(v,r)??i;e===i?z.delete(r):z.set(r,e),e!==t.get(r)&&n.push(r)}_e(n)}async function Te(){let e=Y,t=(async()=>{e&&await e.catch(()=>{}),await Ce(),await we()})();Y=t;try{await t}finally{Y===t&&(Y=void 0)}}let Ee={name:`teacss`,enforce:`pre`,config(e){if(p===!1)return;let t=typeof p==`object`?p:void 0,n={};return e.css?.transformer===void 0&&(n.css={transformer:`lightningcss`,...t?{lightningcss:t}:{}}),e.build?.cssMinify===void 0&&(n.build={cssMinify:`lightningcss`}),n},async configResolved(e){b=e,S=e.command===`serve`,await v.updateRoot(e.root),Z(e.root),await pe(),$()},async buildStart(){W=!1,G=void 0,K=void 0,$(),Z(),!S&&b?.build?.watch?(N||(M=n(t(c(o(),`teacss-vite-watch-`))),N=c(M,`invalidate`),a(N,`0`)),I(e=>this.addWatchFile(e)),await P()):I(e=>this.addWatchFile(e))},async buildEnd(t){if(!(S||t)){if(typeof this.getModuleIds==`function`&&await Se(this.getModuleIds()),!(W||typeof this.getModuleInfo==`function`&&this.getModuleInfo(y)!=null)){K=void 0;return}G=await he(),K=e(`sha256`).update(G).digest(`hex`)}},configureServer(e){ve(),C=e,P().catch(t=>e.config?.logger.error(String(t))),$();let t=()=>{C===e&&(D=!0,J<U&&Q())};if(e.hot?.on(E,t),O=()=>e.hot?.off(E,t),e.httpServer){let t=()=>{C===e&&(ye(),F())};e.httpServer.once(`close`,t),k=()=>e.httpServer?.off(`close`,t)}},async closeBundle(){ye(),(S||!b?.build?.watch)&&await F()},async closeWatcher(){ye(),await F()},transformIndexHtml:{order:`pre`,async handler(e,{filename:t}){v.filter(e,t)?await v.extract(e,t):v.modules.has(t)&&await v.extract(``,t)}},async resolveId(e){return se.has(e)||se.has(e.replace(/^\//,``))||e.startsWith(`${y}?`)?y:null},async load(e){return e===y?S?await me():(W=!0,T):null},async transform(e,t){return t===y?null:await xe(e,t)},async watchChange(e,t){if(e===N||A.has(x(e)))try{await Te()}finally{I(e=>this.addWatchFile(e))}else Y&&await Y;if(t.event===`delete`){let t=new Set([e]);for(let n of[...v.modules.keys(),...L.keys(),...R.keys()])(n===e||n.startsWith(`${e}?`))&&t.add(n);for(let e of t)L.delete(e),R.delete(e),z.delete(e);await Promise.all(Array.from(t,e=>v.extract(``,e)))}},async generateBundle(e,t){if(S)return;let n;for(let[r,i]of Object.entries(t)){if(i.type!==`asset`||!i.fileName.endsWith(`.css`))continue;let a=typeof i.source==`string`?i.source:new TextDecoder().decode(i.source);if(!a.includes(T))continue;n??=G??await he();let o=a.replaceAll(T,n),c=typeof e.assetFileNames!=`string`||e.assetFileNames.includes(`[hash`);if(typeof e.assetFileNames==`function`){let t={name:i.name,names:i.names,originalFileName:i.originalFileName??void 0,originalFileNames:i.originalFileNames,type:`asset`},n=e.assetFileNames({...t,source:i.source}),r=e.assetFileNames({...t,source:o});c=r.includes(`[hash`)||r!==n}if(!b||!(`environments`in b)||!c){i.source=o;continue}let l=this.emitFile({type:`asset`,name:i.name||s(i.fileName),...i.originalFileName?{originalFileName:i.originalFileName}:{},source:o}),u=this.getFileName(l),d=new Set,f=b.build.manifest,p=b.build.ssrManifest;f&&d.add(typeof f==`string`?f:`.vite/manifest.json`),p&&d.add(typeof p==`string`?p:`.vite/ssr-manifest.json`);for(let e of Object.values(t))e.viteMetadata?.importedCss.delete(i.fileName)&&e.viteMetadata.importedCss.add(u),e.type===`chunk`?e.code=le(e.code,i.fileName,u):e!==i&&typeof e.source==`string`&&d.has(e.fileName)&&(e.source=ce(e.source,i.fileName,u));delete t[r]}}};return[Ee,{name:`teacss:api`,enforce:`post`,api:{getContext:()=>v,getMode:()=>`global`},transform(e,t){return!S||t!==y||!e.includes(`import.meta.hot`)?null:`${e}\nimport.meta.hot.send(${JSON.stringify(E)});`},augmentChunkHash(){return K},generateBundle:{order:`post`,async handler(e,t){let n=Ee.generateBundle;typeof n==`function`&&await n.call(this,e,t,!1)}}}]}export{w as defineConfig,M as pluginTeacss};
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}}}function E(e){return e}const pe=new Set([`virtual:teacss.css`,`teacss.css`]),D=`/*! ${b} */`,me=`teacss:css-ready`;function O(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=O(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 k(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 A(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 ge(e,t,n){let r=A(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=k(e,i);if(a<0||!e.startsWith(`)))=>i.map(i=>d[i]);`,a+1)||A(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 j={chrome:`chrome`,edge:`edge`,firefox:`firefox`,hermes:!1,ie:`ie`,ios:`ios_saf`,node:!1,opera:`opera`,rhino:!1,safari:`safari`},M={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=M[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&&j[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 N(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,E,O=!1,k,A,j=new Set,M,N,P,ve=0;async function F(){M??=fe(()=>_,async()=>{w?await Re():P&&a(P,String(++ve))},e=>x?.logger.error(e instanceof Error?e.message:String(e)));try{await M.resolved()}catch(e){throw M.retire(),M=void 0,e}}async function I(){let e=M;M=void 0,await e?.close(),N&&r(N,{recursive:!0,force:!0}),N=void 0,P=void 0}function L(e){let t=new Set(v(_).map(C));for(let n of j)t.has(n)||e(n);P&&e(P)}let R=new Map,z=new Map,B=new Map,V=new Set,H,U,W=0,ye=!1,G,K,q=0,J=0,Y,X;function be(){X=void 0}function xe(e=y.root){let t=y.getConfigFileList().map(C),n=new Set(t);if(typeof g==`object`){j=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)));j=n}async function Se(){let{prefix:e}=await y.getVMPRegexes();return b=`/${e}.css`,b}let Ce=new Map,Z=new WeakMap,Q=new WeakMap;function we(e){let t=S(e);return Ce.set(t,e),`${x?.base??`/`}__teacss_fonts/${t}`}async function Te(){return(await se(await Ee(),we)).toString()}async function Ee(){await y.flushTasks();let e=X;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};X=n;try{return await n.promise}catch(e){throw X===n&&(X=void 0),e}}async function De(){let e=await Ee(),t=x;if(!t||!(`environments`in t))return e;let n=u(t.root,b.slice(1)),r=t.css.transformer===`lightningcss`&&t.build.cssMinify?{...t,build:{...t.build,cssMinify:!1}}:t,i=t.css.transformer===`lightningcss`?ne(e):e,a=(await le(i,n,r)).code;if(!t.build.cssMinify)return a;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},o=await ue(a,n,{...r,...i,loader:`css`,sourcemap:!1,target:t.build.cssTarget||void 0},void 0,t,void 0,!0);for(let e of o.warnings)t.logger.warn(`[esbuild css minify] ${e.text}`);return o.code}let{transform:o}=await import(`lightningcss`),s=o({...t.css.lightningcss,code:Buffer.from(ne(a)),cssModules:void 0,filename:n,minify:!0,targets:_e(t.build.cssTarget)});for(let e of s.warnings)t.logger.warn(`[lightningcss minify] ${e.message}`);return new TextDecoder().decode(s.code)}function Oe(){if(!T)return;let e=T;H&&clearTimeout(H),H=setTimeout(()=>{H=void 0;let t=U,n=(async()=>{if(t&&await t.catch(()=>{}),T!==e||(O?J:q)>=W||(await Ie(),await e.waitForRequestsIdle?.(),T!==e||(O?J:q)>=W))return;let n=W,r=e.moduleGraph.getModuleById(b);if(!r){q=n,O&&(J=n);return}O?(e.moduleGraph.invalidateModule(r),e.watcher.emit(`change`,r.file??b),J=n,q=n):(e.moduleGraph.invalidateModule(r),q=n)})();U=n,n.then(()=>{U===n&&(U=void 0,T===e&&(O?J:q)<W&&Oe())},t=>{U===n&&(U=void 0),e.config.logger.error(`TeaCSS failed to invalidate its virtual stylesheet`,{error:t})})},20)}function ke(){be(),T&&(W++,Oe())}function Ae(e){if(!T)return;let t=!1;for(let n of e){let e=T.moduleGraph.getModuleById(n);e&&(T.moduleGraph.invalidateModule(e),t=!0)}t&&T.ws.send({type:`full-reload`})}function je(){H&&clearTimeout(H),H=void 0,O=!1,k?.(),k=void 0,A?.(),A=void 0,T=void 0,U=void 0}function $(){E??=y.onInvalidate(ke)}function Me(){be(),je(),E?.(),E=void 0}async function Ne(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 Pe(e,t){Y&&await Y;let n=Ne(e,t),r=n.then(()=>{},()=>{});V.add(r);try{return await n}finally{V.delete(r)}}async function Fe(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 Ie(){for(;V.size;)await Promise.all(V)}async function Le(){let e=Array.from(z),t=new Map(e.map(([e,t])=>[e,B.get(e)??t]));try{await y.reloadConfig()}finally{xe(y.root),(T||P)&&await F()}await Se();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)}Ae(n)}async function Re(){let e=Y,t=(async()=>{e&&await e.catch(()=>{}),await Ie(),await Le()})();Y=t;try{await t}finally{Y===t&&(Y=void 0)}}let ze={name:`teacss`,enforce:`pre`,config(e){if(h===!1)return;let t=typeof h==`object`?h:void 0,n={};return e.css?.transformer===void 0&&(n.css={transformer:`lightningcss`,...t?{lightningcss:t}:{}}),e.build?.cssMinify===void 0&&(n.build={cssMinify:`lightningcss`}),n},async configResolved(e){if(x=e,e.css.transformer===`lightningcss`){let{createEasingImportVisitor:t}=await import(`./easing-imports-tv4xC-1o.js`),n=e.css.lightningcss??{};e.css.lightningcss={...n,visitor:t(n,!0)}}w=e.command===`serve`,await y.updateRoot(e.root),xe(e.root),await Se(),$()},async buildStart(){Z.set(this.environment??y,new Map),Q.set(this.environment??y,new Set),ye=!1,G=void 0,K=void 0,$(),xe(),!w&&x?.build?.watch?(P||(N=n(t(c(o(),`teacss-vite-watch-`))),P=c(N,`invalidate`),a(P,`0`)),L(e=>this.addWatchFile(e)),await F()):L(e=>this.addWatchFile(e))},async buildEnd(t){if(w||t)return;if(typeof this.getModuleIds==`function`&&await Fe(this.getModuleIds()),!(ye||typeof this.getModuleInfo==`function`&&this.getModuleInfo(b)!=null)){K=void 0;return}G=await De();let n=Z.get(this.environment??y)??new Map;Z.set(this.environment??y,n);for(let{asset:e}of oe(G))n.has(e.digest)||n.set(e.digest,this.emitFile({type:`asset`,name:S(e),source:e.bytes}));K=e(`sha256`).update(G).digest(`hex`)},configureServer(e){je(),T=e,e.middlewares?.use((t,n,r)=>{let i=`${e.config.base}__teacss_fonts/`,a=t.url?.split(`?`,1)[0],o=a?.startsWith(i)?Ce.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)}),F().catch(t=>e.config?.logger.error(String(t))),$();let t=()=>{T===e&&(O=!0,J<W&&Oe())};if(e.hot?.on(me,t),k=()=>e.hot?.off(me,t),e.httpServer){let t=()=>{T===e&&(Me(),I())};e.httpServer.once(`close`,t),A=()=>e.httpServer?.off(`close`,t)}},async closeBundle(){Me(),(w||!x?.build?.watch)&&await I()},async closeWatcher(){Me(),await I()},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 Te():(ye=!0,D):null},async transform(e,t){if(t===b)return null;let n=await Pe(e,t);if(!w||!/\.css(?:$|\?)/i.test(t))return n;let r=await se(n?.code??e,we);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===P||j.has(C(e)))try{await Re()}finally{L(e=>this.addWatchFile(e))}else Y&&await Y;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(w)return;let n,r=Z.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??=G??await De());let c=new Set,u=async e=>(await se(o.replaceAll(D,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=Q.get(this.environment??y)??new Set;if(e.add(m),Q.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]}}},Be={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 K},generateBundle:{order:`post`,async handler(e,t){let n=ze.generateBundle;typeof n==`function`&&await n.call(this,e,t,!1);let r=Q.get(this.environment??y);for(let e of r??[])delete t[e];r?.clear()}}};function Ve(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[ze,Be,Ve(`pre`),Ve()]}export{E as defineConfig,N as pluginTeacss};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teacss/vite",
3
- "version": "0.8.2",
3
+ "version": "0.8.5",
4
4
  "description": "Vite plugin for TeaCSS.",
5
5
  "homepage": "https://css.teasim.com",
6
6
  "funding": "https://github.com/sponsors/billgo",
@@ -22,11 +22,13 @@
22
22
  "dev": "tsdown --watch"
23
23
  },
24
24
  "dependencies": {
25
- "@teacss/config": "0.8.2",
26
- "@teacss/core": "0.8.2",
27
- "@teacss/directives": "0.8.2",
28
- "@teacss/runtime": "0.8.2",
29
- "lightningcss": "^1.33.0"
25
+ "@jridgewell/remapping": "^2.3.5",
26
+ "@teacss/config": "0.8.5",
27
+ "@teacss/core": "0.8.5",
28
+ "@teacss/directives": "0.8.5",
29
+ "@teacss/runtime": "0.8.5",
30
+ "lightningcss": "^1.33.0",
31
+ "magic-string": "^1.2.3"
30
32
  },
31
33
  "devDependencies": {
32
34
  "consola": "^3.4.2",