@teacss/rsbuild 0.8.4 → 0.9.0-alpha.1

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
@@ -55,4 +55,11 @@ defaults, so explicit and nested `dir` values stay correct. Other browser
55
55
  targets and transformations are unchanged; directional styles require native
56
56
  `:dir()` support. Custom host CSS options must preserve this exclusion.
57
57
 
58
+ Calculated Bézier x coordinates are guarded before both adapter optimization
59
+ and Rsbuild's native Lightning CSS processing, including imported CSS, CSS
60
+ Modules and PostCSS output. The internal loader preserves and composes source
61
+ maps. Literal x coordinates, y overshoot, feature queries and custom-property
62
+ definitions remain unchanged. See the
63
+ [easing audit](../../docs/knowledge/steps-and-cubic-bezier-easing.md#authored-css-exposure).
64
+
58
65
  Pre-1.0. No PostCSS plugin is required beside this adapter.
@@ -0,0 +1,10 @@
1
+ import { EncodedSourceMap } from "@jridgewell/remapping";
2
+ //#region src/easing-loader.d.ts
3
+ interface LoaderContext {
4
+ resourcePath: string;
5
+ sourceMap?: boolean;
6
+ callback(error: Error | null, code: string, map?: EncodedSourceMap | string, additionalData?: unknown): void;
7
+ }
8
+ /** Preserve calculated easing ranges before Rsbuild's native CSS optimizer. */
9
+ export default function easingLoader(this: LoaderContext, source: string, inputMap?: EncodedSourceMap | string, additionalData?: unknown): void;
10
+ //#endregion
@@ -0,0 +1 @@
1
+ import e from"@jridgewell/remapping";import{prepareEasingCss as t}from"@teacss/directives/internal/easing";import n from"magic-string";function r(r,i,a){let o=new n(r);if(t(o),!o.hasChanged()){this.callback(null,r,i,a);return}let s;if(this.sourceMap){let t=o.generateMap({hires:!0,includeContent:!0,source:this.resourcePath});s=i?e([t,i],()=>null):t}let c=a&&typeof a==`object`&&`ast`in a?{...a,ast:void 0}:a;this.callback(null,o.toString(),s,c)}export{r as default};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{createRequire as e}from"node:module";import{statSync as t}from"node:fs";import{dirname as n,isAbsolute as r,resolve as i}from"node:path";import a from"node:process";import{DEFAULT_SOURCE_IGNORE as o,generateSources as s,readSourceFile as c}from"@teacss/runtime/source-generation";const l=/\.(css|postcss|sass|scss|less|stylus|styl)(\?|$)/,u=(e,t=0)=>e<<16|t<<8,d={safari:u(14),chrome:u(90),firefox:u(88),edge:u(90)};function f(e,t){e.lastIndex=0;let n=e.test(t);return e.lastIndex=0,n}function p(e){return/@(presets?|primary|neutral|success|warning|failure|general|focused|custom|source|shortcut|safelist)\b/.test(e)||e.includes(`@apply`)||e.includes(`--at-apply`)||e.includes(`@screen`)||e.includes(`theme(`)||e.includes(`icon(`)}function m(e,n,r,i){let a=t(e,{throwIfNoEntry:!1});a?a.isDirectory()?i(e):n(e):r(e)}const h=/[*?[\]{}()]/;function g(e,t){let r=t;for(;h.test(r);)r=n(r);return i(e,r)}async function _(e,t,n){let{scanSourceFiles:r}=await import(`@teacss/config/internal/source-scan`),i=await r(t,{cwd:e,expandDirectories:!0,ignore:n});return{files:i,sources:i.map(c)}}async function v(e,t,r,i=[]){let{cwd:c=a.cwd(),contents:l}=e,u=r??(await import(`@teacss/runtime`)).defaultFilesystemGlobs,d=i[0]?n(i[0]):c,f=t.config.content?.filesystem,p=f??u,m=e.ignore??(f===void 0?o:[]),{files:h,sources:g}=l?{files:[],sources:l}:await _(d,p,m),v=await s(t,h,g);return{css:v.getLayers()||``,utilities:v.matched.size,files:h}}function y(e,t=[]){return async(n,r)=>{let{scanSourceFiles:i}=await import(`@teacss/config/internal/source-scan`),a=await i(n,{cwd:e,expandDirectories:!0,ignore:[...r,...t]});return{files:a,sources:await Promise.all(a.map(c))}}}const b={icons:`@teacss/preset-icons`,official:`@teacss/preset-official`,standard:`@teacss/preset-standard`};function x(t,n){try{return n.resolve(t)}catch(r){let i;try{i=n.resolve(`teacss/package.json`)}catch{throw r}return e(i).resolve(t)}}function ee(e){return e.filter(e=>!e.startsWith(`.`)&&!r(e))}function te(t,n){let r=e(i(n,`_`));return t.map(e=>{let t=Object.hasOwn(b,e)?b[e]:void 0;return t?x(t,r):r.resolve(e)})}function ne(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}async function S(e,t){return w(e,t,await O(e,t.base,t.entryFile))}async function C(e){let t=e.config.content?.filesystem,n=t??(await import(`@teacss/runtime`)).defaultFilesystemGlobs;return{includes:n.filter(e=>!e.startsWith(`!`)),excludes:[...n.filter(e=>e.startsWith(`!`)).map(e=>e.slice(1)),...t===void 0?o:[]]}}async function w(e,t,n){let{spliceEntry:r}=await import(`@teacss/directives`),{includes:i,excludes:a}=await C(n.generator),{files:o,sources:c}=t.contents?{files:[],sources:t.contents}:t.readSources?await t.readSources(i,a):{files:[],sources:[]},l=await s(n.generator,o,c);return{css:r(e,l.getLayers()||``),files:o,matched:l.matched.size,unknown:n.unknown,hasPreset:n.hasPreset}}async function re(e,{minify:t=!0,targets:n,browserslist:r}={}){let{transform:i,browserslistToTargets:a,Features:o}=await import(`lightningcss`),s=n??(r?.length?a(r):d),c=E(e),l=i({filename:`teacss.css`,code:Buffer.from(c.css),minify:t,errorRecovery:!0,targets:s,exclude:o.DirSelector});return{css:c.restore(l.code.toString()),skipped:l.warnings?.length??0}}const T=/(^|[;{])((?:\s|\/\*[\s\S]*?\*\/)*)all((?:\s|\/\*[\s\S]*?\*\/)*):((?:\s|\/\*[\s\S]*?\*\/)*)(?=(?:var|env)\()/gi;function E(e){let t=`--teacss-optimized-all`;for(;e.includes(t);)t+=`-x`;return{css:e.replace(T,(e,n,r,i,a)=>`${n}${r}${t}${i}:${a}`),restore:e=>e.replaceAll(t,`all`)}}function ie(e,t){return typeof e==`boolean`||e==null?(e??!0)&&t:e.css!==!1&&(e.css===`always`||t)}async function D(e,t,n=[]){let{cwd:r=a.cwd(),configPath:i,config:o}=e,{createGenerator:s}=await import(`@teacss/core`),c=t??(await import(`@teacss/config`)).createRecoveryConfigLoader(),l=o?{config:o,sources:[]}:await c(r,i);return{generator:await s(n.length?{...l.config,safelist:[...l.config.safelist??[],...n]}:l.config),sources:l.sources}}async function O(e,t,n){let[{resolveEntryConfig:r},{createGenerator:i}]=await Promise.all([import(`@teacss/config`),import(`@teacss/core`)]),{config:a,sources:o,unknown:s}=await r(e,t,n);return{generator:await i(a),sources:o,unknown:s,hasPreset:!!a.presets?.length,hasEntryConfig:!!(a.presets?.length||a.content||a.shortcuts||Object.keys(a.theme??{}).length||s.length),safelist:(a.safelist??[]).filter(e=>typeof e==`string`)}}async function ae(e,t,n){let[{transformDirectives:r},{default:i}]=await Promise.all([import(`@teacss/directives`),import(`magic-string`)]),a=new i(e);return await r(a,n,{},t),a.toString()}function k(e={}){let{optimize:r,targets:o,test:s=/index\.css$/,apply:c,...u}=e,d=c!==!1,h=typeof c==`object`&&c.test||l;return{name:`teacss`,setup(e){e.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t({tools:{lightningcssLoader:{exclude:{dirSelector:!0}}}},e));let c,_=()=>c??=import(`@teacss/config`).then(({createRecoveryConfigLoader:e})=>e()),b=new Map,x=new Map,S=new Map,T=e=>{let t=b.get(e);if(t)return t;let n=_().then(e=>D(u,e));return b.set(e,n),n};e.onBeforeEnvironmentCompile(({environment:e})=>{b.delete(e.name),x.delete(e.name)}),e.transform({test:d?[l,s]:s},async({code:c,environment:l,addDependency:E,addMissingDependency:k,addContextDependency:A,resourcePath:j})=>{let M=j||``,N=f(s,M),P=d&&p(c),F=P&&f(h,M);if(!N&&!F)return c;let{parseEntry:oe,scanTopLevelAtRules:se,diagnoseEntry:ce}=await import(`@teacss/config`),I=N?oe(c):void 0,L=I?.hasTeacss===!0;if(!L&&!F)return c;let R=!!(I&&(ce(c).length||I.rolePalettes||I.presets.length>0||I.sources.length>0||I.custom.length>0||I.shortcuts.length>0)),le=L&&se(c).some(e=>e.name===`import`&&e.terminator===`;`),z=R||le,B=n(j||`${u.cwd??a.cwd()}/index.css`),V=j||i(B,`index.css`);for(let e of I?.sources??[])e.exclude||m(g(B,e.glob),E,k,A);let H=ee(I?.presets??[]),U,W,G;if(L){if(z)U=O(c,B,V).then(async e=>{if(!R&&!e.hasEntryConfig){let t=await D(u,await _(),e.safelist);e={...e,generator:t.generator,sources:[...e.sources,...t.sources],hasPreset:!!t.generator.config.presets.length,scanBase:t.sources[0]?n(t.sources[0]):u.cwd??a.cwd()}}return W={...e,sources:Array.from(new Set([V,...e.sources]))},W}).catch(async t=>{let{getConfigSourcesFromError:n}=await import(`@teacss/config`),r=n(t);for(let e of r)m(e,E,k,A);let i=S.get(l.name);if(!i||i.id!==V)throw t;let a=Array.from(new Set([...i.state.sources,...r]));return e.logger.warn(`@teacss/rsbuild: keeping the last valid config for ${V} while its preset graph is invalid`),a.length===i.state.sources.length?i.state:{...i.state,sources:a}}),x.set(l.name,U),d?b.set(l.name,U):b.delete(l.name);else if(I.safelist.length>0){let{expandClassGroups:e,splitClassTokens:t}=await import(`@teacss/core`),n=I.safelist.flatMap(n=>t(e(n))),r=_().then(e=>D(u,e,n));b.set(l.name,r),x.delete(l.name),S.delete(l.name)}else b.delete(l.name),x.delete(l.name),S.delete(l.name)}let K=()=>{W&&G&&U&&x.get(l.name)===U&&S.set(l.name,{id:V,packagePresetDependencies:G,packagePresetSpecifiers:H,state:W})},q=c,J;if(P&&(L||F)){try{J=await T(l.name)}catch(e){if(!U){let{getConfigSourcesFromError:t}=await import(`@teacss/config`);for(let n of t(e))m(n,E,k,A)}throw e}for(let e of J.sources)m(e,E,k,A);q=await ae(c,M,J.generator)}if(!L)return q===c?c:{code:q};let Y,X,Z,Q=[],ue=!0,$=[];if(z){let n=U?await U:await O(q,B,V),r=n.scanBase??B;for(let e of(await C(n.generator)).includes)m(g(r,e),E,k,A);({css:Y,files:Z,matched:X,unknown:Q,hasPreset:ue}=await w(q,{base:B,contents:u.contents,readSources:y(r,u.ignore)},n));try{G=te(H,B)}catch(n){let r=S.get(l.name);if(!(r?.id===V&&ne(r.packagePresetSpecifiers,H)&&r.packagePresetDependencies.some(e=>!t(e,{throwIfNoEntry:!1}))))throw n;G=r.packagePresetDependencies,e.logger.warn(`@teacss/rsbuild: keeping the last valid package preset dependencies for ${V} while package entries are unavailable`)}$=Array.from(new Set([...G,...n.sources]))}else{J??=await T(l.name);let e=await v(u,J.generator,void 0,J.sources),{spliceEntry:t}=await import(`@teacss/directives`);Y=t(q,e.css),X=e.utilities,Z=e.files,$=J.sources}ue||e.logger.warn(`@teacss/rsbuild: ${j||`entry`} declares no @presets — no utilities generated. Add one, e.g. \`@presets "standard";\``),Q.length&&e.logger.warn(`@teacss/rsbuild: ${Q.length} @custom var(s) not registered (unknown namespace / illegal color step): ${Q.join(`, `)}`);for(let e of Z)E(e);for(let e of $)m(e,E,k,A);let de=(l.config.mode??a.env.NODE_ENV)===`production`;if(!(r??de))return e.logger.info(`@teacss/rsbuild: ${X} utilities (dev, unoptimized) → ${(Y.length/1024).toFixed(1)}KB`),K(),{code:Y};let fe=typeof r==`object`&&r.minify!==void 0?r.minify:ie(l.config.output.minify,de),{css:pe,skipped:me}=await re(Y,{minify:fe,targets:o,browserslist:l.browserslist});return e.logger.info(`@teacss/rsbuild: ${X} utilities${me?`, ${me} skipped`:``} → ${(pe.length/1024).toFixed(1)}KB`),K(),{code:pe}})}}}export{S as generateEntryCss,y as makeReadSources,k as pluginTeacss};
1
+ import{createRequire as e}from"node:module";import{statSync as t}from"node:fs";import{dirname as n,isAbsolute as r,posix as i,resolve as a}from"node:path";import o from"node:process";import{fileURLToPath as s}from"node:url";import{DEFAULT_SOURCE_IGNORE as c,generateSources as l,readSourceFile as u}from"@teacss/runtime/source-generation";import{bundledAssetName as d,collectBundledAssets as f}from"@teacss/runtime/internal/bundled-assets";var p=class{apply(e){e.hooks.thisCompilation.tap(`teacss-fonts`,t=>{t.hooks.processAssets.tap({name:`teacss-fonts`,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS},()=>{let{RawSource:n,ReplaceSource:r}=e.webpack.sources;for(let{name:e,source:a}of t.getAssets()){if(!e.endsWith(`.css`))continue;let o=f(a.source().toString());if(!o.length)continue;let s=new r(a);for(let{start:r,end:a,asset:c}of o){let o=`teacss-fonts/${d(c)}`;t.getAsset(o)||t.emitAsset(o,new n(Buffer.from(c.bytes)),{immutable:!0}),s.replace(r,a-1,`url(${JSON.stringify(`./${i.relative(i.dirname(e),o)}`)})`)}t.updateAsset(e,s)}})})}};const m=/\.(css|postcss|sass|scss|less|stylus|styl)(\?|$)/,h=(e,t=0)=>e<<16|t<<8,g={safari:h(14),chrome:h(90),firefox:h(88),edge:h(90)};function _(e,t){e.lastIndex=0;let n=e.test(t);return e.lastIndex=0,n}function ee(e){return/@(presets?|primary|neutral|success|warning|failure|general|focused|custom|source|shortcut|safelist)\b/.test(e)||e.includes(`@apply`)||e.includes(`--at-apply`)||e.includes(`@screen`)||e.includes(`theme(`)||e.includes(`icon(`)}function v(e,n,r,i){let a=t(e,{throwIfNoEntry:!1});a?a.isDirectory()?i(e):n(e):r(e)}const y=/[*?[\]{}()]/;function b(e,t){let r=t;for(;y.test(r);)r=n(r);return a(e,r)}async function x(e,t,n){let{scanSourceFiles:r}=await import(`@teacss/config/internal/source-scan`),i=await r(t,{cwd:e,expandDirectories:!0,ignore:n});return{files:i,sources:i.map(u)}}async function te(e,t,r,i=[]){let{cwd:a=o.cwd(),contents:s}=e,u=r??(await import(`@teacss/runtime`)).defaultFilesystemGlobs,d=i[0]?n(i[0]):a,f=t.config.content?.filesystem,p=f??u,m=e.ignore??(f===void 0?c:[]),{files:h,sources:g}=s?{files:[],sources:s}:await x(d,p,m),_=await l(t,h,g);return{css:_.getLayers()||``,utilities:_.matched.size,files:h}}function S(e,t=[]){return async(n,r)=>{let{scanSourceFiles:i}=await import(`@teacss/config/internal/source-scan`),a=await i(n,{cwd:e,expandDirectories:!0,ignore:[...r,...t]});return{files:a,sources:await Promise.all(a.map(u))}}}const C={icons:`@teacss/preset-icons`,official:`@teacss/preset-official`,standard:`@teacss/preset-standard`};function w(t,n){try{return n.resolve(t)}catch(r){let i;try{i=n.resolve(`teacss/package.json`)}catch{throw r}return e(i).resolve(t)}}function ne(e){return e.filter(e=>!e.startsWith(`.`)&&!r(e))}function re(t,n){let r=e(a(n,`_`));return t.map(e=>{let t=Object.hasOwn(C,e)?C[e]:void 0;return t?w(t,r):r.resolve(e)})}function ie(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}async function T(e,t){return D(e,t,await M(e,t.base,t.entryFile))}async function E(e){let t=e.config.content?.filesystem,n=t??(await import(`@teacss/runtime`)).defaultFilesystemGlobs;return{includes:n.filter(e=>!e.startsWith(`!`)),excludes:[...n.filter(e=>e.startsWith(`!`)).map(e=>e.slice(1)),...t===void 0?c:[]]}}async function D(e,t,n){let{spliceEntry:r}=await import(`@teacss/directives`),{includes:i,excludes:a}=await E(n.generator),{files:o,sources:s}=t.contents?{files:[],sources:t.contents}:t.readSources?await t.readSources(i,a):{files:[],sources:[]},c=await l(n.generator,o,s);return{css:r(e,c.getLayers()||``),files:o,matched:c.matched.size,unknown:n.unknown,hasPreset:n.hasPreset}}async function ae(e,{minify:t=!0,targets:n,browserslist:r}={}){let{transform:i,browserslistToTargets:a,Features:o}=await import(`lightningcss`),{prepareEasingStylesheet:s}=await import(`@teacss/directives/internal/easing`),c=n??(r?.length?a(r):g),l=k(s(e)),u=i({filename:`teacss.css`,code:Buffer.from(l.css),minify:t,errorRecovery:!0,targets:c,exclude:o.DirSelector});return{css:l.restore(u.code.toString()),skipped:u.warnings?.length??0}}const O=/(^|[;{])((?:\s|\/\*[\s\S]*?\*\/)*)all((?:\s|\/\*[\s\S]*?\*\/)*):((?:\s|\/\*[\s\S]*?\*\/)*)(?=(?:var|env)\()/gi;function k(e){let t=`--teacss-optimized-all`;for(;e.includes(t);)t+=`-x`;return{css:e.replace(O,(e,n,r,i,a)=>`${n}${r}${t}${i}:${a}`),restore:e=>e.replaceAll(t,`all`)}}function A(e,t){return typeof e==`boolean`||e==null?(e??!0)&&t:e.css!==!1&&(e.css===`always`||t)}async function j(e,t,n=[]){let{cwd:r=o.cwd(),configPath:i,config:a}=e,{createGenerator:s}=await import(`@teacss/core`),c=t??(await import(`@teacss/config`)).createRecoveryConfigLoader(),l=a?{config:a,sources:[]}:await c(r,i);return{generator:await s(n.length?{...l.config,safelist:[...l.config.safelist??[],...n]}:l.config,{engine:`auto`}),sources:l.sources}}async function M(e,t,n){let[{resolveEntryConfig:r},{createGenerator:i}]=await Promise.all([import(`@teacss/config`),import(`@teacss/core`)]),{config:a,sources:o,unknown:s}=await r(e,t,n);return{generator:await i(a,{engine:`auto`}),sources:o,unknown:s,hasPreset:!!a.presets?.length,hasEntryConfig:!!(a.presets?.length||a.content||a.shortcuts||Object.keys(a.theme??{}).length||s.length),safelist:(a.safelist??[]).filter(e=>typeof e==`string`)}}async function oe(e,t,n){let[{transformDirectives:r},{default:i}]=await Promise.all([import(`@teacss/directives`),import(`magic-string`)]),a=new i(e);return await r(a,n,{},t),a.toString()}function N(e={}){let{optimize:r,targets:i,test:c=/index\.css$/,apply:l,...u}=e,d=l!==!1,f=typeof l==`object`&&l.test||m;return{name:`teacss`,setup(e){e.modifyRspackConfig(e=>{e.plugins??=[],e.plugins.push(new p)}),e.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t({tools:{lightningcssLoader:{exclude:{dirSelector:!0}}}},e)),e.modifyBundlerChain({order:`post`,handler(e,{CHAIN_ID:t,environment:n}){let r=n.config;if(r.tools.lightningcssLoader===!1&&!A(r.output.minify,r.mode===`production`))return;let i=s(new URL(import.meta.url.endsWith(`.ts`)?`./easing-loader.ts`:`./easing-loader.js`,import.meta.url)),a=[...e.module.rules.values()];for(let e of a){if(a.push(...e.rules.values(),...e.oneOfs.values()),!e.uses.has(t.USE.CSS))continue;let n=e.uses.has(`teacss-easing`),r=e.uses.has(t.USE.LIGHTNINGCSS)?t.USE.LIGHTNINGCSS:t.USE.CSS;e.use(`teacss-easing`).loader(i).after(r),n||e.use(t.USE.CSS).tap(e=>{let t=e;return{...t,importLoaders:(t.importLoaders??0)+1}})}}});let l,h=()=>l??=import(`@teacss/config`).then(({createRecoveryConfigLoader:e})=>e()),g=new Map,y=new Map,x=new Map,C=e=>{let t=g.get(e);if(t)return t;let n=h().then(e=>j(u,e));return g.set(e,n),n};e.onBeforeEnvironmentCompile(({environment:e})=>{g.delete(e.name),y.delete(e.name)}),e.transform({test:d?[m,c]:c},async({code:s,environment:l,addDependency:p,addMissingDependency:m,addContextDependency:w,resourcePath:T})=>{let O=T||``,k=_(c,O),N=d&&ee(s),P=N&&_(f,O);if(!k&&!P)return s;let{parseEntry:se,scanTopLevelAtRules:ce,diagnoseEntry:le}=await import(`@teacss/config`),F=k?se(s):void 0,I=F?.hasTeacss===!0;if(!I&&!P)return s;let L=!!(F&&(le(s).length||F.rolePalettes||F.presets.length>0||F.sources.length>0||F.custom.length>0||F.shortcuts.length>0)),ue=I&&ce(s).some(e=>e.name===`import`&&e.terminator===`;`),R=L||ue,z=n(T||`${u.cwd??o.cwd()}/index.css`),B=T||a(z,`index.css`);for(let e of F?.sources??[])e.exclude||v(b(z,e.glob),p,m,w);let V=ne(F?.presets??[]),H,U,W;if(I){if(R)H=M(s,z,B).then(async e=>{if(!L&&!e.hasEntryConfig){let t=await j(u,await h(),e.safelist);e={...e,generator:t.generator,sources:[...e.sources,...t.sources],hasPreset:!!t.generator.config.presets.length,scanBase:t.sources[0]?n(t.sources[0]):u.cwd??o.cwd()}}return U={...e,sources:Array.from(new Set([B,...e.sources]))},U}).catch(async t=>{let{getConfigSourcesFromError:n}=await import(`@teacss/config`),r=n(t);for(let e of r)v(e,p,m,w);let i=x.get(l.name);if(!i||i.id!==B)throw t;let a=Array.from(new Set([...i.state.sources,...r]));return e.logger.warn(`@teacss/rsbuild: keeping the last valid config for ${B} while its preset graph is invalid`),a.length===i.state.sources.length?i.state:{...i.state,sources:a}}),y.set(l.name,H),d?g.set(l.name,H):g.delete(l.name);else if(F.safelist.length>0){let{expandClassGroups:e,splitClassTokens:t}=await import(`@teacss/core`),n=F.safelist.flatMap(n=>t(e(n))),r=h().then(e=>j(u,e,n));g.set(l.name,r),y.delete(l.name),x.delete(l.name)}else g.delete(l.name),y.delete(l.name),x.delete(l.name)}let G=()=>{U&&W&&H&&y.get(l.name)===H&&x.set(l.name,{id:B,packagePresetDependencies:W,packagePresetSpecifiers:V,state:U})},K=s,q;if(N&&(I||P)){try{q=await C(l.name)}catch(e){if(!H){let{getConfigSourcesFromError:t}=await import(`@teacss/config`);for(let n of t(e))v(n,p,m,w)}throw e}for(let e of q.sources)v(e,p,m,w);K=await oe(s,O,q.generator)}if(!I)return K===s?s:{code:K};let J,Y,X,Z=[],Q=!0,$=[];if(R){let n=H?await H:await M(K,z,B),r=n.scanBase??z;for(let e of(await E(n.generator)).includes)v(b(r,e),p,m,w);({css:J,files:X,matched:Y,unknown:Z,hasPreset:Q}=await D(K,{base:z,contents:u.contents,readSources:S(r,u.ignore)},n));try{W=re(V,z)}catch(n){let r=x.get(l.name);if(!(r?.id===B&&ie(r.packagePresetSpecifiers,V)&&r.packagePresetDependencies.some(e=>!t(e,{throwIfNoEntry:!1}))))throw n;W=r.packagePresetDependencies,e.logger.warn(`@teacss/rsbuild: keeping the last valid package preset dependencies for ${B} while package entries are unavailable`)}$=Array.from(new Set([...W,...n.sources]))}else{q??=await C(l.name);let e=await te(u,q.generator,void 0,q.sources),{spliceEntry:t}=await import(`@teacss/directives`);J=t(K,e.css),Y=e.utilities,X=e.files,$=q.sources}Q||e.logger.warn(`@teacss/rsbuild: ${T||`entry`} declares no @presets — no utilities generated. Add one, e.g. \`@presets "standard";\``),Z.length&&e.logger.warn(`@teacss/rsbuild: ${Z.length} @custom var(s) not registered (unknown namespace / illegal color step): ${Z.join(`, `)}`);for(let e of X)p(e);for(let e of $)v(e,p,m,w);let de=(l.config.mode??o.env.NODE_ENV)===`production`;if(!(r??de))return e.logger.info(`@teacss/rsbuild: ${Y} utilities (dev, unoptimized) → ${(J.length/1024).toFixed(1)}KB`),G(),{code:J};let fe=typeof r==`object`&&r.minify!==void 0?r.minify:A(l.config.output.minify,de),{css:pe,skipped:me}=await ae(J,{minify:fe,targets:i,browserslist:l.browserslist});return e.logger.info(`@teacss/rsbuild: ${Y} utilities${me?`, ${me} skipped`:``} → ${(pe.length/1024).toFixed(1)}KB`),G(),{code:pe}})}}}export{T as generateEntryCss,S as makeReadSources,N as pluginTeacss};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teacss/rsbuild",
3
- "version": "0.8.4",
3
+ "version": "0.9.0-alpha.1",
4
4
  "description": "Rsbuild integration for TeaCSS — generate utilities and optimize with lightningcss, no PostCSS.",
5
5
  "homepage": "https://css.teasim.com",
6
6
  "funding": "https://github.com/sponsors/billgo",
@@ -22,17 +22,19 @@
22
22
  "dev": "tsdown --watch"
23
23
  },
24
24
  "dependencies": {
25
- "@teacss/config": "0.8.4",
26
- "@teacss/core": "0.8.4",
27
- "@teacss/directives": "0.8.4",
28
- "@teacss/runtime": "0.8.4",
25
+ "@jridgewell/remapping": "^2.3.5",
26
+ "@teacss/config": "0.9.0-alpha.1",
27
+ "@teacss/core": "0.9.0-alpha.1",
28
+ "@teacss/directives": "0.9.0-alpha.1",
29
+ "@teacss/engine": "0.8.5-alpha.4",
30
+ "@teacss/runtime": "0.9.0-alpha.1",
29
31
  "lightningcss": "^1.33.0",
30
32
  "magic-string": "^1.2.3"
31
33
  },
32
34
  "devDependencies": {
33
35
  "@rsbuild/core": "^2.2.3",
34
- "@teacss/preset-official": "0.8.4",
35
- "@teacss/preset-standard": "0.8.4",
36
+ "@teacss/preset-official": "0.9.0-alpha.1",
37
+ "@teacss/preset-standard": "0.9.0-alpha.1",
36
38
  "consola": "^3.4.2"
37
39
  },
38
40
  "peerDependencies": {