eslint-plugin-zod 3.2.0 → 3.4.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.
Files changed (100) hide show
  1. package/README.md +33 -21
  2. package/dist/index.cjs +15 -4
  3. package/dist/index.d.cts +1 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +15 -4
  6. package/dist/rules/array-style.cjs +5 -4
  7. package/dist/rules/array-style.d.cts +3 -2
  8. package/dist/rules/array-style.d.ts +3 -2
  9. package/dist/rules/array-style.js +5 -4
  10. package/dist/rules/consistent-import-source.cjs +5 -11
  11. package/dist/rules/consistent-import-source.d.cts +4 -3
  12. package/dist/rules/consistent-import-source.d.ts +4 -3
  13. package/dist/rules/consistent-import-source.js +4 -10
  14. package/dist/rules/consistent-import.cjs +4 -3
  15. package/dist/rules/consistent-import.d.cts +3 -2
  16. package/dist/rules/consistent-import.d.ts +3 -2
  17. package/dist/rules/consistent-import.js +5 -4
  18. package/dist/rules/consistent-object-schema-type.cjs +5 -3
  19. package/dist/rules/consistent-object-schema-type.d.cts +3 -1
  20. package/dist/rules/consistent-object-schema-type.d.ts +3 -1
  21. package/dist/rules/consistent-object-schema-type.js +6 -4
  22. package/dist/rules/no-any-schema.cjs +5 -3
  23. package/dist/rules/no-any-schema.d.cts +3 -1
  24. package/dist/rules/no-any-schema.d.ts +3 -1
  25. package/dist/rules/no-any-schema.js +6 -4
  26. package/dist/rules/no-empty-custom-schema.cjs +5 -4
  27. package/dist/rules/no-empty-custom-schema.d.cts +3 -2
  28. package/dist/rules/no-empty-custom-schema.d.ts +3 -2
  29. package/dist/rules/no-empty-custom-schema.js +5 -4
  30. package/dist/rules/no-number-schema-with-int.cjs +5 -4
  31. package/dist/rules/no-number-schema-with-int.d.cts +3 -2
  32. package/dist/rules/no-number-schema-with-int.d.ts +3 -2
  33. package/dist/rules/no-number-schema-with-int.js +5 -4
  34. package/dist/rules/no-optional-and-default-together.cjs +6 -5
  35. package/dist/rules/no-optional-and-default-together.d.cts +3 -2
  36. package/dist/rules/no-optional-and-default-together.d.ts +3 -2
  37. package/dist/rules/no-optional-and-default-together.js +7 -6
  38. package/dist/rules/no-string-schema-with-uuid.cjs +5 -4
  39. package/dist/rules/no-string-schema-with-uuid.d.cts +3 -2
  40. package/dist/rules/no-string-schema-with-uuid.d.ts +3 -2
  41. package/dist/rules/no-string-schema-with-uuid.js +5 -4
  42. package/dist/rules/no-throw-in-refine.cjs +5 -3
  43. package/dist/rules/no-throw-in-refine.d.cts +3 -2
  44. package/dist/rules/no-throw-in-refine.d.ts +3 -2
  45. package/dist/rules/no-throw-in-refine.js +6 -4
  46. package/dist/rules/no-unknown-schema.cjs +5 -4
  47. package/dist/rules/no-unknown-schema.d.cts +3 -2
  48. package/dist/rules/no-unknown-schema.d.ts +3 -2
  49. package/dist/rules/no-unknown-schema.js +5 -4
  50. package/dist/rules/prefer-enum-over-literal-union.cjs +5 -3
  51. package/dist/rules/prefer-enum-over-literal-union.d.cts +3 -2
  52. package/dist/rules/prefer-enum-over-literal-union.d.ts +3 -2
  53. package/dist/rules/prefer-enum-over-literal-union.js +6 -4
  54. package/dist/rules/prefer-meta-last.cjs +8 -5
  55. package/dist/rules/prefer-meta-last.d.cts +3 -2
  56. package/dist/rules/prefer-meta-last.d.ts +3 -2
  57. package/dist/rules/prefer-meta-last.js +8 -5
  58. package/dist/rules/prefer-meta.cjs +5 -4
  59. package/dist/rules/prefer-meta.d.cts +3 -2
  60. package/dist/rules/prefer-meta.d.ts +3 -2
  61. package/dist/rules/prefer-meta.js +5 -4
  62. package/dist/rules/prefer-namespace-import.cjs +4 -3
  63. package/dist/rules/prefer-namespace-import.d.cts +3 -2
  64. package/dist/rules/prefer-namespace-import.d.ts +3 -2
  65. package/dist/rules/prefer-namespace-import.js +5 -4
  66. package/dist/rules/prefer-string-schema-with-trim.cjs +53 -0
  67. package/dist/rules/prefer-string-schema-with-trim.d.cts +5 -0
  68. package/dist/rules/prefer-string-schema-with-trim.d.ts +5 -0
  69. package/dist/rules/prefer-string-schema-with-trim.js +50 -0
  70. package/dist/rules/require-brand-type-parameter.cjs +5 -4
  71. package/dist/rules/require-brand-type-parameter.d.cts +3 -1
  72. package/dist/rules/require-brand-type-parameter.d.ts +3 -1
  73. package/dist/rules/require-brand-type-parameter.js +5 -4
  74. package/dist/rules/require-error-message.cjs +5 -3
  75. package/dist/rules/require-error-message.d.cts +3 -2
  76. package/dist/rules/require-error-message.d.ts +3 -2
  77. package/dist/rules/require-error-message.js +6 -4
  78. package/dist/rules/require-schema-suffix.cjs +5 -3
  79. package/dist/rules/require-schema-suffix.d.cts +3 -2
  80. package/dist/rules/require-schema-suffix.d.ts +3 -2
  81. package/dist/rules/require-schema-suffix.js +6 -4
  82. package/dist/rules/schema-error-property-style.cjs +5 -3
  83. package/dist/rules/schema-error-property-style.d.cts +4 -3
  84. package/dist/rules/schema-error-property-style.d.ts +4 -3
  85. package/dist/rules/schema-error-property-style.js +6 -4
  86. package/dist/utils/build-zod-chain-replacement-fix.cjs +8 -1
  87. package/dist/utils/build-zod-chain-replacement-fix.js +8 -1
  88. package/dist/utils/create-plugin-rule.cjs +6 -0
  89. package/dist/utils/create-plugin-rule.d.cts +13 -0
  90. package/dist/utils/create-plugin-rule.d.ts +13 -0
  91. package/dist/utils/create-plugin-rule.js +3 -0
  92. package/dist/utils/is-zod-import-source.cjs +17 -2
  93. package/dist/utils/is-zod-import-source.d.cts +4 -1
  94. package/dist/utils/is-zod-import-source.d.ts +4 -1
  95. package/dist/utils/is-zod-import-source.js +16 -2
  96. package/dist/utils/track-zod-schema-imports.cjs +9 -2
  97. package/dist/utils/track-zod-schema-imports.d.cts +6 -1
  98. package/dist/utils/track-zod-schema-imports.d.ts +6 -1
  99. package/dist/utils/track-zod-schema-imports.js +8 -2
  100. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const preferMeta: ESLintUtils.RuleModule<"preferMeta", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const preferMeta: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<"preferMeta", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const preferMeta: ESLintUtils.RuleModule<"preferMeta", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const preferMeta: import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferMeta", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,12 +1,13 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- import { getRuleURL } from "../meta.js";
