@tailwindcss/cli
Advanced tools
+21
-6
| #!/usr/bin/env node | ||
| var le=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),ae=e=>{throw TypeError(e)};var G=(e,t,i)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&ae("Object expected");var r,o;i&&(r=t[le("asyncDispose")]),r===void 0&&(r=t[le("dispose")],i&&(o=r)),typeof r!="function"&&ae("Object not disposable"),o&&(r=function(){try{o.call(this)}catch(n){return Promise.reject(n)}}),e.push([i,r,t])}else i&&e.push([i]);return t},J=(e,t,i)=>{var r=typeof SuppressedError=="function"?SuppressedError:function(u,s,l,p){return p=Error(l),p.name="SuppressedError",p.error=u,p.suppressed=s,p},o=u=>t=i?new r(u,t,"An error was suppressed during disposal"):(i=!0,u),n=u=>{for(;u=e.pop();)try{var s=u[1]&&u[1].call(u[2]);if(u[0])return Promise.resolve(s).then(n,l=>(o(l),n()))}catch(l){o(l)}if(i)throw t};return n()};import ke from"mri";function pe(e,t=process.argv.slice(2)){for(let[o,n]of t.entries())n==="-"&&(t[o]="__IO_DEFAULT_VALUE__");let i=ke(t);for(let o in i){let n=i[o];o!=="_"&&Array.isArray(n)&&(n=n[n.length-1]),n==="__IO_DEFAULT_VALUE__"&&(n="-"),i[o]=n}let r={_:i._};for(let[o,{type:n,alias:u,default:s=n==="boolean"?!1:null}]of Object.entries(e)){if(r[o]=s,u){let l=u.slice(1);i[l]!==void 0&&(r[o]=ue(i[l],n))}{let l=o.slice(2);i[l]!==void 0&&(r[o]=ue(i[l],n))}}return r}function ue(e,t){switch(t){case"string":return D(e);case"boolean":return O(e);case"number":return R(e);case"boolean | string":return O(e)??D(e);case"number | string":return R(e)??D(e);case"boolean | number":return O(e)??R(e);case"boolean | number | string":return O(e)??R(e)??D(e);default:throw new Error(`Unhandled type: ${t}`)}}function O(e){if(e===!0||e===!1)return e;if(e==="true")return!0;if(e==="false")return!1}function R(e){if(typeof e=="number")return e;{let t=Number(e);if(!Number.isNaN(t))return t}}function D(e){return`${e}`}import We from"@parcel/watcher";import{compile as Ee,env as Ue,Instrumentation as he,optimize as Pe,toSourceMap as P}from"@tailwindcss/node";import{clearRequireCache as Ie}from"@tailwindcss/node/require-cache";import{Scanner as Le}from"@tailwindcss/oxide";import{existsSync as je}from"fs";import Z from"fs/promises";import C from"path";var A=class{#e=new Set([]);queueMacrotask(t){let i=setTimeout(t,0);return this.add(()=>{clearTimeout(i)})}add(t){return this.#e.add(t),()=>{this.#e.delete(t),t()}}async dispose(){for(let t of this.#e)await t();this.#e.clear()}};import Re from"fs";import me from"path";import{stripVTControlCharacters as De}from"util";import w from"picocolors";import ce from"enhanced-resolve";import Me from"fs";import{createRequire as Be}from"module";var Oe=Be(import.meta.url).resolve;function fe(e){if(typeof globalThis.__tw_resolve=="function"){let t=globalThis.__tw_resolve(e);if(t)return t}return Oe(e)}var Xe=ce.ResolverFactory.createResolver({fileSystem:new ce.CachedInputFileSystem(Me,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"]});function de(e){let t=typeof e=="number"?BigInt(e):e;return t<1000n?`${t}ns`:(t/=1000n,t<1000n?`${t}\xB5s`:(t/=1000n,t<1000n?`${t}ms`:(t/=1000n,t<60n?`${t}s`:(t/=60n,t<60n?`${t}m`:(t/=60n,t<24n?`${t}h`:(t/=24n,`${t}d`))))))}var z={indent:2};function N(){return`${w.italic(w.bold(w.blue("\u2248")))} tailwindcss ${w.blue(`v${ze()}`)}`}function F(e){return`${w.dim(w.blue("`"))}${w.blue(e)}${w.dim(w.blue("`"))}`}function W(e,t=process.cwd(),{preferAbsoluteIfShorter:i=!0}={}){let r=me.relative(t,e);return r.startsWith("..")||(r=`.${me.sep}${r}`),i&&r.length>e.length?e:r}function Q(e,t){let i=e.split(" "),r=[],o="",n=0;for(let u of i){let s=De(u).length;n+s+1>t&&(r.push(o),o="",n=0),o+=(n?" ":"")+u,n+=s+(n?1:0)}return n&&r.push(o),r}function E(e){let t=de(e);return e<=50*1e6?w.green(t):e<=300*1e6?w.blue(t):e<=1e3*1e6?w.yellow(t):w.red(t)}function k(e,t=0){return`${" ".repeat(t+z.indent)}${e}`}function x(e=""){process.stderr.write(`${e} | ||
| `)}function h(e=""){process.stdout.write(`${e} | ||
| `)}function ze(){if(typeof globalThis.__tw_version=="string")return globalThis.__tw_version;let{version:e}=JSON.parse(Re.readFileSync(fe("tailwindcss/package.json"),"utf-8"));return e}import U from"fs/promises";import Ne from"path";function Y(){return new Promise((e,t)=>{let i="";process.stdin.on("data",r=>{i+=r}),process.stdin.on("end",()=>e(i)),process.stdin.on("error",r=>t(r))})}async function H(e,t){if(!await U.stat(e).then(r=>r.isCharacterDevice()||r.isFIFO()).catch(()=>!1))try{if(await U.readFile(e,"utf8")===t)return}catch{}await U.mkdir(Ne.dirname(e),{recursive:!0}),await U.writeFile(e,t,"utf8")}var ye=String.raw,a=Ue.DEBUG;function I(){return{"--input":{type:"string",description:"Input file",alias:"-i"},"--output":{type:"string",description:"Output file",alias:"-o",default:"-"},"--watch":{type:"boolean | string",description:"Watch for changes and rebuild as needed, and use `always` to keep watching when stdin is closed",alias:"-w",values:["always"]},"--minify":{type:"boolean",description:"Optimize and minify the output",alias:"-m"},"--optimize":{type:"boolean",description:"Optimize the output without minifying"},"--cwd":{type:"string",description:"The current working directory",default:"."},"--map":{type:"boolean | string",description:"Generate a source map",default:!1}}}async function X(e){try{return await e()}catch(t){t instanceof Error&&x(t.toString()),process.exit(1)}}async function ge(e){var ie=[];try{x(N());x();let t=G(ie,new he);a&&t.start("[@tailwindcss/cli] (initial build)");let i=C.resolve(e["--cwd"]);e["--output"]&&e["--output"]!=="-"&&(e["--output"]=C.resolve(i,e["--output"]));e["--input"]&&e["--input"]!=="-"&&(e["--input"]=C.resolve(i,e["--input"]),je(e["--input"])||(x(`Specified input file ${F(W(e["--input"]))} does not exist.`),process.exit(1)));e["--input"]===e["--output"]&&e["--input"]!=="-"&&(x(`Specified input file ${F(W(e["--input"]))} and output file ${F(W(e["--output"]))} are identical.`),process.exit(1));e["--map"]==="-"&&(x("Use --map without a value to inline the source map"),process.exit(1));e["--map"]&&e["--map"]!==!0&&(e["--map"]=C.resolve(i,e["--map"]));let r=process.hrtime.bigint();let o=e["--input"]?e["--input"]==="-"?await Y():await Z.readFile(e["--input"],"utf-8"):ye` | ||
| var he=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),ge=e=>{throw TypeError(e)};var te=(e,t,n)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&ge("Object expected");var i,o;n&&(i=t[he("asyncDispose")]),i===void 0&&(i=t[he("dispose")],n&&(o=i)),typeof i!="function"&&ge("Object not disposable"),o&&(i=function(){try{o.call(this)}catch(r){return Promise.reject(r)}}),e.push([n,i,t])}else n&&e.push([n]);return t},ne=(e,t,n)=>{var i=typeof SuppressedError=="function"?SuppressedError:function(a,s,l,c){return c=Error(l),c.name="SuppressedError",c.error=a,c.suppressed=s,c},o=a=>t=n?new i(a,t,"An error was suppressed during disposal"):(n=!0,a),r=a=>{for(;a=e.pop();)try{var s=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(s).then(r,l=>(o(l),r()))}catch(l){o(l)}if(n)throw t};return r()};import De from"mri";function v(e,t=process.argv.slice(2)){for(let[o,r]of t.entries())r==="-"&&(t[o]="__IO_DEFAULT_VALUE__");let n=De(t);for(let o in n){let r=n[o];o!=="_"&&Array.isArray(r)&&(r=r[r.length-1]),r==="__IO_DEFAULT_VALUE__"&&(r="-"),n[o]=r}let i={_:n._};for(let[o,{type:r,alias:a,default:s=r==="boolean"?!1:null}]of Object.entries(e)){if(i[o]=s,a){let l=a.slice(1);n[l]!==void 0&&(i[o]=we(n[l],r))}{let l=o.slice(2);n[l]!==void 0&&(i[o]=we(n[l],r))}}return i}function we(e,t){switch(t){case"string":return z(e);case"boolean":return j(e);case"number":return U(e);case"boolean | string":return j(e)??z(e);case"number | string":return U(e)??z(e);case"boolean | number":return j(e)??U(e);case"boolean | number | string":return j(e)??U(e)??z(e);default:throw new Error(`Unhandled type: ${t}`)}}function j(e){if(e===!0||e===!1)return e;if(e==="true")return!0;if(e==="false")return!1}function U(e){if(typeof e=="number")return e;{let t=Number(e);if(!Number.isNaN(t))return t}}function z(e){return`${e}`}import Qe from"@parcel/watcher";import{compile as He,env as Ze,Instrumentation as xe,optimize as Xe,toSourceMap as Y}from"@tailwindcss/node";import{clearRequireCache as et}from"@tailwindcss/node/require-cache";import{Scanner as tt}from"@tailwindcss/oxide";import{existsSync as nt}from"fs";import ae from"fs/promises";import T from"path";var k=class{#e=new Set([]);queueMacrotask(t){let n=setTimeout(t,0);return this.add(()=>{clearTimeout(n)})}add(t){return this.#e.add(t),()=>{this.#e.delete(t),t()}}async dispose(){for(let t of this.#e)await t();this.#e.clear()}};import Ye from"fs";import Ce from"path";import{stripVTControlCharacters as Ve}from"util";import w from"picocolors";import be from"enhanced-resolve";import We from"fs";import{createRequire as Ge}from"module";var Ke=Ge(import.meta.url).resolve;function ye(e){if(typeof globalThis.__tw_resolve=="function"){let t=globalThis.__tw_resolve(e);if(t)return t}return Ke(e)}var $t=be.ResolverFactory.createResolver({fileSystem:new be.CachedInputFileSystem(We,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"]});function Se(e){let t=typeof e=="number"?BigInt(e):e;return t<1000n?`${t}ns`:(t/=1000n,t<1000n?`${t}\xB5s`:(t/=1000n,t<1000n?`${t}ms`:(t/=1000n,t<60n?`${t}s`:(t/=60n,t<60n?`${t}m`:(t/=60n,t<24n?`${t}h`:(t/=24n,`${t}d`))))))}var I={indent:2};function M(){return`${w.italic(w.bold(w.blue("\u2248")))} tailwindcss ${w.blue(`v${qe()}`)}`}function A(e){return`${w.dim(w.blue("`"))}${w.blue(e)}${w.dim(w.blue("`"))}`}function D(e,t=process.cwd(),{preferAbsoluteIfShorter:n=!0}={}){let i=Ce.relative(t,e);return i.startsWith("..")||(i=`.${Ce.sep}${i}`),n&&i.length>e.length?e:i}function ie(e,t){let n=e.split(" "),i=[],o="",r=0;for(let a of n){let s=Ve(a).length;r+s+1>t&&(i.push(o),o="",r=0),o+=(r?" ":"")+a,r+=s+(r?1:0)}return r&&i.push(o),i}function W(e){let t=Se(e);return e<=50*1e6?w.green(t):e<=300*1e6?w.blue(t):e<=1e3*1e6?w.yellow(t):w.red(t)}function P(e,t=0){return`${" ".repeat(t+I.indent)}${e}`}function _(e=""){process.stderr.write(`${e} | ||
| `)}function G(e=""){process.stdout.write(`${e} | ||
| `)}function qe(){if(typeof globalThis.__tw_version=="string")return globalThis.__tw_version;let{version:e}=JSON.parse(Ye.readFileSync(ye("tailwindcss/package.json"),"utf-8"));return e}import K from"fs/promises";import Je from"path";function re(){return new Promise((e,t)=>{let n="";process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>e(n)),process.stdin.on("error",i=>t(i))})}async function se(e,t){if(!await K.stat(e).then(i=>i.isCharacterDevice()||i.isFIFO()).catch(()=>!1))try{if(await K.readFile(e,"utf8")===t)return}catch{}await K.mkdir(Je.dirname(e),{recursive:!0}),await K.writeFile(e,t,"utf8")}var _e=String.raw,u=Ze.DEBUG;function $(){return{"--input":{type:"string",description:"Input file",alias:"-i"},"--output":{type:"string",description:"Output file",alias:"-o",default:"-"},"--watch":{type:"boolean | string",description:"Watch for changes and rebuild as needed, and use `always` to keep watching when stdin is closed",alias:"-w",values:["always"]},"--minify":{type:"boolean",description:"Optimize and minify the output",alias:"-m"},"--optimize":{type:"boolean",description:"Optimize the output without minifying"},"--cwd":{type:"string",description:"The current working directory",default:"."},"--map":{type:"boolean | string",description:"Generate a source map",default:!1}}}async function oe(e){try{return await e()}catch(t){t instanceof Error&&_(t.toString()),process.exit(1)}}async function le(e){var L=[];try{_(M());_();let t=te(L,new xe);u&&t.start("[@tailwindcss/cli] (initial build)");let n=T.resolve(e["--cwd"]);e["--output"]&&e["--output"]!=="-"&&(e["--output"]=T.resolve(n,e["--output"]));e["--input"]&&e["--input"]!=="-"&&(e["--input"]=T.resolve(n,e["--input"]),nt(e["--input"])||(_(`Specified input file ${A(D(e["--input"]))} does not exist.`),process.exit(1)));e["--input"]===e["--output"]&&e["--input"]!=="-"&&(_(`Specified input file ${A(D(e["--input"]))} and output file ${A(D(e["--output"]))} are identical.`),process.exit(1));e["--map"]==="-"&&(_("Use --map without a value to inline the source map"),process.exit(1));e["--map"]&&e["--map"]!==!0&&(e["--map"]=T.resolve(n,e["--map"]));let i=process.hrtime.bigint();let o=e["--input"]?e["--input"]==="-"?await re():await ae.readFile(e["--input"],"utf-8"):_e` | ||
| @import 'tailwindcss'; | ||
| `;let n={css:"",optimizedCss:""};async function u(g,b,f,S){let $=g;if(f["--minify"]||f["--optimize"])if(g!==n.css){a&&S.start("Optimize CSS");let T=Pe(g,{file:f["--input"]??"input.css",minify:f["--minify"]??!1,map:b?.raw??void 0});a&&S.end("Optimize CSS"),n.css=g,n.optimizedCss=T.code,T.map&&(b=P(T.map)),$=T.code}else $=n.optimizedCss;b&&(f["--map"]===!0?($+=` | ||
| `,$+=b.inline):typeof f["--map"]=="string"&&(a&&S.start("Write source map"),await H(f["--map"],b.raw),a&&S.end("Write source map"))),a&&S.start("Write output"),f["--output"]&&f["--output"]!=="-"?await H(f["--output"],$):h($),a&&S.end("Write output")}let s=e["--input"]&&e["--input"]!=="-"?C.resolve(e["--input"]):null;let l=s?C.dirname(s):process.cwd();let p=s?[s]:[];async function m(g,b){a&&b.start("Setup compiler");let f=await Ee(g,{from:e["--output"]?s??"stdin.css":void 0,base:l,onDependency(T){p.push(T)}}),S=(f.root==="none"?[]:f.root===null?[{base:i,pattern:"**/*",negated:!1}]:[{...f.root,negated:!1}]).concat(f.sources),$=new Le({sources:S});return a&&b.end("Setup compiler"),[f,$]}let[d,y]=await X(()=>m(o,t));if(e["--watch"]){let g=[];g.push(await we(be(y),async function b(f){try{var S=[];try{if(f.length===1&&f[0]===e["--output"])return;let c=G(S,new he);a&&c.start("[@tailwindcss/cli] (watcher)");let re=process.hrtime.bigint();let oe=[];let j="incremental";let se=p;for(let _ of f){if(se.includes(_)){j="full";break}oe.push({file:_,extension:C.extname(_).slice(1)})}let V="";let q=null;if(j==="full"){let _=e["--input"]?e["--input"]==="-"?await Y():await Z.readFile(e["--input"],"utf-8"):ye` | ||
| `;let r={css:"",optimizedCss:""};async function a(C,g,f,x){let y=C;if(f["--minify"]||f["--optimize"])if(C!==r.css){u&&x.start("Optimize CSS");let E=Xe(C,{file:f["--input"]??"input.css",minify:f["--minify"]??!1,map:g?.raw??void 0});u&&x.end("Optimize CSS"),r.css=C,r.optimizedCss=E.code,E.map&&(g=Y(E.map)),y=E.code}else y=r.optimizedCss;if(g){if(f["--map"]===!0)y+=` | ||
| `,y+=g.inline;else if(typeof f["--map"]=="string"){let E=f["--output"]&&f["--output"]!=="-"?T.dirname(T.resolve(f["--output"])):process.cwd(),Q=T.resolve(f["--map"]),m=T.relative(E,Q);y+=` | ||
| `,y+=g.comment(m),u&&x.start("Write source map"),await se(f["--map"],g.raw),u&&x.end("Write source map")}}u&&x.start("Write output"),f["--output"]&&f["--output"]!=="-"?await se(f["--output"],y):G(y),u&&x.end("Write output")}let s=e["--input"]&&e["--input"]!=="-"?T.resolve(e["--input"]):null;let l=s?T.dirname(s):process.cwd();let c=s?[s]:[];async function b(C,g){u&&g.start("Setup compiler");let f=await He(C,{from:e["--output"]?s??"stdin.css":void 0,base:l,onDependency(E){c.push(E)}}),x=(f.root==="none"?[]:f.root===null?[{base:n,pattern:"**/*",negated:!1}]:[{...f.root,negated:!1}]).concat(f.sources),y=new tt({sources:x});return u&&g.end("Setup compiler"),[f,y]}let[p,d]=await oe(()=>b(o,t));if(e["--watch"]){let C=[];C.push(await Te(Ee(d),async function g(f){try{var x=[];try{if(f.length===1&&f[0]===e["--output"])return;let m=te(x,new xe);u&&m.start("[@tailwindcss/cli] (watcher)");let de=process.hrtime.bigint();let fe=[];let H="incremental";let me=c;for(let O of f){if(me.includes(O)){H="full";break}fe.push({file:O,extension:T.extname(O).slice(1)})}let Z="";let X=null;if(H==="full"){let O=e["--input"]?e["--input"]==="-"?await re():await ae.readFile(e["--input"],"utf-8"):_e` | ||
| @import 'tailwindcss'; | ||
| `;Ie(se),p=s?[s]:[],[d,y]=await m(_,c),a&&c.start("Scan for candidates");let K=y.scan();a&&c.end("Scan for candidates"),a&&c.start("Setup new watchers");let Fe=await we(be(y),b);a&&c.end("Setup new watchers"),a&&c.start("Cleanup old watchers"),await Promise.all(g.splice(0).map(Ae=>Ae())),a&&c.end("Cleanup old watchers"),g.push(Fe),a&&c.start("Build CSS"),V=d.build(K),a&&c.end("Build CSS"),e["--map"]&&(a&&c.start("Build Source Map"),q=P(d.buildSourceMap()),a&&c.end("Build Source Map"))}else if(j==="incremental"){a&&c.start("Scan for candidates");let _=y.scanFiles(oe);if(a&&c.end("Scan for candidates"),_.length<=0){let K=process.hrtime.bigint();x(`Done in ${E(K-re)}`);return}a&&c.start("Build CSS"),V=d.build(_),a&&c.end("Build CSS"),e["--map"]&&(a&&c.start("Build Source Map"),q=P(d.buildSourceMap()),a&&c.end("Build Source Map"))}await u(V,q,e,c);let Ce=process.hrtime.bigint();x(`Done in ${E(Ce-re)}`)}catch($){var T=$,ve=!0}finally{J(S,T,ve)}}catch(c){c instanceof Error&&x(c.toString())}})),e["--watch"]!=="always"&&process.stdin.on("end",()=>{Promise.all(g.map(b=>b())).then(()=>process.exit(0),()=>process.exit(1))}),process.stdin.resume()}a&&t.start("Scan for candidates");let L=y.scan();a&&t.end("Scan for candidates");a&&t.start("Build CSS");let M=await X(()=>d.build(L));a&&t.end("Build CSS");let B=null;e["--map"]&&(a&&t.start("Build Source Map"),B=await X(()=>P(d.buildSourceMap())),a&&t.end("Build Source Map"));await u(M,B,e,t);let xe=process.hrtime.bigint();x(`Done in ${E(xe-r)}`)}catch($e){var Te=$e,_e=!0}finally{J(ie,Te,_e)}}async function we(e,t){e=e.sort((s,l)=>s.length-l.length);let i=[];for(let s=0;s<e.length;++s)for(let l=0;l<s;++l)e[s].startsWith(`${e[l]}/`)&&i.push(e[s]);e=e.filter(s=>!i.includes(s));let r=new A,o=new Set,n=new A;async function u(){await n.dispose(),n.queueMacrotask(()=>{t(Array.from(o)),o.clear()})}for(let s of e){let{unsubscribe:l}=await We.subscribe(s,async(p,m)=>{if(p){console.error(p);return}await Promise.all(m.map(async d=>{if(d.type==="delete")return;let y=null;try{y=await Z.lstat(d.path)}catch{}!y?.isFile()&&!y?.isSymbolicLink()||o.add(d.path)})),await u()});r.add(l)}return async()=>{await r.dispose(),await n.dispose()}}function be(e){return[...new Set(e.normalizedSources.flatMap(t=>t.base))]}import v from"picocolors";function ee({invalid:e,usage:t,options:i}){let r=process.stdout.columns;if(h(N()),e&&(h(),h(`${v.dim("Invalid command:")} ${e}`)),t&&t.length>0){h(),h(v.dim("Usage:"));for(let[o,n]of t.entries()){let u=n.slice(0,n.indexOf("[")),s=n.slice(n.indexOf("["));s=s.replace(/\[.*?\]/g,m=>v.dim(m));let p=Q(s,r-z.indent-u.length-1);p.length>1&&o!==0&&h(),h(k(`${u}${p.shift()}`));for(let m of p)h(k(m,u.length))}}if(i){let o=0;for(let{alias:l}of Object.values(i))l&&(o=Math.max(o,l.length));let n=[],u=0;for(let[l,{alias:p,values:m}]of Object.entries(i)){m?.length&&(l+=`[=${m.join(", ")}]`);let d=[p&&`${p.padStart(o)}`,p?l:" ".repeat(o+2)+l].filter(Boolean).join(", ");n.push(d),u=Math.max(u,d.length)}h(),h(v.dim("Options:"));let s=8;for(let{description:l,default:p=null}of Object.values(i)){let m=n.shift(),d=s+(u-m.length),y=2,L=r-m.length-d-y-z.indent,M=Q(p!==null?`${l} ${v.dim(`[default:\u202F${F(`${p}`)}]`)}`:l,L);h(k(`${v.blue(m)} ${v.dim(v.gray("\xB7")).repeat(d)} ${M.shift()}`));for(let B of M)h(k(`${" ".repeat(m.length+d+y)}${B}`))}}}var te={"--help":{type:"boolean",description:"Display usage information",alias:"-h"}},ne=pe({...I(),...te}),Se=ne._[0];Se&&(ee({invalid:Se,usage:["tailwindcss [options]"],options:{...I(),...te}}),process.exit(1));(process.stdout.isTTY&&process.argv[2]===void 0||ne["--help"])&&(ee({usage:["tailwindcss [--input input.css] [--output output.css] [--watch] [options\u2026]"],options:{...I(),...te}}),process.exit(0));ge(ne); | ||
| `;et(me),c=s?[s]:[],[p,d]=await b(O,m),u&&m.start("Scan for candidates");let ee=d.scan();u&&m.end("Scan for candidates"),u&&m.start("Setup new watchers");let Ie=await Te(Ee(d),g);u&&m.end("Setup new watchers"),u&&m.start("Cleanup old watchers"),await Promise.all(C.splice(0).map(Me=>Me())),u&&m.end("Cleanup old watchers"),C.push(Ie),u&&m.start("Build CSS"),Z=p.build(ee),u&&m.end("Build CSS"),e["--map"]&&(u&&m.start("Build Source Map"),X=Y(p.buildSourceMap()),u&&m.end("Build Source Map"))}else if(H==="incremental"){u&&m.start("Scan for candidates");let O=d.scanFiles(fe);if(u&&m.end("Scan for candidates"),O.length<=0){let ee=process.hrtime.bigint();_(`Done in ${W(ee-de)}`);return}u&&m.start("Build CSS"),Z=p.build(O),u&&m.end("Build CSS"),e["--map"]&&(u&&m.start("Build Source Map"),X=Y(p.buildSourceMap()),u&&m.end("Build Source Map"))}await a(Z,X,e,m);let ze=process.hrtime.bigint();_(`Done in ${W(ze-de)}`)}catch(y){var E=y,Q=!0}finally{ne(x,E,Q)}}catch(m){m instanceof Error&&_(m.toString())}})),e["--watch"]!=="always"&&process.stdin.on("end",()=>{Promise.all(C.map(g=>g())).then(()=>process.exit(0),()=>process.exit(1))}),process.stdin.resume()}u&&t.start("Scan for candidates");let h=d.scan();u&&t.end("Scan for candidates");u&&t.start("Build CSS");let S=await oe(()=>p.build(h));u&&t.end("Build CSS");let N=null;e["--map"]&&(u&&t.start("Build Source Map"),N=await oe(()=>Y(p.buildSourceMap())),u&&t.end("Build Source Map"));await a(S,N,e,t);let q=process.hrtime.bigint();_(`Done in ${W(q-i)}`)}catch(J){var je=J,Ue=!0}finally{ne(L,je,Ue)}}async function Te(e,t){e=e.sort((s,l)=>s.length-l.length);let n=[];for(let s=0;s<e.length;++s)for(let l=0;l<s;++l)e[s].startsWith(`${e[l]}/`)&&n.push(e[s]);e=e.filter(s=>!n.includes(s));let i=new k,o=new Set,r=new k;async function a(){await r.dispose(),r.queueMacrotask(()=>{t(Array.from(o)),o.clear()})}for(let s of e){let{unsubscribe:l}=await Qe.subscribe(s,async(c,b)=>{if(c){console.error(c);return}await Promise.all(b.map(async p=>{if(p.type==="delete")return;let d=null;try{d=await ae.lstat(p.path)}catch{}!d?.isFile()&&!d?.isSymbolicLink()||o.add(p.path)})),await a()});i.add(l)}return async()=>{await i.dispose(),await r.dispose()}}function Ee(e){return[...new Set(e.normalizedSources.flatMap(t=>t.base))]}import{__unstable__loadDesignSystem as Re}from"@tailwindcss/node";import rt from"fs/promises";import ve from"path";import{createInterface as st}from"readline";function ue(e,t){let n=e.length,i=t.length,o=n<i?n:i;for(let r=0;r<o;r++){let a=e.charCodeAt(r),s=t.charCodeAt(r);if(a>=48&&a<=57&&s>=48&&s<=57){let l=r,c=r+1,b=r,p=r+1;for(a=e.charCodeAt(c);a>=48&&a<=57;)a=e.charCodeAt(++c);for(s=t.charCodeAt(p);s>=48&&s<=57;)s=t.charCodeAt(++p);let d=e.slice(l,c),h=t.slice(b,p),S=Number(d)-Number(h);if(S)return S;if(d<h)return-1;if(d>h)return 1;continue}if(a!==s)return a-s}return e.length-t.length}var V=new Uint8Array(256);function Oe(e,t){let n=0,i=[],o=0,r=e.length,a=t.charCodeAt(0);for(let s=0;s<r;s++){let l=e.charCodeAt(s);if(n===0&&l===a){i.push(e.slice(o,s)),o=s+1;continue}switch(l){case 92:s+=1;break;case 39:case 34:for(;++s<r;){let c=e.charCodeAt(s);if(c===92){s+=1;continue}if(c===l)break}break;case 40:V[n]=41,n++;break;case 91:V[n]=93,n++;break;case 123:V[n]=125,n++;break;case 93:case 125:case 41:n>0&&l===V[n-1]&&n--;break}}return i.push(e.slice(o)),i}import R from"picocolors";function F({render:e=!0,invalid:t,usage:n,options:i}){let o=process.stdout.columns??80,r=[],a=e?G:(s="")=>void r.push(s);if(a(M()),t&&(a(),a(`${R.dim("Invalid command:")} ${t}`)),n&&n.length>0){a(),a(R.dim("Usage:"));for(let[s,l]of n.entries()){let c=l.slice(0,l.indexOf("[")),b=l.slice(l.indexOf("["));b=b.replace(/\[.*?\]/g,h=>R.dim(h));let d=ie(b,o-I.indent-c.length-1);d.length>1&&s!==0&&a(),a(P(`${c}${d.shift()}`));for(let h of d)a(P(h,c.length))}}if(i){let s=0;for(let{alias:p}of Object.values(i))p&&(s=Math.max(s,p.length));let l=[],c=0;for(let[p,{alias:d,values:h}]of Object.entries(i)){h?.length&&(p+=`[=${h.join(", ")}]`);let S=[d&&`${d.padStart(s)}`,d?p:" ".repeat(s+2)+p].filter(Boolean).join(", ");l.push(S),c=Math.max(c,S.length)}a(),a(R.dim("Options:"));let b=8;for(let{description:p,default:d=null}of Object.values(i)){let h=l.shift(),S=b+(c-h.length),N=2,q=o-h.length-S-N-I.indent,L=ie(d!==null?`${p} ${R.dim(`[default:\u202F${A(`${d}`)}]`)}`:p,q);a(P(`${R.blue(h)} ${R.dim(R.gray("\xB7")).repeat(S)} ${L.shift()}`));for(let J of L)a(P(`${" ".repeat(h.length+S+N)}${J}`))}}if(!e)return r.join(` | ||
| `)}var ot=String.raw;function ce(){return"tailwindcss canonicalize [classes...]"}function at(){return"tailwindcss canonicalize --css input.css [classes...]"}function lt(){return"tailwindcss canonicalize --stream [--css input.css]"}function $e(){return{"--css":{type:"string",description:'CSS entry file used to load the Tailwind design system (defaults to `@import "tailwindcss";`)'},"--format":{type:"string",description:"Output format",default:"text",values:["text","json","jsonl"]},"--stream":{type:"boolean",description:"Read candidate groups from stdin line by line and write results to stdout",default:!1}}}var Ne={"--help":{type:"boolean",description:"Display usage information",alias:"-h",default:!1}};async function Le({argv:e=process.argv.slice(2),cwd:t=process.cwd(),stdin:n=null,stdinIsTTY:i=process.stdin.isTTY,stdoutIsTTY:o=process.stdout.isTTY}={}){try{let r=v({...$e(),...Ne},e),a=mt(r["--format"]??"text");if(o&&e.length===0||r["--help"])return{exitCode:0,stdout:ke()??"",stderr:""};if(r["--stream"])return await ut({css:r["--css"],cwd:t,format:a,input:process.stdin,output:process.stdout}),{exitCode:0,stdout:"",stderr:""};let s=r._.length>0?r._:await ct({stdin:n,stdinIsTTY:i});if(s.length===0)return ht("No candidate groups provided");let l=await dt({css:r["--css"],cwd:t,inputs:s});return{exitCode:0,stdout:ft(l,a),stderr:""}}catch(r){return{exitCode:1,stdout:"",stderr:r instanceof Error?r.message:String(r)}}}async function ut({css:e,cwd:t,format:n,input:i,output:o}){let r=await Pe(e,t),a=st({input:i}),s=!0;n==="json"&&o.write("[");for await(let l of a){let c=Fe(r,l);switch(n){case"text":{o.write(c.output+` | ||
| `);break}case"jsonl":{o.write(JSON.stringify(c)+` | ||
| `);break}case"json":{s?o.write(` | ||
| `):o.write(`, | ||
| `),o.write(bt(JSON.stringify(c,null,2),2)),s=!1;break}}}n==="json"&&o.write(s?"]":` | ||
| ]`)}function ct({stdin:e,stdinIsTTY:t}){return e!==null?Promise.resolve(Ae(e)):t?Promise.resolve([]):pt().then(Ae)}async function pt(){return new Promise((e,t)=>{let n="";process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>e(n)),process.stdin.on("error",i=>t(i))})}async function dt({css:e,cwd:t=process.cwd(),inputs:n}){let i=await Pe(e,t);return n.map(o=>Fe(i,o))}function ft(e,t){switch(t){case"json":return JSON.stringify(e,null,2);case"jsonl":return e.map(n=>JSON.stringify(n)).join(` | ||
| `);case"text":return e.map(n=>n.output).join(` | ||
| `)}}function ke(){return F({render:!1,usage:[ce(),at(),lt()],options:{...$e(),...Ne}})}async function Pe(e,t){if(e===null)return Re(ot` | ||
| @import 'tailwindcss'; | ||
| `,{base:t});let n=ve.resolve(t,e),i=await rt.readFile(n,"utf8");return Re(i,{base:ve.dirname(n)})}function Ae(e){return e.split(/\r?\n/g).map(t=>t.trim()).filter(t=>t.length>0)}function mt(e){if(e==="text"||e==="json"||e==="jsonl")return e;throw new Error(`Invalid value for --format: ${e}`)}function ht(e){return{exitCode:1,stdout:ke()??"",stderr:e}}function gt(e){let t=e.trim();return t.length===0?[]:Oe(t," ").map(n=>n.trim()).filter(n=>n.length>0)}function wt(e,t){let n=gt(t);return n=e.canonicalizeCandidates(n,{collapse:!0,logicalToPhysical:!0}),yt(e.getClassOrder(n)).join(" ")}function Fe(e,t){let n=wt(e,t);return{input:t,output:n,changed:n!==t}}function bt(e,t){let n=" ".repeat(t);return e.split(` | ||
| `).map(i=>n+i).join(` | ||
| `)}function yt(e){return e.slice().sort(([t,n],[i,o])=>n===o?ue(t,i):n===null?-1:o===null?1:St(n-o)||ue(t,i)).map(([t])=>t)}function St(e){return e>0n?1:e===0n?0:-1}var B={"--help":{type:"boolean",description:"Display usage information",alias:"-h"}};function pe(e="tailwindcss"){return`${e} [--input input.css] [--output output.css] [--watch] [options\u2026]`}function Be({invalid:e}={}){F({invalid:e,usage:[pe("tailwindcss"),pe("tailwindcss build"),ce()],commands:{build:"Build your CSS",canonicalize:"Canonicalize candidate lists"},options:{...$(),...B}})}async function xt(){let e=process.argv.slice(2),t=e[0],n=v({...$(),...B},e);if(t==="build"){let o=v({...$(),...B},e.slice(1));(process.stdout.isTTY&&e.length===1||o["--help"])&&(F({usage:[pe("tailwindcss build")],options:{...$(),...B}}),process.exit(0)),await le(o);return}if(t==="canonicalize"){let o=await Le({argv:e.slice(1)});o.stdout.length>0&&process.stdout.write(`${o.stdout} | ||
| `),o.stderr.length>0&&process.stderr.write(`${o.stderr} | ||
| `),process.exitCode=o.exitCode;return}(process.stdout.isTTY&&t===void 0||n["--help"])&&(Be(),process.exit(0)),t&&!t.startsWith("-")&&(Be({invalid:t}),process.exit(1));let i=v({...$(),...B});await le(i)}await xt(); |
+5
-5
| { | ||
| "name": "@tailwindcss/cli", | ||
| "version": "0.0.0-insiders.52e91db", | ||
| "version": "0.0.0-insiders.52fd421", | ||
| "description": "A utility-first CSS framework for rapidly building custom user interfaces.", | ||
@@ -28,8 +28,8 @@ "license": "MIT", | ||
| "@parcel/watcher": "^2.5.1", | ||
| "enhanced-resolve": "^5.18.3", | ||
| "enhanced-resolve": "^5.19.0", | ||
| "mri": "^1.2.0", | ||
| "picocolors": "^1.1.1", | ||
| "@tailwindcss/node": "0.0.0-insiders.52e91db", | ||
| "tailwindcss": "0.0.0-insiders.52e91db", | ||
| "@tailwindcss/oxide": "0.0.0-insiders.52e91db" | ||
| "@tailwindcss/node": "0.0.0-insiders.52fd421", | ||
| "@tailwindcss/oxide": "0.0.0-insiders.52fd421", | ||
| "tailwindcss": "0.0.0-insiders.52fd421" | ||
| }, | ||
@@ -36,0 +36,0 @@ "scripts": { |
+5
-5
@@ -16,6 +16,6 @@ <p align="center"> | ||
| <p align="center"> | ||
| <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=next" alt="Build Status"></a> | ||
| <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=main" alt="Build Status"></a> | ||
| <a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a> | ||
| <a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a> | ||
| <a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a> | ||
| <a href="https://github.com/tailwindlabs/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a> | ||
| <a href="https://github.com/tailwindlabs/tailwindcss/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a> | ||
| </p> | ||
@@ -33,6 +33,6 @@ | ||
| [Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) | ||
| [Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) | ||
| ## Contributing | ||
| If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. | ||
| If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. |
20938
34.57%79
58%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated