@cluerise/tools 5.3.3 → 5.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.
@@ -22,10 +22,10 @@ const commitlintConfig: UserConfig = {
22
22
  'type-enum': [
23
23
  RuleConfigSeverity.Error,
24
24
  'always',
25
- ['chore', 'deps', 'docs', 'feat', 'fix', 'perf', 'refactor', 'release', 'revert', 'style', 'test']
25
+ ['chore', 'deps', 'docs', 'feat', 'fix', 'perf', 'refactor', 'release', 'revert', 'style', 'test'],
26
26
  ],
27
- 'type-empty': [RuleConfigSeverity.Error, 'never']
28
- }
27
+ 'type-empty': [RuleConfigSeverity.Error, 'never'],
28
+ },
29
29
  };
30
30
 
31
31
  export default commitlintConfig;
@@ -15,7 +15,7 @@ export default defineConfig([
15
15
  // JavaScript
16
16
  {
17
17
  ...eslintJs.configs.recommended,
18
- name: 'cluerise: eslint/js'
18
+ name: 'cluerise: eslint/js',
19
19
  },
20
20
  {
21
21
  name: 'cluerise: eslint/js/rules',
@@ -25,33 +25,33 @@ export default defineConfig([
25
25
  'no-undef-init': 'error',
26
26
  'no-unused-vars': 'off',
27
27
  'object-shorthand': 'error',
28
- 'sort-imports': 'off'
29
- }
28
+ 'sort-imports': 'off',
29
+ },
30
30
  },
31
31
  // TypeScript
32
32
  ...typescriptEslint.configs.recommendedTypeChecked.map((config) => ({
33
33
  ...config,
34
- name: `cluerise: ${config.name ?? 'typescript-eslint'}`
34
+ name: `cluerise: ${config.name ?? 'typescript-eslint'}`,
35
35
  })),
36
36
  {
37
37
  name: 'cluerise: typescript-eslint/language-options',
38
38
  languageOptions: {
39
39
  globals: {
40
40
  ...globals.browser,
41
- ...globals.node
41
+ ...globals.node,
42
42
  },
43
43
  parserOptions: {
44
44
  projectService: {
45
- allowDefaultProject: ['*.md/*']
45
+ allowDefaultProject: ['*.md/*'],
46
46
  },
47
- tsconfigRootDir: import.meta.dirname
48
- }
49
- }
47
+ tsconfigRootDir: import.meta.dirname,
48
+ },
49
+ },
50
50
  },
51
51
  {
52
52
  name: 'cluerise: typescript-eslint/disable-type-checked',
53
53
  files: ['**/*.html', '**/*.js', '**/*.cjs', '**/*.json', '**/*.jsonc', '**/*.yaml'],
54
- extends: [typescriptEslint.configs.disableTypeChecked]
54
+ extends: [typescriptEslint.configs.disableTypeChecked],
55
55
  },
56
56
  {
57
57
  name: 'cluerise: typescript-eslint/rules',
@@ -68,24 +68,25 @@ export default defineConfig([
68
68
  caughtErrorsIgnorePattern: '^_',
69
69
  destructuredArrayIgnorePattern: '^_',
70
70
  ignoreRestSiblings: true,
71
- varsIgnorePattern: '^_'
72
- }
73
- ]
74
- }
71
+ varsIgnorePattern: '^_',
72
+ },
73
+ ],
74
+ '@typescript-eslint/require-await': 'off',
75
+ },
75
76
  },
76
77
  {
77
78
  name: 'cluerise: typescript-eslint/rules/ts',
78
79
  files: ['**/*.{ts,tsx}'],
79
80
  rules: {
80
- '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }]
81
- }
81
+ '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }],
82
+ },
82
83
  },
83
84
  {
84
85
  name: 'cluerise: typescript-eslint/rules/tests',
85
86
  files: ['**/*.test.{ts,tsx}'],
86
87
  rules: {
87
- '@typescript-eslint/no-unsafe-assignment': 'off'
88
- }
88
+ '@typescript-eslint/no-unsafe-assignment': 'off',
89
+ },
89
90
  },
90
91
  // JSON
