@tailwindcss/upgrade 0.0.0-insiders.5688f0a → 0.0.0-insiders.56b22bb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +2 -2
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
|
@@ -193,7 +193,7 @@ ${l.stderr}`,{prefix:"\u21B3 "}),l}finally{Zt.delete(e)}},has(t){return Zt.get(e
|
|
|
193
193
|
${i.stdout}
|
|
194
194
|
${i.stderr}`,{prefix:"\u21B3 "}),i}finally{Zt.delete(e)}}}}var $i=!1,Ti=new y(async e=>{do{let t=ve(e,"package.json");try{let n=await Ne.readFile(t,"utf-8"),i=JSON.parse(n);if(i.packageManager){if(i.packageManager.includes("bun"))return"bun";if(i.packageManager.includes("yarn"))return"yarn";if(i.packageManager.includes("pnpm"))return"pnpm";if(i.packageManager.includes("npm"))return"npm"}}catch{}try{return await Ne.access(ve(e,"bun.lockb")),"bun"}catch{}try{return await Ne.access(ve(e,"bun.lock")),"bun"}catch{}try{return await Ne.access(ve(e,"pnpm-lock.yaml")),"pnpm"}catch{}try{return await Ne.access(ve(e,"yarn.lock")),"yarn"}catch{}try{return await Ne.access(ve(e,"package-lock.json")),"npm"}catch{}let r=e;if(e=Wa(e),r===e)return $i||($i=!0,ft("Could not detect a package manager. Please manually update `tailwindcss` to v4.")),Promise.reject("No package manager detected")}while(!0)});async function Ni(e){let t=!1,r=!1,n=!1,i=!1,o=!1,l=Xt.resolve(e,"package.json"),a;try{a=JSON.parse(await te.readFile(l,"utf-8"))}catch{}let s=await Ja(e);if(s){let u=await qa(s);t=!0,u&&(r=!0,n=u.didAddPostcssClient,i=u.didRemoveAutoprefixer,o=u.didRemovePostCSSImport)}if(!t&&a&&"postcss"in a){let u=await Vi(a.postcss);t=!0,u&&(await te.writeFile(l,JSON.stringify({...a,postcss:u?.json},null,2)),r=!0,n=u.didAddPostcssClient,i=u.didRemoveAutoprefixer,o=u.didRemovePostCSSImport)}if(!t){let u=await Ya(e),f=null;if(u){try{f=JSON.parse(await te.readFile(u,"utf-8"))}catch{}if(f){let c=await Vi(f);t=!0,c&&(await te.writeFile(u,JSON.stringify(c.json,null,2)),r=!0,n=c.didAddPostcssClient,i=c.didRemoveAutoprefixer,o=c.didRemovePostCSSImport)}}}if(!t){K("No PostCSS config found, skipping migration.",{prefix:"\u21B3 "});return}if(n){let u=Object.hasOwn(a?.dependencies??{},"tailwindcss")?"dependencies":Object.hasOwn(a?.devDependencies??{},"tailwindcss")?"devDependencies":null;if(u!==null)try{await Pe(e).add(["@tailwindcss/postcss@latest"],u),j(`Installed package: ${x("@tailwindcss/postcss")}`,{prefix:"\u21B3 "})}catch{}}if(i)try{await Pe(e).remove(["autoprefixer"]),j(`Removed package: ${x("autoprefixer")}`,{prefix:"\u21B3 "})}catch{}if(o)try{await Pe(e).remove(["postcss-import"]),j(`Removed package: ${x("postcss-import")}`,{prefix:"\u21B3 "})}catch{}r&&s&&j(`Migrated PostCSS configuration: ${x(R(s,e))}`,{prefix:"\u21B3 "})}async function qa(e){function t(p){return/['"]?tailwindcss['"]?\: ?\{\}/.test(p)}function r(p){return/['"]?postcss-import['"]?\: ?\{\}/.test(p)}function n(p){return/['"]?autoprefixer['"]?\: ?\{\}/.test(p)}function i(p){return/['"]tailwindcss\/nesting['"]\: ?(\{\}|['"]postcss-nesting['"])/.test(p)}if(K("Migrating PostCSS configuration\u2026"),!await Qa(e))return ft("The PostCSS config contains dynamic JavaScript and can not be automatically migrated.",{prefix:"\u21B3 "}),null;let l=!1,a=!1,s=!1,f=(await te.readFile(e,"utf-8")).split(`
|
|
195
195
|
`),c=[];for(let p=0;p<f.length;p++){let m=f[p];if(t(m))l=!0,c.push(m.replace("tailwindcss:","'@tailwindcss/postcss':"));else if(n(m))a=!0;else if(r(m)){let d=!1;for(let g=p+1;g<f.length;g++){let h=f[g];if(t(h))break;if(!i(h)){d=!0;break}}d?c.push(m):s=!0}else if(i(m)){let d=f[p+1];t(d)||c.push(m)}else c.push(m)}return await te.writeFile(e,c.join(`
|
|
196
|
-
`)),{didAddPostcssClient:l,didRemoveAutoprefixer:a,didRemovePostCSSImport:s}}async function Vi(e){function t(f,c){return f==="tailwindcss"&&ct(c)}function r(f,c){return f==="postcss-import"&&ct(c)}function n(f,c){return f==="autoprefixer"&&ct(c)}function i(f,c){return f==="tailwindcss/nesting"&&(c==="postcss-nesting"||ct(c))}let o=!1,l=!1,a=!1,s=Object.entries(e.plugins||{}),u=[];for(let f=0;f<s.length;f++){let[c,p]=s[f];if(t(c,p))o=!0,u.push(["@tailwindcss/postcss",p]);else if(n(c,p))l=!0;else if(r(c,p)){let m=!1;for(let d=f+1;d<s.length;d++){let[g,h]=s[d];if(t(g,h))break;if(!i(g,h)){m=!0;break}}m?u.push([c,p]):a=!0}else if(i(c,p)){let[m,d]=s[f+1];t(m,d)||u.push([c,p])}else u.push([c,p])}return{json:{...e,plugins:Object.fromEntries(u)},didAddPostcssClient:o,didRemoveAutoprefixer:l,didRemovePostCSSImport:a}}var Ha=[".postcssrc.js",".postcssrc.mjs",".postcssrc.cjs",".postcssrc.ts",".postcssrc.mts",".postcssrc.cts","postcss.config.js","postcss.config.mjs","postcss.config.cjs","postcss.config.ts","postcss.config.mts","postcss.config.cts"];async function Ja(e){for(let t of Ha){let r=Xt.resolve(e,t);try{return await te.access(r),r}catch{}}return null}var Ga=[".postcssrc",".postcssrc.json"];async function Ya(e){for(let t of Ga){let r=Xt.resolve(e,t);try{return await te.access(r),r}catch{}}return null}async function Qa(e){let t=await te.readFile(e,"utf-8");return t.includes("tailwindcss:")&&!(t.includes("require")||t.includes("import "))}function ct(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===0}import{isGitIgnored as tl}from"globby";import rl from"node:path";import il from"postcss";import{__unstable__loadDesignSystem as Xa,compileAst as el}from"@tailwindcss/node";import*as Ri from"node:fs";import*as Ei from"node:fs/promises";import*as ue from"node:path";import*as _i from"node:util";import*as pt from"postcss";import Hm,{Input as Jm}from"postcss";var Za=33;function Pi(e){let t=new y(o=>({file:o.file??o.id??null,code:o.css}));function r(o){let l=o.source;if(!l)return;let a=l.input;if(a&&l.start!==void 0&&l.end!==void 0)return[t.get(a),l.start.offset,l.end.offset]}function n(o,l){if(o.type==="decl"){let a=V(o.prop,o.value,o.important);a.src=r(o),l.push(a)}else if(o.type==="rule"){let a=F(o.selector);a.src=r(o),o.each(s=>n(s,a.nodes)),l.push(a)}else if(o.type==="atrule"){let a=$(`@${o.name}`,o.params);a.src=r(o),o.each(s=>n(s,a.nodes)),l.push(a)}else if(o.type==="comment"){if(o.text.charCodeAt(0)!==Za)return;let a=Ye(o.text);a.src=r(o),l.push(a)}}let i=[];return e.each(o=>n(o,i)),i}var G=class e{id;root;isTailwindRoot=!1;linkedConfigPath=null;file=null;parents=new Set;children=new Set;canMigrate=!0;extension=null;static async load(t){t=ue.resolve(process.cwd(),t);let r=await Ei.readFile(t,"utf-8"),n=pt.parse(r,{from:t});return new e(n,t)}static loadSync(t){t=ue.resolve(process.cwd(),t);let r=Ri.readFileSync(t,"utf-8"),n=pt.parse(r,{from:t});return new e(n,t)}static async fromString(t){let r=pt.parse(t);return new e(r)}static async fromRoot(t,r){return new e(t,r)}constructor(t,r){this.id=Math.random().toString(36).slice(2),this.root=t,this.file=r??null,r&&(this.extension=ue.extname(r))}get importRules(){let t=new Set;return this.root.walkAtRules("import",r=>{t.add(r)}),t}get isEmpty(){return this.root.toString().trim()===""}*ancestors(){for(let{item:t}of ze(this,r=>r.parents))yield t}*descendants(){for(let{item:t}of ze(this,r=>r.children))yield t}layers(){let t=new Set;for(let{item:r,path:n}of ze(this,i=>i.parents))if(!(r.parents.size>0))for(let{meta:i}of n)for(let o of i.layers)t.add(o);return t}*pathsToRoot(){for(let{item:t,path:r}of ze(this,n=>n.parents))t.parents.size>0||(yield r)}analyzeImportPaths(){let t=[],r=[];for(let n of this.pathsToRoot()){let i=!1;for(let{meta:o}of n)for(let l of o.layers)i||=l==="utilities"||l==="components";i?t.push(n):r.push(n)}return{convertiblePaths:t,nonConvertiblePaths:r}}containsRule(t){let r=!1;if(this.root.walk(n=>{if(t(n))return r=!0,!1}),r)return!0;for(let n of this.children)if(n.item.containsRule(t))return!0;return!1}async compiler(){return!this.isTailwindRoot||!this.file?null:el(Pi(this.root),{base:ue.dirname(this.file),onDependency(){}})}async designSystem(){return!this.isTailwindRoot||!this.file?null:Xa(this.root.toString(),{base:ue.dirname(this.file)})}[_i.inspect.custom](){return{...this,root:this.root.toString(),layers:Array.from(this.layers()),parents:Array.from(this.parents,t=>t.item.id),children:Array.from(this.children,t=>t.item.id),parentsMeta:Array.from(this.parents,t=>t.meta),childrenMeta:Array.from(this.children,t=>t.meta)}}};function*ze(e,t,r=[]){for(let n of t(e)){let i=[...r,n];yield*ze(n.item,t,i),yield{item:n.item,path:i}}}async function Oi(e){let t=await tl(),r=[],n=new y(s=>{if(t(s))return null;try{let u=G.loadSync(s);return e.push(u),r.push(()=>i.process(u.root,{from:u.file})),u}catch{return null}}),i=il([{postcssPlugin:"mark-import-nodes",AtRule:{import(s){let u=s.params.match(/['"](
|
|
196
|
+
`)),{didAddPostcssClient:l,didRemoveAutoprefixer:a,didRemovePostCSSImport:s}}async function Vi(e){function t(f,c){return f==="tailwindcss"&&ct(c)}function r(f,c){return f==="postcss-import"&&ct(c)}function n(f,c){return f==="autoprefixer"&&ct(c)}function i(f,c){return f==="tailwindcss/nesting"&&(c==="postcss-nesting"||ct(c))}let o=!1,l=!1,a=!1,s=Object.entries(e.plugins||{}),u=[];for(let f=0;f<s.length;f++){let[c,p]=s[f];if(t(c,p))o=!0,u.push(["@tailwindcss/postcss",p]);else if(n(c,p))l=!0;else if(r(c,p)){let m=!1;for(let d=f+1;d<s.length;d++){let[g,h]=s[d];if(t(g,h))break;if(!i(g,h)){m=!0;break}}m?u.push([c,p]):a=!0}else if(i(c,p)){let[m,d]=s[f+1];t(m,d)||u.push([c,p])}else u.push([c,p])}return{json:{...e,plugins:Object.fromEntries(u)},didAddPostcssClient:o,didRemoveAutoprefixer:l,didRemovePostCSSImport:a}}var Ha=[".postcssrc.js",".postcssrc.mjs",".postcssrc.cjs",".postcssrc.ts",".postcssrc.mts",".postcssrc.cts","postcss.config.js","postcss.config.mjs","postcss.config.cjs","postcss.config.ts","postcss.config.mts","postcss.config.cts"];async function Ja(e){for(let t of Ha){let r=Xt.resolve(e,t);try{return await te.access(r),r}catch{}}return null}var Ga=[".postcssrc",".postcssrc.json"];async function Ya(e){for(let t of Ga){let r=Xt.resolve(e,t);try{return await te.access(r),r}catch{}}return null}async function Qa(e){let t=await te.readFile(e,"utf-8");return t.includes("tailwindcss:")&&!(t.includes("require")||t.includes("import "))}function ct(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===0}import{isGitIgnored as tl}from"globby";import rl from"node:path";import il from"postcss";import{__unstable__loadDesignSystem as Xa,compileAst as el}from"@tailwindcss/node";import*as Ri from"node:fs";import*as Ei from"node:fs/promises";import*as ue from"node:path";import*as _i from"node:util";import*as pt from"postcss";import Hm,{Input as Jm}from"postcss";var Za=33;function Pi(e){let t=new y(o=>({file:o.file??o.id??null,code:o.css}));function r(o){let l=o.source;if(!l)return;let a=l.input;if(a&&l.start!==void 0&&l.end!==void 0)return[t.get(a),l.start.offset,l.end.offset]}function n(o,l){if(o.type==="decl"){let a=V(o.prop,o.value,o.important);a.src=r(o),l.push(a)}else if(o.type==="rule"){let a=F(o.selector);a.src=r(o),o.each(s=>n(s,a.nodes)),l.push(a)}else if(o.type==="atrule"){let a=$(`@${o.name}`,o.params);a.src=r(o),o.each(s=>n(s,a.nodes)),l.push(a)}else if(o.type==="comment"){if(o.text.charCodeAt(0)!==Za)return;let a=Ye(o.text);a.src=r(o),l.push(a)}}let i=[];return e.each(o=>n(o,i)),i}var G=class e{id;root;isTailwindRoot=!1;linkedConfigPath=null;file=null;parents=new Set;children=new Set;canMigrate=!0;extension=null;static async load(t){t=ue.resolve(process.cwd(),t);let r=await Ei.readFile(t,"utf-8"),n=pt.parse(r,{from:t});return new e(n,t)}static loadSync(t){t=ue.resolve(process.cwd(),t);let r=Ri.readFileSync(t,"utf-8"),n=pt.parse(r,{from:t});return new e(n,t)}static async fromString(t){let r=pt.parse(t);return new e(r)}static async fromRoot(t,r){return new e(t,r)}constructor(t,r){this.id=Math.random().toString(36).slice(2),this.root=t,this.file=r??null,r&&(this.extension=ue.extname(r))}get importRules(){let t=new Set;return this.root.walkAtRules("import",r=>{t.add(r)}),t}get isEmpty(){return this.root.toString().trim()===""}*ancestors(){for(let{item:t}of ze(this,r=>r.parents))yield t}*descendants(){for(let{item:t}of ze(this,r=>r.children))yield t}layers(){let t=new Set;for(let{item:r,path:n}of ze(this,i=>i.parents))if(!(r.parents.size>0))for(let{meta:i}of n)for(let o of i.layers)t.add(o);return t}*pathsToRoot(){for(let{item:t,path:r}of ze(this,n=>n.parents))t.parents.size>0||(yield r)}analyzeImportPaths(){let t=[],r=[];for(let n of this.pathsToRoot()){let i=!1;for(let{meta:o}of n)for(let l of o.layers)i||=l==="utilities"||l==="components";i?t.push(n):r.push(n)}return{convertiblePaths:t,nonConvertiblePaths:r}}containsRule(t){let r=!1;if(this.root.walk(n=>{if(t(n))return r=!0,!1}),r)return!0;for(let n of this.children)if(n.item.containsRule(t))return!0;return!1}async compiler(){return!this.isTailwindRoot||!this.file?null:el(Pi(this.root),{base:ue.dirname(this.file),onDependency(){}})}async designSystem(){return!this.isTailwindRoot||!this.file?null:Xa(this.root.toString(),{base:ue.dirname(this.file)})}[_i.inspect.custom](){return{...this,root:this.root.toString(),layers:Array.from(this.layers()),parents:Array.from(this.parents,t=>t.item.id),children:Array.from(this.children,t=>t.item.id),parentsMeta:Array.from(this.parents,t=>t.meta),childrenMeta:Array.from(this.children,t=>t.meta)}}};function*ze(e,t,r=[]){for(let n of t(e)){let i=[...r,n];yield*ze(n.item,t,i),yield{item:n.item,path:i}}}async function Oi(e){let t=await tl(),r=[],n=new y(s=>{if(t(s))return null;try{let u=G.loadSync(s);return e.push(u),r.push(()=>i.process(u.root,{from:u.file})),u}catch{return null}}),i=il([{postcssPlugin:"mark-import-nodes",AtRule:{import(s){let u=s.params.match(/['"](.*)['"]/)?.[1];if(!u)return;let f=s.source?.input.file?rl.dirname(s.source.input.file):process.cwd(),c=!1;try{if(u[0]!==".")try{c=Qt(`./${u}`,f)}catch{}c||(c=Qt(u,f))}catch{if(u.startsWith("http://")||u.startsWith("https://")||u.startsWith("//"))return;E(`Failed to resolve import: ${x(u)} in ${x(R(s.source?.input.file,f))}. Skipping.`,{prefix:"\u21B3 "});return}if(!c)return;let p=n.get(c);if(!p)return;s.raws.tailwind_destination_sheet_id=p.id;let m=s.source?.input.file?n.get(s.source.input.file):void 0,d=[];for(let g of w(s.params," "))g.startsWith("layer(")&&g.endsWith(")")&&d.push(g.slice(6,-1).trim());if(m){let g={layers:d};p.parents.add({item:m,meta:g}),m.children.add({item:p,meta:g})}}}}]);for(let s of e)s.file&&(n.set(s.file,s),r.push(()=>i.process(s.root,{from:s.file??void 0})));for(;r.length>0;)await r.shift()();let o=process.cwd();function l(s){let u=[];for(let f of s){if(!f.item.file)continue;let c=f.item.file.replace(o,""),p=f.meta.layers.join(", ");p.length>0?u.push(`${c} (layers: ${p})`):u.push(c)}return u.join(" <- ")}let a=[];for(let s of e){if(!s.file)continue;let{convertiblePaths:u,nonConvertiblePaths:f}=s.analyzeImportPaths();if(!(u.length>0&&f.length>0))continue;s.canMigrate=!1;let p=s.file.replace(o,"");for(let m of u)a.push(`- ${p} <- ${l(m)}`);for(let m of f)a.push(`- ${p} <- ${l(m)}`)}if(a.length===0){let s=new Set;for(let u of e)u.root.walkAtRules("config",()=>(u.isTailwindRoot=!0,!1)),!u.isTailwindRoot&&u.root.walkAtRules(f=>{(f.name==="tailwind"||f.name==="import"&&f.params.match(/^["']tailwindcss["']/)||f.name==="import"&&f.params.match(/^["']tailwindcss\/.*?["']$/))&&(u.isTailwindRoot=!0,s.add(u))});if(s.size<=1)return;{let u=new y(()=>new Set);for(let c of s)u.get(c).add(c);let f=!0;e:for(;f;){f=!1;for(let[c,p]of u)for(let[m,d]of u){if(c===m)continue;let g=[c].concat(Array.from(c.ancestors()).reverse()),h=[m].concat(Array.from(m.ancestors()).reverse());for(let v of g)for(let A of h){if(v!==A)continue;let T=v;u.delete(c),u.delete(m);for(let J of p)u.get(T).add(J);for(let J of d)u.get(T).add(J);f=!0;continue e}}}for(let[c,p]of u){c.isTailwindRoot=!0;for(let m of p)c!==m&&(m.isTailwindRoot=!1)}return}}{let s=`You have one or more stylesheets that are imported into a utility layer and non-utility layer.
|
|
197
197
|
`;throw s+=`We cannot convert stylesheets under these conditions. Please look at the following stylesheets:
|
|
198
198
|
`,new Error(s+a.join(`
|
|
199
199
|
`))}}import Di from"postcss";import{format as Ii}from"prettier";function N(e,t){let r;return e.each?.((n,i)=>{let o=t(n,i,e)??0;if(o===2)return r=!1,r;if(o!==1)return r=N(n,t),r}),r}function er(e,t){e?.each?.(r=>{er(r,t),t(r)})}var ji={parser:"css",semi:!0,singleQuote:!0};function Mi(){async function e(t){let r=[];N(t,(i,o,l)=>{i.type==="atrule"&&(i.raws.semicolon=!0),i.type==="atrule"&&i.name==="tw-bucket"?r.push(i):i.raws.tailwind_pretty&&(i.parent??=l,r.unshift(i))});let n=[];for(let i of r){let o=i.type==="atrule"&&i.name==="tw-bucket"?i.toString().trim().replace(/@tw-bucket(.*?){([\s\S]*)}/,"$2"):i.toString();if(i.type==="atrule"&&i.name==="tw-bucket"&&i.params==="user"){n.push(o);continue}if(i.type==="atrule"&&i.name==="tw-bucket"){n.push(await Ii(o,ji));continue}i.replaceWith(Di.parse(`${i.raws.before??""}${(await Ii(o,ji)).trim()}`))}t.removeAll(),t.append(Di.parse(n.map(i=>i.trim()).filter(Boolean).join(`
|
|
@@ -246,4 +246,4 @@ Update your stylesheet to use ${x("@config")} to specify the correct configurati
|
|
|
246
246
|
@tw-bucket compatibility {
|
|
247
247
|
${a}
|
|
248
248
|
}
|
|
249
|
-
`;let s=Xl.parse(a);s.walkDecls(u=>{u.value.includes("theme(")&&(u.value=is(k(u.value),f=>n(f)?r:f==="borderColor.DEFAULT"?"var(--color-gray-200, currentcolor)":null))}),o.walkAtRules("theme",u=>{u.walkDecls("--border-color",f=>{f.remove()}),u.nodes?.length===0&&u.remove()}),o.append(s)}return{postcssPlugin:"@tailwindcss/upgrade/migrate-preflight",OnceExit:i}}function is(e,t){return S(e,(r,{replaceWith:n})=>{if(r.kind==="function"&&r.value==="theme"){if(r.nodes.length<1)return;r.nodes[0].kind==="separator"&&r.nodes[0].value.trim()===""&&r.nodes.shift();let i=r.nodes[0];if(i.kind!=="word")return;let o=i.value,l=1;for(let u=l;u<r.nodes.length&&!r.nodes[u].value.includes(",");u++)o+=b([r.nodes[u]]),l=u+1;o=ns(o);let a=r.nodes.slice(l+1),s=a.length>0?t(o,b(a)):t(o);if(s===null)return;n(k(s))}}),b(e)}function ns(e){if(e[0]!=="'"&&e[0]!=='"')return e;let t="",r=e[0];for(let n=1;n<e.length-1;n++){let i=e[n],o=e[n+1];i==="\\"&&(o===r||o==="\\")?(t+=o,n++):t+=i}return t}import{AtRule as kt}from"postcss";var lr=["theme","base","components","utilities"];function En(e){let t=e.newPrefix?` prefix(${e.newPrefix})`:"";function r(n){let i=null,o=null,l=[],a=null,s=null,u=null,f=null,c=[];n.walkAtRules(p=>{if(p.name==="import"&&p.params.match(/^["']tailwindcss\/tailwind\.css["']$/)&&(p.params=p.params.replace("tailwindcss/tailwind.css","tailwindcss")),p.name==="import"&&p.params.match(/^["']tailwindcss["']/))p.params+=t;else if(p.name==="tailwind"&&p.params==="base"||p.name==="import"&&p.params.match(/^["']tailwindcss\/base["']$/))c.push("base"),l.push(p),i=p;else if(p.name==="tailwind"&&p.params==="utilities"||p.name==="import"&&p.params.match(/^["']tailwindcss\/utilities["']$/))c.push("utilities"),l.push(p),o=p;else if(p.name==="tailwind"&&p.params==="components"||p.name==="tailwind"&&p.params==="screens"||p.name==="tailwind"&&p.params==="variants"||p.name==="import"&&p.params.match(/^["']tailwindcss\/components["']$/))p.remove();else if(p.name==="responsive")if(p.nodes){for(let m of p.nodes)m.raws.tailwind_pretty=!0;p.replaceWith(p.nodes)}else p.remove()}),i!==null&&o!==null?(a||bt(l).before(new kt({name:"import",params:`'tailwindcss'${t}`})),i?.remove(),o?.remove()):o!==null?(s||bt(l).before(new kt({name:"import",params:"'tailwindcss/utilities' layer(utilities)"})),o?.remove()):i!==null&&(f||bt(l).before(new kt({name:"import",params:`'tailwindcss/theme' layer(theme)${t}`})),u||bt(l).before(new kt({name:"import",params:"'tailwindcss/preflight' layer(base)"})),i?.remove());{let p=c.toSorted((m,d)=>lr.indexOf(m)-lr.indexOf(d));if(c.some((m,d)=>m!==p[d])){let m=lr.toSorted((d,g)=>c.indexOf(d)-c.indexOf(g));n.prepend({name:"layer",params:m.join(", ")})}}}return{postcssPlugin:"@tailwindcss/upgrade/migrate-tailwind-directives",OnceExit:r}}function bt(e){let t=e.at(0),r=t.prev();for(;r;){if(r.type==="rule"&&(t=r),r.type==="atrule")if(r.name==="charset"||r.name==="import"){r=r.prev();continue}else if(r.name==="layer"&&!r.nodes){r=r.prev();continue}else t=r;r=r.prev()}return t}import"postcss";function _n({designSystem:e}={}){return{postcssPlugin:"@tailwindcss/upgrade/migrate-theme-to-var",OnceExit(t){if(!e)return;let r=nr(e,{prettyPrint:!0});t.walkDecls(n=>{let[i]=r(n.value);n.value=i}),t.walkAtRules(n=>{if(n.name==="media"||n.name==="custom-media"||n.name==="container"||n.name==="supports"){let[i]=r(n.params,2);n.params=i}})}}}import"postcss";function On(){function e(t){t.walkAtRules("variants",r=>{r.name==="variants"&&(r.name="layer",r.params="utilities")})}return{postcssPlugin:"@tailwindcss/upgrade/migrate-variants-directive",OnceExit:e}}async function Dn(e,t){if(!e.file)throw new Error("Cannot migrate a stylesheet without a file path");e.canMigrate&&await as(e,t)}async function as(e,t,r){return typeof e=="string"&&(e=await G.fromString(e),e.file=r??null),os().use(Vn()).use(bn(t)).use(Nn(t)).use(On()).use(Cn(e)).use(Pn()).use(En(t)).use(Tn(e,t)).use(Rn(t)).use(_n(t)).process(e.root,{from:e.file??void 0})}import ls from"postcss";var In=["import","config","plugin","source","custom-variant","theme","compatibility","utility","user"];function Mn(){async function e(t){{let a=function(s,...u){l=s,o.get(s).nodes?.push(...i.splice(0),...u)};var n=a;let i=[],o=new y(s=>{let u=ls.atRule({name:"tw-bucket",params:s,nodes:[]});return t.append(u),u});t.walkAtRules("tw-bucket",s=>{o.set(s.params,s)});let l="user";N(t,s=>{if(s.type==="atrule"&&s.name==="tw-bucket")return 1;if(s.type==="comment"){if(i.length>0){i.push(s);return}let u=jn(s.prev(),s)??1/0,f=jn(s,s.next())??1/0;u<f?o.get(l).nodes?.push(s):i.push(s)}else s.type==="atrule"&&["config","plugin","source","theme","utility","custom-variant"].includes(s.name)?a(s.name,s):s.type==="atrule"&&s.name==="layer"&&!s.nodes||s.type==="atrule"&&s.name==="import"||s.type==="atrule"&&s.name==="charset"||s.type==="atrule"&&s.name==="tailwind"?a("import",s):(s.type==="rule"||s.type,a("user",s));return 1}),i.length>0&&a(l)}let r=new Map;t.walkAtRules("tw-bucket",i=>{let o=r.get(i.params);if(!o){r.set(i.params,i);return}i.nodes&&o.append(...i.nodes)}),t.walkAtRules("tw-bucket",i=>{i.nodes?.length||i.remove()});{let i=Array.from(r.values()).sort((o,l)=>{let a=In.indexOf(o.params),s=In.indexOf(l.params);return a-s});t.removeAll(),t.append(i)}}return{postcssPlugin:"@tailwindcss/upgrade/sort-buckets",OnceExit:e}}function jn(e,t){return!e||!t||!e.source||!t.source||!e.source.start||!t.source.start||!e.source.end||!t.source.end?null:Math.abs(e.source.end.line-t.source.start.line)}import ss from"postcss";async function Un(e){let t=new Map,r=new Map;for(let a of e)t.set(a.id,a),a.file&&r.set(a.file,a);let n=new Set;for(let a of e){if(a.isTailwindRoot)continue;let s=!1,u=a.layers().size>0;N(a.root,f=>{if(f.type==="atrule"&&f.name==="utility")s=!0;else{if(f.type==="atrule"&&f.name==="import"&&f.params.includes("layer(")||f.type==="atrule"&&f.name==="layer"||f.type==="comment")return 1;u=!0}return s&&u?2:1}),s&&u&&n.add(a)}let i=new Map;for(let a of e){if(!a.file||a.parents.size===0||!n.has(a)&&!Array.from(a.descendants()).some(p=>n.has(p)))continue;let s=ss.root();N(a.root,p=>{if(p.type==="atrule"&&p.name==="utility")return s.append(p),1});let u=a.file.replace(/\.css$/,".utilities.css"),f=0;for(;r.has(u);)f+=1,u=a.file.replace(/\.css$/,`.utilities.${f}.css`);let c=await G.fromRoot(s,u);c.extension=f>0?`.utilities.${f}.css`:".utilities.css",i.set(a,c),t.set(c.id,c)}for(let[a,s]of i){for(let u of a.parents){let f=i.get(u.item);f&&s.parents.add({item:f,meta:u.meta})}for(let u of a.children){let f=i.get(u.item);f&&s.children.add({item:f,meta:u.meta})}}for(let a of e){let s=i.get(a),u=new Set;for(let f of a.importRules){let c=f.raws.tailwind_destination_sheet_id;if(!c)continue;let p=t.get(c);if(!p)continue;let m=i.get(p);if(!m)continue;let d=f.params.match(/(['"])(.*)\1/);if(!d)return;let g=d[1],h=d[2],v=h.replace(/\.css$/,m.extension),A=f.clone({params:`${g}${v}${g}`,raws:{tailwind_injected_layer:f.raws.tailwind_injected_layer,tailwind_original_params:`${g}${h}${g}`,tailwind_destination_sheet_id:m.id}});s?u.add(A):f.after(A)}s&&u.size>0&&s.root.prepend(Array.from(u))}let o=new y(()=>new Set);for(let a of t.values())for(let s of a.importRules){let u=s.raws.tailwind_destination_sheet_id;if(!u)continue;let f=t.get(u);f&&o.get(f).add(s)}let l=[];for(let a of e.slice()){for(let s of a.descendants())l.push(s);l.push(a)}for(let a of l){let s=i.get(a);if(s&&a.isEmpty){a.root=s.root;for(let u of o.get(s))u.params=u.raws.tailwind_original_params;for(let u of o.get(a))u.remove();i.delete(a)}}e.push(...i.values())}import me from"picocolors";function Ln({invalid:e,usage:t,options:r}){let n=process.stdout.columns;if(W(st()),e&&(W(),W(`${me.dim("Invalid command:")} ${e}`)),t&&t.length>0){W(),W(me.dim("Usage:"));for(let[i,o]of t.entries()){let l=o.slice(0,o.indexOf("[")),a=o.slice(o.indexOf("["));a=a.replace(/\[.*?\]/g,f=>me.dim(f));let u=Le(a,n-lt.indent-l.length-1);u.length>1&&i!==0&&W(),W(Fe(`${l}${u.shift()}`));for(let f of u)W(Fe(f,l.length))}}if(r){let i=0;for(let{alias:s}of Object.values(r))s&&(i=Math.max(i,s.length));let o=[],l=0;for(let[s,{alias:u}]of Object.entries(r)){let f=[u&&`${u.padStart(i)}`,u?s:" ".repeat(i+2)+s].filter(Boolean).join(", ");o.push(f),l=Math.max(l,f.length)}W(),W(me.dim("Options:"));let a=8;for(let{description:s,default:u=null}of Object.values(r)){let f=o.shift(),c=a+(l-f.length),p=2,m=n-f.length-c-p-lt.indent,d=Le(u!==null?`${s} ${me.dim(`[default:\u202F${x(`${u}`)}]`)}`:s,m);W(Fe(`${me.blue(f)} ${me.dim(me.gray("\xB7")).repeat(c)} ${d.shift()}`));for(let g of d)W(Fe(`${" ".repeat(f.length+c+p)}${g}`))}}}import us from"mri";function zn(e,t=process.argv.slice(2)){let r=us(t),n={_:r._};for(let[i,{type:o,alias:l,default:a=o==="boolean"?!1:null}]of Object.entries(e)){if(n[i]=a,l){let s=l.slice(1);r[s]!==void 0&&(n[i]=Fn(r[s],o))}{let s=i.slice(2);r[s]!==void 0&&(n[i]=Fn(r[s],o))}}return n}function Fn(e,t){switch(t){case"string":return At(e);case"boolean":return xt(e);case"number":return Ct(e);case"boolean | string":return xt(e)??At(e);case"number | string":return Ct(e)??At(e);case"boolean | number":return xt(e)??Ct(e);case"boolean | number | string":return xt(e)??Ct(e)??At(e);default:throw new Error(`Unhandled type: ${t}`)}}function xt(e){if(e===!0||e===!1)return e;if(e==="true")return!0;if(e==="false")return!1}function Ct(e){if(typeof e=="number")return e;{let t=Number(e);if(!Number.isNaN(t))return t}}function At(e){return`${e}`}import{execSync as fs}from"node:child_process";function sr(){try{return fs("git status --porcelain",{encoding:"utf-8"}).trim()!==""}catch(e){return!e?.toString?.().includes("not a git repository")}}var Wn={"--config":{type:"string",description:"Path to the configuration file",alias:"-c"},"--help":{type:"boolean",description:"Display usage information",alias:"-h"},"--force":{type:"boolean",description:"Force the migration",alias:"-f"},"--version":{type:"boolean",description:"Display the version number",alias:"-v"}},St=zn(Wn);St["--help"]&&(Ln({usage:["npx @tailwindcss/upgrade"],options:Wn}),process.exit(0));async function gs(){let e=process.cwd();se(st()),se();let t=[];St["--force"]||sr()&&(E("Git directory is not clean. Please stash or commit your changes before migrating."),K(`You may use the ${x("--force")} flag to silence this warning and perform the migration.`),process.exit(1));{let r=St._.map(u=>ms.resolve(e,u));r.length===0&&(K("Searching for CSS files in the current directory and its subdirectories\u2026"),r=await ps(["**/*.css"],{absolute:!0,gitignore:!0,ignore:["**/node_modules/**"]})),r=r.filter(u=>u.endsWith(".css"));let n=await Promise.allSettled(r.map(u=>G.load(u)));for(let u of n)u.status==="rejected"&&E(`${u.reason?.message??u.reason}`,{prefix:"\u21B3 "});let i=n.filter(u=>u.status==="fulfilled").map(u=>u.value),o=new Map(i.map(u=>[u,u.root.toString()]));try{await Oi(i)}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}if(_(3))try{await Hi(i,{configPath:St["--config"],base:e})}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}i.some(u=>u.isTailwindRoot&&u.linkedConfigPath)&&K("Migrating JavaScript configuration files\u2026");let l=new Map,a=new Map;for(let u of i){if(!u.isTailwindRoot||!_(3)&&!u.linkedConfigPath)continue;let f=await qi(u.linkedConfigPath,{base:e});l.set(u,f);let c=await Ci(f.designSystem,f.configFilePath,e);a.set(u,c),c!==null&&t.push(()=>Kn.rm(f.configFilePath)),c!==null&&j(`Migrated configuration file: ${x(R(f.configFilePath,e))}`,{prefix:"\u21B3 "})}if(i.length>0&&K("Migrating stylesheets\u2026"),await Promise.all(i.map(async u=>{try{let f=l.get(u),c=a.get(u)??null;if(!f){for(let p of u.ancestors())if(p.isTailwindRoot){f??=l.get(p),c??=a.get(p)??null;break}}await Dn(u,{newPrefix:f?.newPrefix??null,designSystem:f?.designSystem??await u.designSystem(),userConfig:f?.userConfig??null,configFilePath:f?.configFilePath??null,jsConfigMigration:c})}catch(f){E(`${f?.message??f} in ${x(R(u.file,e))}`,{prefix:"\u21B3 "})}})),_(3)){try{await Un(i)}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}for(let u of i)for(let f of u.importRules){if(!f.raws.tailwind_injected_layer)continue;let c=i.find(p=>p.id===f.raws.tailwind_destination_sheet_id);c&&c.containsRule(p=>p.type==="atrule"&&p.name==="utility")&&(f.params=f.params.replace(/ layer\([^)]+\)/,"").trim())}}for(let u of i)o.get(u)!==u.root.toString()&&await ds([Mn(),Mi()]).process(u.root,{from:u.file});for(let u of i)u.file&&(await Kn.writeFile(u.file,u.root.toString()),u.isTailwindRoot&&j(`Migrated stylesheet: ${x(R(u.file,e))}`,{prefix:"\u21B3 "}));K("Updating dependencies\u2026");{let u=Pe(e),f=["tailwindcss","@tailwindcss/cli","@tailwindcss/postcss","@tailwindcss/vite","@tailwindcss/node","@tailwindcss/oxide","prettier-plugin-tailwindcss"].filter(c=>c==="tailwindcss"||u.has(c));try{await u.add(f.map(c=>`${c}@latest`));for(let c of f)j(`Updated package: ${x(c)}`,{prefix:"\u21B3 "})}catch{}}let s=i.filter(u=>u.isTailwindRoot&&u.file);s.length>0&&K("Migrating templates\u2026");{let u=new Set;for(let f of s){let c=await f.compiler();if(!c)continue;let p=await f.designSystem();if(!p)continue;let m=(c.root==="none"?[]:c.root===null?[{base:e,pattern:"**/*",negated:!1}]:[{...c.root,negated:!1}]).concat(c.sources),d=l.get(f),g=new cs({sources:m}),h=[];for(let v of g.files)v.endsWith(".css")||u.has(v)||(u.add(v),h.push(v));await Promise.allSettled(h.map(v=>kn(p,d?.userConfig??null,v))),d?.configFilePath?j(`Migrated templates for configuration file: ${x(R(d.configFilePath,e))}`,{prefix:"\u21B3 "}):j(`Migrated templates for: ${x(R(f.file??"<unknown>",e))}`,{prefix:"\u21B3 "})}}}_(3)&&await Ni(e),await Promise.allSettled(t.map(r=>r())),sr()?j("Verify the changes and commit them to your repository."):j("No changes were made to your repository.")}gs().then(()=>process.exit(0)).catch(e=>{console.error(e),process.exit(1)});
|
|
249
|
+
`;let s=Xl.parse(a);s.walkDecls(u=>{u.value.includes("theme(")&&(u.value=is(k(u.value),f=>n(f)?r:f==="borderColor.DEFAULT"?"var(--color-gray-200, currentcolor)":null))}),o.walkAtRules("theme",u=>{u.walkDecls("--border-color",f=>{f.remove()}),u.nodes?.length===0&&u.remove()}),o.append(s)}return{postcssPlugin:"@tailwindcss/upgrade/migrate-preflight",OnceExit:i}}function is(e,t){return S(e,(r,{replaceWith:n})=>{if(r.kind==="function"&&r.value==="theme"){if(r.nodes.length<1)return;r.nodes[0].kind==="separator"&&r.nodes[0].value.trim()===""&&r.nodes.shift();let i=r.nodes[0];if(i.kind!=="word")return;let o=i.value,l=1;for(let u=l;u<r.nodes.length&&!r.nodes[u].value.includes(",");u++)o+=b([r.nodes[u]]),l=u+1;o=ns(o);let a=r.nodes.slice(l+1),s=a.length>0?t(o,b(a)):t(o);if(s===null)return;n(k(s))}}),b(e)}function ns(e){if(e[0]!=="'"&&e[0]!=='"')return e;let t="",r=e[0];for(let n=1;n<e.length-1;n++){let i=e[n],o=e[n+1];i==="\\"&&(o===r||o==="\\")?(t+=o,n++):t+=i}return t}import{AtRule as kt}from"postcss";var lr=["theme","base","components","utilities"];function En(e){let t=e.newPrefix?` prefix(${e.newPrefix})`:"";function r(n){let i=null,o=null,l=[],a=null,s=null,u=null,f=null,c=[];n.walkAtRules(p=>{if(p.name==="import"&&p.params.match(/^["']tailwindcss\/tailwind\.css["']$/)&&(p.params=p.params.replace("tailwindcss/tailwind.css","tailwindcss")),p.name==="import"&&p.params.match(/^["']tailwindcss["']/))p.params+=t;else if(p.name==="tailwind"&&p.params==="base"||p.name==="import"&&p.params.match(/^["']tailwindcss\/base["']$/))c.push("base"),l.push(p),i=p;else if(p.name==="tailwind"&&p.params==="utilities"||p.name==="import"&&p.params.match(/^["']tailwindcss\/utilities["']$/))c.push("utilities"),l.push(p),o=p;else if(p.name==="tailwind"&&p.params==="components"||p.name==="tailwind"&&p.params==="screens"||p.name==="tailwind"&&p.params==="variants"||p.name==="import"&&p.params.match(/^["']tailwindcss\/components["']$/))p.remove();else if(p.name==="responsive")if(p.nodes){for(let m of p.nodes)m.raws.tailwind_pretty=!0;p.replaceWith(p.nodes)}else p.remove()}),i!==null&&o!==null?(a||bt(l).before(new kt({name:"import",params:`'tailwindcss'${t}`})),i?.remove(),o?.remove()):o!==null?(s||bt(l).before(new kt({name:"import",params:"'tailwindcss/utilities' layer(utilities)"})),o?.remove()):i!==null&&(f||bt(l).before(new kt({name:"import",params:`'tailwindcss/theme' layer(theme)${t}`})),u||bt(l).before(new kt({name:"import",params:"'tailwindcss/preflight' layer(base)"})),i?.remove());{let p=c.toSorted((m,d)=>lr.indexOf(m)-lr.indexOf(d));if(c.some((m,d)=>m!==p[d])){let m=lr.toSorted((d,g)=>c.indexOf(d)-c.indexOf(g));n.prepend({name:"layer",params:m.join(", ")})}}}return{postcssPlugin:"@tailwindcss/upgrade/migrate-tailwind-directives",OnceExit:r}}function bt(e){let t=e.at(0),r=t.prev();for(;r;){if(r.type==="rule"&&(t=r),r.type==="atrule")if(r.name==="charset"||r.name==="import"){r=r.prev();continue}else if(r.name==="layer"&&!r.nodes){r=r.prev();continue}else t=r;r=r.prev()}return t}import"postcss";function _n({designSystem:e}={}){return{postcssPlugin:"@tailwindcss/upgrade/migrate-theme-to-var",OnceExit(t){if(!e)return;let r=nr(e,{prettyPrint:!0});t.walkDecls(n=>{let[i]=r(n.value);n.value=i}),t.walkAtRules(n=>{if(n.name==="media"||n.name==="custom-media"||n.name==="container"||n.name==="supports"){let[i]=r(n.params,2);n.params=i}})}}}import"postcss";function On(){function e(t){t.walkAtRules("variants",r=>{r.name==="variants"&&(r.name="layer",r.params="utilities")})}return{postcssPlugin:"@tailwindcss/upgrade/migrate-variants-directive",OnceExit:e}}async function Dn(e,t){if(!e.file)throw new Error("Cannot migrate a stylesheet without a file path");e.canMigrate&&await as(e,t)}async function as(e,t,r){return typeof e=="string"&&(e=await G.fromString(e),e.file=r??null),os().use(Vn()).use(bn(t)).use(Nn(t)).use(On()).use(Cn(e)).use(Pn()).use(En(t)).use(Tn(e,t)).use(Rn(t)).use(_n(t)).process(e.root,{from:e.file??void 0})}import ls from"postcss";var In=["import","config","plugin","source","custom-variant","theme","compatibility","utility","user"];function Mn(){async function e(t){{let a=function(s,...u){l=s,o.get(s).nodes?.push(...i.splice(0),...u)};var n=a;let i=[],o=new y(s=>{let u=ls.atRule({name:"tw-bucket",params:s,nodes:[]});return t.append(u),u});t.walkAtRules("tw-bucket",s=>{o.set(s.params,s)});let l="user";N(t,s=>{if(s.type==="atrule"&&s.name==="tw-bucket")return 1;if(s.type==="comment"){if(i.length>0){i.push(s);return}let u=jn(s.prev(),s)??1/0,f=jn(s,s.next())??1/0;u<f?o.get(l).nodes?.push(s):i.push(s)}else s.type==="atrule"&&["config","plugin","source","theme","utility","custom-variant"].includes(s.name)?a(s.name,s):s.type==="atrule"&&s.name==="layer"&&!s.nodes||s.type==="atrule"&&s.name==="import"||s.type==="atrule"&&s.name==="charset"||s.type==="atrule"&&s.name==="tailwind"?a("import",s):(s.type==="rule"||s.type,a("user",s));return 1}),i.length>0&&a(l)}let r=new Map;t.walkAtRules("tw-bucket",i=>{let o=r.get(i.params);if(!o){r.set(i.params,i);return}i.nodes&&o.append(...i.nodes)}),t.walkAtRules("tw-bucket",i=>{i.nodes?.length||i.remove()});{let i=Array.from(r.values()).sort((o,l)=>{let a=In.indexOf(o.params),s=In.indexOf(l.params);return a-s});t.removeAll(),t.append(i)}}return{postcssPlugin:"@tailwindcss/upgrade/sort-buckets",OnceExit:e}}function jn(e,t){return!e||!t||!e.source||!t.source||!e.source.start||!t.source.start||!e.source.end||!t.source.end?null:Math.abs(e.source.end.line-t.source.start.line)}import ss from"postcss";async function Un(e){let t=new Map,r=new Map;for(let a of e)t.set(a.id,a),a.file&&r.set(a.file,a);let n=new Set;for(let a of e){if(a.isTailwindRoot)continue;let s=!1,u=a.layers().size>0;N(a.root,f=>{if(f.type==="atrule"&&f.name==="utility")s=!0;else{if(f.type==="atrule"&&f.name==="import"&&f.params.includes("layer(")||f.type==="atrule"&&f.name==="layer"||f.type==="comment")return 1;u=!0}return s&&u?2:1}),s&&u&&n.add(a)}let i=new Map;for(let a of e){if(!a.file||a.parents.size===0||!n.has(a)&&!Array.from(a.descendants()).some(p=>n.has(p)))continue;let s=ss.root();N(a.root,p=>{if(p.type==="atrule"&&p.name==="utility")return s.append(p),1});let u=a.file.replace(/\.css$/,".utilities.css"),f=0;for(;r.has(u);)f+=1,u=a.file.replace(/\.css$/,`.utilities.${f}.css`);let c=await G.fromRoot(s,u);c.extension=f>0?`.utilities.${f}.css`:".utilities.css",i.set(a,c),t.set(c.id,c)}for(let[a,s]of i){for(let u of a.parents){let f=i.get(u.item);f&&s.parents.add({item:f,meta:u.meta})}for(let u of a.children){let f=i.get(u.item);f&&s.children.add({item:f,meta:u.meta})}}for(let a of e){let s=i.get(a),u=new Set;for(let f of a.importRules){let c=f.raws.tailwind_destination_sheet_id;if(!c)continue;let p=t.get(c);if(!p)continue;let m=i.get(p);if(!m)continue;let d=f.params.match(/(['"])(.*)\1/);if(!d)return;let g=d[1],h=d[2],v=h.replace(/\.css$/,m.extension),A=f.clone({params:`${g}${v}${g}`,raws:{tailwind_injected_layer:f.raws.tailwind_injected_layer,tailwind_original_params:`${g}${h}${g}`,tailwind_destination_sheet_id:m.id}});s?u.add(A):f.after(A)}s&&u.size>0&&s.root.prepend(Array.from(u))}let o=new y(()=>new Set);for(let a of t.values())for(let s of a.importRules){let u=s.raws.tailwind_destination_sheet_id;if(!u)continue;let f=t.get(u);f&&o.get(f).add(s)}let l=[];for(let a of e.slice()){for(let s of a.descendants())l.push(s);l.push(a)}for(let a of l){let s=i.get(a);if(s&&a.isEmpty){a.root=s.root;for(let u of o.get(s))u.params=u.raws.tailwind_original_params;for(let u of o.get(a))u.remove();i.delete(a)}}e.push(...i.values())}import me from"picocolors";function Ln({invalid:e,usage:t,options:r}){let n=process.stdout.columns;if(W(st()),e&&(W(),W(`${me.dim("Invalid command:")} ${e}`)),t&&t.length>0){W(),W(me.dim("Usage:"));for(let[i,o]of t.entries()){let l=o.slice(0,o.indexOf("[")),a=o.slice(o.indexOf("["));a=a.replace(/\[.*?\]/g,f=>me.dim(f));let u=Le(a,n-lt.indent-l.length-1);u.length>1&&i!==0&&W(),W(Fe(`${l}${u.shift()}`));for(let f of u)W(Fe(f,l.length))}}if(r){let i=0;for(let{alias:s}of Object.values(r))s&&(i=Math.max(i,s.length));let o=[],l=0;for(let[s,{alias:u}]of Object.entries(r)){let f=[u&&`${u.padStart(i)}`,u?s:" ".repeat(i+2)+s].filter(Boolean).join(", ");o.push(f),l=Math.max(l,f.length)}W(),W(me.dim("Options:"));let a=8;for(let{description:s,default:u=null}of Object.values(r)){let f=o.shift(),c=a+(l-f.length),p=2,m=n-f.length-c-p-lt.indent,d=Le(u!==null?`${s} ${me.dim(`[default:\u202F${x(`${u}`)}]`)}`:s,m);W(Fe(`${me.blue(f)} ${me.dim(me.gray("\xB7")).repeat(c)} ${d.shift()}`));for(let g of d)W(Fe(`${" ".repeat(f.length+c+p)}${g}`))}}}import us from"mri";function zn(e,t=process.argv.slice(2)){let r=us(t),n={_:r._};for(let[i,{type:o,alias:l,default:a=o==="boolean"?!1:null}]of Object.entries(e)){if(n[i]=a,l){let s=l.slice(1);r[s]!==void 0&&(n[i]=Fn(r[s],o))}{let s=i.slice(2);r[s]!==void 0&&(n[i]=Fn(r[s],o))}}return n}function Fn(e,t){switch(t){case"string":return At(e);case"boolean":return xt(e);case"number":return Ct(e);case"boolean | string":return xt(e)??At(e);case"number | string":return Ct(e)??At(e);case"boolean | number":return xt(e)??Ct(e);case"boolean | number | string":return xt(e)??Ct(e)??At(e);default:throw new Error(`Unhandled type: ${t}`)}}function xt(e){if(e===!0||e===!1)return e;if(e==="true")return!0;if(e==="false")return!1}function Ct(e){if(typeof e=="number")return e;{let t=Number(e);if(!Number.isNaN(t))return t}}function At(e){return`${e}`}import{execSync as fs}from"node:child_process";function sr(){try{return fs("git status --porcelain",{encoding:"utf-8"}).trim()!==""}catch(e){return!e?.toString?.().includes("not a git repository")}}var Wn={"--config":{type:"string",description:"Path to the configuration file",alias:"-c"},"--help":{type:"boolean",description:"Display usage information",alias:"-h"},"--force":{type:"boolean",description:"Force the migration",alias:"-f"},"--version":{type:"boolean",description:"Display the version number",alias:"-v"}},St=zn(Wn);St["--help"]&&(Ln({usage:["npx @tailwindcss/upgrade"],options:Wn}),process.exit(0));async function gs(){let e=process.cwd();se(st()),se();let t=[];St["--force"]||sr()&&(E("Git directory is not clean. Please stash or commit your changes before migrating."),K(`You may use the ${x("--force")} flag to silence this warning and perform the migration.`),process.exit(1));{let r=St._.map(u=>ms.resolve(e,u));r.length===0&&(K("Searching for CSS files in the current directory and its subdirectories\u2026"),r=await ps(["**/*.css"],{absolute:!0,gitignore:!0})),r=r.filter(u=>u.endsWith(".css"));let n=await Promise.allSettled(r.map(u=>G.load(u)));for(let u of n)u.status==="rejected"&&E(`${u.reason?.message??u.reason}`,{prefix:"\u21B3 "});let i=n.filter(u=>u.status==="fulfilled").map(u=>u.value),o=new Map(i.map(u=>[u,u.root.toString()]));try{await Oi(i)}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}if(_(3))try{await Hi(i,{configPath:St["--config"],base:e})}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}i.some(u=>u.isTailwindRoot&&u.linkedConfigPath)&&K("Migrating JavaScript configuration files\u2026");let l=new Map,a=new Map;for(let u of i){if(!u.isTailwindRoot||!_(3)&&!u.linkedConfigPath)continue;let f=await qi(u.linkedConfigPath,{base:e});l.set(u,f);let c=await Ci(f.designSystem,f.configFilePath,e);a.set(u,c),c!==null&&t.push(()=>Kn.rm(f.configFilePath)),c!==null&&j(`Migrated configuration file: ${x(R(f.configFilePath,e))}`,{prefix:"\u21B3 "})}if(i.length>0&&K("Migrating stylesheets\u2026"),await Promise.all(i.map(async u=>{try{let f=l.get(u),c=a.get(u)??null;if(!f){for(let p of u.ancestors())if(p.isTailwindRoot){f??=l.get(p),c??=a.get(p)??null;break}}await Dn(u,{newPrefix:f?.newPrefix??null,designSystem:f?.designSystem??await u.designSystem(),userConfig:f?.userConfig??null,configFilePath:f?.configFilePath??null,jsConfigMigration:c})}catch(f){E(`${f?.message??f} in ${x(R(u.file,e))}`,{prefix:"\u21B3 "})}})),_(3)){try{await Un(i)}catch(u){E(`${u?.message??u}`,{prefix:"\u21B3 "})}for(let u of i)for(let f of u.importRules){if(!f.raws.tailwind_injected_layer)continue;let c=i.find(p=>p.id===f.raws.tailwind_destination_sheet_id);c&&c.containsRule(p=>p.type==="atrule"&&p.name==="utility")&&(f.params=f.params.replace(/ layer\([^)]+\)/,"").trim())}}for(let u of i)o.get(u)!==u.root.toString()&&await ds([Mn(),Mi()]).process(u.root,{from:u.file});for(let u of i)u.file&&(await Kn.writeFile(u.file,u.root.toString()),u.isTailwindRoot&&j(`Migrated stylesheet: ${x(R(u.file,e))}`,{prefix:"\u21B3 "}));K("Updating dependencies\u2026");{let u=Pe(e),f=["tailwindcss","@tailwindcss/cli","@tailwindcss/postcss","@tailwindcss/vite","@tailwindcss/node","@tailwindcss/oxide","prettier-plugin-tailwindcss"].filter(c=>c==="tailwindcss"||u.has(c));try{await u.add(f.map(c=>`${c}@latest`));for(let c of f)j(`Updated package: ${x(c)}`,{prefix:"\u21B3 "})}catch{}}let s=i.filter(u=>u.isTailwindRoot&&u.file);s.length>0&&K("Migrating templates\u2026");{let u=new Set;for(let f of s){let c=await f.compiler();if(!c)continue;let p=await f.designSystem();if(!p)continue;let m=(c.root==="none"?[]:c.root===null?[{base:e,pattern:"**/*",negated:!1}]:[{...c.root,negated:!1}]).concat(c.sources),d=l.get(f),g=new cs({sources:m}),h=[];for(let v of g.files)v.endsWith(".css")||u.has(v)||(u.add(v),h.push(v));await Promise.allSettled(h.map(v=>kn(p,d?.userConfig??null,v))),d?.configFilePath?j(`Migrated templates for configuration file: ${x(R(d.configFilePath,e))}`,{prefix:"\u21B3 "}):j(`Migrated templates for: ${x(R(f.file??"<unknown>",e))}`,{prefix:"\u21B3 "})}}}_(3)&&await Ni(e),await Promise.allSettled(t.map(r=>r())),sr()?j("Verify the changes and commit them to your repository."):j("No changes were made to your repository.")}gs().then(()=>process.exit(0)).catch(e=>{console.error(e),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailwindcss/upgrade",
|
|
3
|
-
"version": "0.0.0-insiders.
|
|
3
|
+
"version": "0.0.0-insiders.56b22bb",
|
|
4
4
|
"description": "A utility-first CSS framework for rapidly building custom user interfaces.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"braces": "^3.0.3",
|
|
26
|
-
"dedent": "1.
|
|
26
|
+
"dedent": "1.5.3",
|
|
27
27
|
"enhanced-resolve": "^5.18.1",
|
|
28
28
|
"globby": "^14.1.0",
|
|
29
29
|
"jiti": "^2.0.0-beta.3",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"semver": "^7.7.1",
|
|
37
37
|
"tree-sitter": "^0.22.4",
|
|
38
38
|
"tree-sitter-typescript": "^0.23.2",
|
|
39
|
-
"@tailwindcss/node": "0.0.0-insiders.
|
|
40
|
-
"
|
|
41
|
-
"tailwindcss": "0.0.0-insiders.
|
|
39
|
+
"@tailwindcss/node": "0.0.0-insiders.56b22bb",
|
|
40
|
+
"tailwindcss": "0.0.0-insiders.56b22bb",
|
|
41
|
+
"@tailwindcss/oxide": "0.0.0-insiders.56b22bb"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/braces": "^3.0.5",
|