ultracite 6.3.3 → 6.3.5
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 +46 -40
- package/config/vue/biome.jsonc +10 -1
- package/dist/index.js +24 -24
- package/package.json +3 -3
package/config/core/biome.jsonc
CHANGED
|
@@ -5,46 +5,46 @@
|
|
|
5
5
|
"ignoreUnknown": true,
|
|
6
6
|
"includes": [
|
|
7
7
|
"**",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
8
|
+
"!!**/_generated/**/*",
|
|
9
|
+
"!!**/*.gen.*",
|
|
10
|
+
"!!**/.next/**/*",
|
|
11
|
+
"!!**/next-env.d.ts",
|
|
12
|
+
"!!**/.nuxt/**/*",
|
|
13
|
+
"!!**/.output/**/*",
|
|
14
|
+
"!!**/.svelte-kit/**/*",
|
|
15
|
+
"!!**/.vitepress/cache/**/*",
|
|
16
|
+
"!!**/.vitepress/dist/**/*",
|
|
17
|
+
"!!**/dist/**/*",
|
|
18
|
+
"!!**/build/**/*",
|
|
19
|
+
"!!**/out/**/*",
|
|
20
|
+
"!!**/.turbo/**/*",
|
|
21
|
+
"!!**/.vercel/**/*",
|
|
22
|
+
"!!**/.netlify/**/*",
|
|
23
|
+
"!!**/storybook-static/**/*",
|
|
24
|
+
"!!**/.docusaurus/**/*",
|
|
25
|
+
"!!**/.cache/**/*",
|
|
26
|
+
"!!**/public/build/**/*",
|
|
27
|
+
"!!**/.parcel-cache/**/*",
|
|
28
|
+
"!!**/.vite/**/*",
|
|
29
|
+
"!!**/.astro/**/*",
|
|
30
|
+
"!!**/_astro/**/*",
|
|
31
|
+
"!!**/coverage/**/*",
|
|
32
|
+
"!!**/.nyc_output/**/*",
|
|
33
|
+
"!!**/*.generated.*",
|
|
34
|
+
"!!**/*.auto.*",
|
|
35
|
+
"!!**/generated/**/*",
|
|
36
|
+
"!!**/auto-generated/**/*",
|
|
37
|
+
"!!**/codegen/**/*",
|
|
38
|
+
"!!**/__generated__/**/*",
|
|
39
|
+
"!!**/graphql-types.*",
|
|
40
|
+
"!!**/schema.d.ts",
|
|
41
|
+
"!!**/schema.graphql.d.ts",
|
|
42
|
+
"!!**/*.d.ts.map",
|
|
43
|
+
"!!**/.expo/**/*",
|
|
44
|
+
"!!**/.expo-shared/**/*",
|
|
45
|
+
"!!**/android/build/**/*",
|
|
46
|
+
"!!**/ios/build/**/*",
|
|
47
|
+
"!!**/DerivedData/**/*"
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
50
|
"formatter": {
|
|
@@ -246,18 +246,23 @@
|
|
|
246
246
|
},
|
|
247
247
|
"noParametersOnlyUsedInRecursion": "error",
|
|
248
248
|
"noShadow": "error",
|
|
249
|
+
"noSyncScripts": "error",
|
|
249
250
|
"noUnusedExpressions": "error",
|
|
250
251
|
"noUselessUndefined": "error",
|
|
251
252
|
"useConsistentArrowReturn": "error",
|
|
253
|
+
"useConsistentGraphqlDescriptions": "error",
|
|
252
254
|
"useDeprecatedDate": "error",
|
|
253
255
|
"useMaxParams": "error",
|
|
256
|
+
"useUniqueGraphqlOperationName": "error",
|
|
254
257
|
|
|
255
258
|
"noContinue": "off",
|
|
259
|
+
"noForIn": "off",
|
|
256
260
|
"noJsxLiterals": "off",
|
|
257
261
|
"noUselessCatchBinding": "off",
|
|
258
262
|
"noUnnecessaryConditions": "off",
|
|
259
263
|
"useArraySortCompare": "off",
|
|
260
264
|
"useExplicitType": "off",
|
|
265
|
+
"useFind": "error",
|
|
261
266
|
"useSortedClasses": {
|
|
262
267
|
"fix": "safe",
|
|
263
268
|
"level": "error",
|
|
@@ -266,6 +271,7 @@
|
|
|
266
271
|
"functions": ["clsx", "cva", "tw", "twMerge", "cn", "twJoin", "tv"]
|
|
267
272
|
}
|
|
268
273
|
},
|
|
274
|
+
"useSpread": "error",
|
|
269
275
|
|
|
270
276
|
/** ------ Project rules use Scanner and are too slow (https://biomejs.dev/linter/domains/#project-rules) ------ **/
|
|
271
277
|
"noDeprecatedImports": "off",
|
package/config/vue/biome.jsonc
CHANGED
|
@@ -15,9 +15,18 @@
|
|
|
15
15
|
"nursery": {
|
|
16
16
|
"noVueDataObjectDeclaration": "error",
|
|
17
17
|
"noVueDuplicateKeys": "error",
|
|
18
|
+
"noVueVIfWithVFor": "error",
|
|
18
19
|
"noVueReservedKeys": "error",
|
|
19
20
|
"noVueReservedProps": "error",
|
|
20
|
-
"
|
|
21
|
+
"useVueHyphenatedAttributes": "error",
|
|
22
|
+
"useVueMultiWordComponentNames": "error",
|
|
23
|
+
"useVueValidVBind": "error",
|
|
24
|
+
"useVueValidVElseIf": "error",
|
|
25
|
+
"useVueValidVElse": "error",
|
|
26
|
+
"useVueValidVHtml": "error",
|
|
27
|
+
"useVueValidVIf": "error",
|
|
28
|
+
"useVueValidVOn": "error",
|
|
29
|
+
"useVueValidVText": "error"
|
|
21
30
|
},
|
|
22
31
|
"correctness": {
|
|
23
32
|
"noUnusedVariables": "off",
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var q=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var
|
|
2
|
+
var q=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var ee=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,s)=>(typeof require<"u"?require:e)[s]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),ke=t=>e=>{var s=t[e];if(s)return s();throw new Error("Module not found in bundle: "+e)};var D=(t,e)=>()=>(t&&(e=t(t=0)),e);var te=(t,e)=>{for(var s in e)q(t,s,{get:e[s],enumerable:!0})},ot=(t,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of tt(e))!st.call(t,n)&&n!==s&&q(t,n,{get:()=>e[n],enumerable:!(o=et(e,n))||o.enumerable});return t};var se=t=>ot(q({},"__esModule",{value:!0}),t);import{access as it,readFile as be,writeFile as at}from"fs/promises";import{parse as rt}from"jsonc-parser";var l,h,xe,x,ct,lt,L,m=D(()=>{"use strict";l=async t=>{try{return await it(t),!0}catch{return!1}},h=async()=>{if(await l("pnpm-workspace.yaml"))return!0;try{let t=rt(await be("package.json","utf-8"));return t?!!t.workspaces||!!t.workspace:!1}catch{return!1}},xe=`
|
|
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 q=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object
|
|
|
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
|
-
`,x=async({dependencies:t,devDependencies:e,scripts:
|
|
11
|
+
`,x=async({dependencies:t,devDependencies:e,scripts:s})=>{let o=await be("package.json","utf8"),n=JSON.parse(o),i={...n};(n.devDependencies||e)&&(i.devDependencies={...n.devDependencies,...e}),(n.dependencies||t)&&(i.dependencies={...n.dependencies,...t}),(n.scripts||s)&&(i.scripts={...n.scripts,...s}),await at("package.json",JSON.stringify(i,null,2))},ct=/[ $(){}[\]&|;<>!"'`*?#~]/,lt=/'/g,L=t=>t.map(e=>ct.test(e)?`'${e.replace(lt,"'\\''")}' `:e)});var We={};te(We,{husky:()=>v});import{execSync as Xt}from"child_process";import{mkdir as Qt,readFile as Zt,writeFile as Le}from"fs/promises";import{addDevDependency as qt,dlxCommand as de}from"nypm";var He,K,v,fe=D(()=>{"use strict";m();He=t=>`#!/bin/sh
|
|
12
12
|
# Exit on any error
|
|
13
13
|
set -e
|
|
14
14
|
|
|
@@ -76,8 +76,8 @@ if [ "$STAGED_HASH" != "$NEW_STAGED_HASH" ]; then
|
|
|
76
76
|
fi
|
|
77
77
|
|
|
78
78
|
exit $FORMAT_EXIT_CODE
|
|
79
|
-
`,K="./.husky/pre-commit",v={exists:()=>l(K),install:async t=>{await qt("husky",{packageManager:t,workspace:await h()}),await x({scripts:{prepare:"husky"}})},init:t=>{let e=de(t,"husky",{args:["init"]});try{Xt(e,{stdio:"inherit"})}catch{}},create:async t=>{await Qt(".husky",{recursive:!0});let e=de(t,"ultracite",{args:["fix"],short:t==="npm"}),
|
|
80
|
-
${
|
|
79
|
+
`,K="./.husky/pre-commit",v={exists:()=>l(K),install:async t=>{await qt("husky",{packageManager:t,workspace:await h()}),await x({scripts:{prepare:"husky"}})},init:t=>{let e=de(t,"husky",{args:["init"]});try{Xt(e,{stdio:"inherit"})}catch{}},create:async t=>{await Qt(".husky",{recursive:!0});let e=de(t,"ultracite",{args:["fix"],short:t==="npm"}),s=He(e);await Le(K,s)},update:async t=>{let e=await Zt(K,"utf-8"),s=de(t,"ultracite",{args:["fix"],short:t==="npm"}),o=He(s);await Le(K,`${e}
|
|
80
|
+
${o}`)}}});var Ve={};te(Ve,{lefthook:()=>A});import{execSync as es}from"child_process";import{readFile as ts,writeFile as J}from"fs/promises";import{addDevDependency as ss,dlxCommand as Be}from"nypm";var os,ns,Ge,C,ze,A,pe=D(()=>{"use strict";m();os=/(pre-commit:\s*\n\s*jobs:\s*\n)/,ns=/(pre-commit:\s*\n)/,Ge=t=>Be(t,"ultracite",{args:["fix"],short:t==="npm"}),C="./lefthook.yml",ze=t=>`pre-commit:
|
|
81
81
|
jobs:
|
|
82
82
|
- run: ${Ge(t)}
|
|
83
83
|
glob:
|
|
@@ -89,7 +89,7 @@ ${s}`)}}});var Ve={};te(Ve,{lefthook:()=>A});import{execSync as eo}from"child_pr
|
|
|
89
89
|
- "*.jsonc"
|
|
90
90
|
- "*.css"
|
|
91
91
|
stage_fixed: true
|
|
92
|
-
`,A={exists:()=>l(C),install:async t=>{await
|
|
92
|
+
`,A={exists:()=>l(C),install:async t=>{await ss("lefthook",{packageManager:t,workspace:await h()});let e=Be(t,"lefthook",{args:["install"],short:t==="npm"});es(e)},create:async t=>{let e=ze(t);await J(C,e)},update:async t=>{let e=await ts(C,"utf-8"),s=Ge(t),o=ze(t);if(e.includes(s))return;if(e.startsWith("# EXAMPLE USAGE:")){await J(C,o);return}if(e.includes("pre-commit:"))if(e.includes("jobs:")){let i=` - run: ${s}
|
|
93
93
|
glob:
|
|
94
94
|
- "*.js"
|
|
95
95
|
- "*.jsx"
|
|
@@ -98,9 +98,9 @@ ${s}`)}}});var Ve={};te(Ve,{lefthook:()=>A});import{execSync as eo}from"child_pr
|
|
|
98
98
|
- "*.json"
|
|
99
99
|
- "*.jsonc"
|
|
100
100
|
- "*.css"
|
|
101
|
-
stage_fixed: true`,a=e.replace(
|
|
102
|
-
`);await
|
|
103
|
-
- run: ${
|
|
101
|
+
stage_fixed: true`,a=e.replace(os,`$1${i}
|
|
102
|
+
`);await J(C,a)}else{let i=` jobs:
|
|
103
|
+
- run: ${s}
|
|
104
104
|
glob:
|
|
105
105
|
- "*.js"
|
|
106
106
|
- "*.jsx"
|
|
@@ -109,20 +109,20 @@ ${s}`)}}});var Ve={};te(Ve,{lefthook:()=>A});import{execSync as eo}from"child_pr
|
|
|
109
109
|
- "*.json"
|
|
110
110
|
- "*.jsonc"
|
|
111
111
|
- "*.css"
|
|
112
|
-
stage_fixed: true`,a=e.replace(
|
|
113
|
-
`);await
|
|
114
|
-
${
|
|
115
|
-
`).filter(i=>i.trim()&&!i.trim().startsWith("#")),
|
|
116
|
-
`;for(let n of
|
|
117
|
-
`}else e+=`${
|
|
118
|
-
`;return e},
|
|
119
|
-
`;await j(t,a)},
|
|
120
|
-
`;await j(t,n)},ge=async t=>{await j(".lintstagedrc.json",JSON.stringify(w(t),null,2))},
|
|
121
|
-
`),t.push(Rt()),t.push(await At()),t.push(await Et()),t.push(Ft());let e=t.filter(n=>n.status==="pass").length,
|
|
122
|
-
\u{1F4CA} Summary:`),console.log(` ${e} passed, ${
|
|
123
|
-
\u{1F4A1} To fix issues, run: npx ultracite init`),process.exit(1)),
|
|
112
|
+
stage_fixed: true`,a=e.replace(ns,`$1${i}
|
|
113
|
+
`);await J(C,a)}else await J(C,`${e}
|
|
114
|
+
${o}`)}}});var is,me=D(()=>{is=ke({"./husky.ts":()=>(fe(),se(We)),"./lefthook.ts":()=>(pe(),se(Ve)),"./lint-staged.ts":()=>(ue(),se(Ye))})});var Ye={};te(Ye,{lintStaged:()=>E});import{readFile as X,writeFile as j}from"fs/promises";import{pathToFileURL as as}from"url";import _ from"deepmerge";import{parse as he}from"jsonc-parser";import{addDevDependency as rs,dlxCommand as cs}from"nypm";var w,Ke,ls,ds,fs,ps,ms,us,gs,hs,ys,ge,ws,E,ue=D(()=>{"use strict";m();me();w=t=>({"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":[cs(t,"ultracite",{args:["fix"],short:t==="npm"})]}),Ke=["./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"],ls=(t,e,s,o)=>{let n=t.trim();if(n.includes(":")&&!n.startsWith("-")){s&&o.length>0&&(e[s]=o);let[i,...a]=n.split(":"),c=a.join(":").trim(),f=i.trim().replace(/['"]/g,"");return c&&c!==""?(c.startsWith("[")&&c.endsWith("]")?e[f]=c.slice(1,-1).split(",").map(g=>g.trim().replace(/['"]/g,"")):e[f]=c.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:f,newCurrentArray:[]}}if(n.startsWith("-")&&s){let i=[...o,n.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:i}}return{newCurrentKey:s,newCurrentArray:o}},ds=t=>{let e=t.split(`
|
|
115
|
+
`).filter(i=>i.trim()&&!i.trim().startsWith("#")),s={},o=null,n=[];for(let i of e){let a=ls(i,s,o,n);o=a.newCurrentKey,n=a.newCurrentArray}return o&&n.length>0&&(s[o]=n),s},fs=t=>{let e="";for(let[s,o]of Object.entries(t))if(Array.isArray(o)){e+=`${s}:
|
|
116
|
+
`;for(let n of o)e+=` - '${n}'
|
|
117
|
+
`}else e+=`${s}: '${o}'
|
|
118
|
+
`;return e},ps=async()=>{try{let t=he(await X("./package.json","utf-8"));return t?t.type==="module":!1}catch{return!1}},ms=async t=>{let e=he(await X("./package.json","utf-8"));e&&(e["lint-staged"]?e["lint-staged"]=_(e["lint-staged"],w(t)):e["lint-staged"]=w(t),await j("./package.json",JSON.stringify(e,null,2)))},us=async(t,e)=>{let s=await X(t,"utf-8"),o=he(s);if(!o)return;let n=_(o,w(e));await j(t,JSON.stringify(n,null,2))},gs=async(t,e)=>{let s=await X(t,"utf-8"),o=ds(s);if(!o)return;let n=_(o,w(e));await j(t,fs(n))},hs=async(t,e)=>{let n=(await import(as(t).href)).default||{},i=_(n,w(e)),a=`export default ${JSON.stringify(i,null,2)};
|
|
119
|
+
`;await j(t,a)},ys=async(t,e)=>{delete ee.cache[ee.resolve(`./${t}`)];let s=is(`./${t}`),o=_(s,w(e)),n=`module.exports = ${JSON.stringify(o,null,2)};
|
|
120
|
+
`;await j(t,n)},ge=async t=>{await j(".lintstagedrc.json",JSON.stringify(w(t),null,2))},ws=async(t,e)=>{if(t==="./package.json"){await ms(e);return}if(t.endsWith(".json")||t==="./.lintstagedrc"){await us(t,e);return}if(t.endsWith(".yaml")||t.endsWith(".yml")){await gs(t,e);return}let s=await ps();if(t.endsWith(".mjs")||t.endsWith(".js")&&s){try{await hs(t,e)}catch{await ge(e)}return}if(t.endsWith(".cjs")||t.endsWith(".js")&&!s)try{await ys(t,e)}catch{await ge(e)}},E={exists:async()=>{for(let t of Ke)if(await l(t))return!0;return!1},install:async t=>{await rs("lint-staged",{packageManager:t,workspace:await h()})},create:async t=>{await j(".lintstagedrc.json",JSON.stringify(w(t),null,2))},update:async t=>{let e=null;for(let s of Ke)if(await l(s)){e=s;break}if(!e){await ge(t);return}await ws(e,t)}}});import{initTRPC as Ls}from"@trpc/server";import{createCli as Hs}from"trpc-cli";import r from"zod";var b={name:"ultracite",description:"The AI-ready formatter that helps you write and generate code faster.",version:"6.3.5",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.7","@types/node":"^24.10.1",tsup:"^8.5.1",turbo:"^2.6.1"},dependencies:{"@clack/prompts":"^0.11.0","@trpc/server":"^11.7.1",deepmerge:"^4.3.1",glob:"^12.0.0","jsonc-parser":"^3.3.1",nypm:"^0.6.2","trpc-cli":"^0.12.0",zod:"^4.1.12"},packageManager:"bun@1.3.2"};m();import{spawnSync as dt}from"child_process";import ve from"process";var oe=t=>{let e=t?.[0]||[],s=t?.[1]["diagnostic-level"],o=["npx","@biomejs/biome","check","--no-errors-on-unmatched"];s&&o.push(`--diagnostic-level=${s}`),e.length>0?o.push(...L(e)):o.push("./");let n=o.join(" "),i=dt(n,{stdio:"inherit",shell:!0});i.error&&(console.error("Failed to run Ultracite:",i.error.message),ve.exit(1)),i.status!==0&&ve.exit(i.status??1)};import{spawnSync as Pt}from"child_process";import{existsSync as T}from"fs";import{readFile as Ee}from"fs/promises";import{join as M}from"path";import{parse as St}from"jsonc-parser";m();import{readFile as Ce,unlink as ft,writeFile as pt}from"fs/promises";import{parse as je}from"jsonc-parser";import{removeDependency as mt}from"nypm";var H=[".eslintrc",".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml",".eslintrc.config.js","eslint.config.js","eslint.config.mjs","eslint.config.cjs",".eslintignore"],Pe=async()=>{try{let t=await Ce("package.json","utf-8"),e=je(t);if(!e||typeof e!="object")return[];let s=e.dependencies||{},o=e.devDependencies||{},n={...s,...o};return Object.keys(n).filter(i=>i.includes("eslint"))}catch{return[]}},ut=async(t,e)=>{if(e.length!==0)try{for(let s of e)await mt(s,{packageManager:t})}catch(s){console.warn(s)}},gt=async()=>{let t=[];for(let e of H)if(await l(e))try{await ft(e),t.push(e)}catch(s){console.warn(s)}return t},ht=async()=>{let t="./.vscode/settings.json";if(!await l(t))return!1;try{let e=await Ce(t,"utf-8"),s=je(e);if(!s||typeof s!="object")return!1;let o=!1,n={...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 n&&(delete n[a],o=!0);if("editor.codeActionsOnSave"in n){let a=n["editor.codeActionsOnSave"];if(a&&typeof a=="object"){let c=["source.fixAll.eslint","source.organizeImports.eslint"];for(let f of c)f in a&&(delete a[f],o=!0);Object.keys(a).length===0&&(n["editor.codeActionsOnSave"]=void 0)}}return o?(await pt(t,JSON.stringify(n,null,2)),!0):!1}catch(e){return console.warn(e),!1}},yt=async()=>{if((await Pe()).length>0)return!0;for(let e of H)if(await l(e))return!0;return!1},ne={hasEsLint:yt,remove:async t=>{let e=await Pe();await ut(t,e);let s=await gt(),o=await ht();return{packagesRemoved:e,filesRemoved:s,vsCodeCleaned:o}}};m();import{readFile as Se,unlink as wt,writeFile as kt}from"fs/promises";import{parse as Re}from"jsonc-parser";import{removeDependency as bt}from"nypm";var W=[".prettierrc",".prettierrc.js",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.config.js","prettier.config.js","prettier.config.mjs",".prettierignore"],Ae=async()=>{try{let t=await Se("package.json","utf-8"),e=Re(t);if(!e||typeof e!="object")return[];let s=e.dependencies||{},o=e.devDependencies||{},n={...s,...o};return Object.keys(n).filter(i=>i.includes("prettier"))}catch{return[]}},xt=async(t,e)=>{if(e.length!==0)try{for(let s of e)await bt(s,{packageManager:t})}catch(s){console.warn(s)}},vt=async()=>{let t=[];for(let e of W)if(await l(e))try{await wt(e),t.push(e)}catch(s){console.warn(s)}return t},Ct=async()=>{let t="./.vscode/settings.json";if(!await l(t))return!1;try{let e=await Se(t,"utf-8"),s=Re(e);if(!s||typeof s!="object")return!1;let o=!1,n={...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 c of i)c in n&&(c==="editor.defaultFormatter"&&n[c]==="esbenp.prettier-vscode"||c!=="editor.defaultFormatter")&&(delete n[c],o=!0);let a=Object.keys(n).filter(c=>c.startsWith("[")&&c.includes("javascript"));for(let c of a){let f=n[c];f&&typeof f=="object"&&"editor.defaultFormatter"in f&&f["editor.defaultFormatter"]==="esbenp.prettier-vscode"&&(delete f["editor.defaultFormatter"],o=!0,Object.keys(f).length===0&&delete n[c])}return o?(await kt(t,JSON.stringify(n,null,2)),!0):!1}catch(e){return console.warn(e),!1}},jt=async()=>{if((await Ae()).length>0)return!0;for(let e of W)if(await l(e))return!0;return!1},ie={hasPrettier:jt,remove:async t=>{let e=await Ae();await xt(t,e);let s=await vt(),o=await Ct();return{packagesRemoved:e,filesRemoved:s,vsCodeCleaned:o}}};var Rt=()=>{let t=Pt("npx @biomejs/biome --version",{shell:!0,encoding:"utf-8"});return t.status===0&&t.stdout?{name:"Biome installation",status:"pass",message:`Biome is installed (${t.stdout.trim()})`}:{name:"Biome installation",status:"fail",message:"Biome is not installed or not accessible"}},At=async()=>{let t=M(process.cwd(),"biome.json"),e=M(process.cwd(),"biome.jsonc"),s=null;if(T(t)?s=t:T(e)&&(s=e),!s)return{name:"Biome configuration",status:"fail",message:"No biome.json or biome.jsonc file found"};try{let o=await Ee(s,"utf-8"),n=St(o);return Array.isArray(n?.extends)&&n.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"}}},Et=async()=>{let t=M(process.cwd(),"package.json");if(!T(t))return{name:"Ultracite dependency",status:"warn",message:"No package.json found"};try{let e=JSON.parse(await Ee(t,"utf-8")),s=e.dependencies?.ultracite||e.devDependencies?.ultracite||e.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"}}},Ft=()=>{let t=W.some(s=>T(M(process.cwd(),s))),e=H.some(s=>T(M(process.cwd(),s)));if(t||e){let s=[];return t&&s.push("Prettier"),e&&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"}},Fe=async()=>{let t=[];console.log(`\u{1FA7A} Running Ultracite doctor...
|
|
121
|
+
`),t.push(Rt()),t.push(await At()),t.push(await Et()),t.push(Ft());let e=t.filter(n=>n.status==="pass").length,s=t.filter(n=>n.status==="fail").length,o=t.filter(n=>n.status==="warn").length;for(let n of t){let i;n.status==="pass"?i="\u2705":n.status==="fail"?i="\u274C":i="\u26A0\uFE0F",console.log(`${i} ${n.name}: ${n.message}`)}console.log(`
|
|
122
|
+
\u{1F4CA} Summary:`),console.log(` ${e} passed, ${o} warnings, ${s} failed`),s>0&&(console.log(`
|
|
123
|
+
\u{1F4A1} To fix issues, run: npx ultracite init`),process.exit(1)),o>0?console.log(`
|
|
124
124
|
\u{1F4A1} Some optional improvements available. Run 'npx ultracite init' to configure.`):console.log(`
|
|
125
|
-
\u2728 Everything looks good!`)};m();import{spawnSync as $t}from"child_process";import $e from"process";var ae=(t,e={})=>{let
|
|
125
|
+
\u2728 Everything looks good!`)};m();import{spawnSync as $t}from"child_process";import $e from"process";var ae=(t,e={})=>{let s=["npx","@biomejs/biome","check","--write","--no-errors-on-unmatched"];e.unsafe&&s.push("--unsafe"),t.length>0?s.push(...L(t)):s.push("./");let o=s.join(" "),n=$t(o,{stdio:"inherit",shell:!0});n.error&&(console.error("Failed to run Ultracite:",n.error.message),$e.exit(1)),n.status!==0&&$e.exit(n.status??1)};import{packageManagers as Nt}from"nypm";var y={packageManagers:Nt.map(t=>t.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"],integrations:["husky","lefthook","lint-staged"],hooks:["cursor","claude"],frameworks:["react","next","solid","vue","svelte","qwik","remix","angular","astro"],migrations:["eslint","prettier"]};import k from"process";import{cancel as F,intro as Ss,isCancel as $,log as Q,multiselect as N,spinner as u}from"@clack/prompts";import{addDevDependency as Rs,detectPackageManager as As}from"nypm";import{mkdir as Ot,readFile as Dt,writeFile as z}from"fs/promises";import{dirname as Tt}from"path";var Ne={"vscode-copilot":{path:"./.github/copilot-instructions.md",header:`---
|
|
126
126
|
applyTo: "**/*.{ts,tsx,js,jsx}"
|
|
127
127
|
---`,appendMode:!0},cursor:{path:"./.cursor/rules/ultracite.mdc",header:`---
|
|
128
128
|
description: Ultracite Rules - AI-Ready Formatter and Linter
|
|
@@ -251,8 +251,8 @@ Biome's linter will catch most issues automatically. Focus your attention on:
|
|
|
251
251
|
---
|
|
252
252
|
|
|
253
253
|
Most formatting and common issues are automatically fixed by Biome. Run \`npx ultracite fix\` before committing to ensure compliance.
|
|
254
|
-
`;var De=t=>{let e=Ne[t],
|
|
254
|
+
`;var De=t=>{let e=Ne[t],s=e.header?`${e.header}
|
|
255
255
|
|
|
256
|
-
${I}`:I,
|
|
256
|
+
${I}`:I,o=async()=>{let n=Tt(e.path);if(n!=="."){let i=n.startsWith("./")?n.slice(2):n;await Ot(i,{recursive:!0})}};return{exists:()=>l(e.path),create:async()=>{await o(),await z(e.path,s)},update:async()=>{if(await o(),e.appendMode){if(!await l(e.path)){await z(e.path,s);return}let n=await Dt(e.path,"utf-8");if(n.includes(I.trim()))return;await z(e.path,`${n}
|
|
257
257
|
|
|
258
|
-
${I}`)}else await W(e.path,o)}}};m();import{readFile as Mt,writeFile as Te}from"fs/promises";import It from"deepmerge";import{parse as Ut}from"jsonc-parser";var Me={$schema:"./node_modules/@biomejs/biome/configuration_schema.json",extends:["ultracite/core"]},re=async()=>await l("./biome.json")?"./biome.json":"./biome.jsonc",B={exists:async()=>{let t=await re();return l(t)},create:async t=>{let e=await re(),o=["ultracite/core"];if(t?.frameworks&&t.frameworks.length>0)for(let n of t.frameworks)o.push(`ultracite/${n}`);let s={...Me,extends:o};return Te(e,JSON.stringify(s,null,2))},update:async t=>{let e=await re(),o=await Mt(e,"utf-8"),n=Ut(o)||{},a=[...n.extends&&Array.isArray(n.extends)?n.extends:[]];if(a.includes("ultracite/core")||a.push("ultracite/core"),t?.frameworks&&t.frameworks.length>0)for(let g of t.frameworks){let O=`ultracite/${g}`;a.includes(O)||a.push(O)}n.extends=a;let c={$schema:Me.$schema},f=It(n,c);await Te(e,JSON.stringify(f,null,2))}};import{mkdir as _t,readFile as Ie,writeFile as R}from"fs/promises";import{dirname as Jt}from"path";m();var Ue=t=>{let e=Oe[t],o=async()=>{let s=Jt(e.path);if(s!=="."){let n=s.startsWith("./")?s.slice(2):s;await _t(n,{recursive:!0})}};return{exists:()=>l(e.path),create:async()=>{await o(),t==="cursor"?await R(e.path,JSON.stringify({version:1,hooks:{afterFileEdit:[{command:e.command}]}},null,2)):t==="claude"&&await R(e.path,JSON.stringify({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}]}},null,2))},update:async()=>{if(await o(),t==="cursor"){if(!await l(e.path)){await R(e.path,JSON.stringify({version:1,hooks:{afterFileEdit:[{command:e.command}]}},null,2));return}let s=await Ie(e.path,"utf-8"),n=JSON.parse(s);n.hooks.afterFileEdit.some(a=>a.command.includes("ultracite"))||(n.hooks.afterFileEdit.push({command:e.command}),await R(e.path,JSON.stringify(n,null,2)))}else if(t==="claude"){if(!await l(e.path)){await R(e.path,JSON.stringify({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}]}},null,2));return}let s=await Ie(e.path,"utf-8"),n=JSON.parse(s);n.hooks||(n.hooks={}),n.hooks.PostToolUse||(n.hooks.PostToolUse=[]),n.hooks.PostToolUse.some(a=>a.hooks?.some(c=>c.command.includes("ultracite")))||(n.hooks.PostToolUse.push({matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}),await R(e.path,JSON.stringify(n,null,2)))}}}};m();import{spawnSync as Lt}from"child_process";import{mkdir as Ht,readFile as zt,writeFile as _e}from"fs/promises";import Wt from"deepmerge";import{parse as Bt}from"jsonc-parser";var ce={"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 G="./.vscode/settings.json",U={exists:()=>l(G),create:async()=>{await Ht(".vscode",{recursive:!0}),await _e(G,JSON.stringify(ce,null,2))},update:async()=>{let t=await zt(G,"utf-8"),o=Bt(t)||{},s=Wt(o,ce);await _e(G,JSON.stringify(s,null,2))},extension:()=>Lt("code --install-extension biomejs.biome",{stdio:"inherit",shell:!0})};m();import{mkdir as Gt,readFile as Vt,writeFile as Je}from"fs/promises";import Yt from"deepmerge";import{parse as Kt}from"jsonc-parser";var le={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}},JSX:{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 V="./.zed/settings.json",Y={exists:()=>l(V),create:async()=>{await Gt(".zed",{recursive:!0}),await Je(V,JSON.stringify(le,null,2))},update:async()=>{let t=await Vt(V,"utf-8"),o=Kt(t)||{},s=Yt(o,le);await Je(V,JSON.stringify(s,null,2))}};fe();pe();ue();import{readFile as bo,writeFile as xo}from"fs/promises";import vo from"deepmerge";import{glob as Co}from"glob";import{parse as jo}from"jsonc-parser";var Po={compilerOptions:{strictNullChecks:!0}},Xe=async()=>{try{return await Co("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},So=async t=>{try{let e=await bo(t,"utf-8"),s=jo(e)||{},n=vo(s,Po);await xo(t,JSON.stringify(n,null,2))}catch(e){console.warn(`Failed to update ${t}:`,e)}},ye={exists:async()=>(await Xe()).length>0,update:async()=>{let t=await Xe();if(t.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(t.map(e=>So(e)))}};m();var Qe=b.devDependencies["@biomejs/biome"],Ze=b.version,Fo=async(t,e=!0,o=!1)=>{let s=u();o||s.start("Installing dependencies...");let n=[`ultracite@${Ze}`,`@biomejs/biome@${Qe}`];if(e)for(let i of n)await Ao(i,{packageManager:t,workspace:await h(),silent:o});else await x({devDependencies:{"@biomejs/biome":Qe,ultracite:Ze}});o||s.stop("Dependencies installed.")},$o=async(t=!1)=>{let e=u();if(t||e.start("Checking for tsconfig.json files..."),await ye.exists()){t||e.message("Found tsconfig.json files, updating with strictNullChecks..."),await ye.update(),t||e.stop("tsconfig.json files updated.");return}t||e.stop("No tsconfig.json files found, skipping.")},No=async(t=!1)=>{let e=u();if(t||e.start("Checking for .vscode/settings.json..."),await U.exists()){t||e.message("settings.json found, updating..."),await U.update(),t||e.stop("settings.json updated.");return}t||e.message("settings.json not found, creating..."),await U.create(),t||(e.message("settings.json created."),e.message("Installing Biome extension..."));try{U.extension(),t||e.stop("settings.json created.")}catch(o){t||e.stop(`Failed to install Biome extension (${o}), but continuing...`)}},Oo=async(t=!1)=>{let e=u();if(t||e.start("Checking for .zed/settings.json..."),await Y.exists()){t||e.message("settings.json found, updating..."),await Y.update(),t||e.stop("settings.json updated.");return}t||e.message("settings.json not found, creating..."),await Y.create(),t||e.message("settings.json created. Install the Biome extension: https://biomejs.dev/reference/zed/")},Do=async(t,e=!1)=>{let o=u();if(e||o.start("Checking for Biome configuration..."),await B.exists()){e||o.message("Biome configuration found, updating..."),await B.update({frameworks:t}),e||o.stop("Biome configuration updated.");return}e||o.message("Biome configuration not found, creating..."),await B.create({frameworks:t}),e||o.stop("Biome configuration created.")},To=async(t,e=!0,o=!1)=>{let s=u();if(o||(s.start("Initializing pre-commit hooks..."),s.message("Installing Husky...")),e?await v.install(t):await x({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),o||s.message("Initializing Husky..."),v.init(t),await v.exists()){o||s.message("Pre-commit hook found, updating..."),await v.update(t),o||s.stop("Pre-commit hook updated.");return}o||s.message("Pre-commit hook not found, creating..."),await v.create(t),o||s.stop("Pre-commit hook created.")},Mo=async(t,e=!0,o=!1)=>{let s=u();if(o||(s.start("Initializing lefthook..."),s.message("Installing lefthook...")),e?await A.install(t):await x({devDependencies:{lefthook:"latest"}}),await A.exists()){o||s.message("lefthook.yml found, updating..."),await A.update(t),o||s.stop("lefthook.yml updated.");return}o||s.message("lefthook.yml not found, creating..."),await A.create(t),o||s.stop("lefthook.yml created.")},Io=async(t,e=!0,o=!1)=>{let s=u();if(o||(s.start("Initializing lint-staged..."),s.message("Installing lint-staged...")),e?await E.install(t):await x({devDependencies:{"lint-staged":"latest"}}),await E.exists()){o||s.message("lint-staged found, updating..."),await E.update(t),o||s.stop("lint-staged updated.");return}o||s.message("lint-staged not found, creating..."),await E.create(t),o||s.stop("lint-staged created.")},Uo=async(t,e,o=!1)=>{let s=u();o||s.start(`Checking for ${e}...`);let n=De(t);if(await n.exists()){o||s.message(`${e} found, updating...`),await n.update(),o||s.stop(`${e} updated.`);return}o||s.message(`${e} not found, creating...`),await n.create(),o||s.stop(`${e} created.`)},_o=async(t,e,o=!1)=>{let s=u();o||s.start(`Checking for ${e} hooks...`);let n=Ue(t);if(await n.exists()){o||s.message(`${e} hooks found, updating...`),await n.update(),o||s.stop(`${e} hooks updated.`);return}o||s.message(`${e} hooks not found, creating...`),await n.create(),o||s.stop(`${e} hooks created.`)},Jo=async(t,e=!1)=>{let o=u();e||o.start("Removing Prettier dependencies and configuration...");try{let s=await ie.remove(t);e||(s.packagesRemoved.length>0&&o.message(`Removed Prettier packages: ${s.packagesRemoved.join(", ")}`),s.filesRemoved.length>0&&o.message(`Removed config files: ${s.filesRemoved.join(", ")}`),s.vsCodeCleaned&&o.message("Cleaned VS Code settings"),o.stop("Prettier removed successfully."))}catch{e||o.stop("Failed to remove Prettier completely, but continuing...")}},Lo=async(t,e=!1)=>{let o=u();e||o.start("Removing ESLint dependencies and configuration...");try{let s=await ne.remove(t);e||(s.packagesRemoved.length>0&&o.message(`Removed ESLint packages: ${s.packagesRemoved.join(", ")}`),s.filesRemoved.length>0&&o.message(`Removed config files: ${s.filesRemoved.join(", ")}`),s.vsCodeCleaned&&o.message("Cleaned VS Code settings"),o.stop("ESLint removed successfully."))}catch{e||o.stop("Failed to remove ESLint completely, but continuing...")}},qe=async t=>{let e=t??{},o=e.quiet??!1;o||Ro(xe);try{let{pm:s}=e;if(!s){let d=await Eo(k.cwd());if(!d)throw new Error("No package manager specified or detected");if(!o&&d.warnings)for(let p of d.warnings)Q.warn(p);o||Q.info(`Detected lockfile, using ${d.name}`),s=d.name}let n=e.migrate?.includes("prettier"),i=e.migrate?.includes("eslint");if(!o&&(n===void 0||i===void 0)){let d=[];if(n===void 0&&await ie.hasPrettier()&&d.push({label:"Remove Prettier (dependencies, config files, VS Code settings)",value:"prettier"}),i===void 0&&await ne.hasEsLint()&&d.push({label:"Remove ESLint (dependencies, config files, VS Code settings)",value:"eslint"}),d.length>0){let p=await N({message:"Remove existing formatters/linters (recommended for clean migration)?",options:d,required:!1});$(p)&&(F("Operation cancelled."),k.exit(0)),n===void 0&&(n=p.includes("prettier")),i===void 0&&(i=p.includes("eslint"))}}o&&(n===void 0&&(n=!1),i===void 0&&(i=!1));let a=e.frameworks;if(a===void 0)if(o||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0||e.migrate!==void 0)a=[];else{let p=await N({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});$(p)&&(F("Operation cancelled."),k.exit(0)),a=p}let c=e.editors;if(!c)if(o)c=[];else{let d=await N({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),c=d}let f=e.agents,g=e.hooks,O={"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"};if(!f)if(o)f=[];else{let d=await N({message:"Which agents do you want to enable (optional)?",options:Object.entries(O).map(([p,Z])=>({value:p,label:Z})),required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),f=d}let we={cursor:"Cursor",claude:"Claude Code"};if(!g)if(o)g=[];else{let d=await N({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(we).map(([p,Z])=>({value:p,label:Z})),required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),g=d}let S=e.integrations;if(S===void 0)if(o||e.pm||e.editors||e.agents||e.hooks||e.migrate!==void 0)S=[];else{let p=await N({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});$(p)&&(F("Operation cancelled."),k.exit(0)),S=p}n&&await Jo(s,o),i&&await Lo(s,o),await Fo(s,!e.skipInstall,o),await $o(o),await Do(a,o),c?.includes("vscode")&&await No(o),c?.includes("zed")&&await Oo(o);for(let d of f??[])await Uo(d,O[d],o);for(let d of g??[])await _o(d,we[d],o);S?.includes("husky")&&await To(s,!e.skipInstall,o),S?.includes("lefthook")&&await Mo(s,!e.skipInstall,o),S?.includes("lint-staged")&&await Io(s,!e.skipInstall,o),o||Q.success("Successfully initialized Ultracite configuration!")}catch(s){let n=s instanceof Error?s.message:"Unknown error";o||Q.error(`Failed to initialize Ultracite configuration: ${n}`),k.exit(1)}};var P=Ho.meta().create(),Wo=P.router({init:P.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(r.object({pm:r.enum(y.packageManagers).optional().describe("Package manager to use"),editors:r.array(r.enum(y.editorConfigs)).optional().describe("Editors to configure"),agents:r.array(r.enum(y.agents)).optional().describe("Agents to enable"),hooks:r.array(r.enum(y.hooks)).optional().describe("Hooks to enable"),frameworks:r.array(r.enum(y.frameworks)).optional().describe("Frameworks being used"),integrations:r.array(r.enum(y.integrations)).optional().describe("Additional integrations to enable"),migrate:r.array(r.enum(y.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:r.boolean().default(!1).describe("Skip installing dependencies"),quiet:r.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:t})=>{await qe(t)}),check:P.procedure.meta({description:"Run Biome linter without fixing files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to lint"),r.object({"diagnostic-level":r.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(({input:t})=>{se(t)}),fix:P.procedure.meta({description:"Run Biome linter and fixes files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to format"),r.object({unsafe:r.boolean().optional().describe("apply unsafe fixes")})])).mutation(({input:t})=>{let[e,o]=t;ae(e,{unsafe:o.unsafe})}),doctor:P.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Fe()}),lint:P.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'check' instead - Run Biome linter without fixing files"}).input(r.array(r.string()).optional().default([]).describe("specific files to lint")).query(({input:t})=>{console.warn("\u26A0\uFE0F Warning: 'lint' command is deprecated. Please use 'check' instead."),se([t,{}])}),format:P.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'fix' instead - Run Biome linter and fixes files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to format"),r.object({unsafe:r.boolean().optional().describe("apply unsafe fixes")})])).mutation(({input:t})=>{let[e,o]=t;console.warn("\u26A0\uFE0F Warning: 'format' command is deprecated. Please use 'fix' instead."),ae(e,{unsafe:o.unsafe})})}),Bo=zo({router:Wo,name:b.name,version:b.version,description:b.description});process.env.TEST||Bo.run();export{Wo as router};
|
|
258
|
+
${I}`)}else await z(e.path,s)}}};m();import{readFile as Mt,writeFile as Te}from"fs/promises";import It from"deepmerge";import{parse as Ut}from"jsonc-parser";var Me={$schema:"./node_modules/@biomejs/biome/configuration_schema.json",extends:["ultracite/core"]},re=async()=>await l("./biome.json")?"./biome.json":"./biome.jsonc",B={exists:async()=>{let t=await re();return l(t)},create:async t=>{let e=await re(),s=["ultracite/core"];if(t?.frameworks&&t.frameworks.length>0)for(let n of t.frameworks)s.push(`ultracite/${n}`);let o={...Me,extends:s};return Te(e,JSON.stringify(o,null,2))},update:async t=>{let e=await re(),s=await Mt(e,"utf-8"),n=Ut(s)||{},a=[...n.extends&&Array.isArray(n.extends)?n.extends:[]];if(a.includes("ultracite/core")||a.push("ultracite/core"),t?.frameworks&&t.frameworks.length>0)for(let g of t.frameworks){let O=`ultracite/${g}`;a.includes(O)||a.push(O)}n.extends=a;let c={$schema:Me.$schema},f=It(n,c);await Te(e,JSON.stringify(f,null,2))}};import{mkdir as Jt,readFile as Ie,writeFile as R}from"fs/promises";import{dirname as _t}from"path";m();var Ue=t=>{let e=Oe[t],s=async()=>{let o=_t(e.path);if(o!=="."){let n=o.startsWith("./")?o.slice(2):o;await Jt(n,{recursive:!0})}};return{exists:()=>l(e.path),create:async()=>{await s(),t==="cursor"?await R(e.path,JSON.stringify({version:1,hooks:{afterFileEdit:[{command:e.command}]}},null,2)):t==="claude"&&await R(e.path,JSON.stringify({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}]}},null,2))},update:async()=>{if(await s(),t==="cursor"){if(!await l(e.path)){await R(e.path,JSON.stringify({version:1,hooks:{afterFileEdit:[{command:e.command}]}},null,2));return}let o=await Ie(e.path,"utf-8"),n=JSON.parse(o);n.hooks.afterFileEdit.some(a=>a.command.includes("ultracite"))||(n.hooks.afterFileEdit.push({command:e.command}),await R(e.path,JSON.stringify(n,null,2)))}else if(t==="claude"){if(!await l(e.path)){await R(e.path,JSON.stringify({hooks:{PostToolUse:[{matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}]}},null,2));return}let o=await Ie(e.path,"utf-8"),n=JSON.parse(o);n.hooks||(n.hooks={}),n.hooks.PostToolUse||(n.hooks.PostToolUse=[]),n.hooks.PostToolUse.some(a=>a.hooks?.some(c=>c.command.includes("ultracite")))||(n.hooks.PostToolUse.push({matcher:"Edit|Write",hooks:[{type:"command",command:e.command}]}),await R(e.path,JSON.stringify(n,null,2)))}}}};m();import{spawnSync as Lt}from"child_process";import{mkdir as Ht,readFile as Wt,writeFile as Je}from"fs/promises";import zt from"deepmerge";import{parse as Bt}from"jsonc-parser";var ce={"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 G="./.vscode/settings.json",U={exists:()=>l(G),create:async()=>{await Ht(".vscode",{recursive:!0}),await Je(G,JSON.stringify(ce,null,2))},update:async()=>{let t=await Wt(G,"utf-8"),s=Bt(t)||{},o=zt(s,ce);await Je(G,JSON.stringify(o,null,2))},extension:()=>Lt("code --install-extension biomejs.biome",{stdio:"inherit",shell:!0})};m();import{mkdir as Gt,readFile as Vt,writeFile as _e}from"fs/promises";import Yt from"deepmerge";import{parse as Kt}from"jsonc-parser";var le={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 V="./.zed/settings.json",Y={exists:()=>l(V),create:async()=>{await Gt(".zed",{recursive:!0}),await _e(V,JSON.stringify(le,null,2))},update:async()=>{let t=await Vt(V,"utf-8"),s=Kt(t)||{},o=Yt(s,le);await _e(V,JSON.stringify(o,null,2))}};fe();pe();ue();import{readFile as ks,writeFile as bs}from"fs/promises";import xs from"deepmerge";import{glob as vs}from"glob";import{parse as Cs}from"jsonc-parser";var js={compilerOptions:{strictNullChecks:!0}},Xe=async()=>{try{return await vs("**/tsconfig*.json",{ignore:["**/node_modules/**","**/dist/**","**/build/**","**/.next/**"],absolute:!1})}catch{return[]}},Ps=async t=>{try{let e=await ks(t,"utf-8"),o=Cs(e)||{},n=xs(o,js);await bs(t,JSON.stringify(n,null,2))}catch(e){console.warn(`Failed to update ${t}:`,e)}},ye={exists:async()=>(await Xe()).length>0,update:async()=>{let t=await Xe();if(t.length===0){console.warn("No tsconfig.json files found in the project");return}await Promise.all(t.map(e=>Ps(e)))}};m();var Qe=b.devDependencies["@biomejs/biome"],Ze=b.version,Es=async(t,e=!0,s=!1)=>{let o=u();s||o.start("Installing dependencies...");let n=[`ultracite@${Ze}`,`@biomejs/biome@${Qe}`];if(e)for(let i of n)await Rs(i,{packageManager:t,workspace:await h(),silent:s});else await x({devDependencies:{"@biomejs/biome":Qe,ultracite:Ze}});s||o.stop("Dependencies installed.")},Fs=async(t=!1)=>{let e=u();if(t||e.start("Checking for tsconfig.json files..."),await ye.exists()){t||e.message("Found tsconfig.json files, updating with strictNullChecks..."),await ye.update(),t||e.stop("tsconfig.json files updated.");return}t||e.stop("No tsconfig.json files found, skipping.")},$s=async(t=!1)=>{let e=u();if(t||e.start("Checking for .vscode/settings.json..."),await U.exists()){t||e.message("settings.json found, updating..."),await U.update(),t||e.stop("settings.json updated.");return}t||e.message("settings.json not found, creating..."),await U.create(),t||(e.message("settings.json created."),e.message("Installing Biome extension..."));try{U.extension(),t||e.stop("settings.json created.")}catch(s){t||e.stop(`Failed to install Biome extension (${s}), but continuing...`)}},Ns=async(t=!1)=>{let e=u();if(t||e.start("Checking for .zed/settings.json..."),await Y.exists()){t||e.message("settings.json found, updating..."),await Y.update(),t||e.stop("settings.json updated.");return}t||e.message("settings.json not found, creating..."),await Y.create(),t||e.message("settings.json created. Install the Biome extension: https://biomejs.dev/reference/zed/")},Os=async(t,e=!1)=>{let s=u();if(e||s.start("Checking for Biome configuration..."),await B.exists()){e||s.message("Biome configuration found, updating..."),await B.update({frameworks:t}),e||s.stop("Biome configuration updated.");return}e||s.message("Biome configuration not found, creating..."),await B.create({frameworks:t}),e||s.stop("Biome configuration created.")},Ds=async(t,e=!0,s=!1)=>{let o=u();if(s||(o.start("Initializing pre-commit hooks..."),o.message("Installing Husky...")),e?await v.install(t):await x({devDependencies:{husky:"latest"},scripts:{prepare:"husky"}}),s||o.message("Initializing Husky..."),v.init(t),await v.exists()){s||o.message("Pre-commit hook found, updating..."),await v.update(t),s||o.stop("Pre-commit hook updated.");return}s||o.message("Pre-commit hook not found, creating..."),await v.create(t),s||o.stop("Pre-commit hook created.")},Ts=async(t,e=!0,s=!1)=>{let o=u();if(s||(o.start("Initializing lefthook..."),o.message("Installing lefthook...")),e?await A.install(t):await x({devDependencies:{lefthook:"latest"}}),await A.exists()){s||o.message("lefthook.yml found, updating..."),await A.update(t),s||o.stop("lefthook.yml updated.");return}s||o.message("lefthook.yml not found, creating..."),await A.create(t),s||o.stop("lefthook.yml created.")},Ms=async(t,e=!0,s=!1)=>{let o=u();if(s||(o.start("Initializing lint-staged..."),o.message("Installing lint-staged...")),e?await E.install(t):await x({devDependencies:{"lint-staged":"latest"}}),await E.exists()){s||o.message("lint-staged found, updating..."),await E.update(t),s||o.stop("lint-staged updated.");return}s||o.message("lint-staged not found, creating..."),await E.create(t),s||o.stop("lint-staged created.")},Is=async(t,e,s=!1)=>{let o=u();s||o.start(`Checking for ${e}...`);let n=De(t);if(await n.exists()){s||o.message(`${e} found, updating...`),await n.update(),s||o.stop(`${e} updated.`);return}s||o.message(`${e} not found, creating...`),await n.create(),s||o.stop(`${e} created.`)},Us=async(t,e,s=!1)=>{let o=u();s||o.start(`Checking for ${e} hooks...`);let n=Ue(t);if(await n.exists()){s||o.message(`${e} hooks found, updating...`),await n.update(),s||o.stop(`${e} hooks updated.`);return}s||o.message(`${e} hooks not found, creating...`),await n.create(),s||o.stop(`${e} hooks created.`)},Js=async(t,e=!1)=>{let s=u();e||s.start("Removing Prettier dependencies and configuration...");try{let o=await ie.remove(t);e||(o.packagesRemoved.length>0&&s.message(`Removed Prettier packages: ${o.packagesRemoved.join(", ")}`),o.filesRemoved.length>0&&s.message(`Removed config files: ${o.filesRemoved.join(", ")}`),o.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("Prettier removed successfully."))}catch{e||s.stop("Failed to remove Prettier completely, but continuing...")}},_s=async(t,e=!1)=>{let s=u();e||s.start("Removing ESLint dependencies and configuration...");try{let o=await ne.remove(t);e||(o.packagesRemoved.length>0&&s.message(`Removed ESLint packages: ${o.packagesRemoved.join(", ")}`),o.filesRemoved.length>0&&s.message(`Removed config files: ${o.filesRemoved.join(", ")}`),o.vsCodeCleaned&&s.message("Cleaned VS Code settings"),s.stop("ESLint removed successfully."))}catch{e||s.stop("Failed to remove ESLint completely, but continuing...")}},qe=async t=>{let e=t??{},s=e.quiet??!1;s||Ss(xe);try{let{pm:o}=e;if(!o){let d=await As(k.cwd());if(!d)throw new Error("No package manager specified or detected");if(!s&&d.warnings)for(let p of d.warnings)Q.warn(p);s||Q.info(`Detected lockfile, using ${d.name}`),o=d.name}let n=e.migrate?.includes("prettier"),i=e.migrate?.includes("eslint");if(!s&&(n===void 0||i===void 0)){let d=[];if(n===void 0&&await ie.hasPrettier()&&d.push({label:"Remove Prettier (dependencies, config files, VS Code settings)",value:"prettier"}),i===void 0&&await ne.hasEsLint()&&d.push({label:"Remove ESLint (dependencies, config files, VS Code settings)",value:"eslint"}),d.length>0){let p=await N({message:"Remove existing formatters/linters (recommended for clean migration)?",options:d,required:!1});$(p)&&(F("Operation cancelled."),k.exit(0)),n===void 0&&(n=p.includes("prettier")),i===void 0&&(i=p.includes("eslint"))}}s&&(n===void 0&&(n=!1),i===void 0&&(i=!1));let a=e.frameworks;if(a===void 0)if(s||e.pm||e.editors||e.agents||e.hooks||e.integrations!==void 0||e.migrate!==void 0)a=[];else{let p=await N({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});$(p)&&(F("Operation cancelled."),k.exit(0)),a=p}let c=e.editors;if(!c)if(s)c=[];else{let d=await N({message:"Which editors do you want to configure (recommended)?",options:[{label:"VSCode / Cursor / Windsurf",value:"vscode"},{label:"Zed",value:"zed"}],required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),c=d}let f=e.agents,g=e.hooks,O={"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"};if(!f)if(s)f=[];else{let d=await N({message:"Which agents do you want to enable (optional)?",options:Object.entries(O).map(([p,Z])=>({value:p,label:Z})),required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),f=d}let we={cursor:"Cursor",claude:"Claude Code"};if(!g)if(s)g=[];else{let d=await N({message:"Which agent hooks do you want to enable (optional)?",options:Object.entries(we).map(([p,Z])=>({value:p,label:Z})),required:!1});$(d)&&(F("Operation cancelled."),k.exit(0)),g=d}let S=e.integrations;if(S===void 0)if(s||e.pm||e.editors||e.agents||e.hooks||e.migrate!==void 0)S=[];else{let p=await N({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});$(p)&&(F("Operation cancelled."),k.exit(0)),S=p}n&&await Js(o,s),i&&await _s(o,s),await Es(o,!e.skipInstall,s),await Fs(s),await Os(a,s),c?.includes("vscode")&&await $s(s),c?.includes("zed")&&await Ns(s);for(let d of f??[])await Is(d,O[d],s);for(let d of g??[])await Us(d,we[d],s);S?.includes("husky")&&await Ds(o,!e.skipInstall,s),S?.includes("lefthook")&&await Ts(o,!e.skipInstall,s),S?.includes("lint-staged")&&await Ms(o,!e.skipInstall,s),s||Q.success("Successfully initialized Ultracite configuration!")}catch(o){let n=o instanceof Error?o.message:"Unknown error";s||Q.error(`Failed to initialize Ultracite configuration: ${n}`),k.exit(1)}};var P=Ls.meta().create(),Ws=P.router({init:P.procedure.meta({description:"Initialize Ultracite in the current directory"}).input(r.object({pm:r.enum(y.packageManagers).optional().describe("Package manager to use"),editors:r.array(r.enum(y.editorConfigs)).optional().describe("Editors to configure"),agents:r.array(r.enum(y.agents)).optional().describe("Agents to enable"),hooks:r.array(r.enum(y.hooks)).optional().describe("Hooks to enable"),frameworks:r.array(r.enum(y.frameworks)).optional().describe("Frameworks being used"),integrations:r.array(r.enum(y.integrations)).optional().describe("Additional integrations to enable"),migrate:r.array(r.enum(y.migrations)).optional().describe("Migration tools to remove (e.g., eslint, prettier). Removes dependencies, config files, and editor settings."),skipInstall:r.boolean().default(!1).describe("Skip installing dependencies"),quiet:r.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:t})=>{await qe(t)}),check:P.procedure.meta({description:"Run Biome linter without fixing files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to lint"),r.object({"diagnostic-level":r.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(({input:t})=>{oe(t)}),fix:P.procedure.meta({description:"Run Biome linter and fixes files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to format"),r.object({unsafe:r.boolean().optional().describe("apply unsafe fixes")})])).mutation(({input:t})=>{let[e,s]=t;ae(e,{unsafe:s.unsafe})}),doctor:P.procedure.meta({description:"Verify your Ultracite setup and check for issues"}).query(async()=>{await Fe()}),lint:P.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'check' instead - Run Biome linter without fixing files"}).input(r.array(r.string()).optional().default([]).describe("specific files to lint")).query(({input:t})=>{console.warn("\u26A0\uFE0F Warning: 'lint' command is deprecated. Please use 'check' instead."),oe([t,{}])}),format:P.procedure.meta({description:"\u26A0\uFE0F DEPRECATED: Use 'fix' instead - Run Biome linter and fixes files"}).input(r.tuple([r.array(r.string()).optional().default([]).describe("specific files to format"),r.object({unsafe:r.boolean().optional().describe("apply unsafe fixes")})])).mutation(({input:t})=>{let[e,s]=t;console.warn("\u26A0\uFE0F Warning: 'format' command is deprecated. Please use 'fix' instead."),ae(e,{unsafe:s.unsafe})})}),zs=Hs({router:Ws,name:b.name,version:b.version,description:b.description});process.env.TEST||zs.run();export{Ws as router};
|
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.3.
|
|
4
|
+
"version": "6.3.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ultracite": "dist/index.js"
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"url": "git+https://github.com/haydenbleasel/ultracite.git"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@biomejs/biome": "2.3.
|
|
44
|
+
"@biomejs/biome": "2.3.7",
|
|
45
45
|
"@types/node": "^24.10.1",
|
|
46
46
|
"tsup": "^8.5.1",
|
|
47
47
|
"turbo": "^2.6.1"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@clack/prompts": "^0.11.0",
|
|
51
51
|
"@trpc/server": "^11.7.1",
|
|
52
52
|
"deepmerge": "^4.3.1",
|
|
53
|
-
"glob": "^
|
|
53
|
+
"glob": "^12.0.0",
|
|
54
54
|
"jsonc-parser": "^3.3.1",
|
|
55
55
|
"nypm": "^0.6.2",
|
|
56
56
|
"trpc-cli": "^0.12.0",
|