eslint-plugin-zod-mini 1.0.2 → 1.1.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.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  [issuesBadge]: https://img.shields.io/github/issues/marcalexiei/eslint-zod.svg?style=for-the-badge
18
18
  [issuesURL]: https://github.com/marcalexiei/eslint-zod/issues
19
19
 
20
- [ESLint](https://eslint.org) plugin that adds custom linting rules to enforce best practices when using [Zod Mini](https://zod.dev/?id=zod-mini) (`zod/mini`).
20
+ [ESLint](https://eslint.org) plugin that adds custom linting rules to enforce best practices when using [Zod Mini](https://zod.dev/packages/mini) (`zod/mini`).
21
21
 
22
22
  It can also work with [Oxlint](https://oxc.rs/docs/guide/usage/linter.html)!\
23
23
  Find out more about [Oxlint's `jsPLugins`](https://oxc.rs/docs/guide/usage/linter/js-plugins.html).
@@ -41,6 +41,7 @@ Find out more about [Oxlint's `jsPLugins`](https://oxc.rs/docs/guide/usage/linte
41
41
  | [no-any-schema](docs/rules/no-any-schema.md) | Disallow usage of `z.any()` in Zod Mini schemas | ✅ | | 💡 |
42
42
  | [no-empty-custom-schema](docs/rules/no-empty-custom-schema.md) | Disallow usage of `z.custom()` without arguments | ✅ | | |
43
43
  | [no-unknown-schema](docs/rules/no-unknown-schema.md) | Disallow usage of `z.unknown()` in Zod Mini schemas | | | |
44
+ | [prefer-enum-over-literal-union](docs/rules/prefer-enum-over-literal-union.md) | Prefer `z.enum()` over `z.union()` when all members are string literals. | ✅ | 🔧 | |
44
45
  | [prefer-meta](docs/rules/prefer-meta.md) | Enforce usage of `z.meta()` over `z.describe()` | ✅ | 🔧 | |
45
46
  | [require-brand-type-parameter](docs/rules/require-brand-type-parameter.md) | Require type parameter on `.brand()` functions | ✅ | | 💡 |
46
47
  | [require-error-message](docs/rules/require-error-message.md) | Enforce that custom refinements include an error message | ✅ | 🔧 | |
@@ -88,10 +89,7 @@ import { defineConfig } from 'eslint/config';
88
89
  import eslint from '@eslint/js';
89
90
  import eslintPluginZodMini from 'eslint-plugin-zod-mini';
90
91
 
91
- export default defineConfig(
92
- eslint.configs.recommended,
93
- eslintPluginZodMini.configs.recommended,
94
- );
92
+ export default defineConfig(eslint.configs.recommended, eslintPluginZodMini.configs.recommended);
95
93
  ```
96
94
 
97
95
  ### Oxlint
package/dist/index.cjs CHANGED
@@ -7,6 +7,7 @@ const require_consistent_schema_var_name = require("./rules/consistent-schema-va
7
7
  const require_no_any_schema = require("./rules/no-any-schema.cjs");
8
8
  const require_no_empty_custom_schema = require("./rules/no-empty-custom-schema.cjs");
9
9
  const require_no_unknown_schema = require("./rules/no-unknown-schema.cjs");
10
+ const require_prefer_enum_over_literal_union = require("./rules/prefer-enum-over-literal-union.cjs");
10
11
  const require_prefer_meta = require("./rules/prefer-meta.cjs");
11
12
  const require_require_brand_type_parameter = require("./rules/require-brand-type-parameter.cjs");
12
13
  const require_require_error_message = require("./rules/require-error-message.cjs");
@@ -26,6 +27,7 @@ const eslintPluginZodMini = {
26
27
  "no-any-schema": require_no_any_schema.noAnySchema,
27
28
  "no-empty-custom-schema": require_no_empty_custom_schema.noEmptyCustomSchema,
28
29
  "no-unknown-schema": require_no_unknown_schema.noUnknownSchema,
30
+ "prefer-enum-over-literal-union": require_prefer_enum_over_literal_union.preferEnumOverLiteralUnion,
29
31
  "prefer-meta": require_prefer_meta.preferMeta,
30
32
  "require-brand-type-parameter": require_require_brand_type_parameter.requireBrandTypeParameter,
31
33
  "require-error-message": require_require_error_message.requireErrorMessage,
@@ -41,6 +43,7 @@ const recommendedConfig = {
41
43
  "zod-mini/consistent-schema-var-name": "error",
42
44
  "zod-mini/no-any-schema": "error",
43
45
  "zod-mini/no-empty-custom-schema": "error",
46
+ "zod-mini/prefer-enum-over-literal-union": "error",
44
47
  "zod-mini/prefer-meta": "error",
45
48
  "zod-mini/require-brand-type-parameter": "error",
46
49
  "zod-mini/require-error-message": "error"
package/dist/index.mjs CHANGED
@@ -7,6 +7,7 @@ import { consistentSchemaVarName } from "./rules/consistent-schema-var-name.mjs"
7
7
  import { noAnySchema } from "./rules/no-any-schema.mjs";
8
8
  import { noEmptyCustomSchema } from "./rules/no-empty-custom-schema.mjs";
9
9
  import { noUnknownSchema } from "./rules/no-unknown-schema.mjs";
10
+ import { preferEnumOverLiteralUnion } from "./rules/prefer-enum-over-literal-union.mjs";
10
11
  import { preferMeta } from "./rules/prefer-meta.mjs";
11
12
  import { requireBrandTypeParameter } from "./rules/require-brand-type-parameter.mjs";
12
13
  import { requireErrorMessage } from "./rules/require-error-message.mjs";
@@ -26,6 +27,7 @@ const eslintPluginZodMini = {
26
27
  "no-any-schema": noAnySchema,
27
28
  "no-empty-custom-schema": noEmptyCustomSchema,
28
29
  "no-unknown-schema": noUnknownSchema,
30
+ "prefer-enum-over-literal-union": preferEnumOverLiteralUnion,
29
31
  "prefer-meta": preferMeta,
30
32
  "require-brand-type-parameter": requireBrandTypeParameter,
31
33
  "require-error-message": requireErrorMessage,
@@ -41,6 +43,7 @@ const recommendedConfig = {
41
43
  "zod-mini/consistent-schema-var-name": "error",
42
44
  "zod-mini/no-any-schema": "error",
43
45
  "zod-mini/no-empty-custom-schema": "error",
46
+ "zod-mini/prefer-enum-over-literal-union": "error",
44
47
  "zod-mini/prefer-meta": "error",
45
48
  "zod-mini/require-brand-type-parameter": "error",
46
49
  "zod-mini/require-error-message": "error"
@@ -0,0 +1,18 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_create_plugin_rule = require("../utils/create-plugin-rule.cjs");
3
+ let _eslint_zod_utils = require("@eslint-zod/utils");
4
+ //#region src/rules/prefer-enum-over-literal-union.ts
5
+ const preferEnumOverLiteralUnion = require_create_plugin_rule.createZodMiniPluginRule({
6
+ name: "prefer-enum-over-literal-union",
7
+ meta: {
8
+ type: "suggestion",
9
+ fixable: "code",
10
+ docs: { description: "Prefer `z.enum()` over `z.union()` when all members are string literals." },
11
+ messages: { useEnum: "Replace this union of string literals with `z.enum()`." },
12
+ schema: []
13
+ },
14
+ defaultOptions: [],
15
+ create: (0, _eslint_zod_utils.buildPreferEnumOverLiteralUnionCreate)(_eslint_zod_utils.zodMiniImportScope)
16
+ });
17
+ //#endregion
18
+ exports.preferEnumOverLiteralUnion = preferEnumOverLiteralUnion;
@@ -0,0 +1,17 @@
1
+ import { createZodMiniPluginRule } from "../utils/create-plugin-rule.mjs";
2
+ import { buildPreferEnumOverLiteralUnionCreate, zodMiniImportScope } from "@eslint-zod/utils";
3
+ //#region src/rules/prefer-enum-over-literal-union.ts
4
+ const preferEnumOverLiteralUnion = createZodMiniPluginRule({
5
+ name: "prefer-enum-over-literal-union",
6
+ meta: {
7
+ type: "suggestion",
8
+ fixable: "code",
9
+ docs: { description: "Prefer `z.enum()` over `z.union()` when all members are string literals." },
10
+ messages: { useEnum: "Replace this union of string literals with `z.enum()`." },
11
+ schema: []
12
+ },
13
+ defaultOptions: [],
14
+ create: buildPreferEnumOverLiteralUnionCreate(zodMiniImportScope)
15
+ });
16
+ //#endregion
17
+ export { preferEnumOverLiteralUnion };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-zod-mini",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "ESLint plugin that adds custom linting rules to enforce best practices when using Zod Mini",
5
5
  "keywords": [
6
6
  "eslint",
@@ -40,17 +40,17 @@
40
40
  "dependencies": {
41
41
  "@typescript-eslint/utils": "^8.57.0",
42
42
  "esquery": "^1.6.0",
43
- "@eslint-zod/utils": "1.1.0"
43
+ "@eslint-zod/utils": "1.3.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@marcalexiei/prettier-config": "1.1.4",
46
+ "@marcalexiei/prettier-config": "2.0.0",
47
47
  "@types/esquery": "1.5.4",
48
- "@typescript-eslint/rule-tester": "8.59.2",
48
+ "@typescript-eslint/rule-tester": "8.59.3",
49
49
  "dedent": "1.7.2",
50
50
  "eslint-doc-generator": "3.3.2",
51
51
  "prettier": "3.8.3",
52
- "tsdown": "0.21.10",
53
- "vitest": "4.1.5"
52
+ "tsdown": "0.22.0",
53
+ "vitest": "4.1.6"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "eslint": "^9 || ^10",