91
92
  {
@@ -93,14 +94,14 @@ export default defineConfig([
93
94
  files: ['**/*.json'],
94
95
  plugins: { json: eslintJson },
95
96
  language: 'json/json',
96
- extends: ['json/recommended']
97
+ extends: ['json/recommended'],
97
98
  },
98
99
  {
99
100
  name: 'cluerise: eslint/jsonc',
100
101
  files: ['**/*.jsonc'],
101
102
  plugins: { json: eslintJson },
102
103
  language: 'json/jsonc',
103
- extends: ['json/recommended']
104
+ extends: ['json/recommended'],
104
105
  },
105
106
  // Markdown
106
107
  {
@@ -108,26 +109,40 @@ export default defineConfig([
108
109
  files: ['**/*.md'],
109
110
  plugins: { markdown: eslintMarkdown },
110
111
  processor: 'markdown/markdown',
111
- extends: ['markdown/recommended']
112
+ extends: ['markdown/recommended'],
112
113
  },
113
114
  // YAML
114
115
  ...eslintPluginYml.configs['flat/recommended'].map((config) => ({
115
116
  ...config,
116
- name: `cluerise: ${config.name ?? 'eslint/yaml'}`
117
+ name: `cluerise: ${config.name ?? 'eslint/yaml'}`,
117
118
  })),
118
119
  {
119
120
  name: 'cluerise: eslint/yaml/rules',
120
121
  rules: {
121
122
  'yml/no-empty-mapping-value': 'off',
122
- 'yml/quotes': ['error', { prefer: 'single' }]
123
- }
123
+ 'yml/quotes': ['error', { prefer: 'single' }],
124
+ },
124
125
  },
125
126
  // Import
126
127
  {
127
128
  name: 'cluerise: eslint/import/js',
128
- files: ['**/*.js', '**/*.cjs'],
129
+ files: ['**/*.{js,cjs}'],
129
130
  extends: [eslintPluginImport.flatConfigs.recommended],
130
131
  rules: {
132
+ 'import/extensions': [
133
+ 'error',
134
+ 'ignorePackages',
135
+ {
136
+ checkTypeImports: true,
137
+ pattern: { js: 'always', jsx: 'always', ts: 'always', tsx: 'always' },
138
+ pathGroupOverrides: [
139
+ {
140
+ pattern: ':/*',
141
+ action: 'ignore',
142
+ },
143
+ ],
144
+ },
145
+ ],
131
146
  'import/first': 'error',
132
147
  'import/namespace': 'off',
133
148
  'import/newline-after-import': 'error',
@@ -137,14 +152,29 @@ export default defineConfig([
137
152
  'import/no-duplicates': 'error',
138
153
  'import/no-mutable-exports': 'error',
139
154
  'import/no-unassigned-import': ['error', { allow: ['reset-css'] }],
140
- 'import/order': 'off'
141
- }
155
+ 'import/order': 'off',
156
+ },
142
157
  },
143
158
  {
144
159
  name: 'cluerise: eslint/import/ts',
145
160
  files: ['**/*.{ts,tsx}'],
146
161
  extends: [eslintPluginImport.flatConfigs.recommended, eslintPluginImport.flatConfigs.typescript],
147
162
  rules: {
163
+ 'import/extensions': [
164
+ 'error',
165
+ 'ignorePackages',
166
+ {
167
+ checkTypeImports: true,
168
+ pattern: { js: 'always', jsx: 'always', ts: 'always', tsx: 'always' },
169
+ pathGroupOverrides: [
170
+ {
171
+ pattern: ':/*',
172
+ action: 'ignore',
173
+ },
174
+ ],
175
+ },
176
+ ],
177
+ 'import/export': 'off',
148
178
  'import/first': 'error',
149
179
  'import/namespace': 'off',
150
180
  'import/newline-after-import': 'error',
@@ -155,76 +185,76 @@ export default defineConfig([
155
185
  'import/no-mutable-exports': 'error',
156
186
  'import/no-unassigned-import': ['error', { allow: ['reset-css'] }],
157
187
  'import/no-unresolved': ['error', { ignore: ['cloudflare:test', 'cloudflare:workers', 'cloudflare:workflows'] }],
158
- 'import/order': 'off'
159
- }
188
+ 'import/order': 'off',
189
+ },
160
190
  },
161
191
  {
162
192
  name: 'cluerise: eslint/import/rules/config.js,cjs',
163
193
  files: ['**/*.config.{js,cjs}'],
164
194
  rules: {
165
195
  '@typescript-eslint/no-require-imports': 'off',
166
- 'import/no-commonjs': 'off'
167
- }
196
+ 'import/no-commonjs': 'off',
197
+ },
168
198
  },
169
199
  {
170
200
  name: 'cluerise: eslint/import/rules/config.js,cjs,ts',
171
201
  files: ['**/*.config.{js,cjs,ts}'],
172
202
  rules: {
173
- 'import/no-default-export': 'off'
174
- }
203
+ 'import/no-default-export': 'off',
204
+ },
175
205
  },
176
206
  {
177
207
  name: 'cluerise: eslint/import/rules/setup.js,cjs',
178
208
  files: ['**/*.setup.{js,cjs}'],
179
209
  rules: {
180
210
  '@typescript-eslint/no-require-imports': 'off',
181
- 'import/no-commonjs': 'off'
182
- }
211
+ 'import/no-commonjs': 'off',
212
+ },
183
213
  },
184
214
  {
185
215
  name: 'cluerise: eslint/import/rules/setup.js,cjs,ts',
186
216
  files: ['**/*.setup.{js,cjs,ts}'],
187
217
  rules: {
188
- 'import/no-default-export': 'off'
189
- }
218
+ 'import/no-default-export': 'off',
219
+ },
190
220
  },
191
221
  {
192
222
  name: 'cluerise: eslint/import/rules/routes',
193
- files: ['**/*-route.tsx'],
223
+ files: ['**/*-route-content.tsx'],
194
224
  rules: {
195
- 'import/no-default-export': 'off'
196
- }
225
+ 'import/no-default-export': 'off',
226
+ },
197
227
  },
