ultracite 6.4.2 → 6.4.3
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/config/core/biome.jsonc +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +43 -23
- package/package.json +1 -1
package/config/core/biome.jsonc
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -11,10 +11,10 @@ declare const router: _trpc_server.TRPCBuiltRouter<{
|
|
|
11
11
|
input: {
|
|
12
12
|
pm?: "npm" | "yarn" | "pnpm" | "bun" | "deno" | undefined;
|
|
13
13
|
editors?: ("vscode" | "zed")[] | undefined;
|
|
14
|
-
agents?: ("zed" | "vscode-copilot" | "cursor" | "windsurf" | "claude" | "codex" | "kiro" | "cline" | "amp" | "aider" | "firebase-studio" | "open-hands" | "gemini-cli" | "junie" | "augmentcode" | "kilo-code" | "goose" | "roo-code" | "warp" | "droid")[] | undefined;
|
|
14
|
+
agents?: ("zed" | "vscode-copilot" | "cursor" | "windsurf" | "claude" | "codex" | "kiro" | "cline" | "amp" | "aider" | "firebase-studio" | "open-hands" | "gemini-cli" | "junie" | "augmentcode" | "kilo-code" | "goose" | "roo-code" | "warp" | "droid" | "antigravity")[] | undefined;
|
|
15
15
|
hooks?: ("cursor" | "claude")[] | undefined;
|
|
16
16
|
frameworks?: ("react" | "next" | "solid" | "vue" | "svelte" | "qwik" | "remix" | "angular" | "astro")[] | undefined;
|
|
17
|
-
integrations?: ("husky" | "lefthook" | "lint-staged")[] | undefined;
|
|
17
|
+
integrations?: ("husky" | "lefthook" | "lint-staged" | "pre-commit")[] | undefined;
|
|
18
18
|
migrate?: ("eslint" | "prettier")[] | undefined;
|
|
19
19
|
skipInstall?: boolean | undefined;
|
|
20
20
|
quiet?: boolean | undefined;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var le=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var wt=Object.prototype.hasOwnProperty;var de=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),Ee=e=>t=>{var s=e[t];if(s)return s();throw new Error("Module not found in bundle: "+t)};var F=(e,t)=>()=>(e&&(t=e(e=0)),t);var z=(e,t)=>{for(var s in t)le(e,s,{get:t[s],enumerable:!0})},kt=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of yt(t))!wt.call(e,o)&&o!==s&&le(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var G=e=>kt(le({},"__esModule",{value:!0}),e);import{access as At,readFile as Fe,writeFile as Ft}from"fs/promises";import{parse as Nt}from"jsonc-parser";var f,C,Y,v,Ot,Dt,K,h=F(()=>{"use strict";f=async e=>{try{return await At(e),!0}catch{return!1}},C=async()=>{if(await f("pnpm-workspace.yaml"))return!0;try{let e=Nt(await Fe("package.json","utf-8"));return e?!!e.workspaces||!!e.workspace:!1}catch{return!1}},Y=`
|
|
3
3
|
888 888 888 88888888888 8888888b. d8888 .d8888b. 8888888 88888888888 8888888888
|
|
4
4
|
888 888 888 888 888 Y88b d88888 d88P Y88b 888 888 888
|
|
5
5
|
888 888 888 888 888 888 d88P888 888 888 888 888 888
|
|
@@ -8,7 +8,7 @@ var ie=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var dt=Objec
|
|
|
8
8
|
888 888 888 888 888 T88b d88P 888 888 888 888 888 888
|
|
9
9
|
Y88b. .d88P 888 888 888 T88b d8888888888 Y88b d88P 888 888 888
|
|
10
10
|
"Y88888P" 88888888 888 888 T88b d88P 888 "Y8888P" 8888888 888 8888888888
|
|
11
|
-
`,v=async({dependencies:e,devDependencies:t,scripts:s})=>{let n=await
|
|
11
|
+
`,v=async({dependencies:e,devDependencies:t,scripts:s})=>{let n=await Fe("package.json","utf8"),o=JSON.parse(n),i={...o};(o.devDependencies||t)&&(i.devDependencies={...o.devDependencies,...t}),(o.dependencies||e)&&(i.dependencies={...o.dependencies,...e}),(o.scripts||s)&&(i.scripts={...o.scripts,...s}),await Ft("package.json",JSON.stringify(i,null,2))},Ot=/[ $(){}[\]&|;<>!"'`*?#~]/,Dt=/'/g,K=e=>e.map(t=>Ot.test(t)?`'${t.replace(Dt,"'\\''")}' `:t)});var st={};z(st,{husky:()=>S});import{execSync as Os}from"child_process";import{mkdir as Ds,readFile as Ms,writeFile as et}from"fs/promises";import{addDevDependency as Ts,dlxCommand as ke}from"nypm";var tt,ie,S,be=F(()=>{"use strict";h();tt=e=>`#!/bin/sh
|
|
12
12
|
# Exit on any error
|
|
13
13
|
set -e
|
|
14
14
|
|
|
@@ -76,10 +76,10 @@ if [ "$STAGED_HASH" != "$NEW_STAGED_HASH" ]; then
|
|
|
76
76
|
fi
|
|
77
77
|
|
|
78
78
|
exit $FORMAT_EXIT_CODE
|
|
79
|
-
`,
|
|
80
|
-
${n}`)}}});var
|
|
79
|
+
`,ie="./.husky/pre-commit",S={exists:()=>f(ie),install:async e=>{await Ts("husky",{packageManager:e,workspace:await C(),silent:!0}),await v({scripts:{prepare:"husky"}})},init:e=>{let t=ke(e,"husky",{args:["init"]});try{Os(t,{stdio:"pipe"})}catch{}},create:async e=>{await Ds(".husky",{recursive:!0});let t=ke(e,"ultracite",{args:["fix"],short:e==="npm"}),s=tt(t);await et(ie,s)},update:async e=>{let t=await Ms(ie,"utf-8"),s=ke(e,"ultracite",{args:["fix"],short:e==="npm"}),n=tt(s);await et(ie,`${t}
|
|
80
|
+
${n}`)}}});var rt={};z(rt,{lefthook:()=>O});import{execSync as Us}from"child_process";import{readFile as Is,writeFile as B}from"fs/promises";import{addDevDependency as _s,dlxCommand as ot}from"nypm";var Js,Bs,it,R,nt,O,xe=F(()=>{"use strict";h();Js=/(pre-commit:\s*\n\s*jobs:\s*\n)/,Bs=/(pre-commit:\s*\n)/,it=e=>ot(e,"ultracite",{args:["fix"],short:e==="npm"}),R="./lefthook.yml",nt=e=>`pre-commit:
|
|
81
81
|
jobs:
|
|
82
|
-
- run: ${
|
|
82
|
+
- run: ${it(e)}
|
|
83
83
|
glob:
|
|
84
84
|
- "*.js"
|
|
85
85
|
- "*.jsx"
|
|
@@ -89,7 +89,7 @@ ${n}`)}}});var st={};ae(st,{lefthook:()=>D});import{execSync as As}from"child_pr
|
|
|
89
89
|
- "*.jsonc"
|
|
90
90
|
- "*.css"
|
|
91
91
|
stage_fixed: true
|
|
92
|
-
`,
|
|
92
|
+
`,O={exists:()=>f(R),install:async e=>{await _s("lefthook",{packageManager:e,workspace:await C(),silent:!0}),await v({scripts:{prepare:"lefthook install"}});let t=ot(e,"lefthook",{args:["install"],short:e==="npm"});Us(t,{stdio:"pipe"})},create:async e=>{let t=nt(e);await B(R,t)},update:async e=>{let t=await Is(R,"utf-8"),s=it(e),n=nt(e);if(t.includes(s))return;if(t.startsWith("# EXAMPLE USAGE:")){await B(R,n);return}if(t.includes("pre-commit:"))if(t.includes("jobs:")){let i=` - run: ${s}
|
|
93
93
|
glob:
|
|
94
94
|
- "*.js"
|
|
95
95
|
- "*.jsx"
|
|
@@ -98,7 +98,7 @@ ${n}`)}}});var st={};ae(st,{lefthook:()=>D});import{execSync as As}from"child_pr
|
|
|
98
98
|
- "*.json"
|
|
99
99
|
- "*.jsonc"
|
|
100
100
|
- "*.css"
|
|
101
|
-
stage_fixed: true`,a=t.replace(
|
|
101
|
+
stage_fixed: true`,a=t.replace(Js,`$1${i}
|
|
102
102
|
`);await B(R,a)}else{let i=` jobs:
|
|
103
103
|
- run: ${s}
|
|
104
104
|
glob:
|
|
@@ -109,29 +109,49 @@ ${n}`)}}});var st={};ae(st,{lefthook:()=>D});import{execSync as As}from"child_pr
|
|
|
109
109
|
- "*.json"
|
|
110
110
|
- "*.jsonc"
|
|
111
111
|
- "*.css"
|
|
112
|
-
stage_fixed: true`,a=t.replace(
|
|
112
|
+
stage_fixed: true`,a=t.replace(Bs,`$1${i}
|
|
113
113
|
`);await B(R,a)}else await B(R,`${t}
|
|
114
|
-
${n}`)}}});var
|
|
115
|
-
|
|
114
|
+
${n}`)}}});var ct={};z(ct,{preCommit:()=>W});import{readFile as Ls,writeFile as ve}from"fs/promises";import{dlxCommand as Ws}from"nypm";var L,Hs,at,zs,W,Ce=F(()=>{"use strict";h();L="./.pre-commit-config.yaml",Hs=/^repos:\s*\n/m,at=e=>Ws(e,"ultracite",{args:["fix"],short:e==="npm"}),zs=e=>`repos:
|
|
115
|
+
- repo: local
|
|
116
|
+
hooks:
|
|
117
|
+
- id: ultracite
|
|
118
|
+
name: ultracite
|
|
119
|
+
entry: ${at(e)}
|
|
120
|
+
language: system
|
|
121
|
+
types_or: [javascript, jsx, ts, tsx, json, css]
|
|
122
|
+
pass_filenames: false
|
|
123
|
+
`,W={exists:()=>f(L),create:async e=>{let t=zs(e);await ve(L,t)},update:async e=>{let t=await Ls(L,"utf-8"),s=at(e);if(t.includes("id: ultracite"))return;let n=` - repo: local
|
|
124
|
+
hooks:
|
|
125
|
+
- id: ultracite
|
|
126
|
+
name: ultracite
|
|
127
|
+
entry: ${s}
|
|
128
|
+
language: system
|
|
129
|
+
types_or: [javascript, jsx, ts, tsx, json, css]
|
|
130
|
+
pass_filenames: false
|
|
131
|
+
`;if(t.includes("repos:")){let o=t.replace(Hs,`repos:
|
|
132
|
+
${n}`);await ve(L,o)}else await ve(L,`${t}
|
|
133
|
+
repos:
|
|
134
|
+
${n}`)}}});var Gs,je=F(()=>{Gs=Ee({"./husky.ts":()=>(be(),G(st)),"./lefthook.ts":()=>(xe(),G(rt)),"./lint-staged.ts":()=>(Pe(),G(lt)),"./pre-commit.ts":()=>(Ce(),G(ct))})});var lt={};z(lt,{lintStaged:()=>D});import{readFile as re,writeFile as E}from"fs/promises";import{pathToFileURL as Vs}from"url";import H from"deepmerge";import{parse as Se}from"jsonc-parser";import{addDevDependency as Ys,dlxCommand as Ks}from"nypm";var P,dt,Xs,Qs,Zs,qs,en,tn,sn,nn,on,$e,rn,D,Pe=F(()=>{"use strict";h();je();P=e=>({"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":[Ks(e,"ultracite",{args:["fix"],short:e==="npm"})]}),dt=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],Xs=(e,t,s,n)=>{let o=e.trim();if(o.includes(":")&&!o.startsWith("-")){s&&n.length>0&&(t[s]=n);let[i,...a]=o.split(":"),r=a.join(":").trim(),c=i.trim().replace(/['"]/g,"");return r&&r!==""?(r.startsWith("[")&&r.endsWith("]")?t[c]=r.slice(1,-1).split(",").map(p=>p.trim().replace(/['"]/g,"")):t[c]=r.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:c,newCurrentArray:[]}}if(o.startsWith("-")&&s){let i=[...n,o.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:i}}return{newCurrentKey:s,newCurrentArray:n}},Qs=e=>{let t=e.split(`
|
|
135
|
+
`).filter(i=>i.trim()&&!i.trim().startsWith("#")),s={},n=null,o=[];for(let i of t){let a=Xs(i,s,n,o);n=a.newCurrentKey,o=a.newCurrentArray}return n&&o.length>0&&(s[n]=o),s},Zs=e=>{let t="";for(let[s,n]of Object.entries(e))if(Array.isArray(n)){t+=`${s}:
|
|
116
136
|
`;for(let o of n)t+=` - '${o}'
|
|
117
137
|
`}else t+=`${s}: '${n}'
|
|
118
|
-
`;return t},
|
|
119
|
-
`;await E(e,a)},
|
|
120
|
-
`;await E(e,o)}
|
|
121
|
-
`);return{line:n.length,column:(n.at(-1)?.length??0)+1}},
|
|
122
|
-
`),{line:n,column:o}=
|
|
123
|
-
${
|
|
124
|
-
`),hasErrors:n.errors>0}}catch{return{output:`${b("Ultracite")} ${b(`v${k.version}`)} ${
|
|
125
|
-
${
|
|
138
|
+
`;return t},qs=async()=>{try{let e=Se(await re("./package.json","utf-8"));return e?e.type==="module":!1}catch{return!1}},en=async e=>{let t=Se(await re("./package.json","utf-8"));t&&(t["lint-staged"]?t["lint-staged"]=H(t["lint-staged"],P(e)):t["lint-staged"]=P(e),await E("./package.json",JSON.stringify(t,null,2)))},tn=async(e,t)=>{let s=await re(e,"utf-8"),n=Se(s);if(!n)return;let o=H(n,P(t));await E(e,JSON.stringify(o,null,2))},sn=async(e,t)=>{let s=await re(e,"utf-8"),n=Qs(s);if(!n)return;let o=H(n,P(t));await E(e,Zs(o))},nn=async(e,t)=>{let o=(await import(Vs(e).href)).default||{},i=H(o,P(t)),a=`export default ${JSON.stringify(i,null,2)};
|
|
139
|
+
`;await E(e,a)},on=async(e,t)=>{delete de.cache[de.resolve(`./${e}`)];let s=Gs(`./${e}`),n=H(s,P(t)),o=`module.exports = ${JSON.stringify(n,null,2)};
|
|
140
|
+
`;await E(e,o)},$e=async e=>{await E(".lintstagedrc.json",JSON.stringify(P(e),null,2))},rn=async(e,t)=>{if(e==="./package.json"){await en(t);return}if(e.endsWith(".json")||e==="./.lintstagedrc"){await tn(e,t);return}if(e.endsWith(".yaml")||e.endsWith(".yml")){await sn(e,t);return}let s=await qs();if(e.endsWith(".mjs")||e.endsWith(".js")&&s){try{await nn(e,t)}catch{await $e(t)}return}if(e.endsWith(".cjs")||e.endsWith(".js")&&!s)try{await on(e,t)}catch{await $e(t)}},D={exists:async()=>{for(let e of dt)if(await f(e))return!0;return!1},install:async e=>{await Ys("lint-staged",{packageManager:e,workspace:await C(),silent:!0})},create:async e=>{await E(".lintstagedrc.json",JSON.stringify(P(e),null,2))},update:async e=>{let t=null;for(let s of dt)if(await f(s)){t=s;break}if(!t){await $e(e);return}await rn(t,e)}}});import{initTRPC as Fn}from"@trpc/server";import{createCli as Nn}from"trpc-cli";import d from"zod";var k={name:"ultracite",description:"The AI-ready formatter that helps you write and generate code faster.",version:"6.4.3",type:"module",bin:{ultracite:"dist/index.js"},files:["config","dist","README.md"],scripts:{build:"tsup",test:"bun test","test:coverage":"bun test --coverage"},exports:{"./*":"./config/*/biome.jsonc"},author:"Hayden Bleasel <hello@haydenbleasel.com>",bugs:{url:"https://github.com/haydenbleasel/ultracite/issues"},homepage:"https://www.ultracite.ai/",keywords:["ultracite","biome","linter","formatter","fixer"],license:"MIT",publishConfig:{access:"public",registry:"https://registry.npmjs.org/"},repository:{type:"git",url:"git+https://github.com/haydenbleasel/ultracite.git"},devDependencies:{"@biomejs/biome":"2.3.10","@types/node":"^25.0.0",tsup:"^8.5.1",turbo:"^2.6.3"},dependencies:{"@clack/prompts":"^0.11.0","@trpc/server":"^11.8.0",deepmerge:"^4.3.1",glob:"^13.0.0","jsonc-parser":"^3.3.1",nypm:"^0.6.2",picocolors:"^1.1.1","trpc-cli":"^0.12.1",zod:"^4.1.13"},packageManager:"bun@1.3.4"};import{spawnSync as Mt}from"child_process";import Tt from"process";import{detectPackageManager as Ut,dlxCommand as It}from"nypm";import l from"picocolors";var b=e=>`\x1B[38;5;208m${e}\x1B[39m`,Ae=(e,t)=>{let n=e.slice(0,t[0]).split(`
|
|
141
|
+
`);return{line:n.length,column:(n.at(-1)?.length??0)+1}},xt=(e,t)=>{let s=e.split(`
|
|
142
|
+
`),{line:n,column:o}=Ae(e,t),i=[],a=Math.max(1,n-1),r=Math.min(s.length,n+2);for(let c=a;c<=r;c++){let p=String(c).padStart(5," "),u=s[c-1]||"";if(c===n){i.push(`${b(">")}${l.dim(p)} ${l.gray("\u2502")} ${u}`);let x=" ".repeat(o-1),y=Math.min(t[1]-t[0],u.length-o+1),m="^".repeat(Math.max(1,y));i.push(`${l.dim(" ")} ${l.gray("\u2502")} ${x}${b(m)}`)}else i.push(` ${l.dim(p)} ${l.gray("\u2502")} ${u}`)}return i},vt=e=>{let t=e.secs*1e3+e.nanos/1e6;return t<1e3?`${Math.round(t)}ms`:`${(t/1e3).toFixed(2)}s`},Ct=l.dim("\u2500".repeat(60)),jt=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),Pt=e=>{let t=e.split("/");if(t.length<3||t[0]!=="lint")return null;let s=t.at(-1);return s?`https://biomejs.dev/linter/rules/${jt(s)}/`:null},$t=e=>["",`${b("Ultracite")} ${b(`v${k.version}`)} ${e}`],St=(e,t)=>{let s=[],n=e.changed+e.unchanged,o=e.errors+e.warnings,i=vt(e.duration);if(o>0){let r=o!==1?"errors":"error";s.push(`${l.dim("Found")} ${o} ${r}${l.dim(".")}`)}let a=n!==1?"files":"file";if(s.push(`${l.green("\u2713")} ${l.dim("Finished in")} ${i} ${l.dim("on")} ${n} ${a}${l.dim(".")}`),t==="fix"&&e.changed>0){let r=e.changed!==1?"files":"file";s.push(`${l.dim("Fixed")} ${e.changed} ${r}${l.dim(".")}`)}if(t==="fix"&&e.suggestedFixesSkipped>0){let r=e.suggestedFixesSkipped!==1?"fixes":"fix";s.push(`${l.yellow("!")} ${l.dim("Skipped")} ${e.suggestedFixesSkipped} ${l.dim("unsafe")} ${r}${l.dim(".")}`),s.push(` ${l.dim("Run with")} ${l.cyan("--unsafe")} ${l.dim("to apply them.")}`)}return s},Rt=e=>{let t=[],{location:s,category:n,description:o,advices:i}=e,a=s.path.file,r=a;if(s.span&&s.sourceCode){let{line:p,column:u}=Ae(s.sourceCode,s.span);r=`${a}:${p}:${u}`}if(t.push(`${b(r)} ${l.dim(n)}`),t.push(l.dim(o)),s.span&&s.sourceCode){t.push("");let p=xt(s.sourceCode,s.span);for(let u of p)t.push(` ${u}`)}for(let p of i.advices)if(p.log){let[u,x]=p.log,y=b(u==="info"?"i":"!"),m=l.dim(x.map(g=>g.content).join(""));t.push(""),t.push(` ${y} ${m}`)}let c=Pt(n);return c&&(t.push(""),t.push(` ${l.cyan("\u2192")} ${l.dim("Docs:")} ${l.cyan(c)}`)),t.push(""),t.push(`${Ct}`),t.push(""),t},Et=(e,t)=>{if(e.length===0)return[];let s=[""],n=t==="fix"?"Here are the issues we couldn't fix automatically:":"Issues found:";s.push(`${l.yellow(n)}`),s.push("");for(let o of e)s.push(...Rt(o));return s},V=(e,t)=>{if(!e.trim())return{output:`${b("Ultracite")} ${b(`v${k.version}`)} ${l.magenta(t)}
|
|
143
|
+
${l.red("Error:")} No output received from Biome. The command may have failed silently.`,hasErrors:!0};try{let s=JSON.parse(e),{summary:n,diagnostics:o}=s;return{output:[...$t(t),...St(n,t),...Et(o,t)].join(`
|
|
144
|
+
`),hasErrors:n.errors>0}}catch{return{output:`${b("Ultracite")} ${b(`v${k.version}`)} ${l.magenta(t)}
|
|
145
|
+
${l.red("Error:")} Failed to parse Biome output.
|
|
126
146
|
|
|
127
147
|
Raw output:
|
|
128
|
-
${e}`,hasErrors:!0}}};h();var
|
|
148
|
+
${e}`,hasErrors:!0}}};h();var fe=async e=>{let t=e?.[0]||[],s=e?.[1]["diagnostic-level"],n=["check","--no-errors-on-unmatched","--reporter=json"];s&&n.push(`--diagnostic-level=${s}`),t.length>0?n.push(...K(t)):n.push("./");let i=(await Ut(Tt.cwd()))?.name||"npm",a=It(i,"@biomejs/biome",{args:n,short:i==="npm"}),r=Mt(a,{stdio:"pipe",shell:!0,maxBuffer:100*1024*1024});if(r.error)throw new Error(`Failed to run Ultracite: ${r.error.message}`);let c=r.stdout?.toString()||"",p=r.stderr?.toString()||"",u=c.trim().startsWith("{")?c:p,{output:x,hasErrors:y}=V(u,"check");return console.log(x),{hasErrors:y}};import{spawnSync as qt}from"child_process";import{existsSync as I}from"fs";import{readFile as Ie}from"fs/promises";import{join as _}from"path";import $ from"process";import{intro as es,log as Z,outro as ue,spinner as ts}from"@clack/prompts";import{parse as ss}from"jsonc-parser";import{detectPackageManager as _e,dlxCommand as Je}from"nypm";h();import{readFile as Ne,unlink as _t,writeFile as Jt}from"fs/promises";import{parse as Oe}from"jsonc-parser";import{removeDependency as Bt}from"nypm";var X=[".eslintrc",".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml",".eslintrc.config.js","eslint.config.js","eslint.config.mjs","eslint.config.cjs",".eslintignore"],De=async()=>{try{let e=await Ne("package.json","utf-8"),t=Oe(e);if(!t||typeof t!="object")return[];let s=t.dependencies||{},n=t.devDependencies||{},o={...s,...n};return Object.keys(o).filter(i=>i.includes("eslint"))}catch{return[]}},Lt=async(e,t)=>{if(t.length!==0)try{for(let s of t)await Bt(s,{packageManager:e})}catch(s){console.warn(s)}},Wt=async()=>{let e=[];for(let t of X)if(await f(t))try{await _t(t),e.push(t)}catch(s){console.warn(s)}return e},Ht=async()=>{let e="./.vscode/settings.json";if(!await f(e))return!1;try{let t=await Ne(e,"utf-8"),s=Oe(t);if(!s||typeof s!="object")return!1;let n=!1,o={...s},i=["eslint.enable","eslint.format.enable","eslint.validate","eslint.workingDirectories","eslint.codeAction.showDocumentation","eslint.run","eslint.autoFixOnSave","eslint.quiet","eslint.packageManager","eslint.options","eslint.trace.server"];for(let a of i)a in o&&(delete o[a],n=!0);if("editor.codeActionsOnSave"in o){let a=o["editor.codeActionsOnSave"];if(a&&typeof a=="object"){let r=["source.fixAll.eslint","source.organizeImports.eslint"];for(let c of r)c in a&&(delete a[c],n=!0);Object.keys(a).length===0&&(o["editor.codeActionsOnSave"]=void 0)}}return n?(await Jt(e,JSON.stringify(o,null,2)),!0):!1}catch(t){return console.warn(t),!1}},zt=async()=>{if((await De()).length>0)return!0;for(let t of X)if(await f(t))return!0;return!1},me={hasEsLint:zt,remove:async e=>{let t=await De();await Lt(e,t);let s=await Wt(),n=await Ht();return{packagesRemoved:t,filesRemoved:s,vsCodeCleaned:n}}};h();import{readFile as Me,unlink as Gt,writeFile as Vt}from"fs/promises";import{parse as Te}from"jsonc-parser";import{removeDependency as Yt}from"nypm";var Q=[".prettierrc",".prettierrc.js",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.config.js","prettier.config.js","prettier.config.mjs",".prettierignore"],Ue=async()=>{try{let e=await Me("package.json","utf-8"),t=Te(e);if(!t||typeof t!="object")return[];let s=t.dependencies||{},n=t.devDependencies||{},o={...s,...n};return Object.keys(o).filter(i=>i.includes("prettier"))}catch{return[]}},Kt=async(e,t)=>{if(t.length!==0)try{for(let s of t)await Yt(s,{packageManager:e})}catch(s){console.warn(s)}},Xt=async()=>{let e=[];for(let t of Q)if(await f(t))try{await Gt(t),e.push(t)}catch(s){console.warn(s)}return e},Qt=async()=>{let e="./.vscode/settings.json";if(!await f(e))return!1;try{let t=await Me(e,"utf-8"),s=Te(t);if(!s||typeof s!="object")return!1;let n=!1,o={...s},i=["editor.defaultFormatter","prettier.enable","prettier.requireConfig","prettier.configPath","prettier.printWidth","prettier.tabWidth","prettier.useTabs","prettier.semi","prettier.singleQuote","prettier.quoteProps","prettier.trailingComma","prettier.bracketSpacing","prettier.arrowParens","prettier.endOfLine"];for(let r of i)r in o&&(r==="editor.defaultFormatter"&&o[r]==="esbenp.prettier-vscode"||r!=="editor.defaultFormatter")&&(delete o[r],n=!0);let a=Object.keys(o).filter(r=>r.startsWith("[")&&r.includes("javascript"));for(let r of a){let c=o[r];c&&typeof c=="object"&&"editor.defaultFormatter"in c&&c["editor.defaultFormatter"]==="esbenp.prettier-vscode"&&(delete c["editor.defaultFormatter"],n=!0,Object.keys(c).length===0&&delete o[r])}return n?(await Vt(e,JSON.stringify(o,null,2)),!0):!1}catch(t){return console.warn(t),!1}},Zt=async()=>{if((await Ue()).length>0)return!0;for(let t of Q)if(await f(t))return!0;return!1},pe={hasPrettier:Zt,remove:async e=>{let t=await Ue();await Kt(e,t);let s=await Xt(),n=await Qt();return{packagesRemoved:t,filesRemoved:s,vsCodeCleaned:n}}};h();var ns=async()=>{let t=(await _e($.cwd()))?.name||"npm",s=Je(t,"@biomejs/biome",{args:["--version"],short:t==="npm"}),n=qt(s,{shell:!0,encoding:"utf-8"});return n.status===0&&n.stdout?{name:"Biome installation",status:"pass",message:`Biome is installed (${n.stdout.trim()})`}:{name:"Biome installation",status:"fail",message:"Biome is not installed or not accessible"}},os=async()=>{let e=_($.cwd(),"biome.json"),t=_($.cwd(),"biome.jsonc"),s=null;if(I(e)?s=e:I(t)&&(s=t),!s)return{name:"Biome configuration",status:"fail",message:"No biome.json or biome.jsonc file found"};try{let n=await Ie(s,"utf-8"),o=ss(n);return Array.isArray(o?.extends)&&o.extends.includes("ultracite/core")?{name:"Biome configuration",status:"pass",message:"biome.json(c) extends ultracite/core"}:{name:"Biome configuration",status:"warn",message:"biome.json(c) exists but doesn't extend ultracite/core"}}catch{return{name:"Biome configuration",status:"fail",message:"Could not parse biome.json(c) file"}}},is=async()=>{let e=_($.cwd(),"package.json");if(!I(e))return{name:"Ultracite dependency",status:"warn",message:"No package.json found"};try{let t=JSON.parse(await Ie(e,"utf-8")),s=t.dependencies?.ultracite||t.devDependencies?.ultracite||t.peerDependencies?.ultracite;return s?{name:"Ultracite dependency",status:"pass",message:`Ultracite is in package.json (${s})`}:{name:"Ultracite dependency",status:"warn",message:"Ultracite not found in package.json dependencies"}}catch{return{name:"Ultracite dependency",status:"warn",message:"Could not parse package.json"}}},rs=()=>{let e=Q.some(s=>I(_($.cwd(),s))),t=X.some(s=>I(_($.cwd(),s)));if(e||t){let s=[];return e&&s.push("Prettier"),t&&s.push("ESLint"),{name:"Conflicting tools",status:"warn",message:`Found potentially conflicting tools: ${s.join(", ")}`}}return{name:"Conflicting tools",status:"pass",message:"No conflicting formatting/linting tools found"}},q=async(e,t)=>{let s=ts();s.start(`Checking ${t}...`);let n=await e();return n.status==="pass"||n.status,s.stop(n.message),n},Be=async()=>{es(Y);let t=(await _e($.cwd()))?.name||"npm",s=Je(t,"ultracite",{args:["init"],short:t==="npm"}),n=[];n.push(await q(ns,"Biome installation")),n.push(await q(os,"Biome configuration")),n.push(await q(is,"Ultracite dependency")),n.push(await q(rs,"conflicting tools"));let o=n.filter(r=>r.status==="pass").length,i=n.filter(r=>r.status==="fail").length,a=n.filter(r=>r.status==="warn").length;if(Z.info(`Summary: ${o} passed, ${a} warnings, ${i} failed`),i>0)throw Z.error(`Some checks failed. Run '${s}' to fix issues.`),ue("Doctor complete"),new Error("Doctor checks failed");if(a>0){Z.warn(`Some optional improvements available. Run '${s}' to configure.`),ue("Doctor complete");return}Z.success("Everything looks good!"),ue("Doctor complete")};import{spawnSync as as}from"child_process";import cs from"process";import{detectPackageManager as ls,dlxCommand as ds}from"nypm";h();var ge=async(e,t={})=>{let s=["check","--write","--no-errors-on-unmatched","--reporter=json"];t.unsafe&&s.push("--unsafe"),e.length>0?s.push(...K(e)):s.push("./");let o=(await ls(cs.cwd()))?.name||"npm",i=ds(o,"@biomejs/biome",{args:s,short:o==="npm"}),a=as(i,{stdio:"pipe",shell:!0,maxBuffer:100*1024*1024});if(a.error)throw new Error(`Failed to run Ultracite: ${a.error.message}`);let r=a.stdout?.toString()||"",c=a.stderr?.toString()||"",p=r.trim().startsWith("{")?r:c,{output:u,hasErrors:x}=V(p,"fix");return console.log(u),{hasErrors:x}};import{packageManagers as fs}from"nypm";var j={packageManagers:fs.map(e=>e.name),editorConfigs:["vscode","zed"],agents:["vscode-copilot","cursor","windsurf","zed","claude","codex","kiro","cline","amp","aider","firebase-studio","open-hands","gemini-cli","junie","augmentcode","kilo-code","goose","roo-code","warp","droid","antigravity"],integrations:["husky","lefthook","lint-staged","pre-commit"],hooks:["cursor","claude"],frameworks:["react","next","solid","vue","svelte","qwik","remix","angular","astro"],migrations:["eslint","prettier"]};import un from"process";import{cancel as M,intro as gn,isCancel as T,log as ae,multiselect as U,spinner as w}from"@clack/prompts";import{addDevDependency as hn,detectPackageManager as yn}from"nypm";import{mkdir as ms,readFile as ps,writeFile as ee}from"fs/promises";import{dirname as us}from"path";import{dlxCommand as gs}from"nypm";var Le={"vscode-copilot":{path:"./.github/copilot-instructions.md",header:`---
|
|
129
149
|
applyTo: "**/*.{ts,tsx,js,jsx}"
|
|
130
150
|
---`,appendMode:!0},cursor:{path:"./.cursor/rules/ultracite.mdc",header:`---
|
|
131
151
|
description: Ultracite Rules - AI-Ready Formatter and Linter
|
|
132
152
|
globs: "**/*.{ts,tsx,js,jsx,json,jsonc,html,vue,svelte,astro,css,yaml,yml,graphql,gql,md,mdx,grit}"
|
|
133
153
|
alwaysApply: false
|
|
134
|
-
---`},windsurf:{path:"./.windsurf/rules/ultracite.md"},zed:{path:"./.rules",appendMode:!0},claude:{path:"./.claude/CLAUDE.md",appendMode:!0},codex:{path:"./AGENTS.md",appendMode:!0},kiro:{path:"./.kiro/steering/ultracite.md"},cline:{path:"./.clinerules",appendMode:!0},amp:{path:"./AGENT.md",appendMode:!0},aider:{path:"./ultracite.md"},"firebase-studio":{path:"./.idx/airules.md",appendMode:!0},"open-hands":{path:"./.openhands/microagents/repo.md",appendMode:!0},"gemini-cli":{path:"./GEMINI.md",appendMode:!0},junie:{path:"./.junie/guidelines.md",appendMode:!0},augmentcode:{path:"./.augment/rules/ultracite.md"},"kilo-code":{path:"./.kilocode/rules/ultracite.md"},goose:{path:"./.goosehints",appendMode:!0},"roo-code":{path:"./.roo/rules/ultracite.md",appendMode:!0},warp:{path:"./WARP.md",appendMode:!0},droid:{path:"./AGENTS.md",appendMode:!0}},
|
|
154
|
+
---`},windsurf:{path:"./.windsurf/rules/ultracite.md"},zed:{path:"./.rules",appendMode:!0},claude:{path:"./.claude/CLAUDE.md",appendMode:!0},codex:{path:"./AGENTS.md",appendMode:!0},kiro:{path:"./.kiro/steering/ultracite.md"},cline:{path:"./.clinerules",appendMode:!0},amp:{path:"./AGENT.md",appendMode:!0},aider:{path:"./ultracite.md"},"firebase-studio":{path:"./.idx/airules.md",appendMode:!0},"open-hands":{path:"./.openhands/microagents/repo.md",appendMode:!0},"gemini-cli":{path:"./GEMINI.md",appendMode:!0},junie:{path:"./.junie/guidelines.md",appendMode:!0},augmentcode:{path:"./.augment/rules/ultracite.md"},"kilo-code":{path:"./.kilocode/rules/ultracite.md"},goose:{path:"./.goosehints",appendMode:!0},"roo-code":{path:"./.roo/rules/ultracite.md",appendMode:!0},warp:{path:"./WARP.md",appendMode:!0},droid:{path:"./AGENTS.md",appendMode:!0},antigravity:{path:"./.agent/rules/ultracite.md"}},We={cursor:{path:"./.cursor/hooks.json"},claude:{path:"./.claude/settings.json"}};h();var He=e=>`# Ultracite Code Standards
|
|
135
155
|
|
|
136
156
|
This project uses **Ultracite**, a zero-config Biome preset that enforces strict code quality standards through automated formatting and linting.
|
|
137
157
|
|
|
@@ -254,8 +274,8 @@ Biome's linter will catch most issues automatically. Focus your attention on:
|
|
|
254
274
|
---
|
|
255
275
|
|
|
256
276
|
Most formatting and common issues are automatically fixed by Biome. Run \`${e} ultracite fix\` before committing to ensure compliance.
|
|
257
|
-
`;var
|
|
277
|
+
`;var ze=(e,t)=>{let s=Le[e],n=gs(t,""),o=He(n),i=s.header?`${s.header}
|
|
258
278
|
|
|
259
|
-
${o}`:o,a=async()=>{let r=
|
|
279
|
+
${o}`:o,a=async()=>{let r=us(s.path);if(r!=="."){let c=r.startsWith("./")?r.slice(2):r;await ms(c,{recursive:!0})}};return{exists:()=>f(s.path),create:async()=>{await a(),await ee(s.path,i)},update:async()=>{if(await a(),s.appendMode){if(!await f(s.path)){await ee(s.path,i);return}let r=await ps(s.path,"utf-8");if(r.includes(o.trim()))return;await ee(s.path,`${r}
|
|
260
280
|
|
|
261
|
-
${o}`)}else await X(s.path,i)}}};h();import{readFile as ls,writeFile as Le}from"fs/promises";import ds from"deepmerge";import{parse as fs}from"jsonc-parser";var We={$schema:"./node_modules/@biomejs/biome/configuration_schema.json",extends:["ultracite/core"]},ue=async()=>await f("./biome.json")?"./biome.json":"./biome.jsonc",Q={exists:async()=>{let e=await ue();return f(e)},create:async e=>{let t=await ue(),s=["ultracite/core"];if(e?.frameworks&&e.frameworks.length>0)for(let o of e.frameworks)s.push(`ultracite/${o}`);let n={...We,extends:s};return Le(t,JSON.stringify(n,null,2))},update:async e=>{let t=await ue(),s=await ls(t,"utf-8"),o=fs(s)||{},a=[...o.extends&&Array.isArray(o.extends)?o.extends:[]];if(a.includes("ultracite/core")||a.push("ultracite/core"),e?.frameworks&&e.frameworks.length>0)for(let p of e.frameworks){let u=`ultracite/${p}`;a.includes(u)||a.push(u)}o.extends=a;let r={$schema:We.$schema},c=ds(o,r);await Le(t,JSON.stringify(c,null,2))}};h();import{spawnSync as ms}from"child_process";import{mkdir as ps,readFile as us,writeFile as He}from"fs/promises";import gs from"deepmerge";import{parse as hs}from"jsonc-parser";var ge={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript]":{"editor.defaultFormatter":"biomejs.biome"},"[typescript]":{"editor.defaultFormatter":"biomejs.biome"},"[javascriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[typescriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[json]":{"editor.defaultFormatter":"biomejs.biome"},"[jsonc]":{"editor.defaultFormatter":"biomejs.biome"},"[css]":{"editor.defaultFormatter":"biomejs.biome"},"[graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}};var Z="./.vscode/settings.json",_={exists:()=>f(Z),create:async()=>{await ps(".vscode",{recursive:!0}),await He(Z,JSON.stringify(ge,null,2))},update:async()=>{let e=await us(Z,"utf-8"),s=hs(e)||{},n=gs(s,ge);await He(Z,JSON.stringify(n,null,2))},extension:()=>ms("code --install-extension biomejs.biome",{stdio:"pipe",shell:!0})};h();import{mkdir as ys,readFile as ws,writeFile as ze}from"fs/promises";import ks from"deepmerge";import{parse as bs}from"jsonc-parser";var he={formatter:"language_server",format_on_save:"on",languages:{JavaScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TypeScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TSX:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}}},lsp:{"typescript-language-server":{settings:{typescript:{preferences:{includePackageJsonAutoImports:"on"}}}}}};var q="./.zed/settings.json",ee={exists:()=>f(q),create:async()=>{await ys(".zed",{recursive:!0}),await ze(q,JSON.stringify(he,null,2))},update:async()=>{let e=await ws(q,"utf-8"),s=bs(e)||{},n=ks(s,he);await ze(q,JSON.stringify(n,null,2))}};import{mkdir as xs,readFile as Ge,writeFile as F}from"fs/promises";import{dirname as vs}from"path";import{dlxCommand as Cs}from"nypm";h();var Ve=e=>({version:1,hooks:{afterFileEdit:[{command:e}]}}),Ye=e=>({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e}]}]}}),js=async(e,t)=>{if(!await f(e)){await F(e,JSON.stringify(Ve(t),null,2));return}let s=await Ge(e,"utf-8"),n=JSON.parse(s);n.hooks.afterFileEdit.some(i=>i.command.includes("ultracite"))||(n.hooks.afterFileEdit.push({command:t}),await F(e,JSON.stringify(n,null,2)))},Ps=async(e,t)=>{if(!await f(e)){await F(e,JSON.stringify(Ye(t),null,2));return}let s=await Ge(e,"utf-8"),n=JSON.parse(s);n.hooks||(n.hooks={}),n.hooks.PostToolUse||(n.hooks.PostToolUse=[]),n.hooks.PostToolUse.some(i=>i.hooks?.some(a=>a.command.includes("ultracite")))||(n.hooks.PostToolUse.push({matcher:"Edit|Write",hooks:[{type:"command",command:t}]}),await F(e,JSON.stringify(n,null,2)))},Ke=(e,t)=>{let s=Je[e],n=Cs(t,"ultracite",{args:["fix"],short:t==="npm"}),o=async()=>{let i=vs(s.path);if(i!=="."){let a=i.startsWith("./")?i.slice(2):i;await xs(a,{recursive:!0})}};return{exists:()=>f(s.path),create:async()=>{await o(),e==="cursor"?await F(s.path,JSON.stringify(Ve(n),null,2)):e==="claude"&&await F(s.path,JSON.stringify(Ye(n),null,2))},update:async()=>{await o(),e==="cursor"?await js(s.path,n):e==="claude"&&await Ps(s.path,n)}}};we();ke();xe();import{readFile as Ks,writeFile as Xs}from"fs/promises";import Qs from"deepmerge";import{glob as Zs}from"glob";import{parse as qs}from"jsonc-parser";var en={compilerOptions:{strictNullChecks:!0}},it=async()=>{try{return await Zs("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},tn=async e=>{try{let t=await Ks(e,"utf-8"),n=qs(t)||{},o=Qs(n,en);await Xs(e,JSON.stringify(o,null,2))}catch(t){console.warn(`Failed to update ${e}:`,t)}},je={exists:async()=>(await it()).length>0,update:async()=>{let e=await it();if(e.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(e.map(t=>tn(t)))}};h();var rt=k.devDependencies["@biomejs/biome"],at=k.version,an=async(e,t=!0,s=!1)=>{let n=w();s||n.start("Installing dependencies...");let o=[`ultracite@${at}`,`@biomejs/biome@${rt}`];if(t)for(let i of o)await on(i,{packageManager:e,workspace:await C(),silent:!0});else await v({devDependencies:{"@biomejs/biome":rt,ultracite:at}});s||n.stop("Dependencies installed.")},cn=async(e=!1)=>{let t=w();if(e||t.start("Checking for tsconfig.json files..."),await je.exists()){e||t.message("Found tsconfig.json files, updating with strictNullChecks..."),await je.update(),e||t.stop("tsconfig.json files updated.");return}e||t.stop("No tsconfig.json files found, skipping.")},ln=async(e=!1)=>{let t=w();if(e||t.start("Checking for .vscode/settings.json..."),await _.exists()){e||t.message("settings.json found, updating..."),await _.update(),e||t.stop("settings.json updated.");return}e||t.message("settings.json not found, creating..."),await _.create(),e||(t.message("settings.json created."),t.message("Installing Biome extension..."));try{let s=_.extension();e||(s.status===0?t.stop("settings.json created and Biome extension installed."):t.stop("settings.json created. Install Biome extension manually."))}catch{e||t.stop("settings.json created. Install Biome extension manually.")}},dn=async(e=!1)=>{let t=w();if(e||t.start("Checking for .zed/settings.json..."),await ee.exists()){e||t.message("settings.json found, updating..."),await ee.update(),e||t.stop("settings.json updated.");return}e||t.message("settings.json not found, creating..."),await ee.create(),e||t.message("settings.json created. Install the Biome extension: https://biomejs.dev/reference/zed/")},fn=async(e,t=!1)=>{let s=w();if(t||s.start("Checking for Biome configuration..."),await Q.exists()){t||s.message("Biome configuration found, updating..."),await Q.update({frameworks:e}),t||s.stop("Biome configuration updated.");return}t||s.message("Biome configuration not found, creating..."),await Q.create({frameworks:e}),t||s.stop("Biome configuration created.")},mn=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing pre-commit hooks..."),n.message("Installing Husky...")),t?await $.install(e):await v({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),s||n.message("Initializing Husky..."),$.init(e),await $.exists()){s||n.message("Pre-commit hook found, updating..."),await $.update(e),s||n.stop("Pre-commit hook updated.");return}s||n.message("Pre-commit hook not found, creating..."),await $.create(e),s||n.stop("Pre-commit hook created.")},pn=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing lefthook..."),n.message("Installing lefthook...")),t?await D.install(e):await v({devDependencies:{lefthook:"latest"}}),await D.exists()){s||n.message("lefthook.yml found, updating..."),await D.update(e),s||n.stop("lefthook.yml updated.");return}s||n.message("lefthook.yml not found, creating..."),await D.create(e),s||n.stop("lefthook.yml created.")},un=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing lint-staged..."),n.message("Installing lint-staged...")),t?await N.install(e):await v({devDependencies:{"lint-staged":"latest"}}),await N.exists()){s||n.message("lint-staged found, updating..."),await N.update(e),s||n.stop("lint-staged updated.");return}s||n.message("lint-staged not found, creating..."),await N.create(e),s||n.stop("lint-staged created.")},gn=async(e,t,s,n=!1)=>{let o=w();n||o.start(`Checking for ${t}...`);let i=Be(e,s);if(await i.exists()){n||o.message(`${t} found, updating...`),await i.update(),n||o.stop(`${t} updated.`);return}n||o.message(`${t} not found, creating...`),await i.create(),n||o.stop(`${t} created.`)},hn=async(e,t,s,n=!1)=>{let o=w();n||o.start(`Checking for ${t} hooks...`);let i=Ke(e,s);if(await i.exists()){n||o.message(`${t} hooks found, updating...`),await i.update(),n||o.stop(`${t} hooks updated.`);return}n||o.message(`${t} hooks not found, creating...`),await i.create(),n||o.stop(`${t} hooks created.`)},yn=async(e,t=!1)=>{let s=w();t||s.start("Removing Prettier dependencies and configuration...");try{let n=await fe.remove(e);t||(n.packagesRemoved.length>0&&s.message(`Removed Prettier packages: ${n.packagesRemoved.join(", ")}`),n.filesRemoved.length>0&&s.message(`Removed config files: ${n.filesRemoved.join(", ")}`),n.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("Prettier removed successfully."))}catch{t||s.stop("Failed to remove Prettier completely, but continuing...")}},wn=async(e,t=!1)=>{let s=w();t||s.start("Removing ESLint dependencies and configuration...");try{let n=await de.remove(e);t||(n.packagesRemoved.length>0&&s.message(`Removed ESLint packages: ${n.packagesRemoved.join(", ")}`),n.filesRemoved.length>0&&s.message(`Removed config files: ${n.filesRemoved.join(", ")}`),n.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("ESLint removed successfully."))}catch{t||s.stop("Failed to remove ESLint completely, but continuing...")}},ct=async e=>{let t=e??{},s=t.quiet??!1;s||nn(H);try{let{pm:n}=t;if(!n){let d=await rn(sn.cwd());if(!d)throw new Error("No package manager specified or detected");if(!s&&d.warnings)for(let g of d.warnings)ne.warn(g);s||ne.info(`Detected lockfile, using ${d.name}`),n=d.name}let o=t.migrate?.includes("prettier"),i=t.migrate?.includes("eslint");if(!s&&(o===void 0||i===void 0)){let d=[];if(o===void 0&&await fe.hasPrettier()&&d.push({label:"Remove Prettier (dependencies, config files, VS Code settings)",value:"prettier"}),i===void 0&&await de.hasEsLint()&&d.push({label:"Remove ESLint (dependencies, config files, VS Code settings)",value:"eslint"}),d.length>0){let g=await T({message:"Remove existing formatters/linters (recommended for clean migration)?",options:d,required:!1});if(M(g)){O("Operation cancelled.");return}o===void 0&&(o=g.includes("prettier")),i===void 0&&(i=g.includes("eslint"))}}s&&(o===void 0&&(o=!1),i===void 0&&(i=!1));let a=t.frameworks;if(a===void 0)if(s||t.pm||t.editors||t.agents||t.hooks||t.integrations!==void 0||t.migrate!==void 0)a=[];else{let g=await T({message:"Which frameworks are you using (optional)?",options:[{label:"React",value:"react"},{label:"Next.js",value:"next"},{label:"Solid",value:"solid"},{label:"Vue",value:"vue"},{label:"Svelte",value:"svelte"},{label:"Qwik",value:"qwik"},{label:"Angular",value:"angular"},{label:"Remix / TanStack Router / React Router",value:"remix"},{label:"Astro",value:"astro"}],required:!1});if(M(g)){O("Operation cancelled.");return}a=g}let r=t.editors;if(!r)if(s)r=[];else{let d=await T({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});if(M(d)){O("Operation cancelled.");return}r=d}let c=t.agents,p=t.hooks,u={"vscode-copilot":"GitHub Copilot (VSCode)",cursor:"Cursor",windsurf:"Windsurf",zed:"Zed",claude:"Claude Code",codex:"OpenAI Codex / Jules / OpenCode",kiro:"Kiro IDE",cline:"Cline",amp:"AMP",aider:"Aider","firebase-studio":"Firebase Studio","open-hands":"Open Hands","gemini-cli":"Gemini CLI",junie:"Junie",augmentcode:"Augment Code","kilo-code":"Kilo Code",goose:"Codename Goose","roo-code":"Roo Code",warp:"Warp",droid:"Droid"};if(!c)if(s)c=[];else{let d=await T({message:"Which agents do you want to enable (optional)?",options:Object.entries(u).map(([g,oe])=>({value:g,label:oe})),required:!1});if(M(d)){O("Operation cancelled.");return}c=d}let x={cursor:"Cursor",claude:"Claude Code"};if(!p)if(s)p=[];else{let d=await T({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(x).map(([g,oe])=>({value:g,label:oe})),required:!1});if(M(d)){O("Operation cancelled.");return}p=d}let y=t.integrations;if(y===void 0)if(s||t.pm||t.editors||t.agents||t.hooks||t.migrate!==void 0)y=[];else{let g=await T({message:"Would you like any of the following (optional)?",options:[{label:"Husky pre-commit hook",value:"husky"},{label:"Lefthook pre-commit hook",value:"lefthook"},{label:"Lint-staged",value:"lint-staged"}],required:!1});if(M(g)){O("Operation cancelled.");return}y=g}o&&await yn(n,s),i&&await wn(n,s),await an(n,!t.skipInstall,s),await cn(s),await fn(a,s),r?.includes("vscode")&&await ln(s),r?.includes("zed")&&await dn(s);for(let d of c??[])await gn(d,u[d],n,s);for(let d of p??[])await hn(d,x[d],n,s);y?.includes("husky")&&await mn(n,!t.skipInstall,s),y?.includes("lefthook")&&await pn(n,!t.skipInstall,s),y?.includes("lint-staged")&&await un(n,!t.skipInstall,s),s||ne.success("Successfully initialized Ultracite configuration!")}catch(n){let o=n instanceof Error?n.message:"Unknown error";throw s||ne.error(`Failed to initialize Ultracite configuration: ${o}`),n}};var A=kn.meta().create(),xn=A.router({init:A.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(l.object({pm:l.enum(j.packageManagers).optional().describe("Package manager to use"),editors:l.array(l.enum(j.editorConfigs)).optional().describe("Editors to configure"),agents:l.array(l.enum(j.agents)).optional().describe("Agents to enable"),hooks:l.array(l.enum(j.hooks)).optional().describe("Hooks to enable"),frameworks:l.array(l.enum(j.frameworks)).optional().describe("Frameworks being used"),integrations:l.array(l.enum(j.integrations)).optional().describe("Additional integrations to enable"),migrate:l.array(l.enum(j.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:l.boolean().default(!1).describe("Skip installing dependencies"),quiet:l.boolean().default(process.env.CI==="true"||process.env.CI==="1").describe("Suppress all interactive prompts and visual output. Automatically enabled in CI environments.")})).mutation(async({input:e})=>{await ct(e)}),check:A.procedure.meta({description:"Run Biome linter without fixing files"}).input(l.tuple([l.array(l.string()).optional().default([]).describe("specific files to lint"),l.object({"diagnostic-level":l.enum(["info","warn","error"]).optional().describe("level of diagnostics to show. In order, from the lowest to the most important: info, warn, error.")})]).optional()).query(async({input:e})=>{await le(e)}),fix:A.procedure.meta({description:"Run Biome linter and fixes files"}).input(l.tuple([l.array(l.string()).optional().default([]).describe("specific files to format"),l.object({unsafe:l.boolean().optional().describe("apply unsafe fixes")})])).mutation(async({input:e})=>{let[t,s]=e;await pe(t,{unsafe:s.unsafe})}),doctor:A.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Ue()}),lint:A.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'check' instead - Run Biome linter without fixing files"}).input(l.array(l.string()).optional().default([]).describe("specific files to lint")).query(async({input:e})=>{console.warn("\u26A0\uFE0F Warning: 'lint' command is deprecated. Please use 'check' instead."),await le([e,{}])}),format:A.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'fix' instead - Run Biome linter and fixes files"}).input(l.tuple([l.array(l.string()).optional().default([]).describe("specific files to format"),l.object({unsafe:l.boolean().optional().describe("apply unsafe fixes")})])).mutation(async({input:e})=>{let[t,s]=e;console.warn("\u26A0\uFE0F Warning: 'format' command is deprecated. Please use 'fix' instead."),await pe(t,{unsafe:s.unsafe})})}),vn=bn({router:xn,name:k.name,version:k.version,description:k.description});process.env.TEST||vn.run();export{xn as router};
|
|
281
|
+
${o}`)}else await ee(s.path,i)}}};h();import{readFile as hs,writeFile as Ge}from"fs/promises";import ys from"deepmerge";import{parse as ws}from"jsonc-parser";var Ve={$schema:"./node_modules/@biomejs/biome/configuration_schema.json",extends:["ultracite/core"]},he=async()=>await f("./biome.json")?"./biome.json":"./biome.jsonc",te={exists:async()=>{let e=await he();return f(e)},create:async e=>{let t=await he(),s=["ultracite/core"];if(e?.frameworks&&e.frameworks.length>0)for(let o of e.frameworks)s.push(`ultracite/${o}`);let n={...Ve,extends:s};return Ge(t,JSON.stringify(n,null,2))},update:async e=>{let t=await he(),s=await hs(t,"utf-8"),o=ws(s)||{},a=[...o.extends&&Array.isArray(o.extends)?o.extends:[]];if(a.includes("ultracite/core")||a.push("ultracite/core"),e?.frameworks&&e.frameworks.length>0)for(let p of e.frameworks){let u=`ultracite/${p}`;a.includes(u)||a.push(u)}o.extends=a;let r={$schema:Ve.$schema},c=ys(o,r);await Ge(t,JSON.stringify(c,null,2))}};h();import{spawnSync as ks}from"child_process";import{mkdir as bs,readFile as xs,writeFile as Ye}from"fs/promises";import vs from"deepmerge";import{parse as Cs}from"jsonc-parser";var ye={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript]":{"editor.defaultFormatter":"biomejs.biome"},"[typescript]":{"editor.defaultFormatter":"biomejs.biome"},"[javascriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[typescriptreact]":{"editor.defaultFormatter":"biomejs.biome"},"[json]":{"editor.defaultFormatter":"biomejs.biome"},"[jsonc]":{"editor.defaultFormatter":"biomejs.biome"},"[css]":{"editor.defaultFormatter":"biomejs.biome"},"[graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}};var se="./.vscode/settings.json",J={exists:()=>f(se),create:async()=>{await bs(".vscode",{recursive:!0}),await Ye(se,JSON.stringify(ye,null,2))},update:async()=>{let e=await xs(se,"utf-8"),s=Cs(e)||{},n=vs(s,ye);await Ye(se,JSON.stringify(n,null,2))},extension:()=>ks("code --install-extension biomejs.biome",{stdio:"pipe",shell:!0})};h();import{mkdir as js,readFile as Ps,writeFile as Ke}from"fs/promises";import $s from"deepmerge";import{parse as Ss}from"jsonc-parser";var we={formatter:"language_server",format_on_save:"on",languages:{JavaScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TypeScript:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}},TSX:{formatter:{language_server:{name:"biome"}},code_actions_on_format:{"source.fixAll.biome":!0,"source.organizeImports.biome":!0}}},lsp:{"typescript-language-server":{settings:{typescript:{preferences:{includePackageJsonAutoImports:"on"}}}}}};var ne="./.zed/settings.json",oe={exists:()=>f(ne),create:async()=>{await js(".zed",{recursive:!0}),await Ke(ne,JSON.stringify(we,null,2))},update:async()=>{let e=await Ps(ne,"utf-8"),s=Ss(e)||{},n=$s(s,we);await Ke(ne,JSON.stringify(n,null,2))}};import{mkdir as Rs,readFile as Xe,writeFile as N}from"fs/promises";import{dirname as Es}from"path";import{dlxCommand as As}from"nypm";h();var Qe=e=>({version:1,hooks:{afterFileEdit:[{command:e}]}}),Ze=e=>({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e}]}]}}),Fs=async(e,t)=>{if(!await f(e)){await N(e,JSON.stringify(Qe(t),null,2));return}let s=await Xe(e,"utf-8"),n=JSON.parse(s);n.hooks.afterFileEdit.some(i=>i.command.includes("ultracite"))||(n.hooks.afterFileEdit.push({command:t}),await N(e,JSON.stringify(n,null,2)))},Ns=async(e,t)=>{if(!await f(e)){await N(e,JSON.stringify(Ze(t),null,2));return}let s=await Xe(e,"utf-8"),n=JSON.parse(s);n.hooks||(n.hooks={}),n.hooks.PostToolUse||(n.hooks.PostToolUse=[]),n.hooks.PostToolUse.some(i=>i.hooks?.some(a=>a.command.includes("ultracite")))||(n.hooks.PostToolUse.push({matcher:"Edit|Write",hooks:[{type:"command",command:t}]}),await N(e,JSON.stringify(n,null,2)))},qe=(e,t)=>{let s=We[e],n=As(t,"ultracite",{args:["fix"],short:t==="npm"}),o=async()=>{let i=Es(s.path);if(i!=="."){let a=i.startsWith("./")?i.slice(2):i;await Rs(a,{recursive:!0})}};return{exists:()=>f(s.path),create:async()=>{await o(),e==="cursor"?await N(s.path,JSON.stringify(Qe(n),null,2)):e==="claude"&&await N(s.path,JSON.stringify(Ze(n),null,2))},update:async()=>{await o(),e==="cursor"?await Fs(s.path,n):e==="claude"&&await Ns(s.path,n)}}};be();xe();Pe();Ce();import{readFile as an,writeFile as ft}from"fs/promises";import{glob as cn}from"glob";import{applyEdits as ln,modify as dn,parse as fn}from"jsonc-parser";var mt=async()=>{try{return await cn("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},mn=e=>{if(!e)return!1;let t=e.compilerOptions;return t?t.strict===!0||t.strictNullChecks===!0:!1},pn=async e=>{try{let t=await an(e,"utf-8"),s=fn(t);if(mn(s))return;if(s===void 0){await ft(e,JSON.stringify({compilerOptions:{strictNullChecks:!0}},null,2));return}let o=dn(t,["compilerOptions","strictNullChecks"],!0,{formattingOptions:{tabSize:2,insertSpaces:!0}}),i=ln(t,o);await ft(e,i)}catch(t){console.warn(`Failed to update ${e}:`,t)}},Re={exists:async()=>(await mt()).length>0,update:async()=>{let e=await mt();if(e.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(e.map(t=>pn(t)))}};h();var pt=k.devDependencies["@biomejs/biome"],ut=k.version,wn=async(e,t=!0,s=!1)=>{let n=w();s||n.start("Installing dependencies...");let o=[`ultracite@${ut}`,`@biomejs/biome@${pt}`];if(t)for(let i of o)await hn(i,{packageManager:e,workspace:await C(),silent:!0});else await v({devDependencies:{"@biomejs/biome":pt,ultracite:ut}});s||n.stop("Dependencies installed.")},kn=async(e=!1)=>{let t=w();if(e||t.start("Checking for tsconfig.json files..."),await Re.exists()){e||t.message("Found tsconfig.json files, updating with strictNullChecks..."),await Re.update(),e||t.stop("tsconfig.json files updated.");return}e||t.stop("No tsconfig.json files found, skipping.")},bn=async(e=!1)=>{let t=w();if(e||t.start("Checking for .vscode/settings.json..."),await J.exists()){e||t.message("settings.json found, updating..."),await J.update(),e||t.stop("settings.json updated.");return}e||t.message("settings.json not found, creating..."),await J.create(),e||(t.message("settings.json created."),t.message("Installing Biome extension..."));try{let s=J.extension();e||(s.status===0?t.stop("settings.json created and Biome extension installed."):t.stop("settings.json created. Install Biome extension manually."))}catch{e||t.stop("settings.json created. Install Biome extension manually.")}},xn=async(e=!1)=>{let t=w();if(e||t.start("Checking for .zed/settings.json..."),await oe.exists()){e||t.message("settings.json found, updating..."),await oe.update(),e||t.stop("settings.json updated.");return}e||t.message("settings.json not found, creating..."),await oe.create(),e||t.message("settings.json created. Install the Biome extension: https://biomejs.dev/reference/zed/")},vn=async(e,t=!1)=>{let s=w();if(t||s.start("Checking for Biome configuration..."),await te.exists()){t||s.message("Biome configuration found, updating..."),await te.update({frameworks:e}),t||s.stop("Biome configuration updated.");return}t||s.message("Biome configuration not found, creating..."),await te.create({frameworks:e}),t||s.stop("Biome configuration created.")},Cn=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing pre-commit hooks..."),n.message("Installing Husky...")),t?await S.install(e):await v({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),s||n.message("Initializing Husky..."),S.init(e),await S.exists()){s||n.message("Pre-commit hook found, updating..."),await S.update(e),s||n.stop("Pre-commit hook updated.");return}s||n.message("Pre-commit hook not found, creating..."),await S.create(e),s||n.stop("Pre-commit hook created.")},jn=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing lefthook..."),n.message("Installing lefthook...")),t?await O.install(e):await v({devDependencies:{lefthook:"latest"}}),await O.exists()){s||n.message("lefthook.yml found, updating..."),await O.update(e),s||n.stop("lefthook.yml updated.");return}s||n.message("lefthook.yml not found, creating..."),await O.create(e),s||n.stop("lefthook.yml created.")},Pn=async(e,t=!0,s=!1)=>{let n=w();if(s||(n.start("Initializing lint-staged..."),n.message("Installing lint-staged...")),t?await D.install(e):await v({devDependencies:{"lint-staged":"latest"}}),await D.exists()){s||n.message("lint-staged found, updating..."),await D.update(e),s||n.stop("lint-staged updated.");return}s||n.message("lint-staged not found, creating..."),await D.create(e),s||n.stop("lint-staged created.")},$n=async(e,t=!1)=>{let s=w();if(t||s.start("Initializing pre-commit..."),await W.exists()){t||s.message(".pre-commit-config.yaml found, updating..."),await W.update(e),t||s.stop(".pre-commit-config.yaml updated.");return}t||s.message(".pre-commit-config.yaml not found, creating..."),await W.create(e),t||s.stop(".pre-commit-config.yaml created.")},Sn=async(e,t,s,n=!1)=>{let o=w();n||o.start(`Checking for ${t}...`);let i=ze(e,s);if(await i.exists()){n||o.message(`${t} found, updating...`),await i.update(),n||o.stop(`${t} updated.`);return}n||o.message(`${t} not found, creating...`),await i.create(),n||o.stop(`${t} created.`)},Rn=async(e,t,s,n=!1)=>{let o=w();n||o.start(`Checking for ${t} hooks...`);let i=qe(e,s);if(await i.exists()){n||o.message(`${t} hooks found, updating...`),await i.update(),n||o.stop(`${t} hooks updated.`);return}n||o.message(`${t} hooks not found, creating...`),await i.create(),n||o.stop(`${t} hooks created.`)},En=async(e,t=!1)=>{let s=w();t||s.start("Removing Prettier dependencies and configuration...");try{let n=await pe.remove(e);t||(n.packagesRemoved.length>0&&s.message(`Removed Prettier packages: ${n.packagesRemoved.join(", ")}`),n.filesRemoved.length>0&&s.message(`Removed config files: ${n.filesRemoved.join(", ")}`),n.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("Prettier removed successfully."))}catch{t||s.stop("Failed to remove Prettier completely, but continuing...")}},An=async(e,t=!1)=>{let s=w();t||s.start("Removing ESLint dependencies and configuration...");try{let n=await me.remove(e);t||(n.packagesRemoved.length>0&&s.message(`Removed ESLint packages: ${n.packagesRemoved.join(", ")}`),n.filesRemoved.length>0&&s.message(`Removed config files: ${n.filesRemoved.join(", ")}`),n.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("ESLint removed successfully."))}catch{t||s.stop("Failed to remove ESLint completely, but continuing...")}},gt=async e=>{let t=e??{},s=t.quiet??!1;s||gn(Y);try{let{pm:n}=t;if(!n){let m=await yn(un.cwd());if(!m)throw new Error("No package manager specified or detected");if(!s&&m.warnings)for(let g of m.warnings)ae.warn(g);s||ae.info(`Detected lockfile, using ${m.name}`),n=m.name}let o=t.migrate?.includes("prettier"),i=t.migrate?.includes("eslint");if(!s&&(o===void 0||i===void 0)){let m=[];if(o===void 0&&await pe.hasPrettier()&&m.push({label:"Remove Prettier (dependencies, config files, VS Code settings)",value:"prettier"}),i===void 0&&await me.hasEsLint()&&m.push({label:"Remove ESLint (dependencies, config files, VS Code settings)",value:"eslint"}),m.length>0){let g=await U({message:"Remove existing formatters/linters (recommended for clean migration)?",options:m,required:!1});if(T(g)){M("Operation cancelled.");return}o===void 0&&(o=g.includes("prettier")),i===void 0&&(i=g.includes("eslint"))}}s&&(o===void 0&&(o=!1),i===void 0&&(i=!1));let a=t.frameworks;if(a===void 0)if(s||t.pm||t.editors||t.agents||t.hooks||t.integrations!==void 0||t.migrate!==void 0)a=[];else{let g=await U({message:"Which frameworks are you using (optional)?",options:[{label:"React",value:"react"},{label:"Next.js",value:"next"},{label:"Solid",value:"solid"},{label:"Vue",value:"vue"},{label:"Svelte",value:"svelte"},{label:"Qwik",value:"qwik"},{label:"Angular",value:"angular"},{label:"Remix / TanStack Router / React Router",value:"remix"},{label:"Astro",value:"astro"}],required:!1});if(T(g)){M("Operation cancelled.");return}a=g}let r=t.editors;if(!r)if(s)r=[];else{let m=await U({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});if(T(m)){M("Operation cancelled.");return}r=m}let c=t.agents,p=t.hooks,u={"vscode-copilot":"GitHub Copilot (VSCode)",cursor:"Cursor",windsurf:"Windsurf",zed:"Zed",claude:"Claude Code",codex:"OpenAI Codex / Jules / OpenCode",kiro:"Kiro IDE",cline:"Cline",amp:"AMP",aider:"Aider","firebase-studio":"Firebase Studio","open-hands":"Open Hands","gemini-cli":"Gemini CLI",junie:"Junie",augmentcode:"Augment Code","kilo-code":"Kilo Code",goose:"Codename Goose","roo-code":"Roo Code",warp:"Warp",droid:"Droid",antigravity:"Antigravity"};if(!c)if(s)c=[];else{let m=await U({message:"Which agents do you want to enable (optional)?",options:Object.entries(u).map(([g,ce])=>({value:g,label:ce})),required:!1});if(T(m)){M("Operation cancelled.");return}c=m}let x={cursor:"Cursor",claude:"Claude Code"};if(!p)if(s)p=[];else{let m=await U({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(x).map(([g,ce])=>({value:g,label:ce})),required:!1});if(T(m)){M("Operation cancelled.");return}p=m}let y=t.integrations;if(y===void 0)if(s||t.pm||t.editors||t.agents||t.hooks||t.migrate!==void 0)y=[];else{let g=await U({message:"Would you like any of the following (optional)?",options:[{label:"Husky pre-commit hook",value:"husky"},{label:"Lefthook pre-commit hook",value:"lefthook"},{label:"Lint-staged",value:"lint-staged"},{label:"pre-commit (Python framework)",value:"pre-commit"}],required:!1});if(T(g)){M("Operation cancelled.");return}y=g}o&&await En(n,s),i&&await An(n,s),await wn(n,!t.skipInstall,s),await kn(s),await vn(a,s),r?.includes("vscode")&&await bn(s),r?.includes("zed")&&await xn(s);for(let m of c??[])await Sn(m,u[m],n,s);for(let m of p??[])await Rn(m,x[m],n,s);y?.includes("husky")&&await Cn(n,!t.skipInstall,s),y?.includes("lefthook")&&await jn(n,!t.skipInstall,s),y?.includes("lint-staged")&&await Pn(n,!t.skipInstall,s),y?.includes("pre-commit")&&await $n(n,s),s||ae.success("Successfully initialized Ultracite configuration!")}catch(n){let o=n instanceof Error?n.message:"Unknown error";throw s||ae.error(`Failed to initialize Ultracite configuration: ${o}`),n}};var A=Fn.meta().create(),On=A.router({init:A.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(d.object({pm:d.enum(j.packageManagers).optional().describe("Package manager to use"),editors:d.array(d.enum(j.editorConfigs)).optional().describe("Editors to configure"),agents:d.array(d.enum(j.agents)).optional().describe("Agents to enable"),hooks:d.array(d.enum(j.hooks)).optional().describe("Hooks to enable"),frameworks:d.array(d.enum(j.frameworks)).optional().describe("Frameworks being used"),integrations:d.array(d.enum(j.integrations)).optional().describe("Additional integrations to enable"),migrate:d.array(d.enum(j.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:d.boolean().default(!1).describe("Skip installing dependencies"),quiet:d.boolean().default(process.env.CI==="true"||process.env.CI==="1").describe("Suppress all interactive prompts and visual output. Automatically enabled in CI environments.")})).mutation(async({input:e})=>{await gt(e)}),check:A.procedure.meta({description:"Run Biome linter without fixing files"}).input(d.tuple([d.array(d.string()).optional().default([]).describe("specific files to lint"),d.object({"diagnostic-level":d.enum(["info","warn","error"]).optional().describe("level of diagnostics to show. In order, from the lowest to the most important: info, warn, error.")})]).optional()).query(async({input:e})=>{await fe(e)}),fix:A.procedure.meta({description:"Run Biome linter and fixes files"}).input(d.tuple([d.array(d.string()).optional().default([]).describe("specific files to format"),d.object({unsafe:d.boolean().optional().describe("apply unsafe fixes")})])).mutation(async({input:e})=>{let[t,s]=e;await ge(t,{unsafe:s.unsafe})}),doctor:A.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Be()}),lint:A.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'check' instead - Run Biome linter without fixing files"}).input(d.array(d.string()).optional().default([]).describe("specific files to lint")).query(async({input:e})=>{console.warn("\u26A0\uFE0F Warning: 'lint' command is deprecated. Please use 'check' instead."),await fe([e,{}])}),format:A.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'fix' instead - Run Biome linter and fixes files"}).input(d.tuple([d.array(d.string()).optional().default([]).describe("specific files to format"),d.object({unsafe:d.boolean().optional().describe("apply unsafe fixes")})])).mutation(async({input:e})=>{let[t,s]=e;console.warn("\u26A0\uFE0F Warning: 'format' command is deprecated. Please use 'fix' instead."),await ge(t,{unsafe:s.unsafe})})}),Dn=Nn({router:On,name:k.name,version:k.version,description:k.description});process.env.TEST||Dn.run();export{On as router};
|