ultracite 6.4.3 → 6.5.0

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.
@@ -236,31 +236,8 @@
236
236
  "noUnmatchableAnbSelector": "error"
237
237
  },
238
238
  "nursery": {
239
- "noAmbiguousAnchorText": "error",
240
- "noDuplicateDependencies": "error",
241
- "noDuplicatedSpreadProps": "error",
242
- "noEmptySource": "error",
243
- "noEqualsToNull": "error",
244
- "noIncrementDecrement": {
245
- "level": "error",
246
- "options": {
247
- "allowForLoopAfterthoughts": true
248
- }
249
- },
250
- "noLeakedRender": "error",
251
- "noMultiStr": "error",
252
- "noParametersOnlyUsedInRecursion": "error",
253
- "noProto": "error",
254
- "noScriptUrl": "error",
255
- "noShadow": "error",
256
- "noSyncScripts": "error",
257
- "noUndeclaredEnvVars": "error",
258
- "noUnusedExpressions": "error",
259
- "noUselessUndefined": "error",
260
- "useConsistentArrowReturn": "error",
261
- "useConsistentGraphqlDescriptions": "error",
262
- "useDeprecatedDate": "error",
263
- "useMaxParams": "error",
239
+ // Typically we don't enable nursery rules anymore (https://github.com/haydenbleasel/ultracite/issues/457)
240
+ // but this was requested specifically by a lot of people.
264
241
  "useSortedClasses": {
265
242
  "fix": "safe",
266
243
  "level": "error",
@@ -268,30 +245,7 @@
268
245
  "attributes": ["className"],
269
246
  "functions": ["clsx", "cva", "tw", "twMerge", "cn", "twJoin", "tv"]
270
247
  }
271
- },
272
- "useSpread": "error",
273
- "useUniqueGraphqlOperationName": "error",
274
-
275
- "noContinue": "off",
276
- "noForIn": "off",
277
- "noJsxLiterals": "off",
278
- "noTernary": "off",
279
- "noUselessCatchBinding": "off",
280
- "useExplicitType": "off",
281
- "useRequiredScripts": "off",
282
-
283
- /** ------ Project rules use Scanner and are too slow (https://biomejs.dev/linter/domains/#project-rules) ------ **/
284
- "noDeprecatedImports": "off",
285
- "noFloatingPromises": "off",
286
- "noMisusedPromises": "off",
287
- "noUnnecessaryConditions": "off",
288
- "noUnresolvedImports": "off",
289
- "noImportCycles": "off",
290
- "useArraySortCompare": "off",
291
- "useAwaitThenable": "off",
292
- "useFind": "off",
293
- "useExhaustiveSwitchCases": "off",
294
- "useRegexpExec": "off"
248
+ }
295
249
  },
296
250
  "performance": {
297
251
  /** ------------------------ JavaScript Rules ------------------------ **/
@@ -352,7 +306,7 @@
352
306
  "useConsistentTypeDefinitions": {
353
307
  "level": "error",
354
308
  "options": {
355
- "style": "type"
309
+ "style": "interface"
356
310
  }
357
311
  },
358
312
  "useConst": "error",
@@ -3,9 +3,6 @@
3
3
  "$schema": "../../node_modules/@biomejs/biome/configuration_schema.json",
4
4
  "linter": {
5
5
  "rules": {
6
- "nursery": {
7
- "noNextAsyncClientComponent": "error"
8
- },
9
6
  "performance": {
10
7
  "noImgElement": "error"
11
8
  },
@@ -3,10 +3,6 @@
3
3
  "$schema": "../../node_modules/@biomejs/biome/configuration_schema.json",
4
4
  "linter": {
5
5
  "rules": {
6
- "nursery": {
7
- "useQwikValidLexicalScope": "error",
8
- "useQwikMethodUsage": "error"
9
- },
10
6
  "suspicious": {
11
7
  "noReactSpecificProps": "error"
12
8
  },
@@ -13,9 +13,6 @@
13
13
  "useHookAtTopLevel": "error",
14
14
  "useJsxKeyInIterable": "error"
15
15
  },
16
- "nursery": {
17
- "noReactForwardRef": "error"
18
- },
19
16
  "suspicious": {
20
17
  "noArrayIndexKey": "error",
21
18
  "noDuplicateJsxProps": "error",
@@ -12,23 +12,6 @@
12
12
  "includes": ["**/*.vue"],
13
13
  "linter": {
14
14
  "rules": {
15
- "nursery": {
16
- "noVueDataObjectDeclaration": "error",
17
- "noVueDuplicateKeys": "error",
18
- "noVueVIfWithVFor": "error",
19
- "noVueSetupPropsReactivityLoss": "error",
20
- "noVueReservedKeys": "error",
21
- "noVueReservedProps": "error",
22
- "useVueHyphenatedAttributes": "error",
23
- "useVueMultiWordComponentNames": "error",
24
- "useVueValidVBind": "error",
25
- "useVueValidVElseIf": "error",
26
- "useVueValidVElse": "error",
27
- "useVueValidVHtml": "error",
28
- "useVueValidVIf": "error",
29
- "useVueValidVOn": "error",
30
- "useVueValidVText": "error"
31
- },
32
15
  "correctness": {
33
16
  "noUnusedVariables": "off",
34
17
  "noUnusedImports": "off"
package/dist/index.js CHANGED
@@ -137,7 +137,7 @@ ${n}`)}}});var Gs,je=F(()=>{Gs=Ee({"./husky.ts":()=>(be(),G(st)),"./lefthook.ts"
137
137
  `}else t+=`${s}: '${n}'
138
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
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(`
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.5.0",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
141
  `);return{line:n.length,column:(n.at(-1)?.length??0)+1}},xt=(e,t)=>{let s=e.split(`
142
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
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(`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ultracite",
3
3
  "description": "The AI-ready formatter that helps you write and generate code faster.",
4
- "version": "6.4.3",
4
+ "version": "6.5.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "ultracite": "dist/index.js"