198
228
  {
199
229
  name: 'cluerise: eslint/import/rules/workers',
200
230
  files: ['**/src/index.{ts,tsx}'],
201
231
  rules: {
202
- 'import/no-default-export': 'off'
203
- }
232
+ 'import/no-default-export': 'off',
233
+ },
204
234
  },
205
235
  {
206
236
  name: 'cluerise: settings/eslint/import',
207
237
  settings: {
208
238
  'import/resolver': {
209
- typescript: {}
210
- }
211
- }
239
+ typescript: {},
240
+ },
241
+ },
212
242
  },
213
243
  // Simple Import Sort
214
244
  {
215
245
  name: 'cluerise: eslint/simple-import-sort',
216
246
  plugins: {
217
- 'simple-import-sort': eslintPluginSimpleImportSort
247
+ 'simple-import-sort': eslintPluginSimpleImportSort,
218
248
  },
219
249
  rules: {
220
250
  'simple-import-sort/exports': 'error',
221
- 'simple-import-sort/imports': 'error'
222
- }
251
+ 'simple-import-sort/imports': 'error',
252
+ },
223
253
  },
224
254
  // Unicorn
225
255
  {
226
256
  ...eslintPluginUnicorn.configs.recommended,
227
- name: 'cluerise: eslint/unicorn'
257
+ name: 'cluerise: eslint/unicorn',
228
258
  },
229
259
  {
230
260
  name: 'cluerise: eslint/unicorn/rules',
@@ -234,8 +264,8 @@ export default defineConfig([
234
264
  'error',
235
265
  {
236
266
  case: 'kebabCase',
237
- ignore: [String.raw`\.md$`]
238
- }
267
+ ignore: [String.raw`\.md$`],
268
+ },
239
269
  ],
240
270
  'unicorn/no-array-reduce': 'off',
241
271
  'unicorn/no-null': 'off',
@@ -261,18 +291,18 @@ export default defineConfig([
261
291
  refs: false,
262
292
  rel: false,
263
293
  temp: false,
264
- utils: false
265
- }
266
- }
294
+ utils: false,
295
+ },
296
+ },
267
297
  ],
268
- 'unicorn/switch-case-braces': ['error', 'avoid']
269
- }
298
+ 'unicorn/switch-case-braces': ['error', 'avoid'],
299
+ },
270
300
  },
271
301
  // HTML
272
302
  {
273
303
  ...eslintPluginHtml.configs['flat/recommended'],
274
304
  name: 'cluerise: html-eslint',
275
- files: ['**/*.html']
305
+ files: ['**/*.html'],
276
306
  },
