@ariel-salgado/eslint-config 0.2.0-beta.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import { findUp, findUpSync } from "find-up-simple";
1
2
  import { FlatConfigComposer } from "eslint-flat-config-utils";
2
3
  import { fileURLToPath } from "node:url";
3
4
  import { isPackageExists } from "local-pkg";
@@ -8,10 +9,11 @@ import { configs as plugin_regexp } from "eslint-plugin-regexp";
8
9
  import plugin_unicorn from "eslint-plugin-unicorn";
9
10
  import plugin_morgan from "eslint-plugin-de-morgan";
10
11
  import plugin_import from "eslint-plugin-import-lite";
11
- import plugin_ignore from "eslint-config-flat-gitignore";
12
+ import "eslint-config-flat-gitignore";
12
13
  import plugin_perfectionist from "eslint-plugin-perfectionist";
13
14
  import plugin_unused_imports from "eslint-plugin-unused-imports";
14
15
  import plugin_comments from "@eslint-community/eslint-plugin-eslint-comments";
16
+ import { readFile } from "node:fs/promises";
15
17
  import { mergeProcessors, processorPassThrough } from "eslint-merge-processors";
16
18
  import globals from "globals";
17
19
 
@@ -236,32 +238,128 @@ async function node() {
236
238
 
237
239
  //#endregion
238
240
  //#region src/configs/pnpm.ts
239
- async function pnpm() {
240
- const [plugin_pnpm, yaml_parser, jsonc_parser] = await Promise.all([
241
+ async function detect_catalog_usage() {
242
+ const workspace_file = await findUp("pnpm-workspace.yaml");
243
+ if (!workspace_file) return false;
244
+ const yaml$1 = await readFile(workspace_file, "utf-8");
245
+ return yaml$1.includes("catalog:") || yaml$1.includes("catalogs:");
246
+ }
247
+ async function pnpm(options) {
248
+ const [plugin_pnpm, plugin_yaml, yaml_parser, jsonc_parser] = await Promise.all([
241
249
  interop_default(import("eslint-plugin-pnpm")),
250
+ interop_default(import("eslint-plugin-yml")),
242
251
  interop_default(import("yaml-eslint-parser")),
243
252
  interop_default(import("jsonc-eslint-parser"))
244
253
  ]);
245
- return [{
254
+ const { catalogs = await detect_catalog_usage(), json = true, sort = true, yaml: yaml$1 = true } = options;
255
+ const configs = [];
256
+ if (json) configs.push({
246
257
  files: ["package.json", "**/package.json"],
247
258
  languageOptions: { parser: jsonc_parser },
248
259
  name: "ariel/pnpm/package-json",
249
260
  plugins: { pnpm: plugin_pnpm },
250
261
  rules: {
251
- "pnpm/json-enforce-catalog": "error",
252
- "pnpm/json-prefer-workspace-settings": "error",
253
- "pnpm/json-valid-catalog": "error"
254
- }
255
- }, {
256
- files: ["pnpm-workspace.yaml"],
257
- languageOptions: { parser: yaml_parser },
258
- name: "ariel/pnpm/pnpm-workspace-yaml",
259
- plugins: { pnpm: plugin_pnpm },
260
- rules: {
261
- "pnpm/yaml-no-duplicate-catalog-item": "error",
262
- "pnpm/yaml-no-unused-catalog-item": "error"
262
+ ...catalogs ? { "pnpm/json-enforce-catalog": ["error", { autofix: !is_in_editor_env() }] } : {},
263
+ "pnpm/json-prefer-workspace-settings": ["error", { autofix: !is_in_editor_env() }],
264
+ "pnpm/json-valid-catalog": ["error", { autofix: !is_in_editor_env() }]
263
265
  }
264
- }];
266
+ });
267
+ if (yaml$1) {
268
+ configs.push({
269
+ files: ["pnpm-workspace.yaml"],
270
+ languageOptions: { parser: yaml_parser },
271
+ name: "ariel/pnpm/pnpm-workspace-yaml",
272
+ plugins: { pnpm: plugin_pnpm },
273
+ rules: {
274
+ "pnpm/yaml-enforce-settings": ["error", { settings: {
275
+ shellEmulator: true,
276
+ trustPolicy: "no-downgrade",
277
+ ...catalogs ? { catalogMode: "prefer" } : {}
278
+ } }],
279
+ "pnpm/yaml-no-duplicate-catalog-item": "error",
280
+ "pnpm/yaml-no-unused-catalog-item": "error"
281
+ }
282
+ });
283
+ if (sort) configs.push({
284
+ files: ["pnpm-workspace.yaml"],
285
+ languageOptions: { parser: yaml_parser },
286
+ name: "ariel/pnpm/pnpm-workspace-yaml-sort",
287
+ plugins: { yaml: plugin_yaml },
288
+ rules: { "yaml/sort-keys": [
289
+ "error",
290
+ {
291
+ order: [
292
+ ...[
293
+ "cacheDir",
294
+ "catalogMode",
295
+ "cleanupUnusedCatalogs",
296
+ "dedupeDirectDeps",
297
+ "deployAllFiles",
298
+ "enablePrePostScripts",
299
+ "engineStrict",
300
+ "extendNodePath",
301
+ "hoist",
302
+ "hoistPattern",
303
+ "hoistWorkspacePackages",
304
+ "ignoreCompatibilityDb",
305
+ "ignoreDepScripts",
306
+ "ignoreScripts",
307
+ "ignoreWorkspaceRootCheck",
308
+ "managePackageManagerVersions",
309
+ "minimumReleaseAge",
310
+ "minimumReleaseAgeExclude",
311
+ "modulesDir",
312
+ "nodeLinker",
313
+ "nodeVersion",
314
+ "optimisticRepeatInstall",
315
+ "packageManagerStrict",
316
+ "packageManagerStrictVersion",
317
+ "preferSymlinkedExecutables",
318
+ "preferWorkspacePackages",
319
+ "publicHoistPattern",
320
+ "registrySupportsTimeField",
321
+ "requiredScripts",
322
+ "resolutionMode",
323
+ "savePrefix",
324
+ "scriptShell",
325
+ "shamefullyHoist",
326
+ "shellEmulator",
327
+ "stateDir",
328
+ "supportedArchitectures",
329
+ "symlink",
330
+ "tag",
331
+ "trustPolicy",
332
+ "trustPolicyExclude",
333
+ "updateNotifier"
334
+ ],
335
+ "packages",
336
+ "overrides",
337
+ "patchedDependencies",
338
+ "catalog",
339
+ "catalogs",
340
+ ...[
341
+ "allowedDeprecatedVersions",
342
+ "allowNonAppliedPatches",
343
+ "configDependencies",
344
+ "ignoredBuiltDependencies",
345
+ "ignoredOptionalDependencies",
346
+ "neverBuiltDependencies",
347
+ "onlyBuiltDependencies",
348
+ "onlyBuiltDependenciesFile",
349
+ "packageExtensions",
350
+ "peerDependencyRules"
351
+ ]
352
+ ],
353
+ pathPattern: "^$"
354
+ },
355
+ {
356
+ order: { type: "asc" },
357
+ pathPattern: ".*"
358
+ }
359
+ ] }
360
+ });
361
+ }
362
+ return configs;
265
363
  }
266
364
 
267
365
  //#endregion
@@ -515,7 +613,7 @@ async function test(options = {}) {
515
613
  }],
516
614
  "test/no-identical-title": "error",
517
615
  "test/no-import-node-test": "error",
518
- "test/no-only-tests": "warn",
616
+ "test/no-only-tests": is_in_editor_env() ? "warn" : "error",
519
617
  "test/prefer-hooks-in-order": "error",
520
618
  "test/prefer-lowercase-title": "error",
521
619
  "ariel/no-top-level-await": "off",
@@ -574,77 +672,40 @@ async function yaml(options = {}) {
574
672
  const { files = [GLOB_YAML], overrides = {}, stylistic: stylistic$1 = true } = options;
575
673
  const { indent = 2, quotes = "single" } = typeof stylistic$1 === "boolean" ? {} : stylistic$1;
576
674
  const [plugin_yaml, parser_yaml] = await Promise.all([interop_default(import("eslint-plugin-yml")), interop_default(import("yaml-eslint-parser"))]);
577
- return [
578
- {
579
- name: "ariel/yaml/setup",
580
- plugins: { yaml: plugin_yaml }
581
- },
582
- {
583
- files,
584
- languageOptions: { parser: parser_yaml },
585
- name: "ariel/yaml/rules",
586
- rules: {
587
- "style/spaced-comment": "off",
588
- "yaml/block-mapping": "error",
589
- "yaml/block-sequence": "error",
590
- "yaml/no-empty-key": "error",
591
- "yaml/no-empty-sequence-entry": "error",
592
- "yaml/no-irregular-whitespace": "error",
593
- "yaml/plain-scalar": "error",
594
- "yaml/vue-custom-block/no-parsing-error": "error",
595
- ...stylistic$1 ? {
596
- "yaml/block-mapping-question-indicator-newline": "error",
597
- "yaml/block-sequence-hyphen-indicator-newline": "error",
598
- "yaml/flow-mapping-curly-newline": "error",
599
- "yaml/flow-mapping-curly-spacing": "error",
600
- "yaml/flow-sequence-bracket-newline": "error",
601
- "yaml/flow-sequence-bracket-spacing": "error",
602
- "yaml/indent": ["error", indent === "tab" ? 2 : indent],
603
- "yaml/key-spacing": "error",
604
- "yaml/no-tab-indent": "error",
605
- "yaml/quotes": ["error", {
606
- avoidEscape: true,
607
- prefer: quotes === "backtick" ? "single" : quotes
608
- }],
609
- "yaml/spaced-comment": "error"
610
- } : {},
611
- ...overrides
612
- }
613
- },
614
- {
615
- files: ["pnpm-workspace.yaml"],
616
- name: "ariel/yaml/pnpm-workspace",
617
- rules: { "yaml/sort-keys": [
618
- "error",
619
- {
620
- order: [
621
- "packages",
622
- "overrides",
623
- "patchedDependencies",
624
- "hoistPattern",
625
- "catalog",
626
- "catalogs",
627
- "allowedDeprecatedVersions",
628
- "allowNonAppliedPatches",
629
- "configDependencies",
630
- "ignoredBuiltDependencies",
631
- "ignoredOptionalDependencies",
632
- "neverBuiltDependencies",
633
- "onlyBuiltDependencies",
634
- "onlyBuiltDependenciesFile",
635
- "packageExtensions",
636
- "peerDependencyRules",
637
- "supportedArchitectures"
638
- ],
639
- pathPattern: "^$"
640
- },
641
- {
642
- order: { type: "asc" },
643
- pathPattern: ".*"
644
- }
645
- ] }
675
+ return [{
676
+ name: "ariel/yaml/setup",
677
+ plugins: { yaml: plugin_yaml }
678
+ }, {
679
+ files,
680
+ languageOptions: { parser: parser_yaml },
681
+ name: "ariel/yaml/rules",
682
+ rules: {
683
+ "style/spaced-comment": "off",
684
+ "yaml/block-mapping": "error",
685
+ "yaml/block-sequence": "error",
686
+ "yaml/no-empty-key": "error",
687
+ "yaml/no-empty-sequence-entry": "error",
688
+ "yaml/no-irregular-whitespace": "error",
689
+ "yaml/plain-scalar": "error",
690
+ ...stylistic$1 ? {
691
+ "yaml/block-mapping-question-indicator-newline": "error",
692
+ "yaml/block-sequence-hyphen-indicator-newline": "error",
693
+ "yaml/flow-mapping-curly-newline": "error",
694
+ "yaml/flow-mapping-curly-spacing": "error",
695
+ "yaml/flow-sequence-bracket-newline": "error",
696
+ "yaml/flow-sequence-bracket-spacing": "error",
697
+ "yaml/indent": ["error", indent === "tab" ? 2 : indent],
698
+ "yaml/key-spacing": "error",
699
+ "yaml/no-tab-indent": "error",
700
+ "yaml/quotes": ["error", {
701
+ avoidEscape: true,
702
+ prefer: quotes === "backtick" ? "single" : quotes
703
+ }],
704
+ "yaml/spaced-comment": "error"
705
+ } : {},
706
+ ...overrides
646
707
  }
647
- ];
708
+ }];
648
709
  }
649
710
 
650
711
  //#endregion
@@ -1091,13 +1152,13 @@ async function svelte(options = {}) {
1091
1152
 
1092
1153
  //#endregion
1093
1154
  //#region src/configs/ignores.ts
1094
- async function ignores(ignores$1 = []) {
1155
+ async function ignores(userIgnores = []) {
1156
+ let ignores$1 = [...GLOB_EXCLUDE];
1157
+ if (typeof userIgnores === "function") ignores$1 = userIgnores(ignores$1);
1158
+ else ignores$1 = [...ignores$1, ...userIgnores];
1095
1159
  return [{
1096
- name: "ariel/global-ignores",
1097
- ignores: [...GLOB_EXCLUDE, ...ignores$1]
1098
- }, {
1099
- name: "ariel/gitignore",
1100
- ...plugin_ignore({ strict: false })
1160
+ ignores: ignores$1,
1161
+ name: "ariel/ignores"
1101
1162
  }];
1102
1163
  }
1103
1164
 
@@ -1527,7 +1588,7 @@ async function javascript(options = {}) {
1527
1588
  allowNamedFunctions: false,
1528
1589
  allowUnboundThis: true
1529
1590
  }],
1530
- "prefer-const": ["warn", {
1591
+ "prefer-const": [is_in_editor_env() ? "warn" : "error", {
1531
1592
  destructuring: "all",
1532
1593
  ignoreReadBeforeAssign: true
1533
1594
  }],
@@ -1540,7 +1601,7 @@ async function javascript(options = {}) {
1540
1601
  "require-yield": "error",
1541
1602
  "symbol-description": "error",
1542
1603
  "unicode-bom": ["error", "never"],
1543
- "unused-imports/no-unused-imports": "warn",
1604
+ "unused-imports/no-unused-imports": is_in_editor_env() ? "warn" : "error",
1544
1605
  "unused-imports/no-unused-vars": ["error", {
1545
1606
  args: "after-used",
1546
1607
  argsIgnorePattern: "^_",
@@ -1777,7 +1838,7 @@ async function perfectionist() {
1777
1838
  modifiers: ["named"]
1778
1839
  }
1779
1840
  ],
1780
- newlinesBetween: "always",
1841
+ newlinesBetween: 1,
1781
1842
  sortSideEffects: true
1782
1843
  }],
1783
1844
  "perfectionist/sort-named-imports": ["error", {
@@ -1828,7 +1889,7 @@ const default_plugin_renaming = {
1828
1889
  * The merged ESLint configurations.
1829
1890
  */
1830
1891
  function ariel(options = {}, ...userConfigs) {
1831
- const { autoRenamePlugins = true, componentExts = [], gitignore: enable_git_ignore = true, imports: enable_imports = true, jsx: enable_jsx = true, nextjs: enable_nextjs = has_nextjs(), pnpm: enable_catalogs = false, react: enable_react = has_react(), regexp: enable_regexp = true, solid: enable_solid = has_solid(), svelte: enable_svelte = has_svelte(), tailwindcss: enable_tailwindcss = has_tailwindcss(), typescript: enable_typescript = has_typescript(), unicorn: enable_unicorn = true } = options;
1892
+ const { autoRenamePlugins = true, componentExts = [], gitignore: enable_git_ignore = true, ignores: user_ignores = [], imports: enable_imports = true, jsdoc: enable_jsdoc = true, jsx: enable_jsx = true, nextjs: enable_nextjs = has_nextjs(), node: enable_node = true, pnpm: enable_catalogs = !!findUpSync("pnpm-workspace.yaml"), react: enable_react = has_react(), regexp: enable_regexp = true, solid: enable_solid = has_solid(), svelte: enable_svelte = has_svelte(), tailwindcss: enable_tailwindcss = has_tailwindcss(), typescript: enable_typescript = has_typescript(), unicorn: enable_unicorn = true } = options;
1832
1893
  const is_in_editor = is_in_editor_env();
1833
1894
  if (is_in_editor) console.log("[@ariel-salgado/eslint-config] Detected running in editor, some rules are disabled.");
1834
1895
  const stylistic_options = options.stylistic === false ? false : typeof options.stylistic === "object" ? options.stylistic : {};
@@ -1844,10 +1905,12 @@ function ariel(options = {}, ...userConfigs) {
1844
1905
  })]));
1845
1906
  const typescript_options = resolve_sub_options(options, "typescript");
1846
1907
  const tsconfig_path = "tsconfigPath" in typescript_options ? typescript_options.tsconfigPath : void 0;
1847
- configs.push(ignores(options.ignores), javascript({ overrides: get_overrides(options, "javascript") }), comments(), node(), jsdoc({ stylistic: stylistic_options }), imports({ stylistic: stylistic_options }), perfectionist(), morgan());
1848
- if (enable_imports) configs.push(imports(enable_imports === true ? { stylistic: stylistic_options } : {
1908
+ configs.push(ignores(user_ignores), javascript({ overrides: get_overrides(options, "javascript") }), comments(), perfectionist(), morgan());
1909
+ if (enable_node) configs.push(node());
1910
+ if (enable_jsdoc) configs.push(jsdoc({ stylistic: stylistic_options }));
1911
+ if (enable_imports) configs.push(imports({
1849
1912
  stylistic: stylistic_options,
1850
- ...enable_imports
1913
+ ...resolve_sub_options(options, "imports")
1851
1914
  }));
1852
1915
  if (enable_unicorn) configs.push(unicorn(enable_unicorn === true ? {} : enable_unicorn));
1853
1916
  if (enable_jsx) configs.push(jsx(enable_jsx === true ? {} : enable_jsx));
@@ -1865,6 +1928,7 @@ function ariel(options = {}, ...userConfigs) {
1865
1928
  if (options.test ?? true) configs.push(test({ overrides: get_overrides(options, "test") }));
1866
1929
  if (enable_react) configs.push(react({
1867
1930
  ...typescript_options,
1931
+ ...resolve_sub_options(options, "react"),
1868
1932
  overrides: get_overrides(options, "react"),
1869
1933
  tsconfigPath: tsconfig_path
1870
1934
  }));
@@ -1887,7 +1951,11 @@ function ariel(options = {}, ...userConfigs) {
1887
1951
  overrides: get_overrides(options, "jsonc"),
1888
1952
  stylistic: stylistic_options
1889
1953
  }), sort_package_json(), sort_ts_config());
1890
- if (enable_catalogs) configs.push(pnpm());
1954
+ if (enable_catalogs) configs.push(pnpm({
1955
+ json: options.jsonc !== false,
1956
+ yaml: options.yaml !== false,
1957
+ ...resolve_sub_options(options, "pnpm")
1958
+ }));
1891
1959
  if (options.yaml ?? true) configs.push(yaml({
1892
1960
  overrides: get_overrides(options, "yaml"),
1893
1961
  stylistic: stylistic_options
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ariel-salgado/eslint-config",
3
3
  "type": "module",
4
- "version": "0.2.0-beta.1",
4
+ "version": "0.2.0",
5
5
  "description": "ESLint config for @ariel-salgado.",
6
6
  "author": "Ariel Salgado <ariel.salgado.acevedo@gmail.com>",
7
7
  "license": "MIT",
@@ -11,12 +11,12 @@
11
11
  "url": "git+https://github.com/ariel-salgado/eslint-config.git"
12
12
  },
13
13
  "exports": {
14
- ".": "./dist/index.js",
14
+ ".": "./dist/index.mjs",
15
15
  "./package.json": "./package.json"
16
16
  },
17
- "main": "./dist/index.js",
18
- "module": "./dist/index.js",
19
- "types": "./dist/index.d.ts",
17
+ "main": "./dist/index.mjs",
18
+ "module": "./dist/index.mjs",
19
+ "types": "./dist/index.d.mts",
20
20
  "files": [
21
21
  "dist"
22
22
  ],
@@ -68,61 +68,59 @@
68
68
  "@antfu/install-pkg": "^1.1.0",
69
69
  "@clack/prompts": "^0.11.0",
70
70
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
71
- "@eslint/markdown": "^7.5.0",
72
- "@stylistic/eslint-plugin": "^5.5.0",
73
- "@typescript-eslint/eslint-plugin": "^8.46.2",
74
- "@typescript-eslint/parser": "^8.46.2",
75
- "@vitest/eslint-plugin": "^1.3.24",
71
+ "@eslint/markdown": "^7.5.1",
72
+ "@stylistic/eslint-plugin": "^5.6.1",
73
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
74
+ "@typescript-eslint/parser": "^8.50.0",
75
+ "@vitest/eslint-plugin": "^1.5.4",
76
76
  "eslint-config-flat-gitignore": "^2.1.0",
77
77
  "eslint-flat-config-utils": "^2.1.4",
78
78
  "eslint-merge-processors": "^2.0.0",
79
79
  "eslint-plugin-ariel": "^0.0.3",
80
80
  "eslint-plugin-de-morgan": "^2.0.0",
81
- "eslint-plugin-import-lite": "^0.3.0",
82
- "eslint-plugin-jsdoc": "^61.1.8",
81
+ "eslint-plugin-import-lite": "^0.3.1",
82
+ "eslint-plugin-jsdoc": "^61.5.0",
83
83
  "eslint-plugin-jsonc": "^2.21.0",
84
84
  "eslint-plugin-n": "^17.23.1",
85
85
  "eslint-plugin-no-only-tests": "^3.3.0",
86
86
  "eslint-plugin-perfectionist": "^4.15.1",
87
- "eslint-plugin-pnpm": "^1.3.0",
87
+ "eslint-plugin-pnpm": "^1.4.3",
88
88
  "eslint-plugin-regexp": "^2.10.0",
89
89
  "eslint-plugin-toml": "^0.12.0",
90
- "eslint-plugin-unicorn": "^61.0.2",
90
+ "eslint-plugin-unicorn": "^62.0.0",
91
91
  "eslint-plugin-unused-imports": "^4.3.0",
92
- "eslint-plugin-yml": "^1.19.0",
93
- "globals": "^16.4.0",
94
- "jsonc-eslint-parser": "^2.4.1",
92
+ "eslint-plugin-yml": "^1.19.1",
93
+ "find-up-simple": "1.0.1",
94
+ "globals": "^16.5.0",
95
+ "jsonc-eslint-parser": "^2.4.2",
95
96
  "local-pkg": "1.1.2",
96
- "toml-eslint-parser": "^0.10.0",
97
- "yaml-eslint-parser": "^1.3.0"
97
+ "toml-eslint-parser": "^0.10.1",
98
+ "yaml-eslint-parser": "^1.3.2"
98
99
  },
99
100
  "devDependencies": {
100
- "@eslint-react/eslint-plugin": "^2.2.3",
101
- "@next/eslint-plugin-next": "^16.0.0",
101
+ "@eslint-react/eslint-plugin": "^2.3.13",
102
+ "@next/eslint-plugin-next": "^16.1.0",
102
103
  "@types/eslint-plugin-jsx-a11y": "^6.10.1",
103
- "@types/node": "^24.9.1",
104
- "@typescript/native-preview": "7.0.0-dev.20251025.1",
105
- "bumpp": "^10.3.1",
106
- "eslint": "^9.38.0",
107
- "eslint-plugin-better-tailwindcss": "^3.7.10",
104
+ "@types/node": "^25.0.3",
105
+ "@typescript/native-preview": "7.0.0-dev.20251213.1",
106
+ "bumpp": "^10.3.2",
107
+ "eslint": "^9.39.2",
108
+ "eslint-plugin-better-tailwindcss": "^3.8.0",
108
109
  "eslint-plugin-jsx-a11y": "^6.10.2",
109
110
  "eslint-plugin-react-hooks": "^7.0.1",
110
- "eslint-plugin-react-refresh": "^0.4.24",
111
+ "eslint-plugin-react-refresh": "^0.4.26",
111
112
  "eslint-plugin-solid": "^0.14.5",
112
- "eslint-plugin-svelte": "^3.12.5",
113
+ "eslint-plugin-svelte": "^3.13.1",
113
114
  "eslint-typegen": "^2.3.0",
114
- "lint-staged": "^16.2.6",
115
+ "lint-staged": "^16.2.7",
115
116
  "simple-git-hooks": "^2.13.1",
116
- "svelte": "^5.42.1",
117
- "svelte-eslint-parser": "^1.4.0",
118
- "tailwindcss": "^4.1.16",
119
- "tsdown": "^0.15.9",
120
- "tsx": "^4.20.6",
117
+ "svelte": "^5.46.0",
118
+ "svelte-eslint-parser": "^1.4.1",
119
+ "tailwindcss": "^4.1.18",
120
+ "tsdown": "^0.17.4",
121
+ "tsx": "^4.21.0",
121
122
  "typescript": "~5.9.3"
122
123
  },
123
- "resolutions": {
124
- "eslint": "catalog:"
125
- },
126
124
  "simple-git-hooks": {
127
125
  "pre-commit": "pnpm exec lint-staged"
128
126
  },