eslint-plugin-oxfmt 0.0.15 → 0.1.1

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/README.md CHANGED
@@ -108,12 +108,12 @@ export default [
108
108
  vueIndentScriptAndStyle: false,
109
109
 
110
110
  // Experiments
111
- experimentalSortImports: {
111
+ sortImports: {
112
112
  order: 'asc',
113
113
  newlinesBetween: true,
114
114
  },
115
- experimentalSortPackageJson: { sortScripts: true },
116
- experimentalTailwindcss: {
115
+ sortPackageJson: { sortScripts: true },
116
+ sortTailwindcss: {
117
117
  attributes: ['class', 'className', ':class'],
118
118
  functions: ['clsx', 'cn'],
119
119
  preserveDuplicates: false,
@@ -201,18 +201,18 @@ All options are optional and default to sensible values.
201
201
 
202
202
  ### Advanced Options
203
203
 
204
- | Option | Type | Default | Description |
205
- | ----------------------------- | ------------------- | -------- | ---------------------------------------------------------------------------- |
206
- | `experimentalSortImports` | `object` | disabled | Experimental import sorting configuration |
207
- | `experimentalSortPackageJson` | `boolean \| object` | `true` | Experimental package.json sorting (object form: `{ sortScripts?: boolean }`) |
208
- | `experimentalTailwindcss` | `object` | disabled | Experimental Tailwind CSS class sorting (enable with `{}` for defaults) |
204
+ | Option | Type | Default | Description |
205
+ | ----------------- | ------------------- | -------- | ---------------------------------------------------------------------------- |
206
+ | `sortImports` | `object` | disabled | Experimental import sorting configuration |
207
+ | `sortPackageJson` | `boolean \| object` | `true` | Experimental package.json sorting (object form: `{ sortScripts?: boolean }`) |
208
+ | `sortTailwindcss` | `object` | disabled | Experimental Tailwind CSS class sorting (enable with `{}` for defaults) |
209
209
 
210
- #### Import sorting (`experimentalSortImports`)
210
+ #### Import sorting (`sortImports`)
211
211
 
212
212
  Available keys:
213
213
 
214
- - `customGroups`: Ordered custom group definitions `{ elementNamePattern?: string[]; groupName?: string }[]`
215
- - `groups`: Ordered group list; supports nested arrays to merge groups (see perfectionist docs)
214
+ - `customGroups`: Ordered custom group definitions `{ elementNamePattern?: string[]; groupName?: string; modifiers?: string[]; selector?: string }[]`
215
+ - `groups`: Ordered group list; supports nested arrays and boundary markers like `{ newlinesBetween: boolean }`
216
216
  - `ignoreCase`: Ignore case when sorting (default `true`)
217
217
  - `internalPattern`: Glob patterns for internal imports
218
218
  - `newlinesBetween`: Insert blank lines between groups (default `true`)
@@ -221,7 +221,7 @@ Available keys:
221
221
  - `partitionByNewline`: Split groups by blank lines (default `false`)
222
222
  - `sortSideEffects`: Sort side-effect imports (default `false`)
223
223
 
224
- #### package.json sorting (`experimentalSortPackageJson`)
224
+ #### package.json sorting (`sortPackageJson`)
225
225
 
226
226
  - Boolean to toggle (default `true`).
227
227
  - Object form: `{ sortScripts?: boolean }` (default `false`).
@@ -242,7 +242,7 @@ export default [
242
242
  'oxfmt/oxfmt': [
243
243
  'error',
244
244
  {
245
- experimentalTailwindcss: {},
245
+ sortTailwindcss: {},
246
246
  },
247
247
  ],
248
248
  },
@@ -254,7 +254,7 @@ You can pass the Tailwind plugin options to control which attributes/functions a
254
254
 
255
255
  ```json
256
256
  {
257
- "experimentalTailwindcss": {
257
+ "sortTailwindcss": {
258
258
  "attributes": ["class", "className", ":class"],
259
259
  "config": "./tailwind.config.js",
260
260
  "functions": ["clsx", "cn"],
@@ -294,7 +294,7 @@ export default [
294
294
  files: ['packages/**/src/**/*.{ts,tsx}'],
295
295
  options: {
296
296
  printWidth: 90,
297
- experimentalSortImports: {
297
+ sortImports: {
298
298
  newlinesBetween: true,
299
299
  },
300
300
  },
@@ -337,7 +337,7 @@ Add this to your `.vscode/settings.json`:
337
337
  }
338
338
  ```
339
339
 
340
- ## Suppported languages
340
+ ## Supported languages
341
341
 
342
342
  - Check [Oxfmt - Supported languages](https://oxc.rs/docs/guide/usage/formatter.html#supported-languages)
343
343
 
package/dist/index.mjs CHANGED
@@ -67,7 +67,7 @@ const configs = { recommended };
67
67
  //#endregion
68
68
  //#region package.json
69
69
  var name = "eslint-plugin-oxfmt";
70
- var version = "0.0.15";
70
+ var version = "0.1.1";
71
71
 
72
72
  //#endregion
73
73
  //#region src/meta.ts
@@ -183,7 +183,72 @@ const oxfmtOptionsSchema = {
183
183
  ],
184
184
  type: "string"
185
185
  },
186
- experimentalSortImports: {
186
+ htmlWhitespaceSensitivity: {
187
+ description: `Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- (Default: "css")`,
188
+ enum: [
189
+ "css",
190
+ "ignore",
191
+ "strict"
192
+ ],
193
+ type: "string"
194
+ },
195
+ ignorePatterns: {
196
+ description: `Ignore files matching these glob patterns. Current working directory is used as the root.`,
197
+ type: "array",
198
+ items: { type: "string" }
199
+ },
200
+ insertFinalNewline: {
201
+ description: `Whether to insert a final newline at the end of the file. (Default: true)`,
202
+ type: "boolean"
203
+ },
204
+ jsxSingleQuote: {
205
+ description: `Use single quotes instead of double quotes in JSX. (Default: false)`,
206
+ type: "boolean"
207
+ },
208
+ objectWrap: {
209
+ description: `How to wrap object literals when they could fit on one line or span multiple lines. (Default: "preserve")\nNOTE: In addition to Prettier's "preserve" and "collapse", we also support "always".`,
210
+ enum: [
211
+ "preserve",
212
+ "collapse",
213
+ "always"
214
+ ],
215
+ type: "string"
216
+ },
217
+ printWidth: {
218
+ description: `The line length that the printer will wrap on. (Default: 100)`,
219
+ type: "integer"
220
+ },
221
+ proseWrap: {
222
+ description: `How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to "always".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use "never".\n\n- (Default: "preserve")`,
223
+ enum: [
224
+ "always",
225
+ "never",
226
+ "preserve"
227
+ ],
228
+ type: "string"
229
+ },
230
+ quoteProps: {
231
+ description: `Change when properties in objects are quoted. (Default: "as-needed")`,
232
+ enum: [
233
+ "as-needed",
234
+ "consistent",
235
+ "preserve"
236
+ ],
237
+ type: "string"
238
+ },
239
+ semi: {
240
+ description: `Print semicolons at the ends of statements. (Default: true)`,
241
+ type: "boolean"
242
+ },
243
+ singleAttributePerLine: {
244
+ description: `Put each attribute on a new line in JSX. (Default: false)`,
245
+ type: "boolean"
246
+ },
247
+ singleQuote: {
248
+ description: `Use single quotes instead of double quotes. (Default: false)`,
249
+ type: "boolean"
250
+ },
251
+ sortImports: {
187
252
  additionalProperties: false,
188
253
  description: `Experimental: Sort import statements. Disabled by default.`,
189
254
  type: "object",
@@ -203,17 +268,38 @@ const oxfmtOptionsSchema = {
203
268
  groupName: {
204
269
  description: `Name of the custom group, used in the groups option.`,
205
270
  type: "string"
271
+ },
272
+ modifiers: {
273
+ description: `Modifiers to match the import characteristics.\nAll specified modifiers must be present (AND logic).\n\nPossible values: "side_effect", "type", "value", "default", "wildcard", "named"`,
274
+ type: "array",
275
+ items: { type: "string" }
276
+ },
277
+ selector: {
278
+ description: `Selector to match the import kind.\n\nPossible values: "type", "side_effect_style", "side_effect", "style", "index", "sibling", "parent", "subpath", "internal", "builtin", "external", "import"`,
279
+ type: "string"
206
280
  }
207
281
  }
208
282
  }
209
283
  },
210
284
  groups: {
211
- description: `Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the unknown group if no match is found).\nThe order of items in the groups option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- type — TypeScript type imports.\n- side-effect-style — Side effect style imports.\n- side-effect — Side effect imports.\n- style — Style imports.\n- index — Main file from the current directory.\n- sibling — Modules from the same directory.\n- parent — Modules from the parent directory.\n- subpath — Node.js subpath imports.\n- internal — Your internal modules.\n- builtin — Node.js Built-in Modules.\n- external — External modules installed in the project.\n- import — Any import.\n\nThe list of modifiers is sorted from most to least important:\n- side-effect — Side effect imports.\n- type — TypeScript type imports.\n- value — Value imports.\n- default — Imports containing the default specifier.\n- wildcard — Imports containing the wildcard (* as) specifier.\n- named — Imports containing at least one named specifier.\n- multiline — Imports on multiple lines.\n- singleline — Imports on a single line.\n\nSee also <https://perfectionist.dev/rules/sort-imports#groups> for details.\n\n- (Default: See below\njson\n[\n"type-import",\n["value-builtin", "value-external"],\n"type-internal",\n"value-internal",\n["type-parent", "type-sibling", "type-index"],\n["value-parent", "value-sibling", "value-index"],\n"unknown",\n])`,
285
+ description: `Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the \`unknown\` group if no match is found).\nThe order of items in the \`groups\` option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- \`type\` — TypeScript type imports.\n- \`side_effect_style\` — Side effect style imports.\n- \`side_effect\` — Side effect imports.\n- \`style\` — Style imports.\n- \`index\` — Main file from the current directory.\n- \`sibling\` — Modules from the same directory.\n- \`parent\` — Modules from the parent directory.\n- \`subpath\` — Node.js subpath imports.\n- \`internal\` — Your internal modules.\n- \`builtin\` — Node.js Built-in Modules.\n- \`external\` — External modules installed in the project.\n- \`import\` — Any import.\n\nThe list of modifiers is sorted from most to least important:\n- \`side_effect\` — Side effect imports.\n- \`type\` — TypeScript type imports.\n- \`value\` — Value imports.\n- \`default\` — Imports containing the default specifier.\n- \`wildcard\` — Imports containing the wildcard (\`* as\`) specifier.\n- \`named\` — Imports containing at least one named specifier.\n\n- Default: See below\n\`\`\`json\n[\n\"builtin\",\n\"external\",\n[\"internal\", \"subpath\"],\n[\"parent\", \"sibling\", \"index\"],\n\"style\",\n\"unknown\"\n]\n\`\`\`\n\nAlso, you can override the global \`newlinesBetween\` setting for specific group boundaries\nby including a \`{ \"newlinesBetween\": boolean }\` marker object in the \`groups\` list at the desired position.`,
212
286
  type: "array",
213
- items: { anyOf: [{ type: "string" }, {
214
- type: "array",
215
- items: { type: "string" }
216
- }] }
287
+ items: { anyOf: [
288
+ { type: "string" },
289
+ {
290
+ type: "array",
291
+ items: { type: "string" }
292
+ },
293
+ {
294
+ additionalProperties: false,
295
+ required: ["newlinesBetween"],
296
+ type: "object",
297
+ properties: { newlinesBetween: {
298
+ description: `A marker object for overriding \`newlinesBetween\` at a specific group boundary.`,
299
+ type: "boolean"
300
+ } }
301
+ }
302
+ ] }
217
303
  },
218
304
  ignoreCase: {
219
305
  description: `Ignore case when sorting. (Default: true)`,
@@ -247,7 +333,7 @@ const oxfmtOptionsSchema = {
247
333
  }
248
334
  }
249
335
  },
250
- experimentalSortPackageJson: {
336
+ sortPackageJson: {
251
337
  description: `Experimental: Sort package.json keys. (Default: true)`,
252
338
  oneOf: [{ type: "boolean" }, {
253
339
  additionalProperties: false,
@@ -258,7 +344,7 @@ const oxfmtOptionsSchema = {
258
344
  } }
259
345
  }]
260
346
  },
261
- experimentalTailwindcss: {
347
+ sortTailwindcss: {
262
348
  additionalProperties: false,
263
349
  description: `Experimental: Enable Tailwind CSS class sorting in JSX class/className attributes.\nWhen enabled, class strings will be collected and passed to a callback for sorting.\nPass an object with options from "prettier-plugin-tailwindcss".\n\n- (Default: disabled)`,
264
350
  type: "object",
@@ -291,71 +377,6 @@ const oxfmtOptionsSchema = {
291
377
  }
292
378
  }
293
379
  },
294
- htmlWhitespaceSensitivity: {
295
- description: `Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- (Default: "css")`,
296
- enum: [
297
- "css",
298
- "ignore",
299
- "strict"
300
- ],
301
- type: "string"
302
- },
303
- ignorePatterns: {
304
- description: `Ignore files matching these glob patterns. Current working directory is used as the root.`,
305
- type: "array",
306
- items: { type: "string" }
307
- },
308
- insertFinalNewline: {
309
- description: `Whether to insert a final newline at the end of the file. (Default: true)`,
310
- type: "boolean"
311
- },
312
- jsxSingleQuote: {
313
- description: `Use single quotes instead of double quotes in JSX. (Default: false)`,
314
- type: "boolean"
315
- },
316
- objectWrap: {
317
- description: `How to wrap object literals when they could fit on one line or span multiple lines. (Default: "preserve")\nNOTE: In addition to Prettier's "preserve" and "collapse", we also support "always".`,
318
- enum: [
319
- "preserve",
320
- "collapse",
321
- "always"
322
- ],
323
- type: "string"
324
- },
325
- printWidth: {
326
- description: `The line length that the printer will wrap on. (Default: 100)`,
327
- type: "integer"
328
- },
329
- proseWrap: {
330
- description: `How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to "always".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use "never".\n\n- (Default: "preserve")`,
331
- enum: [
332
- "always",
333
- "never",
334
- "preserve"
335
- ],
336
- type: "string"
337
- },
338
- quoteProps: {
339
- description: `Change when properties in objects are quoted. (Default: "as-needed")`,
340
- enum: [
341
- "as-needed",
342
- "consistent",
343
- "preserve"
344
- ],
345
- type: "string"
346
- },
347
- semi: {
348
- description: `Print semicolons at the ends of statements. (Default: true)`,
349
- type: "boolean"
350
- },
351
- singleAttributePerLine: {
352
- description: `Put each attribute on a new line in JSX. (Default: false)`,
353
- type: "boolean"
354
- },
355
- singleQuote: {
356
- description: `Use single quotes instead of double quotes. (Default: false)`,
357
- type: "boolean"
358
- },
359
380
  tabWidth: {
360
381
  description: `Number of spaces per indentation level. (Default: 2)`,
361
382
  type: "integer"
@@ -435,7 +456,7 @@ let formatViaOxfmt;
435
456
  const oxfmt = {
436
457
  meta: {
437
458
  defaultOptions: [],
438
- fixable: "code",
459
+ fixable: "whitespace",
439
460
  messages,
440
461
  schema: [oxfmtRuleSchema],
441
462
  type: "layout",
@@ -448,7 +469,7 @@ const oxfmt = {
448
469
  create(context) {
449
470
  if (!formatViaOxfmt) formatViaOxfmt = createSyncFn(join(dirWorkers, "oxfmt.mjs"));
450
471
  const sourceText = context.sourceCode.text;
451
- return { Program() {
472
+ return { [context.sourceCode.ast.type || "Program"]() {
452
473
  try {
453
474
  const formatResult = formatViaOxfmt(context.filename, sourceText, {
454
475
  ...context.options?.[0],
@@ -464,10 +485,10 @@ const oxfmt = {
464
485
  end,
465
486
  start
466
487
  },
467
- message: error.message
488
+ message: `Failed to format code: ${error.message}`
468
489
  });
469
490
  } else context.report({
470
- message: error.message,
491
+ message: `Failed to format code: ${error.message}`,
471
492
  loc: {
472
493
  end: {
473
494
  column: 0,
@@ -483,7 +504,7 @@ const oxfmt = {
483
504
  else reportDifferences(context, sourceText, formatResult.code);
484
505
  } catch {
485
506
  context.report({
486
- message: `Failed to format file ${context.filename}`,
507
+ message: `Failed to format file: ${context.filename}`,
487
508
  loc: {
488
509
  end: {
489
510
  column: 0,
@@ -24,16 +24,45 @@ export type OxfmtOxfmt = []|[{
24
24
 
25
25
  endOfLine?: ("lf" | "crlf" | "cr")
26
26
 
27
- experimentalSortImports?: {
27
+ htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
28
+
29
+ ignorePatterns?: string[]
30
+
31
+ insertFinalNewline?: boolean
32
+
33
+ jsxSingleQuote?: boolean
34
+
35
+ objectWrap?: ("preserve" | "collapse" | "always")
36
+
37
+ printWidth?: number
38
+
39
+ proseWrap?: ("always" | "never" | "preserve")
40
+
41
+ quoteProps?: ("as-needed" | "consistent" | "preserve")
42
+
43
+ semi?: boolean
44
+
45
+ singleAttributePerLine?: boolean
46
+
47
+ singleQuote?: boolean
48
+
49
+ sortImports?: {
28
50
 
29
51
  customGroups?: {
30
52
 
31
53
  elementNamePattern?: string[]
32
54
 
33
55
  groupName?: string
56
+
57
+ modifiers?: string[]
58
+
59
+ selector?: string
34
60
  }[]
35
61
 
36
- groups?: (string | string[])[]
62
+ groups?: (string | string[] | {
63
+
64
+ newlinesBetween: boolean
65
+ })[]
37
66
 
38
67
  ignoreCase?: boolean
39
68
 
@@ -50,12 +79,12 @@ export type OxfmtOxfmt = []|[{
50
79
  sortSideEffects?: boolean
51
80
  }
52
81
 
53
- experimentalSortPackageJson?: (boolean | {
82
+ sortPackageJson?: (boolean | {
54
83
 
55
84
  sortScripts?: boolean
56
85
  })
57
86
 
58
- experimentalTailwindcss?: {
87
+ sortTailwindcss?: {
59
88
 
60
89
  attributes?: string[]
61
90
 
@@ -70,28 +99,6 @@ export type OxfmtOxfmt = []|[{
70
99
  stylesheet?: string
71
100
  }
72
101
 
73
- htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
74
-
75
- ignorePatterns?: string[]
76
-
77
- insertFinalNewline?: boolean
78
-
79
- jsxSingleQuote?: boolean
80
-
81
- objectWrap?: ("preserve" | "collapse" | "always")
82
-
83
- printWidth?: number
84
-
85
- proseWrap?: ("always" | "never" | "preserve")
86
-
87
- quoteProps?: ("as-needed" | "consistent" | "preserve")
88
-
89
- semi?: boolean
90
-
91
- singleAttributePerLine?: boolean
92
-
93
- singleQuote?: boolean
94
-
95
102
  tabWidth?: number
96
103
 
97
104
  trailingComma?: ("all" | "es5" | "none")
@@ -122,16 +129,45 @@ export type OxfmtOxfmt = []|[{
122
129
 
123
130
  endOfLine?: ("lf" | "crlf" | "cr")
124
131
 
125
- experimentalSortImports?: {
132
+ htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
133
+
134
+ ignorePatterns?: string[]
135
+
136
+ insertFinalNewline?: boolean
137
+
138
+ jsxSingleQuote?: boolean
139
+
140
+ objectWrap?: ("preserve" | "collapse" | "always")
141
+
142
+ printWidth?: number
143
+
144
+ proseWrap?: ("always" | "never" | "preserve")
145
+
146
+ quoteProps?: ("as-needed" | "consistent" | "preserve")
147
+
148
+ semi?: boolean
149
+
150
+ singleAttributePerLine?: boolean
151
+
152
+ singleQuote?: boolean
153
+
154
+ sortImports?: {
126
155
 
127
156
  customGroups?: {
128
157
 
129
158
  elementNamePattern?: string[]
130
159
 
131
160
  groupName?: string
161
+
162
+ modifiers?: string[]
163
+
164
+ selector?: string
132
165
  }[]
133
166
 
134
- groups?: (string | string[])[]
167
+ groups?: (string | string[] | {
168
+
169
+ newlinesBetween: boolean
170
+ })[]
135
171
 
136
172
  ignoreCase?: boolean
137
173
 
@@ -148,12 +184,12 @@ export type OxfmtOxfmt = []|[{
148
184
  sortSideEffects?: boolean
149
185
  }
150
186
 
151
- experimentalSortPackageJson?: (boolean | {
187
+ sortPackageJson?: (boolean | {
152
188
 
153
189
  sortScripts?: boolean
154
190
  })
155
191
 
156
- experimentalTailwindcss?: {
192
+ sortTailwindcss?: {
157
193
 
158
194
  attributes?: string[]
159
195
 
@@ -168,28 +204,6 @@ export type OxfmtOxfmt = []|[{
168
204
  stylesheet?: string
169
205
  }
170
206
 
171
- htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
172
-
173
- ignorePatterns?: string[]
174
-
175
- insertFinalNewline?: boolean
176
-
177
- jsxSingleQuote?: boolean
178
-
179
- objectWrap?: ("preserve" | "collapse" | "always")
180
-
181
- printWidth?: number
182
-
183
- proseWrap?: ("always" | "never" | "preserve")
184
-
185
- quoteProps?: ("as-needed" | "consistent" | "preserve")
186
-
187
- semi?: boolean
188
-
189
- singleAttributePerLine?: boolean
190
-
191
- singleQuote?: boolean
192
-
193
207
  tabWidth?: number
194
208
 
195
209
  trailingComma?: ("all" | "es5" | "none")
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eslint-plugin-oxfmt",
3
3
  "type": "module",
4
- "version": "0.0.15",
4
+ "version": "0.1.1",
5
5
  "description": "An ESLint plugin for formatting code with oxfmt.",
6
6
  "keywords": [
7
7
  "eslint",
@@ -43,8 +43,8 @@
43
43
  },
44
44
  "sideEffects": false,
45
45
  "peerDependencies": {
46
- "eslint": "^9.5.0",
47
- "oxfmt": "0.x"
46
+ "eslint": "^9.5.0 || ^10.0.0",
47
+ "oxfmt": ">=0.35.0"
48
48
  },
49
49
  "dependencies": {
50
50
  "generate-differences": "^0.1.1",
@@ -53,26 +53,26 @@
53
53
  "synckit": "^0.11.12"
54
54
  },
55
55
  "devDependencies": {
56
- "@ntnyq/eslint-config": "^6.0.0-beta.8",
56
+ "@ntnyq/eslint-config": "^6.0.0-beta.9",
57
57
  "@types/json-schema": "^7.0.15",
58
- "@types/node": "^25.2.3",
59
- "@typescript/native-preview": "^7.0.0-dev.20260212.1",
58
+ "@types/node": "^25.3.0",
59
+ "@typescript/native-preview": "^7.0.0-dev.20260224.1",
60
60
  "bumpp": "^10.4.1",
61
- "eslint": "^9.39.2",
61
+ "eslint": "^10.0.2",
62
62
  "eslint-parser-plain": "^0.1.1",
63
- "eslint-typegen": "^2.3.0",
63
+ "eslint-typegen": "^2.3.1",
64
64
  "eslint-vitest-rule-tester": "^3.1.0",
65
65
  "husky": "^9.1.7",
66
66
  "nano-staged": "^0.9.0",
67
67
  "npm-run-all2": "^8.0.4",
68
- "oxfmt": "^0.32.0",
68
+ "oxfmt": "^0.35.0",
69
69
  "show-invisibles": "^0.0.2",
70
70
  "tinyglobby": "^0.2.15",
71
71
  "tsdown": "^0.20.3",
72
72
  "tsx": "^4.21.0",
73
73
  "typescript": "^5.9.3",
74
74
  "vitest": "^4.0.18",
75
- "eslint-plugin-oxfmt": "0.0.15"
75
+ "eslint-plugin-oxfmt": "0.1.1"
76
76
  },
77
77
  "engines": {
78
78
  "node": "^20.19.0 || >=22.12.0"