277
307
  {
278
308
  name: 'cluerise: html-eslint/rules',
@@ -281,8 +311,8 @@ export default defineConfig([
281
311
  '@html-eslint/indent': ['error', 2],
282
312
  '@html-eslint/no-extra-spacing-attrs': ['error', { enforceBeforeSelfClose: true }],
283
313
  '@html-eslint/require-closing-tags': ['error', { selfClosing: 'always' }],
284
- '@html-eslint/require-title': 'off'
285
- }
314
+ '@html-eslint/require-title': 'off',
315
+ },
286
316
  },
287
317
  // Ignore
288
318
  {
@@ -387,12 +417,12 @@ export default defineConfig([
387
417
  '**/*.txt',
388
418
 
389
419
  // XML
390
- '**/*.xml'
391
- ]
420
+ '**/*.xml',
421
+ ],
392
422
  },
393
423
  // Prettier
394
424
  {
395
425
  ...eslintPluginPrettier,
396
- name: 'cluerise: eslint/prettier'
397
- }
426
+ name: 'cluerise: eslint/prettier',
427
+ },
398
428
  ]);
@@ -58,7 +58,7 @@ export default {
58
58
  const relativeFilenames = mapToRelative(filenames, Path.dirname(configPath));
59
59
  const tempConfig = {
60
60
  extends: './tsconfig.json',
61
- files: relativeFilenames
61
+ files: relativeFilenames,
62
62
  };
63
63
 
64
64
  // eslint-disable-next-line no-restricted-globals
@@ -67,5 +67,5 @@ export default {
67
67
  }
68
68
 
69
69
  return [...fileGroups.keys()].map((configPath) => `tsc -p ${Path.relative('.', configPath)}`);
70
- }
70
+ },
71
71
  };
@@ -1,14 +1,19 @@
1
1
  export default {
2
2
  printWidth: 120,
3
3
  singleQuote: true,
4
- trailingComma: 'none',
5
4
  plugins: ['prettier-plugin-sh'],
6
5
  overrides: [
7
6
  {
8
7
  files: '*.html',
9
8
  options: {
10
- parser: 'html'
11
- }
12
- }
13
- ]
9
+ parser: 'html',
10
+ },
11
+ },
12
+ {
13
+ files: ['*.json', '*.jsonc'],
14
+ options: {
15
+ trailingComma: 'none',
16
+ },
17
+ },
18
+ ],
14
19
  };
@@ -1,7 +1,7 @@
1
1
  const Path = require('node:path');
2
2
 
3
3
  const modulesNames = Object.keys(require.cache).filter((path) =>
4
- Path.posix.normalize(path).endsWith('/git-log-parser/src/index.js')
4
+ Path.posix.normalize(path).endsWith('/git-log-parser/src/index.js'),
5
5
  );
6
6
 