3
- import { trackZodSchemaImports } from "../utils/track-zod-schema-imports.js";
4
- export const preferMeta = ESLintUtils.RuleCreator(getRuleURL)({
1
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
2
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
3
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('all');
4
+ export const preferMeta = createZodPluginRule({
5
5
  name: 'prefer-meta',
6
6
  meta: {
7
7
  type: 'suggestion',
8
8
  fixable: 'code',
9
9
  docs: {
10
+ zodImportAllowedSource,
10
11
  description: 'Enforce usage of `.meta()` over `.describe()`',
11
12
  },
12
13
  messages: {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.preferNamespaceImport = void 0;
4
4
  const utils_1 = require("@typescript-eslint/utils");
5
- const meta_js_1 = require("../meta.cjs");
5
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
6
6
  const is_zod_import_source_js_1 = require("../utils/is-zod-import-source.cjs");
7
7
  function isGroupFirstImportTypeNamespace(group) {
8
8
  const { hasOnlyTypeImports, nodes: [firstImportNode], } = group;
@@ -42,7 +42,7 @@ function getNamespaceAliasNameFrom(node) {
42
42
  }
43
43
  return null;
44
44
  }
45
- exports.preferNamespaceImport = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL)({
45
+ exports.preferNamespaceImport = (0, create_plugin_rule_js_1.createZodPluginRule)({
46
46
  name: 'prefer-namespace-import',
47
47
  meta: {
48
48
  type: 'suggestion',
@@ -50,6 +50,7 @@ exports.preferNamespaceImport = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRul
50
50
  message: "Use `zod/consistent-import` with `{ syntax: 'namespace' }`",
51
51
  },
52
52
  docs: {
53
+ zodImportAllowedSource: 'all',
53
54
  description: "Enforce importing zod as a namespace import (`import * as z from 'zod'`)",
54
55
  },
55
56
  fixable: 'code',
@@ -67,7 +68,7 @@ exports.preferNamespaceImport = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRul
67
68
  return {
68
69
  ImportDeclaration(node) {
69
70
  const { source, importKind } = node;
70
- if (!(0, is_zod_import_source_js_1.isZodImportSource)(source.value)) {
71
+ if (!(0, is_zod_import_source_js_1.isZodImportSource)(source.value, 'all')) {
71
72
  return;
72
73
  }
73
74
  if (!importGroups[source.value]) {
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const preferNamespaceImport: ESLintUtils.RuleModule<"removeDuplicate" | "convertUsage" | "useNamespace", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const preferNamespaceImport: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<"removeDuplicate" | "convertUsage" | "useNamespace", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const preferNamespaceImport: ESLintUtils.RuleModule<"removeDuplicate" | "convertUsage" | "useNamespace", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const preferNamespaceImport: import("@typescript-eslint/utils/ts-eslint").RuleModule<"removeDuplicate" | "convertUsage" | "useNamespace", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,5 +1,5 @@
1
- import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
2
- import { getRuleURL } from "../meta.js";
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
3
3
  import { isZodImportSource } from "../utils/is-zod-import-source.js";
4
4
  function isGroupFirstImportTypeNamespace(group) {
5
5
  const { hasOnlyTypeImports, nodes: [firstImportNode], } = group;
@@ -39,7 +39,7 @@ function getNamespaceAliasNameFrom(node) {
39
39
  }
40
40
  return null;
41
41
  }
42
- export const preferNamespaceImport = ESLintUtils.RuleCreator(getRuleURL)({
42
+ export const preferNamespaceImport = createZodPluginRule({
43
43
  name: 'prefer-namespace-import',
44
44
  meta: {
45
45
  type: 'suggestion',
@@ -47,6 +47,7 @@ export const preferNamespaceImport = ESLintUtils.RuleCreator(getRuleURL)({
47
47
  message: "Use `zod/consistent-import` with `{ syntax: 'namespace' }`",
48
48
  },
49
49
  docs: {
50
+ zodImportAllowedSource: 'all',
50
51
  description: "Enforce importing zod as a namespace import (`import * as z from 'zod'`)",
51
52
  },
52
53
  fixable: 'code',
@@ -64,7 +65,7 @@ export const preferNamespaceImport = ESLintUtils.RuleCreator(getRuleURL)({
64
65
  return {
65
66
  ImportDeclaration(node) {
66
67
  const { source, importKind } = node;
67
- if (!isZodImportSource(source.value)) {
68
+ if (!isZodImportSource(source.value, 'all')) {
68
69
  return;
69
70
  }
70
71
  if (!importGroups[source.value]) {
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.preferStringSchemaWithTrim = void 0;
4
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
5
+ const track_zod_schema_imports_js_1 = require("../utils/track-zod-schema-imports.cjs");
6
+ const { zodImportAllowedSource, trackZodSchemaImports, } = (0, track_zod_schema_imports_js_1.createZodSchemaImportTrack)('zod');
7
+ exports.preferStringSchemaWithTrim = (0, create_plugin_rule_js_1.createZodPluginRule)({
8
+ name: 'prefer-string-schema-with-trim',
9
+ meta: {
10
+ type: 'problem',
11
+ fixable: 'code',
12
+ docs: {
13
+ zodImportAllowedSource,
14
+ description: 'Enforce `z.string().trim()` to prevent accidental leading/trailing whitespace',
15
+ },
16
+ messages: {
17
+ addTrim: '`z.string()` schemas should use `.trim()`.',
18
+ },
19
+ schema: [],
20
+ },
21
+ defaultOptions: [],
22
+ create(context) {
23
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
24
+ return {
25
+ ImportDeclaration: importDeclarationListener,
26
+ CallExpression(node) {
27
+ const zodSchemaMeta = detectZodSchemaRootNode(node);
28
+ if ((zodSchemaMeta === null || zodSchemaMeta === void 0 ? void 0 : zodSchemaMeta.schemaType) !== 'string') {
29
+ return;
30
+ }
31
+ const methods = collectZodChainMethods(zodSchemaMeta.node);
32
+ if (methods.some((it) => it.name === 'trim')) {
33
+ return;
34
+ }
35
+ if (zodSchemaMeta.schemaDecl === 'named') {
36
+ context.report({
37
+ node,
38
+ messageId: 'addTrim',
39
+ });
40
+ return;
41
+ }
42
+ context.report({
43
+ node,
44
+ messageId: 'addTrim',
45
+ fix(fixer) {
46
+ const lastMethod = methods.at(0);
47
+ return fixer.insertTextAfter(lastMethod.node, '.trim()');
48
+ },
49
+ });
50
+ },
51
+ };
52
+ },
53
+ });
@@ -0,0 +1,5 @@
1
+ export declare const preferStringSchemaWithTrim: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<"addTrim", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
4
+ name: string;
5
+ };
@@ -0,0 +1,5 @@
1
+ export declare const preferStringSchemaWithTrim: import("@typescript-eslint/utils/ts-eslint").RuleModule<"addTrim", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
4
+ name: string;
5
+ };
@@ -0,0 +1,50 @@
1
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
2
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
3
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('zod');
4
+ export const preferStringSchemaWithTrim = createZodPluginRule({
5
+ name: 'prefer-string-schema-with-trim',
6
+ meta: {
7
+ type: 'problem',
8
+ fixable: 'code',
9
+ docs: {
10
+ zodImportAllowedSource,
11
+ description: 'Enforce `z.string().trim()` to prevent accidental leading/trailing whitespace',
12
+ },
13
+ messages: {
14
+ addTrim: '`z.string()` schemas should use `.trim()`.',
15
+ },
16
+ schema: [],
17
+ },
18
+ defaultOptions: [],
19
+ create(context) {
20
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
21
+ return {
22
+ ImportDeclaration: importDeclarationListener,
23
+ CallExpression(node) {
24
+ const zodSchemaMeta = detectZodSchemaRootNode(node);
25
+ if ((zodSchemaMeta === null || zodSchemaMeta === void 0 ? void 0 : zodSchemaMeta.schemaType) !== 'string') {
26
+ return;
27
+ }
28
+ const methods = collectZodChainMethods(zodSchemaMeta.node);
29
+ if (methods.some((it) => it.name === 'trim')) {
30
+ return;
31
+ }
32
+ if (zodSchemaMeta.schemaDecl === 'named') {
33
+ context.report({
34
+ node,
35
+ messageId: 'addTrim',
36
+ });
37
+ return;
38
+ }
39
+ context.report({
40
+ node,
41
+ messageId: 'addTrim',
42
+ fix(fixer) {
43
+ const lastMethod = methods.at(0);
44
+ return fixer.insertTextAfter(lastMethod.node, '.trim()');
45
+ },
46
+ });
47
+ },
48
+ };
49
+ },
50
+ });
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requireBrandTypeParameter = void 0;
4
- const utils_1 = require("@typescript-eslint/utils");
5
- const meta_js_1 = require("../meta.cjs");
4
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
6
5
  const track_zod_schema_imports_js_1 = require("../utils/track-zod-schema-imports.cjs");
7
- exports.requireBrandTypeParameter = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL)({
6
+ const { zodImportAllowedSource, trackZodSchemaImports, } = (0, track_zod_schema_imports_js_1.createZodSchemaImportTrack)('all');
7
+ exports.requireBrandTypeParameter = (0, create_plugin_rule_js_1.createZodPluginRule)({
8
8
  name: 'require-brand-type-parameter',
9
9
  meta: {
10
10
  hasSuggestions: true,
11
11
  type: 'problem',
12
12
  docs: {
13
+ zodImportAllowedSource,
13
14
  description: 'Require type parameter on `.brand()` functions',
14
15
  },
15
16
  messages: {
@@ -20,7 +21,7 @@ exports.requireBrandTypeParameter = utils_1.ESLintUtils.RuleCreator(meta_js_1.ge
20
21
  },
21
22
  defaultOptions: [],
22
23
  create(context) {
23
- const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = (0, track_zod_schema_imports_js_1.trackZodSchemaImports)();
24
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
24
25
  return {
25
26
  ImportDeclaration: importDeclarationListener,
26
27
  CallExpression(node) {
@@ -1,4 +1,6 @@
1
1
  import type { TSESLint } from '@typescript-eslint/utils';
2
- export declare const requireBrandTypeParameter: TSESLint.RuleModule<"missingTypeParameter" | "removeBrandFunction", [], unknown, TSESLint.RuleListener> & {
2
+ export declare const requireBrandTypeParameter: TSESLint.RuleModule<"missingTypeParameter" | "removeBrandFunction", [], {
3
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
4
+ }, TSESLint.RuleListener> & {
3
5
  name: string;
4
6
  };
@@ -1,4 +1,6 @@
1
1
  import type { TSESLint } from '@typescript-eslint/utils';
2
- export declare const requireBrandTypeParameter: TSESLint.RuleModule<"missingTypeParameter" | "removeBrandFunction", [], unknown, TSESLint.RuleListener> & {
2
+ export declare const requireBrandTypeParameter: TSESLint.RuleModule<"missingTypeParameter" | "removeBrandFunction", [], {
3
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
4
+ }, TSESLint.RuleListener> & {
3
5
  name: string;
4
6
  };
@@ -1,12 +1,13 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- import { getRuleURL } from "../meta.js";
3
- import { trackZodSchemaImports } from "../utils/track-zod-schema-imports.js";
4
- export const requireBrandTypeParameter = ESLintUtils.RuleCreator(getRuleURL)({
1
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
2
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
3
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('all');
4
+ export const requireBrandTypeParameter = createZodPluginRule({
5
5
  name: 'require-brand-type-parameter',
6
6
  meta: {
7
7
  hasSuggestions: true,
8
8
  type: 'problem',
9
9
  docs: {
10
+ zodImportAllowedSource,
10
11
  description: 'Require type parameter on `.brand()` functions',
11
12
  },
12
13
  messages: {
@@ -2,14 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requireErrorMessage = void 0;
4
4
  const utils_1 = require("@typescript-eslint/utils");
5
- const meta_js_1 = require("../meta.cjs");
5
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
6
6
  const track_zod_schema_imports_js_1 = require("../utils/track-zod-schema-imports.cjs");
7
- exports.requireErrorMessage = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL)({
7
+ const { zodImportAllowedSource, trackZodSchemaImports, } = (0, track_zod_schema_imports_js_1.createZodSchemaImportTrack)('all');
8
+ exports.requireErrorMessage = (0, create_plugin_rule_js_1.createZodPluginRule)({
8
9
  name: 'require-error-message',
9
10
  meta: {
10
11
  type: 'suggestion',
11
12
  fixable: 'code',
12
13
  docs: {
14
+ zodImportAllowedSource,
13
15
  description: 'Enforce that custom refinements include an error message',
14
16
  },
15
17
  messages: {
@@ -21,7 +23,7 @@ exports.requireErrorMessage = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleU
21
23
  },
22
24
  defaultOptions: [],
23
25
  create(context) {
24
- const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = (0, track_zod_schema_imports_js_1.trackZodSchemaImports)();
26
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
25
27
  return {
26
28
  ImportDeclaration: importDeclarationListener,
27
29
  CallExpression(node) {
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const requireErrorMessage: ESLintUtils.RuleModule<"requireErrorMessage" | "preferError" | "removeMessage", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const requireErrorMessage: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<"requireErrorMessage" | "preferError" | "removeMessage", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,4 +1,5 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const requireErrorMessage: ESLintUtils.RuleModule<"requireErrorMessage" | "preferError" | "removeMessage", [], unknown, ESLintUtils.RuleListener> & {
1
+ export declare const requireErrorMessage: import("@typescript-eslint/utils/ts-eslint").RuleModule<"requireErrorMessage" | "preferError" | "removeMessage", [], {
2
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
3
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
3
4
  name: string;
4
5
  };
@@ -1,12 +1,14 @@
1
- import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
2
- import { getRuleURL } from "../meta.js";
3
- import { trackZodSchemaImports } from "../utils/track-zod-schema-imports.js";
4
- export const requireErrorMessage = ESLintUtils.RuleCreator(getRuleURL)({
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
3
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
4
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('all');
5
+ export const requireErrorMessage = createZodPluginRule({
5
6
  name: 'require-error-message',
6
7
  meta: {
7
8
  type: 'suggestion',
8
9
  fixable: 'code',
9
10
  docs: {
11
+ zodImportAllowedSource,
10
12
  description: 'Enforce that custom refinements include an error message',
11
13
  },
12
14
  messages: {
@@ -2,13 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requireSchemaSuffix = void 0;
4
4
  const utils_1 = require("@typescript-eslint/utils");
5
- const meta_js_1 = require("../meta.cjs");
5
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
6
6
  const track_zod_schema_imports_js_1 = require("../utils/track-zod-schema-imports.cjs");
7
- exports.requireSchemaSuffix = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL)({
7
+ const { zodImportAllowedSource, trackZodSchemaImports, } = (0, track_zod_schema_imports_js_1.createZodSchemaImportTrack)('all');
8
+ exports.requireSchemaSuffix = (0, create_plugin_rule_js_1.createZodPluginRule)({
8
9
  name: 'require-schema-suffix',
9
10
  meta: {
10
11
  type: 'suggestion',
11
12
  docs: {
13
+ zodImportAllowedSource,
12
14
  description: 'Require schema suffix when declaring a Zod schema',
13
15
  },
14
16
  messages: {
@@ -29,7 +31,7 @@ exports.requireSchemaSuffix = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleU
29
31
  },
30
32
  defaultOptions: [{ suffix: 'Schema' }],
31
33
  create(context, [{ suffix }]) {
32
- const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = (0, track_zod_schema_imports_js_1.trackZodSchemaImports)();
34
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
33
35
  return {
34
36
  ImportDeclaration: importDeclarationListener,
35
37
  VariableDeclarator(node) {
@@ -1,8 +1,9 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
1
  interface Options {
3
2
  suffix: string;
4
3
  }
5
- export declare const requireSchemaSuffix: ESLintUtils.RuleModule<"noSchemaSuffix", [Options], unknown, ESLintUtils.RuleListener> & {
4
+ export declare const requireSchemaSuffix: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<"noSchemaSuffix", [Options], {
5
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
6
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
6
7
  name: string;
7
8
  };
8
9
  export {};
@@ -1,8 +1,9 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
1
  interface Options {
3
2
  suffix: string;
4
3
  }
5
- export declare const requireSchemaSuffix: ESLintUtils.RuleModule<"noSchemaSuffix", [Options], unknown, ESLintUtils.RuleListener> & {
4
+ export declare const requireSchemaSuffix: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noSchemaSuffix", [Options], {
5
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
6
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
6
7
  name: string;
7
8
  };
8
9
  export {};
@@ -1,11 +1,13 @@
1
- import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
2
- import { getRuleURL } from "../meta.js";
3
- import { trackZodSchemaImports } from "../utils/track-zod-schema-imports.js";
4
- export const requireSchemaSuffix = ESLintUtils.RuleCreator(getRuleURL)({
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
3
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
4
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('all');
5
+ export const requireSchemaSuffix = createZodPluginRule({
5
6
  name: 'require-schema-suffix',
6
7
  meta: {
7
8
  type: 'suggestion',
8
9
  docs: {
10
+ zodImportAllowedSource,
9
11
  description: 'Require schema suffix when declaring a Zod schema',
10
12
  },
11
13
  messages: {
@@ -6,13 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.schemaErrorPropertyStyle = void 0;
7
7
  const utils_1 = require("@typescript-eslint/utils");
8
8
  const esquery_1 = __importDefault(require("esquery"));
9
- const meta_js_1 = require("../meta.cjs");
9
+ const create_plugin_rule_js_1 = require("../utils/create-plugin-rule.cjs");
10
10
  const track_zod_schema_imports_js_1 = require("../utils/track-zod-schema-imports.cjs");
11
- exports.schemaErrorPropertyStyle = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL)({
11
+ const { zodImportAllowedSource, trackZodSchemaImports, } = (0, track_zod_schema_imports_js_1.createZodSchemaImportTrack)('all');
12
+ exports.schemaErrorPropertyStyle = (0, create_plugin_rule_js_1.createZodPluginRule)({
12
13
  name: 'schema-error-property-style',
13
14
  meta: {
14
15
  type: 'suggestion',
15
16
  docs: {
17
+ zodImportAllowedSource,
16
18
  description: 'Enforce consistent style for error messages in Zod schema validation (using ESQuery patterns)',
17
19
  },
18
20
  messages: {
@@ -40,7 +42,7 @@ exports.schemaErrorPropertyStyle = utils_1.ESLintUtils.RuleCreator(meta_js_1.get
40
42
  { selector: 'Literal,TemplateLiteral', example: "'error message'" },
41
43
  ],
42
44
  create(context, [{ selector, example }]) {
43
- const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = (0, track_zod_schema_imports_js_1.trackZodSchemaImports)();
45
+ const { importDeclarationListener, detectZodSchemaRootNode, collectZodChainMethods, } = trackZodSchemaImports();
44
46
  try {
45
47
  esquery_1.default.parse(selector);
46
48
  }
@@ -1,9 +1,10 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
1
  type MessageIds = 'invalidStyle' | 'invalidSelector';
3
- export declare const schemaErrorPropertyStyle: ESLintUtils.RuleModule<MessageIds, [{
2
+ export declare const schemaErrorPropertyStyle: import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleModule<MessageIds, [{
4
3
  selector: string;
5
4
  example: string;
6
- }], unknown, ESLintUtils.RuleListener> & {
5
+ }], {
6
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
7
+ }, import("@typescript-eslint/utils/dist/ts-eslint/Rule.js").RuleListener> & {
7
8
  name: string;
8
9
  };
9
10
  export {};
@@ -1,9 +1,10 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
1
  type MessageIds = 'invalidStyle' | 'invalidSelector';
3
- export declare const schemaErrorPropertyStyle: ESLintUtils.RuleModule<MessageIds, [{
2
+ export declare const schemaErrorPropertyStyle: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, [{
4
3
  selector: string;
5
4
  example: string;
6
- }], unknown, ESLintUtils.RuleListener> & {
5
+ }], {
6
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
7
+ }, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
7
8
  name: string;
8
9
  };
9
10
  export {};
@@ -1,12 +1,14 @@
1
- import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import esquery from 'esquery';
3
- import { getRuleURL } from "../meta.js";
4
- import { trackZodSchemaImports } from "../utils/track-zod-schema-imports.js";
5
- export const schemaErrorPropertyStyle = ESLintUtils.RuleCreator(getRuleURL)({
3
+ import { createZodPluginRule } from "../utils/create-plugin-rule.js";
4
+ import { createZodSchemaImportTrack } from "../utils/track-zod-schema-imports.js";
5
+ const { zodImportAllowedSource, trackZodSchemaImports, } = createZodSchemaImportTrack('all');
6
+ export const schemaErrorPropertyStyle = createZodPluginRule({
6
7
  name: 'schema-error-property-style',
7
8
  meta: {
8
9
  type: 'suggestion',
9
10
  docs: {
11
+ zodImportAllowedSource,
10
12
  description: 'Enforce consistent style for error messages in Zod schema validation (using ESQuery patterns)',
11
13
  },
12
14
  messages: {
@@ -19,6 +19,13 @@ function buildZodChainReplacementFix(opts) {
19
19
  const fullText = sourceCode.getText(m.node);
20
20
  return fullText.slice(objText.length);
21
21
  });
22
- const replacement = `${prefixText}.${toMethodName}()${betweenSuffixes.join('')}`;
22
+ let replacement = `${prefixText}.${toMethodName}(`;
23
+ if (toNode.arguments.length) {
24
+ const argsText = toNode.arguments
25
+ .map((arg) => sourceCode.getText(arg))
26
+ .join(', ');
27
+ replacement += argsText;
28
+ }
29
+ replacement += `)${betweenSuffixes.join('')}`;
23
30
  return fixer.replaceTextRange([fromNode.range[0], toNode.range[1]], replacement);
24
31
  }
@@ -16,6 +16,13 @@ export function buildZodChainReplacementFix(opts) {
16
16
  const fullText = sourceCode.getText(m.node);
17
17
  return fullText.slice(objText.length);
18
18
  });
19
- const replacement = `${prefixText}.${toMethodName}()${betweenSuffixes.join('')}`;
19
+ let replacement = `${prefixText}.${toMethodName}(`;
20
+ if (toNode.arguments.length) {
21
+ const argsText = toNode.arguments
22
+ .map((arg) => sourceCode.getText(arg))
23
+ .join(', ');
24
+ replacement += argsText;
25
+ }
26
+ replacement += `)${betweenSuffixes.join('')}`;
20
27
  return fixer.replaceTextRange([fromNode.range[0], toNode.range[1]], replacement);
21
28
  }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createZodPluginRule = void 0;
4
+ const utils_1 = require("@typescript-eslint/utils");
5
+ const meta_js_1 = require("../meta.cjs");
6
+ exports.createZodPluginRule = utils_1.ESLintUtils.RuleCreator(meta_js_1.getRuleURL);
@@ -0,0 +1,13 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ import type { ZodImportAllowedSource } from "./is-zod-import-source.cjs";
3
+ export type ZodPluginRule = ESLintUtils.RuleWithMetaAndName<[
4
+ ], string, {
5
+ zodImportAllowedSource: ZodImportAllowedSource;
6
+ }>;
7
+ export declare const createZodPluginRule: <Options extends readonly unknown[], MessageIds extends string>({ meta, name, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<Options, MessageIds, {
8
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
9
+ }>>) => ESLintUtils.RuleModule<MessageIds, Options, {
10
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
11
+ }, ESLintUtils.RuleListener> & {
12
+ name: string;
13
+ };
@@ -0,0 +1,13 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ import type { ZodImportAllowedSource } from "./is-zod-import-source.js";
3
+ export type ZodPluginRule = ESLintUtils.RuleWithMetaAndName<[
4
+ ], string, {
5
+ zodImportAllowedSource: ZodImportAllowedSource;
6
+ }>;
7
+ export declare const createZodPluginRule: <Options extends readonly unknown[], MessageIds extends string>({ meta, name, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<Options, MessageIds, {
8
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
9
+ }>>) => ESLintUtils.RuleModule<MessageIds, Options, {
10
+ zodImportAllowedSource: "all" | "zod" | "zod-mini";
11
+ }, ESLintUtils.RuleListener> & {
12
+ name: string;
13
+ };
@@ -0,0 +1,3 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ import { getRuleURL } from "../meta.js";
3
+ export const createZodPluginRule = ESLintUtils.RuleCreator(getRuleURL);