@tailwindcss/cli 4.0.0-alpha.9 → 4.0.0-beta.2

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.
Files changed (2) hide show
  1. package/dist/index.mjs +7 -7
  2. package/package.json +10 -13
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import Z from"mri";function _(t,e=process.argv.slice(2)){let i=Z(e),n={_:i._};for(let[o,{type:r,alias:p,default:f=r==="boolean"?!1:null}]of Object.entries(t)){if(n[o]=f,p){let s=p.slice(1);i[s]!==void 0&&(n[o]=B(i[s],r))}{let s=o.slice(2);i[s]!==void 0&&(n[o]=B(i[s],r))}}return n}function B(t,e){switch(e){case"string":return k(t);case"boolean":return S(t);case"number":return A(t);case"boolean | string":return S(t)??k(t);case"number | string":return A(t)??k(t);case"boolean | number":return S(t)??A(t);case"boolean | number | string":return S(t)??A(t)??k(t);default:throw new Error(`Unhandled type: ${e}`)}}function S(t){if(t===!0||t===!1)return t;if(t==="true")return!0;if(t==="false")return!1}function A(t){if(typeof t=="number")return t;{let e=Number(t);if(!Number.isNaN(e))return e}}function k(t){return`${t}`}import rt from"@parcel/watcher";import{IO as ot,Parsing as st,scanDir as U,scanFiles as lt}from"@tailwindcss/oxide";import{Features as q,transform as pt}from"lightningcss";import{existsSync as ut}from"node:fs";import V from"node:fs/promises";import v from"node:path";import at from"postcss";import ft from"postcss-import";import{compile as E}from"tailwindcss";import et from"node:fs";import L from"node:path";import{stripVTControlCharacters as nt}from"node:util";import d from"picocolors";import{createRequire as tt}from"node:module";var x=tt(import.meta.url).resolve;function K(t){let e=typeof t=="number"?BigInt(t):t;return e<1000n?`${e}ns`:(e/=1000n,e<1000n?`${e}\xB5s`:(e/=1000n,e<1000n?`${e}ms`:(e/=1000n,e<60n?`${e}s`:(e/=60n,e<60n?`${e}m`:(e/=60n,e<24n?`${e}h`:(e/=24n,`${e}d`))))))}var O={indent:2};function $(){let{version:t}=JSON.parse(et.readFileSync(x("tailwindcss/package.json"),"utf-8"));return`${d.italic(d.bold(d.blue("\u2248")))} tailwindcss ${d.blue(`v${t}`)}`}function N(t){return`${d.dim(d.blue("`"))}${d.blue(t)}${d.dim(d.blue("`"))}`}function P(t,e=process.cwd(),{preferAbsoluteIfShorter:i=!0}={}){let n=L.relative(e,t);return n.startsWith("..")||(n=`.${L.sep}${n}`),i&&n.length>t.length?t:n}function R(t,e){let i=t.split(" "),n=[],o="",r=0;for(let p of i){let f=nt(p).length;r+f+1>e&&(n.push(o),o="",r=0),o+=(r?" ":"")+p,r+=f+(r?1:0)}return r&&n.push(o),n}function z(t){let e=K(t);return t<=50*1e6?d.green(e):t<=300*1e6?d.blue(e):t<=1e3*1e6?d.yellow(e):d.red(e)}function T(t,e=0){return`${" ".repeat(e+O.indent)}${t}`}function g(t=""){process.stderr.write(`${t}
3
- `)}function u(t=""){process.stdout.write(`${t}
4
- `)}import I from"node:fs/promises";import it from"node:path";function W(){return new Promise((t,e)=>{let i="";process.stdin.on("data",n=>{i+=n}),process.stdin.on("end",()=>t(i)),process.stdin.on("error",n=>e(n))})}async function M(t,e){try{if(await I.readFile(t,"utf8")===e)return}catch{}await I.mkdir(it.dirname(t),{recursive:!0}),await I.writeFile(t,e,"utf8")}var G=String.raw;function F(){return{"--input":{type:"string",description:"Input file",alias:"-i"},"--output":{type:"string",description:"Output file",alias:"-o"},"--watch":{type:"boolean | string",description:"Watch for changes and rebuild as needed",alias:"-w"},"--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:"."}}}async function Y(t){let e=v.resolve(t["--cwd"]);t["--output"]&&(t["--output"]=v.resolve(e,t["--output"])),t["--input"]&&t["--input"]!=="-"&&(t["--input"]=v.resolve(e,t["--input"]),ut(t["--input"])||(g($()),g(),g(`Specified input file ${N(P(t["--input"]))} does not exist.`),process.exit(1)));let i=process.hrtime.bigint(),{candidates:n}=U({base:e}),[o,r]=await J(t["--input"]?t["--input"]==="-"?await W():await V.readFile(t["--input"],"utf-8"):G`
5
- @import '${x("tailwindcss/index.css")}';
6
- `,t["--input"]??e),p={css:"",optimizedCss:""};async function f(l,a){let m=l;if(a["--minify"]||a["--optimize"])if(l!==p.css){let h=ct(l,{file:a["--input"]??"input.css",minify:a["--minify"]??!1});p.css=l,p.optimizedCss=h,m=h}else m=p.optimizedCss;a["--output"]?await M(a["--output"],m):u(m)}let{build:s}=E(o);await f(s(n),t);let c=process.hrtime.bigint();g($()),g(),g(`Done in ${z(c-i)}`),t["--watch"]&&(await rt.subscribe(e,async(l,a)=>{if(l){console.error(l);return}try{if(a.length===1&&a[0].path===t["--output"])return;let m=[],h="incremental";for(let y of a)if((y.type==="create"||y.type==="update")&&m.push({file:y.path,extension:v.extname(y.path).slice(1)}),r.includes(y.path)){h="full";break}let C=process.hrtime.bigint(),w="";if(h==="full")n=U({base:e}).candidates,[o,r]=await J(t["--input"]?await V.readFile(t["--input"],"utf-8"):G`
7
- @import '${x("tailwindcss/index.css")}';
8
- `,t["--input"]??e),s=E(o).build,w=s(n);else if(h==="incremental"){let y=lt(m,ot.Sequential|st.Sequential);w=s(y)}await f(w,t);let X=process.hrtime.bigint();g(`Done in ${z(X-C)}`)}catch(m){m instanceof Error&&g(m.toString())}}),t["--watch"]!=="always"&&process.stdin.on("end",()=>{process.exit(0)}),process.stdin.resume())}function J(t,e){return t.includes("@import")?at().use(ft()).process(t,{from:e}).then(i=>[i.css,[e].concat(i.messages.filter(n=>n.type==="dependency").map(n=>n.file))]):[t,[e]]}function ct(t,{file:e="input.css",minify:i=!1}={}){return pt({filename:e,code:Buffer.from(t),minify:i,sourceMap:!1,drafts:{customMedia:!0},nonStandard:{deepSelectorCombinator:!0},include:q.Nesting,exclude:q.LogicalProperties,targets:{safari:16<<16|1024},errorRecovery:!0}).code.toString()}import b from"picocolors";function j({invalid:t,usage:e,options:i}){let n=process.stdout.columns;if(u($()),t&&(u(),u(`${b.dim("Invalid command:")} ${t}`)),e&&e.length>0){u(),u(b.dim("Usage:"));for(let[o,r]of e.entries()){let p=r.slice(0,r.indexOf("[")),f=r.slice(r.indexOf("["));f=f.replace(/\[.*?\]/g,l=>b.dim(l));let c=R(f,n-O.indent-p.length-1);c.length>1&&o!==0&&u(),u(T(`${p}${c.shift()}`));for(let l of c)u(T(l,p.length))}}if(i){let o=0;for(let{alias:s}of Object.values(i))s&&(o=Math.max(o,s.length));let r=[],p=0;for(let[s,{alias:c}]of Object.entries(i)){let l=[c&&`${c.padStart(o)}`,c?s:" ".repeat(o+2)+s].filter(Boolean).join(", ");r.push(l),p=Math.max(p,l.length)}u(),u(b.dim("Options:"));let f=8;for(let{description:s,default:c=null}of Object.values(i)){let l=r.shift(),a=f+(p-l.length),m=2,h=n-l.length-a-m-O.indent,C=R(c!==null?`${s} ${b.dim(`[default:\u202F${N(`${c}`)}]`)}`:s,h);u(T(`${b.blue(l)} ${b.dim(b.gray("\xB7")).repeat(a)} ${C.shift()}`));for(let w of C)u(T(`${" ".repeat(l.length+a+m)}${w}`))}}}var D={"--help":{type:"boolean",description:"Display usage information",alias:"-h"}},Q=_(D),H=Q._[0];H&&(j({invalid:H,usage:["tailwindcss [options]"],options:{...F(),...D}}),process.exit(1));(process.stdout.isTTY&&!process.argv.slice(2).includes("-o")||Q["--help"])&&(j({usage:["tailwindcss [--input input.css] [--output output.css] [--watch] [options\u2026]"],options:{...F(),...D}}),process.exit(0));Y(_(F()));
2
+ import pe from"mri";function Q(e,t=process.argv.slice(2)){let n=pe(t),i={_:n._};for(let[r,{type:s,alias:a,default:l=s==="boolean"?!1:null}]of Object.entries(e)){if(i[r]=l,a){let o=a.slice(1);n[o]!==void 0&&(i[r]=J(n[o],s))}{let o=r.slice(2);n[o]!==void 0&&(i[r]=J(n[o],s))}}return i}function J(e,t){switch(t){case"string":return F(e);case"boolean":return D(e);case"number":return U(e);case"boolean | string":return D(e)??F(e);case"number | string":return U(e)??F(e);case"boolean | number":return D(e)??U(e);case"boolean | number | string":return D(e)??U(e)??F(e);default:throw new Error(`Unhandled type: ${t}`)}}function D(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 F(e){return`${e}`}import be from"@parcel/watcher";import{compile as Se,env as c}from"@tailwindcss/node";import{clearRequireCache as xe}from"@tailwindcss/node/require-cache";import{Scanner as $e}from"@tailwindcss/oxide";import{Features as ie,transform as Te}from"lightningcss";import{existsSync as Ce}from"node:fs";import M from"node:fs/promises";import T from"node:path";var B=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 he from"node:fs";import Z from"node:path";import{stripVTControlCharacters as ge}from"node:util";import h from"picocolors";import Y from"enhanced-resolve";import fe from"node:fs";import{createRequire as de}from"node:module";var me=de(import.meta.url).resolve;function H(e){if(typeof globalThis.__tw_resolve=="function"){let t=globalThis.__tw_resolve(e);if(t)return t}return me(e)}var ke=Y.ResolverFactory.createResolver({fileSystem:new Y.CachedInputFileSystem(fe,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"]});function X(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 G={indent:2};function v(){return`${h.italic(h.bold(h.blue("\u2248")))} tailwindcss ${h.blue(`v${we()}`)}`}function k(e){return`${h.dim(h.blue("`"))}${h.blue(e)}${h.dim(h.blue("`"))}`}function ee(e,t=process.cwd(),{preferAbsoluteIfShorter:n=!0}={}){let i=Z.relative(t,e);return i.startsWith("..")||(i=`.${Z.sep}${i}`),n&&i.length>e.length?e:i}function P(e,t){let n=e.split(" "),i=[],r="",s=0;for(let a of n){let l=ge(a).length;s+l+1>t&&(i.push(r),r="",s=0),r+=(s?" ":"")+a,s+=l+(s?1:0)}return s&&i.push(r),i}function R(e){let t=X(e);return e<=50*1e6?h.green(t):e<=300*1e6?h.blue(t):e<=1e3*1e6?h.yellow(t):h.red(t)}function E(e,t=0){return`${" ".repeat(t+G.indent)}${e}`}function w(e=""){process.stderr.write(`${e}
3
+ `)}function f(e=""){process.stdout.write(`${e}
4
+ `)}function we(){if(typeof globalThis.__tw_version=="string")return globalThis.__tw_version;let{version:e}=JSON.parse(he.readFileSync(H("tailwindcss/package.json"),"utf-8"));return e}import j from"node:fs/promises";import ye from"node:path";function I(){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 te(e,t){try{if(await j.readFile(e,"utf8")===t)return}catch{}await j.mkdir(ye.dirname(e),{recursive:!0}),await j.writeFile(e,t,"utf8")}var ne=String.raw;function A(){return{"--input":{type:"string",description:"Input file",alias:"-i"},"--output":{type:"string",description:"Output file",alias:"-o"},"--watch":{type:"boolean | string",description:"Watch for changes and rebuild as needed",alias:"-w"},"--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:"."}}}async function re(e){try{return await e()}catch(t){t instanceof Error&&w(t.toString()),process.exit(1)}}async function le(e){let t=T.resolve(e["--cwd"]);e["--output"]&&(e["--output"]=T.resolve(t,e["--output"])),e["--input"]&&e["--input"]!=="-"&&(e["--input"]=T.resolve(t,e["--input"]),Ce(e["--input"])||(w(v()),w(),w(`Specified input file ${k(ee(e["--input"]))} does not exist.`),process.exit(1)));let n=process.hrtime.bigint(),i=e["--input"]?e["--input"]==="-"?await I():await M.readFile(e["--input"],"utf-8"):ne`
5
+ @import 'tailwindcss';
6
+ `,r={css:"",optimizedCss:""};async function s(g,m){let y=g;if(m["--minify"]||m["--optimize"])if(g!==r.css){c.DEBUG&&console.time("[@tailwindcss/cli] Optimize CSS");let b=Be(g,{file:m["--input"]??"input.css",minify:m["--minify"]??!1});c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Optimize CSS"),r.css=g,r.optimizedCss=b,y=b}else y=r.optimizedCss;c.DEBUG&&console.time("[@tailwindcss/cli] Write output"),m["--output"]?await te(m["--output"],y):f(y),c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Write output")}let a=e["--input"]&&e["--input"]!=="-"?T.resolve(e["--input"]):null,l=a?T.dirname(a):process.cwd(),o=a?[a]:[];async function p(g){c.DEBUG&&console.time("[@tailwindcss/cli] Setup compiler");let m=await Se(g,{base:l,onDependency(C){o.push(C)}}),y=(m.root==="none"?[]:m.root===null?[{base:t,pattern:"**/*"}]:[m.root]).concat(m.globs),b=new $e({sources:y});return c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Setup compiler"),[m,b]}let[u,d]=await re(()=>p(i));if(e["--watch"]){let g=await se(oe(d),async function m(y){try{if(y.length===1&&y[0]===e["--output"])return;let b=[],C="incremental",K=o;for(let x of y){if(K.includes(x)){C="full";break}b.push({file:x,extension:T.extname(x).slice(1)})}let V=process.hrtime.bigint(),z="";if(C==="full"){let x=e["--input"]?e["--input"]==="-"?await I():await M.readFile(e["--input"],"utf-8"):ne`
7
+ @import 'tailwindcss';
8
+ `;xe(K),o=a?[a]:[],[u,d]=await p(x),c.DEBUG&&console.time("[@tailwindcss/cli] Scan for candidates");let W=d.scan();c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Scan for candidates");let ce=await se(oe(d),m);await g(),g=ce,c.DEBUG&&console.time("[@tailwindcss/cli] Build CSS"),z=u.build(W),c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Build CSS")}else if(C==="incremental"){c.DEBUG&&console.time("[@tailwindcss/cli] Scan for candidates");let x=d.scanFiles(b);if(c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Scan for candidates"),x.length<=0){let W=process.hrtime.bigint();w(`Done in ${R(W-V)}`);return}c.DEBUG&&console.time("[@tailwindcss/cli] Build CSS"),z=u.build(x),c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Build CSS")}await s(z,e);let ue=process.hrtime.bigint();w(`Done in ${R(ue-V)}`)}catch(b){b instanceof Error&&w(b.toString())}});e["--watch"]!=="always"&&process.stdin.on("end",()=>{g().then(()=>process.exit(0),()=>process.exit(1))}),process.stdin.resume()}c.DEBUG&&console.time("[@tailwindcss/cli] Scan for candidates");let S=d.scan();c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Scan for candidates"),c.DEBUG&&console.time("[@tailwindcss/cli] Build CSS");let N=await re(()=>u.build(S));c.DEBUG&&console.timeEnd("[@tailwindcss/cli] Build CSS"),await s(N,e);let _=process.hrtime.bigint();w(v()),w(),w(`Done in ${R(_-n)}`)}function oe(e){return e.globs.flatMap(t=>t.pattern[0]==="!"?[]:t.pattern===""?[]:t.base)}async function se(e,t){e=e.sort((l,o)=>l.length-o.length);let n=[];for(let l=0;l<e.length;++l)for(let o=0;o<l;++o)e[l].startsWith(`${e[o]}/`)&&n.push(e[l]);e=e.filter(l=>!n.includes(l));let i=new B,r=new Set,s=new B;async function a(){await s.dispose(),s.queueMacrotask(()=>{t(Array.from(r)),r.clear()})}for(let l of e){let{unsubscribe:o}=await be.subscribe(l,async(p,u)=>{if(p){console.error(p);return}await Promise.all(u.map(async d=>{if(d.type==="delete")return;let S=null;try{S=await M.lstat(d.path)}catch{}!S?.isFile()&&!S?.isSymbolicLink()||r.add(d.path)})),await a()});i.add(o)}return async()=>{await i.dispose(),await s.dispose()}}function Be(e,{file:t="input.css",minify:n=!1}={}){function i(r){return Te({filename:t,code:r,minify:n,sourceMap:!1,drafts:{customMedia:!0},nonStandard:{deepSelectorCombinator:!0},include:ie.Nesting,exclude:ie.LogicalProperties,targets:{safari:16<<16|1024},errorRecovery:!0}).code}return i(i(Buffer.from(e))).toString()}import $ from"picocolors";function L({invalid:e,usage:t,options:n}){let i=process.stdout.columns;if(f(v()),e&&(f(),f(`${$.dim("Invalid command:")} ${e}`)),t&&t.length>0){f(),f($.dim("Usage:"));for(let[r,s]of t.entries()){let a=s.slice(0,s.indexOf("[")),l=s.slice(s.indexOf("["));l=l.replace(/\[.*?\]/g,u=>$.dim(u));let p=P(l,i-G.indent-a.length-1);p.length>1&&r!==0&&f(),f(E(`${a}${p.shift()}`));for(let u of p)f(E(u,a.length))}}if(n){let r=0;for(let{alias:o}of Object.values(n))o&&(r=Math.max(r,o.length));let s=[],a=0;for(let[o,{alias:p}]of Object.entries(n)){let u=[p&&`${p.padStart(r)}`,p?o:" ".repeat(r+2)+o].filter(Boolean).join(", ");s.push(u),a=Math.max(a,u.length)}f(),f($.dim("Options:"));let l=8;for(let{description:o,default:p=null}of Object.values(n)){let u=s.shift(),d=l+(a-u.length),S=2,N=i-u.length-d-S-G.indent,_=P(p!==null?`${o} ${$.dim(`[default:\u202F${k(`${p}`)}]`)}`:o,N);f(E(`${$.blue(u)} ${$.dim($.gray("\xB7")).repeat(d)} ${_.shift()}`));for(let g of _)f(E(`${" ".repeat(u.length+d+S)}${g}`))}}}var q={"--help":{type:"boolean",description:"Display usage information",alias:"-h"}},O=Q({...A(),...q}),ae=O._[0];ae&&(L({invalid:ae,usage:["tailwindcss [options]"],options:{...A(),...q}}),process.exit(1));(process.stdout.isTTY&&!O["--output"]||O["--help"])&&(L({usage:["tailwindcss [--input input.css] [--output output.css] [--watch] [options\u2026]"],options:{...A(),...q}}),process.exit(0));le(O);
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@tailwindcss/cli",
3
- "version": "4.0.0-alpha.9",
3
+ "version": "4.0.0-beta.2",
4
4
  "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/tailwindlabs/tailwindcss.git",
8
+ "url": "https://github.com/tailwindlabs/tailwindcss.git",
9
9
  "directory": "packages/@tailwindcss-cli"
10
10
  },
11
11
  "bugs": "https://github.com/tailwindlabs/tailwindcss/issues",
@@ -24,21 +24,18 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@parcel/watcher": "^2.4.1",
28
- "lightningcss": "^1.24.0",
27
+ "@parcel/watcher": "^2.5.0",
28
+ "enhanced-resolve": "^5.17.1",
29
+ "lightningcss": "^1.26.0",
29
30
  "mri": "^1.2.0",
30
- "picocolors": "^1.0.0",
31
- "postcss": "8.4.24",
32
- "postcss-import": "^16.0.0",
33
- "@tailwindcss/oxide": "4.0.0-alpha.9",
34
- "tailwindcss": "4.0.0-alpha.9"
35
- },
36
- "devDependencies": {
37
- "@types/postcss-import": "^14.0.3"
31
+ "picocolors": "^1.1.1",
32
+ "@tailwindcss/node": "4.0.0-beta.2",
33
+ "@tailwindcss/oxide": "4.0.0-beta.2",
34
+ "tailwindcss": "4.0.0-beta.2"
38
35
  },
39
36
  "scripts": {
40
37
  "lint": "tsc --noEmit",
41
- "build": "tsup-node ./src/index.ts --format esm --minify --clean",
38
+ "build": "tsup-node",
42
39
  "dev": "pnpm run build -- --watch"
43
40
  }
44
41
  }