7
7
  for (const moduleName of modulesNames) {
@@ -13,13 +13,13 @@ export const defaultReleaseRules = [
13
13
  { type: 'release', release: false },
14
14
  { type: 'revert', release: false },
15
15
  { type: 'style', release: false },
16
- { type: 'test', release: false }
16
+ { type: 'test', release: false },
17
17
  ];
18
18
 
19
19
  export const defaultChangelogTypes = [
20
20
  { type: 'feat', section: 'Features' },
21
21
  { type: 'fix', section: 'Fixes' },
22
- { type: 'perf', section: 'Performance improvements' }
22
+ { type: 'perf', section: 'Performance improvements' },
23
23
  ];
24
24
 
25
25
  const getRepositoryUrl = (path) => {
@@ -38,11 +38,11 @@ export const createReleaseConfig = ({
38
38
  tagFormat,
39
39
  releaseRules: inputReleaseRules = defaultReleaseRules,
40
40
  changelogTypes: inputChangelogTypes = defaultChangelogTypes,
41
- dependencyScopes = ['prod']
41
+ dependencyScopes = ['prod'],
42
42
  }) => {
43
43
  const releaseRules = [
44
44
  ...inputReleaseRules,
45
- ...dependencyScopes.map((scope) => ({ type: 'deps', scope, release: 'patch' }))
45
+ ...dependencyScopes.map((scope) => ({ type: 'deps', scope, release: 'patch' })),
46
46
  ];
47
47
 
48
48
  const changelogTypes = [
@@ -50,8 +50,8 @@ export const createReleaseConfig = ({
50
50
  ...dependencyScopes.map((scope) => ({
51
51
  type: 'deps',
52
52
  scope,
53
- section: 'Dependency updates'
54
- }))
53
+ section: 'Dependency updates',
54
+ })),
55
55
  ];
56
56
 
57
57
  return {
@@ -66,15 +66,15 @@ export const createReleaseConfig = ({
66
66
  [
67
67
  '@semantic-release/commit-analyzer',
68
68
  {
69
- releaseRules
70
- }
69
+ releaseRules,
70
+ },
71
71
  ],
72
72
  [
73
73
  '@semantic-release/release-notes-generator',
74
74
  {
75
75
  host,
76
76
  presetConfig: {
77
- types: changelogTypes
77
+ types: changelogTypes,
78
78
  },
79
79
  writerOpts: {
80
80
  commitGroupsSort: ({ title: titleA }, { title: titleB }) => {
@@ -90,17 +90,17 @@ export const createReleaseConfig = ({
90
90
  ...commit,
91
91
  subject: commit.subject.replace(
92
92
  `${host}/${context.owner}/${context.repository}`,
93
- `${host}/${owner}/${repository}`
94
- )
93
+ `${host}/${owner}/${repository}`,
94
+ ),
95
95
  })),
96
- collapse: commitGroup.title === 'Dependency updates'
96
+ collapse: commitGroup.title === 'Dependency updates',
97
97
  }));
98
98
 
99
99
  return {
100
100
  ...context,
101
101
  owner,
102
102
  repository,
103
- commitGroups
103
+ commitGroups,
104
104
  };
105
105
  },
106
106
  mainTemplate: `{{> header}}
@@ -134,16 +134,16 @@ export const createReleaseConfig = ({
134
134
  </details>
135
135
  {{/if}}
136
136
 
137
- {{/each}}`
138
- }
139
- }
140
- ]
141
- ]
137
+ {{/each}}`,
138
+ },
139
+ },
140
+ ],
141
+ ],
142
142
  };
143
143
  };
144
144
 
145
145
  export default createReleaseConfig({
146
146
  host: 'https://github.com',
147
147
  owner: 'cluerise',
148
- repository: 'tools'
148
+ repository: 'tools',
149
149
  });
@@ -9,6 +9,7 @@
9
9
  "lib": ["esnext"],
10
10
  "module": "nodenext",
11
11
  "moduleResolution": "nodenext",
12
+ "rewriteRelativeImportExtensions": true,
12
13
  "noEmit": true,
13
14
  "noUncheckedIndexedAccess": true,
14
15
  "noUnusedLocals": true,
@@ -498,20 +498,16 @@ class FileLinter {
498
498
  return this.#eslint.isPathIgnored(path);
499
499
  }
500
500
  async #prettierLint(patterns) {
501
- const configPath = await Prettier.resolveConfigFile();
502
- if (!configPath) {
503
- return [];
504
- }
505
- const config = await Prettier.resolveConfig(configPath);
506
- if (!config) {
507
- return [];
508
- }
509
501
  const paths = await glob(patterns, {
510
502
  nodir: true,
511
503
  ignore: "node_modules/**"
512
504
  });
513
505
  const results = await Promise.all(
514
506
  paths.map(async (path) => {
507
+ const config = await Prettier.resolveConfig(path);
508
+ if (!config) {
509
+ return null;
510
+ }
515
511
  if (await this.#isIgnoredByPrettier(path)) {
516
512
  return null;
517
513
  }
@@ -287,20 +287,16 @@ class FileLinter {
287
287
  return this.#eslint.isPathIgnored(path);
288
288
  }
289
289
  async #prettierLint(patterns) {
290
- const configPath = await Prettier.resolveConfigFile();
291
- if (!configPath) {
292
- return [];
293
- }
294
- const config = await Prettier.resolveConfig(configPath);
295
- if (!config) {
296
- return [];
297
- }
298
290
  const paths = await glob(patterns, {
299
291
  nodir: true,
300
292
  ignore: "node_modules/**"
301
293
  });
302
294
  const results = await Promise.all(
303
295
  paths.map(async (path) => {
296
+ const config = await Prettier.resolveConfig(path);
297
+ if (!config) {
298
+ return null;
299
+ }
304
300
  if (await this.#isIgnoredByPrettier(path)) {
305
301
  return null;
306
302
  }
@@ -1,6 +1,7 @@
1
1
  import * as ActionsCore from "@actions/core";
2
2
  import { z, ZodError } from "zod";
3
3
  import ChildProcess from "node:child_process";
4
+ import { existsSync } from "node:fs";
4
5
  import FileSystem from "node:fs/promises";
5
6
  import OS from "node:os";
6
7
  import Path from "node:path";
@@ -236,20 +237,16 @@ class FileLinter {
236
237
  return this.#eslint.isPathIgnored(path);
237
238
  }
238
239
  async #prettierLint(patterns) {
239
- const configPath = await Prettier.resolveConfigFile();
240
- if (!configPath) {
241
- return [];
242
- }
243
- const config = await Prettier.resolveConfig(configPath);
244
- if (!config) {
245
- return [];
246
- }
247
240
  const paths = await glob(patterns, {
248
241
  nodir: true,
249
242
  ignore: "node_modules/**"
250
243
  });
251
244
  const results = await Promise.all(
252
245
  paths.map(async (path) => {
246
+ const config = await Prettier.resolveConfig(path);
247
+ if (!config) {
248
+ return null;
249
+ }
253
250
  if (await this.#isIgnoredByPrettier(path)) {
254
251
  return null;
255
252
  }
@@ -397,6 +394,9 @@ class Releaser {
397
394
  };
398
395
  }
399
396
  async #getLatestReleaseChangelog() {
397
+ if (!existsSync(this.#changelogPath)) {
398
+ return null;
399
+ }
400
400
  const contentBuffer = await FileSystem.readFile(this.#changelogPath);
401
401
  const content = contentBuffer.toString();
402
402
  const [, latestReleaseChangelog] = content.split(Releaser.#releaseSeparator);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cluerise/tools",
3
- "version": "5.3.3",
3
+ "version": "5.3.5",
4
4
  "description": "Tools for maintaining TypeScript projects.",
5
5
  "author": "Branislav Holý <brano@holy.am>",
6
6
  "repository": "github:cluerise/tools",
@@ -17,26 +17,26 @@
17
17
  "./dist/"
18
18
  ],
19
19
  "dependencies": {
20
- "@actions/core": "1.11.1",
20
+ "@actions/core": "2.0.1",
21
21
  "@commitlint/cli": "20.2.0",
22
22
  "@commitlint/config-conventional": "20.2.0",
23
23
  "@commitlint/load": "20.2.0",
24
24
  "@commitlint/types": "20.2.0",
25
- "@eslint/js": "9.39.1",
25
+ "@eslint/js": "9.39.2",
26
26
  "@eslint/json": "0.14.0",
27
27
  "@eslint/markdown": "7.5.1",
28
- "@html-eslint/eslint-plugin": "0.50.0",
29
- "@html-eslint/parser": "0.50.0",
30
- "@typescript-eslint/parser": "8.48.1",
28
+ "@html-eslint/eslint-plugin": "0.52.0",
29
+ "@html-eslint/parser": "0.52.0",
30
+ "@typescript-eslint/parser": "8.50.0",
31
31
  "conventional-changelog-conventionalcommits": "9.1.0",
32
- "eslint": "9.39.1",
32
+ "eslint": "9.39.2",
33
33
  "eslint-config-prettier": "10.1.8",
34
34
  "eslint-import-resolver-typescript": "4.4.4",
35
35
  "eslint-plugin-import": "2.32.0",
36
36
  "eslint-plugin-prettier": "5.5.4",
37
37
  "eslint-plugin-simple-import-sort": "12.1.1",
38
38
  "eslint-plugin-unicorn": "62.0.0",
39
- "eslint-plugin-yml": "1.19.0",
39
+ "eslint-plugin-yml": "1.19.1",
40
40
  "glob": "13.0.0",
41
41
  "globals": "16.5.0",
42
42
  "lint-staged": "16.2.7",
@@ -45,7 +45,7 @@
45
45
  "semantic-release": "25.0.2",
46
46
  "semver": "7.7.3",
47
47
  "smol-toml": "1.5.2",
48
- "typescript-eslint": "8.48.1",
49
- "zod": "4.1.13"
48
+ "typescript-eslint": "8.50.0",
49
+ "zod": "4.2.1"
50
50
  }
51
51
  }