eslint-plugin-valibot 0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/utils/create-rule.ts","../src/rules/consistent-import.ts","../src/utils/collect-valibot-imports.ts","../src/utils/is-valibot-call.ts","../src/utils/is-schema-expression.ts","../src/utils/schema-identifiers.ts","../src/rules/consistent-schema-convention.ts","../src/utils/pipe-analysis.ts","../src/rules/no-duplicate-pipe-actions.ts","../src/rules/no-recreated-schemas.ts","../src/rules/no-schema-as-type.ts","../src/rules/prefer-picklist.ts","../src/rules/prefer-nullable-over-union-null.ts","../src/rules/prefer-optional-over-union-undefined.ts","../src/rules/prefer-variant.ts","../src/rules/prefer-nullish.ts","../src/rules/no-unguarded-parse.ts","../src/rules/no-redundant-schema-wrappers.ts","../src/rules/no-any-schema.ts","../src/rules/no-loose-object.ts","../src/rules/no-unknown-schema.ts","../src/rules/no-instanceof-builtins.ts","../src/rules/no-empty-pipe.ts","../src/rules/no-transform-in-record-key.ts","../src/utils/issue-message-signatures.ts","../src/rules/require-issue-messages.ts","../src/rules/registry.ts","../src/configs/flat/recommended.ts","../src/configs/flat/strict.ts","../src/configs/flat/stylistic.ts","../src/configs/flat/index.ts","../src/configs/legacy/recommended.ts","../src/configs/legacy/strict.ts","../src/configs/legacy/stylistic.ts","../src/configs/legacy/index.ts","../src/plugin.ts"],"sourcesContent":["{\n \"name\": \"eslint-plugin-valibot\",\n \"version\": \"0.1.0\",\n \"description\": \"ESLint rules for safer, more maintainable Valibot usage.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/nimaebra/eslint-plugin-valibot.git\"\n },\n \"homepage\": \"https://github.com/nimaebra/eslint-plugin-valibot#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/nimaebra/eslint-plugin-valibot/issues\"\n },\n \"type\": \"module\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"eslint\",\n \"eslint-plugin\",\n \"eslintplugin\",\n \"valibot\",\n \"schema\",\n \"validation\",\n \"typescript\"\n ],\n \"engines\": {\n \"node\": \"^20.19.0 || ^22.13.0 || >=24.0.0\"\n },\n \"packageManager\": \"pnpm@10.33.4\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup --config tsup.config.ts\",\n \"changeset\": \"changeset\",\n \"clean\": \"rimraf dist coverage\",\n \"configs:check\": \"tsx scripts/check-configs.ts\",\n \"create:rule\": \"tsx scripts/generate-rule.ts\",\n \"docs:build\": \"eslint-doc-generator . && tsx scripts/build-configs-doc.ts\",\n \"docs:check\": \"eslint-doc-generator --check . && tsx scripts/check-docs.ts\",\n \"format\": \"prettier . --write\",\n \"format:check\": \"prettier . --check\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"knip\": \"knip\",\n \"pack:dry-run\": \"pnpm pack --dry-run\",\n \"prepublishOnly\": \"pnpm check\",\n \"release:publish\": \"changeset publish\",\n \"smoke:pack\": \"tsx scripts/smoke-pack.ts\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit\",\n \"test\": \"vitest run tests/rules tests/configs\",\n \"test:integration\": \"vitest run tests/integration\",\n \"test:watch\": \"vitest\",\n \"check\": \"pnpm lint && pnpm typecheck && pnpm knip && pnpm test && pnpm build && pnpm test:integration && pnpm docs:check && pnpm configs:check\",\n \"version-packages\": \"changeset version\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0 || ^10.0.0\",\n \"valibot\": \"^1.0.0\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"^2.31.0\",\n \"@eslint/js\": \"^10.0.1\",\n \"@types/node\": \"^24.12.0\",\n \"@typescript-eslint/utils\": \"^8.59.4\",\n \"eslint\": \"^10.4.0\",\n \"eslint-doc-generator\": \"^3.6.0\",\n \"globals\": \"^17.6.0\",\n \"knip\": \"^6.14.1\",\n \"prettier\": \"^3.8.3\",\n \"rimraf\": \"^6.1.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.22.3\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.59.4\",\n \"vite\": \"^7.2.4\",\n \"vitest\": \"^4.1.7\"\n }\n}\n","import { ESLintUtils } from '@typescript-eslint/utils';\n\nconst DOCS_BASE_URL =\n 'https://github.com/nimaebrazeh/eslint-plugin-valibot/blob/main/docs/rules';\n\nexport const createRule = ESLintUtils.RuleCreator(\n (ruleName) => `${DOCS_BASE_URL}/${ruleName}.md`,\n);\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\n\nconst STYLES = ['namespace', 'named'] as const;\n\ntype Style = (typeof STYLES)[number];\n\ntype Options = [\n {\n namespaceAlias?: string;\n style?: Style;\n },\n];\ntype MessageIds = 'namespaceAlias' | 'preferNamed' | 'preferNamespace';\n\ninterface ResolvedOptions {\n namespaceAlias: string;\n style: Style;\n}\n\nexport const consistentImport = createRule<Options, MessageIds>({\n name: 'consistent-import',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Enforce a consistent Valibot import style using either namespace or named imports.',\n },\n schema: [\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n namespaceAlias: {\n type: 'string',\n minLength: 1,\n },\n style: {\n type: 'string',\n enum: [...STYLES],\n },\n },\n },\n ],\n messages: {\n namespaceAlias:\n \"Use '{{expectedAlias}}' as the namespace alias for Valibot imports.\",\n preferNamed:\n \"Use named Valibot imports like `import { object, string } from 'valibot'`.\",\n preferNamespace:\n \"Use a namespace Valibot import like `import * as {{namespaceAlias}} from 'valibot'`.\",\n },\n },\n defaultOptions: [\n {\n namespaceAlias: 'v',\n style: 'namespace',\n },\n ],\n create(context, [options]) {\n const resolvedOptions = resolveOptions(options);\n\n return {\n ImportDeclaration(node) {\n if (node.source.value !== 'valibot') {\n return;\n }\n\n if (resolvedOptions.style === 'namespace') {\n verifyNamespaceImport(context, node, resolvedOptions);\n return;\n }\n\n verifyNamedImport(context, node);\n },\n };\n },\n});\n\nfunction resolveOptions(options: Options[0] | undefined): ResolvedOptions {\n return {\n namespaceAlias: options?.namespaceAlias ?? 'v',\n style: options?.style ?? 'namespace',\n };\n}\n\nfunction verifyNamespaceImport(\n context: Parameters<typeof consistentImport.create>[0],\n node: TSESTree.ImportDeclaration,\n options: ResolvedOptions,\n): void {\n const namespaceSpecifier = node.specifiers.find(\n (specifier): specifier is TSESTree.ImportNamespaceSpecifier =>\n specifier.type === 'ImportNamespaceSpecifier',\n );\n\n const hasOnlyNamespaceSpecifier =\n node.specifiers.length === 1 && Boolean(namespaceSpecifier);\n\n if (!namespaceSpecifier || !hasOnlyNamespaceSpecifier) {\n context.report({\n node,\n messageId: 'preferNamespace',\n data: {\n namespaceAlias: options.namespaceAlias,\n },\n });\n return;\n }\n\n if (namespaceSpecifier.local.name !== options.namespaceAlias) {\n context.report({\n node: namespaceSpecifier.local,\n messageId: 'namespaceAlias',\n data: {\n expectedAlias: options.namespaceAlias,\n },\n });\n }\n}\n\nfunction verifyNamedImport(\n context: Parameters<typeof consistentImport.create>[0],\n node: TSESTree.ImportDeclaration,\n): void {\n const hasNamespaceSpecifier = node.specifiers.some(\n (specifier) => specifier.type === 'ImportNamespaceSpecifier',\n );\n const hasDefaultSpecifier = node.specifiers.some(\n (specifier) => specifier.type === 'ImportDefaultSpecifier',\n );\n const hasNamedSpecifiers = node.specifiers.some(\n (specifier) => specifier.type === 'ImportSpecifier',\n );\n\n if (!hasNamedSpecifiers || hasNamespaceSpecifier || hasDefaultSpecifier) {\n context.report({\n node,\n messageId: 'preferNamed',\n });\n }\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nconst VALIBOT_MODULE_NAME = 'valibot';\n\nexport interface ValibotImports {\n namespaces: Set<string>;\n importedNames: Map<string, string>;\n}\n\nexport function createEmptyValibotImports(): ValibotImports {\n return {\n namespaces: new Set<string>(),\n importedNames: new Map<string, string>(),\n };\n}\n\nexport function hasValibotImports(imports: ValibotImports): boolean {\n return imports.namespaces.size > 0 || imports.importedNames.size > 0;\n}\n\nexport function collectValibotImports(\n program: TSESTree.Program,\n): ValibotImports {\n const imports = createEmptyValibotImports();\n\n for (const statement of program.body) {\n if (\n statement.type === 'ImportDeclaration' &&\n statement.source.value === VALIBOT_MODULE_NAME\n ) {\n for (const specifier of statement.specifiers) {\n if (specifier.type === 'ImportNamespaceSpecifier') {\n imports.namespaces.add(specifier.local.name);\n continue;\n }\n\n if (specifier.type === 'ImportSpecifier') {\n const importedName =\n specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : String(specifier.imported.value);\n\n imports.importedNames.set(specifier.local.name, importedName);\n }\n }\n\n continue;\n }\n\n if (statement.type !== 'VariableDeclaration') {\n continue;\n }\n\n for (const declaration of statement.declarations) {\n if (!declaration.init || declaration.init.type !== 'CallExpression') {\n continue;\n }\n\n if (!isRequireFromValibot(declaration.init)) {\n continue;\n }\n\n if (declaration.id.type === 'Identifier') {\n imports.namespaces.add(declaration.id.name);\n continue;\n }\n\n if (declaration.id.type !== 'ObjectPattern') {\n continue;\n }\n\n for (const property of declaration.id.properties) {\n if (property.type !== 'Property') {\n continue;\n }\n\n if (property.key.type !== 'Identifier') {\n continue;\n }\n\n if (property.value.type !== 'Identifier') {\n continue;\n }\n\n imports.importedNames.set(property.value.name, property.key.name);\n }\n }\n }\n\n return imports;\n}\n\nfunction isRequireFromValibot(node: TSESTree.CallExpression): boolean {\n return (\n node.callee.type === 'Identifier' &&\n node.callee.name === 'require' &&\n node.arguments.length === 1 &&\n node.arguments[0]?.type === 'Literal' &&\n node.arguments[0].value === VALIBOT_MODULE_NAME\n );\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport type { ValibotImports } from './collect-valibot-imports';\n\nexport function getValibotCallName(\n node: TSESTree.CallExpression,\n imports: ValibotImports,\n): string | null {\n if (node.callee.type === 'Identifier') {\n return imports.importedNames.get(node.callee.name) ?? null;\n }\n\n if (\n node.callee.type === 'MemberExpression' &&\n !node.callee.computed &&\n node.callee.object.type === 'Identifier' &&\n node.callee.property.type === 'Identifier' &&\n imports.namespaces.has(node.callee.object.name)\n ) {\n return node.callee.property.name;\n }\n\n return null;\n}\n\nexport function isValibotCall(\n node: TSESTree.CallExpression,\n imports: ValibotImports,\n functionName: string,\n): boolean {\n return getValibotCallName(node, imports) === functionName;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport type { ValibotImports } from './collect-valibot-imports';\nimport { getValibotCallName } from './is-valibot-call';\n\nconst SCHEMA_CALL_NAMES = new Set([\n 'any',\n 'array',\n 'bigint',\n 'blob',\n 'boolean',\n 'custom',\n 'date',\n 'enum',\n 'exactOptional',\n 'fallback',\n 'file',\n 'function',\n 'instance',\n 'intersect',\n 'lazy',\n 'literal',\n 'looseObject',\n 'looseTuple',\n 'map',\n 'message',\n 'nan',\n 'never',\n 'nonNullable',\n 'nonNullish',\n 'nonOptional',\n 'null',\n 'nullable',\n 'nullish',\n 'number',\n 'object',\n 'objectWithRest',\n 'omit',\n 'optional',\n 'partial',\n 'pick',\n 'picklist',\n 'pipe',\n 'promise',\n 'readonly',\n 'record',\n 'required',\n 'set',\n 'strictObject',\n 'strictTuple',\n 'string',\n 'symbol',\n 'tuple',\n 'tupleWithRest',\n 'undefined',\n 'undefinedable',\n 'union',\n 'unknown',\n 'unwrap',\n 'variant',\n 'void',\n]);\n\nexport function isValibotSchemaExpression(\n node: TSESTree.Node | null | undefined,\n imports: ValibotImports,\n): node is TSESTree.CallExpression {\n return node?.type === 'CallExpression' && isValibotSchemaCall(node, imports);\n}\n\nfunction isValibotSchemaCall(\n node: TSESTree.CallExpression,\n imports: ValibotImports,\n): boolean {\n const callName = getValibotCallName(node, imports);\n\n return callName !== null && SCHEMA_CALL_NAMES.has(callName);\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport type { ValibotImports } from './collect-valibot-imports';\nimport { isValibotSchemaExpression } from './is-schema-expression';\n\nexport function getSchemaBindingName(\n node: TSESTree.VariableDeclarator,\n imports: ValibotImports,\n): string | null {\n if (\n node.id.type !== 'Identifier' ||\n !isValibotSchemaExpression(node.init, imports)\n ) {\n return null;\n }\n\n return node.id.name;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { getSchemaBindingName } from '../utils/schema-identifiers';\n\nconst CONVENTIONS = ['same-name', 'suffix'] as const;\nconst SCOPES = ['exported', 'all'] as const;\nconst INFER_TYPE_NAMES: Readonly<Record<string, InferKind>> = {\n InferInput: 'input',\n InferOutput: 'output',\n};\n\ntype Convention = (typeof CONVENTIONS)[number];\ntype InferKind = 'input' | 'output';\ntype Scope = (typeof SCOPES)[number];\n\ntype Options = [\n {\n allowDataSuffix?: boolean;\n convention?: Convention;\n dataSuffix?: string;\n inputSuffix?: string;\n outputSuffix?: string;\n schemaSuffix?: string;\n scope?: Scope;\n },\n];\ntype MessageIds = 'schemaNameConvention' | 'typeNameConvention';\n\ninterface ConventionOptions {\n allowDataSuffix: boolean;\n convention: Convention;\n dataSuffix: string;\n inputSuffix: string;\n outputSuffix: string;\n schemaSuffix: string;\n scope: Scope;\n}\n\ninterface SchemaBindingInfo {\n name: string;\n node: TSESTree.Identifier;\n}\n\ninterface InferTypeAliasInfo {\n aliasName: string;\n inferKind: InferKind;\n node: TSESTree.Identifier;\n schemaName: string;\n}\n\nexport const consistentSchemaConvention = createRule<Options, MessageIds>({\n name: 'consistent-schema-convention',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Enforce a consistent Valibot schema naming convention for exported schemas and inferred types.',\n },\n schema: [\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n allowDataSuffix: {\n type: 'boolean',\n },\n convention: {\n type: 'string',\n enum: [...CONVENTIONS],\n },\n dataSuffix: {\n type: 'string',\n minLength: 1,\n },\n inputSuffix: {\n type: 'string',\n minLength: 1,\n },\n outputSuffix: {\n type: 'string',\n minLength: 1,\n },\n schemaSuffix: {\n type: 'string',\n minLength: 1,\n },\n scope: {\n type: 'string',\n enum: [...SCOPES],\n },\n },\n },\n ],\n messages: {\n schemaNameConvention:\n \"Rename this schema binding to '{{expectedName}}' to follow the '{{convention}}' naming convention.\",\n typeNameConvention:\n \"Rename this inferred type alias to '{{expectedName}}' to follow the '{{convention}}' naming convention.\",\n },\n },\n defaultOptions: [\n {\n allowDataSuffix: true,\n convention: 'suffix',\n dataSuffix: 'Data',\n inputSuffix: 'Input',\n outputSuffix: 'Output',\n schemaSuffix: 'Schema',\n scope: 'exported',\n },\n ],\n create(context, [options]) {\n let imports = createEmptyValibotImports();\n const exportedTypeBindings = new Set<string>();\n const exportedValueBindings = new Set<string>();\n const inferTypeAliases: InferTypeAliasInfo[] = [];\n const resolvedOptions = resolveOptions(options);\n const schemaBindings = new Map<string, SchemaBindingInfo>();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n exportedTypeBindings.clear();\n exportedValueBindings.clear();\n inferTypeAliases.length = 0;\n schemaBindings.clear();\n collectExportedBindings(\n node,\n exportedValueBindings,\n exportedTypeBindings,\n );\n },\n VariableDeclarator(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const bindingName = getSchemaBindingName(node, imports);\n\n if (\n !bindingName ||\n !shouldCheckSchemaBinding(\n node,\n resolvedOptions,\n exportedValueBindings,\n )\n ) {\n return;\n }\n\n if (node.id.type !== 'Identifier') {\n return;\n }\n\n schemaBindings.set(bindingName, {\n name: bindingName,\n node: node.id,\n });\n },\n TSTypeAliasDeclaration(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const inferTypeAlias = getInferTypeAliasInfo(node, imports);\n\n if (\n !inferTypeAlias ||\n !shouldCheckTypeAlias(node, resolvedOptions, exportedTypeBindings)\n ) {\n return;\n }\n\n inferTypeAliases.push(inferTypeAlias);\n },\n 'Program:exit'() {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n for (const binding of schemaBindings.values()) {\n const expectedName = getExpectedSchemaName(\n binding.name,\n resolvedOptions,\n );\n\n if (binding.name === expectedName) {\n continue;\n }\n\n context.report({\n node: binding.node,\n messageId: 'schemaNameConvention',\n data: {\n convention: resolvedOptions.convention,\n expectedName,\n },\n });\n }\n\n for (const typeAlias of inferTypeAliases) {\n if (!schemaBindings.has(typeAlias.schemaName)) {\n continue;\n }\n\n const expectedName = getExpectedTypeAliasName(\n typeAlias.schemaName,\n typeAlias.inferKind,\n resolvedOptions,\n );\n\n if (\n typeAlias.aliasName === expectedName ||\n isAllowedDataAliasName(\n typeAlias.aliasName,\n typeAlias.schemaName,\n resolvedOptions,\n )\n ) {\n continue;\n }\n\n context.report({\n node: typeAlias.node,\n messageId: 'typeNameConvention',\n data: {\n convention: resolvedOptions.convention,\n expectedName,\n },\n });\n }\n },\n };\n },\n});\n\nfunction resolveOptions(options: Options[0] | undefined): ConventionOptions {\n return {\n allowDataSuffix: options?.allowDataSuffix ?? true,\n convention: options?.convention ?? 'suffix',\n dataSuffix: options?.dataSuffix ?? 'Data',\n inputSuffix: options?.inputSuffix ?? 'Input',\n outputSuffix: options?.outputSuffix ?? 'Output',\n schemaSuffix: options?.schemaSuffix ?? 'Schema',\n scope: options?.scope ?? 'exported',\n };\n}\n\nfunction collectExportedBindings(\n program: TSESTree.Program,\n exportedValueBindings: Set<string>,\n exportedTypeBindings: Set<string>,\n): void {\n for (const statement of program.body) {\n if (statement.type === 'ExportDefaultDeclaration') {\n if (statement.declaration.type === 'Identifier') {\n exportedValueBindings.add(statement.declaration.name);\n }\n\n continue;\n }\n\n if (statement.type !== 'ExportNamedDeclaration') {\n continue;\n }\n\n if (statement.declaration) {\n collectExportedDeclarationBindings(\n statement.declaration,\n exportedValueBindings,\n exportedTypeBindings,\n );\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.local.type !== 'Identifier') {\n continue;\n }\n\n if (statement.exportKind === 'type' || specifier.exportKind === 'type') {\n exportedTypeBindings.add(specifier.local.name);\n continue;\n }\n\n exportedValueBindings.add(specifier.local.name);\n }\n }\n}\n\nfunction collectExportedDeclarationBindings(\n declaration: TSESTree.ExportNamedDeclaration['declaration'],\n exportedValueBindings: Set<string>,\n exportedTypeBindings: Set<string>,\n): void {\n if (!declaration) {\n return;\n }\n\n if (declaration.type === 'VariableDeclaration') {\n for (const declarator of declaration.declarations) {\n if (declarator.id.type === 'Identifier') {\n exportedValueBindings.add(declarator.id.name);\n }\n }\n\n return;\n }\n\n if (declaration.type === 'TSTypeAliasDeclaration') {\n exportedTypeBindings.add(declaration.id.name);\n }\n}\n\nfunction shouldCheckSchemaBinding(\n node: TSESTree.VariableDeclarator,\n options: ConventionOptions,\n exportedValueBindings: Set<string>,\n): boolean {\n return (\n options.scope === 'all' ||\n isInlineExportedVariableDeclarator(node) ||\n (node.id.type === 'Identifier' && exportedValueBindings.has(node.id.name))\n );\n}\n\nfunction shouldCheckTypeAlias(\n node: TSESTree.TSTypeAliasDeclaration,\n options: ConventionOptions,\n exportedTypeBindings: Set<string>,\n): boolean {\n return (\n options.scope === 'all' ||\n isInlineExportedTypeAlias(node) ||\n exportedTypeBindings.has(node.id.name)\n );\n}\n\nfunction isInlineExportedVariableDeclarator(\n node: TSESTree.VariableDeclarator,\n): boolean {\n return node.parent?.parent?.type === 'ExportNamedDeclaration';\n}\n\nfunction isInlineExportedTypeAlias(\n node: TSESTree.TSTypeAliasDeclaration,\n): boolean {\n return node.parent?.type === 'ExportNamedDeclaration';\n}\n\nfunction getInferTypeAliasInfo(\n node: TSESTree.TSTypeAliasDeclaration,\n imports: ValibotImports,\n): InferTypeAliasInfo | null {\n if (node.typeAnnotation.type !== 'TSTypeReference') {\n return null;\n }\n\n const inferKind = getInferTypeKind(node.typeAnnotation, imports);\n const typeParameter = node.typeAnnotation.typeArguments?.params[0];\n const schemaName = typeParameter && getSchemaNameFromTypeQuery(typeParameter);\n\n if (!inferKind || !schemaName) {\n return null;\n }\n\n return {\n aliasName: node.id.name,\n inferKind,\n node: node.id,\n schemaName,\n };\n}\n\nfunction getInferTypeKind(\n node: TSESTree.TSTypeReference,\n imports: ValibotImports,\n): InferKind | null {\n if (node.typeName.type === 'Identifier') {\n return (\n INFER_TYPE_NAMES[imports.importedNames.get(node.typeName.name) ?? ''] ??\n null\n );\n }\n\n if (node.typeName.type !== 'TSQualifiedName') {\n return null;\n }\n\n return node.typeName.left.type === 'Identifier' &&\n imports.namespaces.has(node.typeName.left.name)\n ? (INFER_TYPE_NAMES[node.typeName.right.name] ?? null)\n : null;\n}\n\nfunction getSchemaNameFromTypeQuery(node: TSESTree.TypeNode): string | null {\n return node.type === 'TSTypeQuery' && node.exprName.type === 'Identifier'\n ? node.exprName.name\n : null;\n}\n\nfunction getExpectedSchemaName(\n actualName: string,\n options: ConventionOptions,\n): string {\n const baseName = getNormalizedBaseName(actualName, options);\n\n return options.convention === 'same-name'\n ? baseName\n : `${baseName}${options.schemaSuffix}`;\n}\n\nfunction getExpectedTypeAliasName(\n schemaName: string,\n inferKind: InferKind,\n options: ConventionOptions,\n): string {\n const baseName = getNormalizedBaseName(schemaName, options);\n\n if (options.convention === 'same-name') {\n return baseName;\n }\n\n return `${baseName}${\n inferKind === 'input' ? options.inputSuffix : options.outputSuffix\n }`;\n}\n\nfunction isAllowedDataAliasName(\n aliasName: string,\n schemaName: string,\n options: ConventionOptions,\n): boolean {\n return (\n options.convention === 'suffix' &&\n options.allowDataSuffix &&\n aliasName ===\n `${getNormalizedBaseName(schemaName, options)}${options.dataSuffix}`\n );\n}\n\nfunction getNormalizedBaseName(\n value: string,\n options: ConventionOptions,\n): string {\n const strippedValue = stripKnownSuffix(value, options);\n\n return isPascalCaseLike(strippedValue)\n ? strippedValue\n : toPascalCase(strippedValue);\n}\n\nfunction stripKnownSuffix(value: string, options: ConventionOptions): string {\n const suffixes = [\n options.schemaSuffix,\n options.inputSuffix,\n options.outputSuffix,\n ...(options.allowDataSuffix ? [options.dataSuffix] : []),\n ].sort((left, right) => right.length - left.length);\n\n for (const suffix of suffixes) {\n if (value.endsWith(suffix) && value.length > suffix.length) {\n return value.slice(0, -suffix.length);\n }\n }\n\n return value;\n}\n\nfunction isPascalCaseLike(value: string): boolean {\n return /^[A-Z][A-Za-z0-9]*$/.test(value);\n}\n\nfunction toPascalCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .split(/[^A-Za-z0-9]+/)\n .filter(Boolean)\n .map((part) => part[0]?.toUpperCase() + part.slice(1))\n .join('');\n}\n","import type { TSESLint, TSESTree } from '@typescript-eslint/utils';\n\nimport type { ValibotImports } from './collect-valibot-imports';\nimport { getValibotCallName, isValibotCall } from './is-valibot-call';\n\nexport interface PipeActionDescriptor {\n actionIndex: number;\n fingerprint: string;\n name: string;\n node: TSESTree.CallExpression;\n}\n\nexport function getPipeActionDescriptors(\n pipeCall: TSESTree.CallExpression,\n imports: ValibotImports,\n sourceCode: Readonly<TSESLint.SourceCode>,\n): PipeActionDescriptor[] {\n if (\n !isValibotCall(pipeCall, imports, 'pipe') ||\n pipeCall.arguments.length < 2\n ) {\n return [];\n }\n\n return pipeCall.arguments.flatMap((argument, actionIndex) => {\n if (actionIndex === 0 || argument.type !== 'CallExpression') {\n return [];\n }\n\n const name = getValibotCallName(argument, imports);\n\n if (!name) {\n return [];\n }\n\n return [\n {\n actionIndex,\n fingerprint: sourceCode.getText(argument),\n name,\n node: argument,\n },\n ];\n });\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { getPipeActionDescriptors } from '../utils/pipe-analysis';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'duplicatePipeAction';\n\nexport const noDuplicatePipeActions = createRule<Options, MessageIds>({\n name: 'no-duplicate-pipe-actions',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Disallow duplicate Valibot actions inside the same pipe() call.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n duplicatePipeAction:\n 'This pipe action duplicates an earlier {{actionName}}() call in the same pipe.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'pipe')\n ) {\n return;\n }\n\n const seenActions = new Map<string, TSESTree.CallExpression>();\n\n for (const action of getPipeActionDescriptors(\n node,\n imports,\n sourceCode,\n )) {\n const firstAction = seenActions.get(action.fingerprint);\n\n if (!firstAction) {\n seenActions.set(action.fingerprint, action.node);\n continue;\n }\n\n context.report({\n node: action.node,\n messageId: 'duplicatePipeAction',\n data: {\n actionName: action.name,\n },\n fix: canSafelyRemoveDuplicateAction(\n node,\n action.actionIndex,\n sourceCode,\n )\n ? (fixer) => {\n const removalRange = getDuplicateActionRemovalRange(\n node,\n action.actionIndex,\n );\n\n return fixer.removeRange(removalRange);\n }\n : null,\n });\n }\n },\n };\n },\n});\n\nfunction canSafelyRemoveDuplicateAction(\n pipeCall: TSESTree.CallExpression,\n actionIndex: number,\n sourceCode: Readonly<{\n getCommentsBefore(node: TSESTree.Node): unknown[];\n getCommentsAfter(node: TSESTree.Node): unknown[];\n }>,\n): boolean {\n const currentAction = pipeCall.arguments[actionIndex];\n\n if (!currentAction) {\n return false;\n }\n\n if (\n sourceCode.getCommentsBefore(currentAction).length > 0 ||\n sourceCode.getCommentsAfter(currentAction).length > 0\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction getDuplicateActionRemovalRange(\n pipeCall: TSESTree.CallExpression,\n actionIndex: number,\n): TSESTree.Range {\n const currentAction = pipeCall.arguments[actionIndex];\n\n if (!currentAction) {\n return [pipeCall.range[0], pipeCall.range[0]];\n }\n\n const nextAction = pipeCall.arguments[actionIndex + 1];\n\n if (nextAction) {\n return [currentAction.range[0], nextAction.range[0]];\n }\n\n const previousAction = pipeCall.arguments[actionIndex - 1];\n\n if (!previousAction) {\n return currentAction.range;\n }\n\n return [previousAction.range[1], currentAction.range[1]];\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotSchemaExpression } from '../utils/is-schema-expression';\n\ntype Options = [];\ntype MessageIds = 'noRecreatedSchema';\n\nexport const noRecreatedSchemas = createRule<Options, MessageIds>({\n name: 'no-recreated-schemas',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Disallow recreating static Valibot schemas inside function scope.',\n },\n schema: [],\n messages: {\n noRecreatedSchema:\n 'This schema is recreated on every call. Hoist it to module scope unless it truly depends on runtime inputs.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n VariableDeclarator(node) {\n if (\n node.id.type !== 'Identifier' ||\n !isStaticSchemaRecreation(node.init, imports)\n ) {\n return;\n }\n\n context.report({\n node: node.id,\n messageId: 'noRecreatedSchema',\n });\n },\n ReturnStatement(node) {\n if (!isStaticSchemaRecreation(node.argument, imports)) {\n return;\n }\n\n context.report({\n node: node.argument,\n messageId: 'noRecreatedSchema',\n });\n },\n ArrowFunctionExpression(node) {\n if (\n node.body.type === 'BlockStatement' ||\n !isStaticSchemaRecreation(node.body, imports)\n ) {\n return;\n }\n\n context.report({\n node: node.body,\n messageId: 'noRecreatedSchema',\n });\n },\n };\n },\n});\n\nfunction isStaticSchemaRecreation(\n node: TSESTree.Expression | null | undefined,\n imports: ValibotImports,\n): node is TSESTree.CallExpression {\n return (\n hasValibotImports(imports) &&\n isValibotSchemaExpression(node, imports) &&\n findEnclosingFunction(node) !== null &&\n !containsNestedFunction(node) &&\n !hasDynamicSchemaInputs(node, imports)\n );\n}\n\nfunction findEnclosingFunction(\n node: TSESTree.Node,\n):\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression\n | null {\n let current: TSESTree.Node | undefined = node.parent;\n\n while (current) {\n if (isFunctionLike(current)) {\n return current;\n }\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction containsNestedFunction(node: TSESTree.Node): boolean {\n return traverseNode(\n node,\n (childNode) => childNode !== node && isFunctionLike(childNode),\n );\n}\n\nfunction hasDynamicSchemaInputs(\n node: TSESTree.Node,\n imports: ValibotImports,\n): boolean {\n return traverseNode(node, (childNode, parentNode) => {\n if (childNode === node || childNode.type !== 'Identifier') {\n return false;\n }\n\n if (\n imports.importedNames.has(childNode.name) ||\n imports.namespaces.has(childNode.name)\n ) {\n return false;\n }\n\n if (\n parentNode?.type === 'MemberExpression' &&\n parentNode.property === childNode &&\n !parentNode.computed\n ) {\n return false;\n }\n\n if (\n parentNode?.type === 'Property' &&\n parentNode.key === childNode &&\n !parentNode.computed\n ) {\n return false;\n }\n\n return true;\n });\n}\n\nfunction isFunctionLike(\n node: TSESTree.Node,\n): node is\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression {\n return (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n );\n}\n\nfunction traverseNode(\n node: TSESTree.Node,\n predicate: (node: TSESTree.Node, parent?: TSESTree.Node) => boolean,\n parent?: TSESTree.Node,\n): boolean {\n if (predicate(node, parent)) {\n return true;\n }\n\n for (const [key, value] of Object.entries(node)) {\n if (key === 'parent' || value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isNode(item) && traverseNode(item, predicate, node)) {\n return true;\n }\n }\n\n continue;\n }\n\n if (isNode(value) && traverseNode(value, predicate, node)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isNode(value: unknown): value is TSESTree.Node {\n return typeof value === 'object' && value !== null && 'type' in value;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { getSchemaBindingName } from '../utils/schema-identifiers';\n\nconst ALLOWED_INFER_TYPE_NAMES = new Set(['InferInput', 'InferOutput']);\n\ntype Options = [];\ntype MessageIds = 'noSchemaAsType';\n\nexport const noSchemaAsType = createRule<Options, MessageIds>({\n name: 'no-schema-as-type',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow using a Valibot schema value itself as a TypeScript type.',\n },\n schema: [],\n messages: {\n noSchemaAsType:\n 'Use InferInput<typeof {{schemaName}}> or InferOutput<typeof {{schemaName}}> instead of typeof {{schemaName}}.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const schemaBindings = new Set<string>();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n VariableDeclarator(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const schemaBindingName = getSchemaBindingName(node, imports);\n\n if (schemaBindingName) {\n schemaBindings.add(schemaBindingName);\n }\n },\n TSTypeQuery(node) {\n if (\n !hasValibotImports(imports) ||\n isAllowedSchemaTypeQuery(node, imports)\n ) {\n return;\n }\n\n const schemaName = getSchemaTypeQueryName(node);\n\n if (!schemaName || !schemaBindings.has(schemaName)) {\n return;\n }\n\n context.report({\n node,\n messageId: 'noSchemaAsType',\n data: {\n schemaName,\n },\n });\n },\n };\n },\n});\n\nfunction getSchemaTypeQueryName(node: TSESTree.TSTypeQuery): string | null {\n return node.exprName.type === 'Identifier' ? node.exprName.name : null;\n}\n\nfunction isAllowedSchemaTypeQuery(\n node: TSESTree.TSTypeQuery,\n imports: ValibotImports,\n): boolean {\n const parent = node.parent;\n\n if (!parent || parent.type !== 'TSTypeParameterInstantiation') {\n return false;\n }\n\n const typeReference = parent.parent;\n\n if (!typeReference || typeReference.type !== 'TSTypeReference') {\n return false;\n }\n\n return isAllowedInferReference(typeReference.typeName, imports);\n}\n\nfunction isAllowedInferReference(\n typeName: TSESTree.EntityName,\n imports: ValibotImports,\n): boolean {\n if (typeName.type === 'Identifier') {\n return ALLOWED_INFER_TYPE_NAMES.has(\n imports.importedNames.get(typeName.name) ?? '',\n );\n }\n\n if (typeName.type !== 'TSQualifiedName') {\n return false;\n }\n\n return (\n typeName.left.type === 'Identifier' &&\n imports.namespaces.has(typeName.left.name) &&\n ALLOWED_INFER_TYPE_NAMES.has(typeName.right.name)\n );\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'preferPicklist';\n\nexport const preferPicklist = createRule<Options, MessageIds>({\n name: 'prefer-picklist',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Prefer picklist() over union() when the union only contains literal string schemas.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n preferPicklist:\n 'Prefer picklist([...]) instead of union([...]) for literal string options.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'union')\n ) {\n return;\n }\n\n const optionsArg = node.arguments[0];\n\n if (optionsArg?.type !== 'ArrayExpression') {\n return;\n }\n\n const literalOptionTexts = getLiteralOptionTexts(\n optionsArg,\n imports,\n sourceCode,\n );\n\n if (!literalOptionTexts) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, imports);\n\n context.report({\n node,\n messageId: 'preferPicklist',\n fix:\n preferredCalleeText &&\n (node.arguments.length === 1 || node.arguments.length === 2)\n ? (fixer) =>\n fixer.replaceText(\n node,\n buildPicklistCallText(\n node,\n preferredCalleeText,\n literalOptionTexts,\n sourceCode,\n ),\n )\n : null,\n });\n },\n };\n },\n});\n\nfunction getLiteralOptionTexts(\n optionsArray: TSESTree.ArrayExpression,\n imports: ValibotImports,\n sourceCode: Readonly<TSESLintSourceCode>,\n): string[] | null {\n if (optionsArray.elements.length < 2) {\n return null;\n }\n\n const literalTexts: string[] = [];\n\n for (const element of optionsArray.elements) {\n if (!element || element.type === 'SpreadElement') {\n return null;\n }\n\n if (element.type !== 'CallExpression') {\n return null;\n }\n\n if (\n !isValibotCall(element, imports, 'literal') ||\n element.arguments.length !== 1\n ) {\n return null;\n }\n\n const literalArg = element.arguments[0];\n\n if (\n !literalArg ||\n literalArg.type !== 'Literal' ||\n typeof literalArg.value !== 'string'\n ) {\n return null;\n }\n\n literalTexts.push(sourceCode.getText(literalArg));\n }\n\n return literalTexts;\n}\n\nfunction getPreferredCalleeText(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): string | null {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.picklist`;\n }\n\n const localPicklistName = getLocalImportName(imports, 'picklist');\n\n return localPicklistName ?? null;\n}\n\nfunction sourceTextForMemberNamespace(call: TSESTree.CallExpression): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n\nfunction buildPicklistCallText(\n unionCall: TSESTree.CallExpression,\n calleeText: string,\n literalOptionTexts: string[],\n sourceCode: Readonly<TSESLintSourceCode>,\n): string {\n const valuesText = `[${literalOptionTexts.join(', ')}]`;\n const messageArg = unionCall.arguments[1];\n\n if (messageArg) {\n return `${calleeText}(${valuesText}, ${sourceCode.getText(messageArg)})`;\n }\n\n return `${calleeText}(${valuesText})`;\n}\n\ninterface TSESLintSourceCode {\n getText(node?: TSESTree.Node): string;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst OBJECT_SCHEMA_NAMES = [\n 'object',\n 'objectAsync',\n 'strictObject',\n 'strictObjectAsync',\n 'looseObject',\n 'looseObjectAsync',\n 'objectWithRest',\n 'objectWithRestAsync',\n] as const;\n\ntype Options = [];\ntype MessageIds = 'preferNullable';\n\nexport const preferNullableOverUnionNull = createRule<Options, MessageIds>({\n name: 'prefer-nullable-over-union-null',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Prefer nullable() over union([schema, null()]) when they are equivalent.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n preferNullable:\n 'Prefer nullable() instead of union([schema, null()]) when the schema only needs to accept null.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'union')\n ) {\n return;\n }\n\n const matchedSchema = getMatchedSchema(node, imports);\n\n if (!matchedSchema || isWithinObjectSchemaEntry(node, imports)) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, imports);\n\n context.report({\n node,\n messageId: 'preferNullable',\n fix: preferredCalleeText\n ? (fixer) =>\n fixer.replaceText(\n node,\n `${preferredCalleeText}(${sourceCode.getText(matchedSchema)})`,\n )\n : null,\n });\n },\n };\n },\n});\n\nfunction getMatchedSchema(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): TSESTree.Expression | null {\n if (call.arguments.length !== 1) {\n return null;\n }\n\n const options = call.arguments[0];\n\n if (options?.type !== 'ArrayExpression' || options.elements.length !== 2) {\n return null;\n }\n\n const [firstOption, secondOption] = options.elements;\n\n if (!isSchemaOption(firstOption) || !isSchemaOption(secondOption)) {\n return null;\n }\n\n if (isNullSchemaCall(firstOption, imports)) {\n return secondOption;\n }\n\n if (isNullSchemaCall(secondOption, imports)) {\n return firstOption;\n }\n\n return null;\n}\n\nfunction isSchemaOption(\n node: TSESTree.ArrayExpression['elements'][number],\n): node is TSESTree.Expression {\n return node !== null && node.type !== 'SpreadElement';\n}\n\nfunction isNullSchemaCall(\n node: TSESTree.Expression,\n imports: ValibotImports,\n): node is TSESTree.CallExpression {\n return (\n node.type === 'CallExpression' &&\n node.arguments.length === 0 &&\n isValibotCall(node, imports, 'null')\n );\n}\n\nfunction isWithinObjectSchemaEntry(\n node: TSESTree.Node,\n imports: ValibotImports,\n): boolean {\n let current: TSESTree.Node | undefined = node;\n\n while (current?.parent) {\n const parent: TSESTree.Node = current.parent;\n\n if (parent.type === 'Property' && parent.value === current) {\n const objectLiteral = parent.parent;\n\n if (!objectLiteral || objectLiteral.type !== 'ObjectExpression') {\n return false;\n }\n\n const schemaCall = objectLiteral.parent;\n\n if (\n !schemaCall ||\n schemaCall.type !== 'CallExpression' ||\n schemaCall.arguments[0] !== objectLiteral\n ) {\n return false;\n }\n\n return OBJECT_SCHEMA_NAMES.some((schemaName) =>\n isValibotCall(schemaCall, imports, schemaName),\n );\n }\n\n current = parent;\n }\n\n return false;\n}\n\nfunction getPreferredCalleeText(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): string | null {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.nullable`;\n }\n\n const localNullableName = getLocalImportName(imports, 'nullable');\n\n return localNullableName ?? null;\n}\n\nfunction sourceTextForMemberNamespace(call: TSESTree.CallExpression): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst OBJECT_SCHEMA_NAMES = [\n 'object',\n 'objectAsync',\n 'strictObject',\n 'strictObjectAsync',\n 'looseObject',\n 'looseObjectAsync',\n 'objectWithRest',\n 'objectWithRestAsync',\n] as const;\n\ntype Options = [];\ntype MessageIds = 'preferOptional';\n\nexport const preferOptionalOverUnionUndefined = createRule<Options, MessageIds>(\n {\n name: 'prefer-optional-over-union-undefined',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Prefer optional() over union([schema, undefined()]) when they are equivalent.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n preferOptional:\n 'Prefer optional() instead of union([schema, undefined()]) when the schema only needs to accept undefined.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'union')\n ) {\n return;\n }\n\n const matchedSchema = getMatchedSchema(node, imports);\n\n if (!matchedSchema || isWithinObjectSchemaEntry(node, imports)) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, imports);\n\n context.report({\n node,\n messageId: 'preferOptional',\n fix: preferredCalleeText\n ? (fixer) =>\n fixer.replaceText(\n node,\n `${preferredCalleeText}(${sourceCode.getText(matchedSchema)})`,\n )\n : null,\n });\n },\n };\n },\n },\n);\n\nfunction getMatchedSchema(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): TSESTree.Expression | null {\n if (call.arguments.length !== 1) {\n return null;\n }\n\n const options = call.arguments[0];\n\n if (options?.type !== 'ArrayExpression' || options.elements.length !== 2) {\n return null;\n }\n\n const [firstOption, secondOption] = options.elements;\n\n if (!isSchemaOption(firstOption) || !isSchemaOption(secondOption)) {\n return null;\n }\n\n if (isUndefinedSchemaCall(firstOption, imports)) {\n return secondOption;\n }\n\n if (isUndefinedSchemaCall(secondOption, imports)) {\n return firstOption;\n }\n\n return null;\n}\n\nfunction isSchemaOption(\n node: TSESTree.ArrayExpression['elements'][number],\n): node is TSESTree.Expression {\n return node !== null && node.type !== 'SpreadElement';\n}\n\nfunction isUndefinedSchemaCall(\n node: TSESTree.Expression,\n imports: ValibotImports,\n): node is TSESTree.CallExpression {\n return (\n node.type === 'CallExpression' &&\n node.arguments.length === 0 &&\n isValibotCall(node, imports, 'undefined')\n );\n}\n\nfunction isWithinObjectSchemaEntry(\n node: TSESTree.Node,\n imports: ValibotImports,\n): boolean {\n let current: TSESTree.Node | undefined = node;\n\n while (current?.parent) {\n const parent: TSESTree.Node = current.parent;\n\n if (parent.type === 'Property' && parent.value === current) {\n const objectLiteral = parent.parent;\n\n if (!objectLiteral || objectLiteral.type !== 'ObjectExpression') {\n return false;\n }\n\n const schemaCall = objectLiteral.parent;\n\n if (\n !schemaCall ||\n schemaCall.type !== 'CallExpression' ||\n schemaCall.arguments[0] !== objectLiteral\n ) {\n return false;\n }\n\n return OBJECT_SCHEMA_NAMES.some((schemaName) =>\n isValibotCall(schemaCall, imports, schemaName),\n );\n }\n\n current = parent;\n }\n\n return false;\n}\n\nfunction getPreferredCalleeText(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): string | null {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.optional`;\n }\n\n const localOptionalName = getLocalImportName(imports, 'optional');\n\n return localOptionalName ?? null;\n}\n\nfunction sourceTextForMemberNamespace(call: TSESTree.CallExpression): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst OBJECT_SCHEMA_NAMES = [\n 'object',\n 'strictObject',\n 'looseObject',\n 'objectWithRest',\n] as const;\n\ntype Options = [];\ntype MessageIds = 'preferVariant';\n\nexport const preferVariant = createRule<Options, MessageIds>({\n name: 'prefer-variant',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Prefer variant() over union() when object schemas share an obvious discriminant key.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n preferVariant:\n \"Prefer variant('{{key}}', [...]) over union([...]) for discriminated object schemas.\",\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'union')\n ) {\n return;\n }\n\n const optionsArray = node.arguments[0];\n\n if (optionsArray?.type !== 'ArrayExpression') {\n return;\n }\n\n const optionCalls = getOptionObjectSchemaCalls(optionsArray, imports);\n\n if (!optionCalls) {\n return;\n }\n\n const discriminantKey = getCommonDiscriminantKey(optionCalls, imports);\n\n if (!discriminantKey) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, imports);\n\n context.report({\n node,\n messageId: 'preferVariant',\n data: {\n key: discriminantKey,\n },\n fix:\n preferredCalleeText && node.arguments.length === 1\n ? (fixer) =>\n fixer.replaceText(\n node,\n `${preferredCalleeText}(${toSingleQuotedString(discriminantKey)}, ${sourceCode.getText(optionsArray)})`,\n )\n : null,\n });\n },\n };\n },\n});\n\nfunction getOptionObjectSchemaCalls(\n optionsArray: TSESTree.ArrayExpression,\n imports: ValibotImports,\n): TSESTree.CallExpression[] | null {\n if (optionsArray.elements.length < 2) {\n return null;\n }\n\n const optionCalls: TSESTree.CallExpression[] = [];\n\n for (const element of optionsArray.elements) {\n if (!element || element.type === 'SpreadElement') {\n return null;\n }\n\n if (element.type !== 'CallExpression') {\n return null;\n }\n\n if (\n !OBJECT_SCHEMA_NAMES.some((name) => isValibotCall(element, imports, name))\n ) {\n return null;\n }\n\n optionCalls.push(element);\n }\n\n return optionCalls;\n}\n\nfunction getCommonDiscriminantKey(\n objectSchemaCalls: TSESTree.CallExpression[],\n imports: ValibotImports,\n): string | null {\n const literalKeyMaps = objectSchemaCalls.map((schemaCall) =>\n getLiteralDiscriminantKeyMap(schemaCall, imports),\n );\n\n if (literalKeyMaps.some((map) => map.size === 0)) {\n return null;\n }\n\n const firstMap = literalKeyMaps[0];\n\n for (const [keyName, firstLiteral] of firstMap) {\n let isCommon = true;\n const literalValues = new Set<string>([firstLiteral]);\n\n for (let index = 1; index < literalKeyMaps.length; index += 1) {\n const literalValue = literalKeyMaps[index].get(keyName);\n\n if (!literalValue) {\n isCommon = false;\n break;\n }\n\n literalValues.add(literalValue);\n }\n\n if (isCommon && literalValues.size > 1) {\n return keyName;\n }\n }\n\n return null;\n}\n\nfunction getLiteralDiscriminantKeyMap(\n objectSchemaCall: TSESTree.CallExpression,\n imports: ValibotImports,\n): Map<string, string> {\n const entriesArg = objectSchemaCall.arguments[0];\n\n if (!entriesArg || entriesArg.type !== 'ObjectExpression') {\n return new Map();\n }\n\n const keyMap = new Map<string, string>();\n\n for (const property of entriesArg.properties) {\n if (property.type !== 'Property' || property.computed) {\n continue;\n }\n\n const keyName = getPropertyKeyName(property.key);\n\n if (!keyName) {\n continue;\n }\n\n const literalValue = getLiteralSchemaValue(property.value, imports);\n\n if (!literalValue) {\n continue;\n }\n\n keyMap.set(keyName, literalValue);\n }\n\n return keyMap;\n}\n\nfunction getPropertyKeyName(key: TSESTree.Property['key']): string | null {\n if (key.type === 'Identifier') {\n return key.name;\n }\n\n if (key.type === 'Literal' && typeof key.value === 'string') {\n return key.value;\n }\n\n return null;\n}\n\nfunction getLiteralSchemaValue(\n value: TSESTree.Node,\n imports: ValibotImports,\n): string | null {\n if (value.type !== 'CallExpression') {\n return null;\n }\n\n if (\n !isValibotCall(value, imports, 'literal') ||\n value.arguments.length !== 1\n ) {\n return null;\n }\n\n const literalArg = value.arguments[0];\n\n if (!literalArg || literalArg.type !== 'Literal') {\n return null;\n }\n\n return String(literalArg.value);\n}\n\nfunction getPreferredCalleeText(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): string | null {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.variant`;\n }\n\n const localVariantName = getLocalImportName(imports, 'variant');\n\n return localVariantName ?? null;\n}\n\nfunction sourceTextForMemberNamespace(call: TSESTree.CallExpression): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n\nfunction toSingleQuotedString(value: string): string {\n return `'${value.replaceAll(\"'\", \"\\\\'\")}'`;\n}\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst WRAPPER_PAIRS = [\n ['optional', 'nullable'],\n ['nullable', 'optional'],\n] as const;\n\ntype Options = [];\ntype MessageIds = 'preferNullish';\n\nexport const preferNullish = createRule<Options, MessageIds>({\n name: 'prefer-nullish',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Prefer nullish() over nested optional() and nullable() wrappers.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n preferNullish:\n 'Prefer nullish() instead of nesting optional() and nullable().',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports) || node.arguments.length !== 1) {\n return;\n }\n\n const innerCall = node.arguments[0];\n\n if (\n innerCall?.type !== 'CallExpression' ||\n innerCall.arguments.length !== 1\n ) {\n return;\n }\n\n const innerSchema = innerCall.arguments[0];\n\n if (!innerSchema) {\n return;\n }\n\n const pair = getWrapperPair(node, innerCall, imports);\n\n if (!pair) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, imports);\n\n context.report({\n node,\n messageId: 'preferNullish',\n fix: preferredCalleeText\n ? (fixer) =>\n fixer.replaceText(\n node,\n `${preferredCalleeText}(${sourceCode.getText(innerSchema)})`,\n )\n : null,\n });\n },\n };\n },\n});\n\nfunction getWrapperPair(\n outerCall: Parameters<typeof isValibotCall>[0],\n innerCall: Parameters<typeof isValibotCall>[0],\n imports: ValibotImports,\n): (typeof WRAPPER_PAIRS)[number] | null {\n for (const pair of WRAPPER_PAIRS) {\n if (\n isValibotCall(outerCall, imports, pair[0]) &&\n isValibotCall(innerCall, imports, pair[1])\n ) {\n return pair;\n }\n }\n\n return null;\n}\n\nfunction getPreferredCalleeText(\n call: Parameters<typeof isValibotCall>[0],\n imports: ValibotImports,\n): string | null {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.nullish`;\n }\n\n const localNullishName = getLocalImportName(imports, 'nullish');\n\n return localNullishName ?? null;\n}\n\nfunction sourceTextForMemberNamespace(\n call: Parameters<typeof isValibotCall>[0],\n): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst GUARDED_PARSER_NAMES = ['parse', 'assert'] as const;\n\ntype Options = [];\ntype MessageIds = 'unguardedParserCall';\n\nexport const noUnguardedParse = createRule<Options, MessageIds>({\n name: 'no-unguarded-parse',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Require Valibot parse() and assert() calls to be wrapped in try/catch.',\n },\n schema: [],\n messages: {\n unguardedParserCall:\n 'Wrap Valibot {{functionName}}() in a try/catch block or switch to safeParse() for recoverable validation.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const parserName = getGuardedParserName(node, imports);\n\n if (!parserName || isInsideTryBlock(node)) {\n return;\n }\n\n context.report({\n node,\n messageId: 'unguardedParserCall',\n data: {\n functionName: parserName,\n },\n });\n },\n };\n },\n});\n\nfunction getGuardedParserName(\n call: TSESTree.CallExpression,\n imports: ValibotImports,\n): (typeof GUARDED_PARSER_NAMES)[number] | null {\n for (const functionName of GUARDED_PARSER_NAMES) {\n if (isValibotCall(call, imports, functionName)) {\n return functionName;\n }\n }\n\n return null;\n}\n\nfunction isInsideTryBlock(node: TSESTree.Node): boolean {\n let current: TSESTree.Node | undefined = node;\n\n while (current?.parent) {\n const parent: TSESTree.Node = current.parent;\n\n if (parent.type === 'TryStatement' && parent.block === current) {\n return true;\n }\n\n current = parent;\n }\n\n return false;\n}\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst DUPLICATE_WRAPPER_NAMES = new Set([\n 'optional',\n 'nullable',\n 'nullish',\n 'nonOptional',\n 'nonNullable',\n 'nonNullish',\n]);\n\ntype Options = [];\ntype MessageIds = 'redundantWrapper';\n\nexport const noRedundantSchemaWrappers = createRule<Options, MessageIds>({\n name: 'no-redundant-schema-wrappers',\n meta: {\n type: 'problem',\n docs: {\n description: 'Disallow redundant nested Valibot schema wrappers.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n redundantWrapper:\n 'This Valibot wrapper is applied redundantly. Remove the outer wrapper.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n if (node.arguments.length !== 1) {\n return;\n }\n\n const innerCall = node.arguments[0];\n\n if (\n innerCall.type !== 'CallExpression' ||\n innerCall.arguments.length !== 1\n ) {\n return;\n }\n\n const duplicatedWrapperName = getDuplicatedWrapperName(\n node,\n innerCall,\n imports,\n );\n\n if (!duplicatedWrapperName) {\n return;\n }\n\n context.report({\n node,\n messageId: 'redundantWrapper',\n fix(fixer) {\n return fixer.replaceText(node, sourceCode.getText(innerCall));\n },\n });\n },\n };\n },\n});\n\nfunction getDuplicatedWrapperName(\n outerCall: Parameters<typeof isValibotCall>[0],\n innerCall: Parameters<typeof isValibotCall>[0],\n imports: Parameters<typeof isValibotCall>[1],\n): string | null {\n for (const wrapperName of DUPLICATE_WRAPPER_NAMES) {\n if (\n isValibotCall(outerCall, imports, wrapperName) &&\n isValibotCall(innerCall, imports, wrapperName)\n ) {\n return wrapperName;\n }\n }\n\n return null;\n}\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'avoidAnySchema';\n\nexport const noAnySchema = createRule<Options, MessageIds>({\n name: 'no-any-schema',\n meta: {\n type: 'problem',\n docs: {\n description: 'Disallow Valibot any() schemas.',\n },\n schema: [],\n messages: {\n avoidAnySchema:\n 'Avoid Valibot any() schemas. Prefer unknown() or a more precise schema.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n if (!isValibotCall(node, imports, 'any')) {\n return;\n }\n\n context.report({\n node,\n messageId: 'avoidAnySchema',\n });\n },\n };\n },\n});\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { getValibotCallName } from '../utils/is-valibot-call';\n\nconst OBJECT_SCHEMA_TYPES = ['object', 'looseObject', 'strictObject'] as const;\nconst DEFAULT_ALLOWED_OBJECT_SCHEMA_TYPES = ['object', 'strictObject'] as const;\n\ntype ObjectSchemaType = (typeof OBJECT_SCHEMA_TYPES)[number];\ntype Options = [\n {\n allow?: ObjectSchemaType[];\n },\n];\ntype MessageIds = 'disallowedObjectSchemaType';\n\nexport const noLooseObject = createRule<Options, MessageIds>({\n name: 'no-loose-object',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Disallow disallowed Valibot object schema constructors such as looseObject().',\n },\n schema: [\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n allow: {\n type: 'array',\n items: {\n type: 'string',\n enum: [...OBJECT_SCHEMA_TYPES],\n },\n uniqueItems: true,\n minItems: 1,\n },\n },\n },\n ],\n messages: {\n disallowedObjectSchemaType:\n 'Avoid Valibot {{disallowedType}}() here. Allowed object schema constructors: {{allowedTypes}}.',\n },\n },\n defaultOptions: [\n {\n allow: [...DEFAULT_ALLOWED_OBJECT_SCHEMA_TYPES],\n },\n ],\n create(context, [options]) {\n let imports = createEmptyValibotImports();\n const allowedTypes = new Set<ObjectSchemaType>(\n options.allow ?? DEFAULT_ALLOWED_OBJECT_SCHEMA_TYPES,\n );\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const callName = getValibotCallName(node, imports);\n\n if (!isObjectSchemaType(callName) || allowedTypes.has(callName)) {\n return;\n }\n\n context.report({\n node,\n messageId: 'disallowedObjectSchemaType',\n data: {\n disallowedType: callName,\n allowedTypes: formatAllowedTypes(options.allow),\n },\n });\n },\n };\n },\n});\n\nfunction isObjectSchemaType(value: string | null): value is ObjectSchemaType {\n return (\n value !== null && OBJECT_SCHEMA_TYPES.includes(value as ObjectSchemaType)\n );\n}\n\nfunction formatAllowedTypes(allow: ObjectSchemaType[] | undefined): string {\n const allowedTypes = allow ?? [...DEFAULT_ALLOWED_OBJECT_SCHEMA_TYPES];\n\n return allowedTypes.map((type) => `${type}()`).join(', ');\n}\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'avoidUnknownSchema';\n\nexport const noUnknownSchema = createRule<Options, MessageIds>({\n name: 'no-unknown-schema',\n meta: {\n type: 'problem',\n docs: {\n description: 'Disallow Valibot unknown() schemas.',\n },\n schema: [],\n messages: {\n avoidUnknownSchema:\n 'Avoid Valibot unknown() schemas. Prefer a more precise schema.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n if (!isValibotCall(node, imports, 'unknown')) {\n return;\n }\n\n context.report({\n node,\n messageId: 'avoidUnknownSchema',\n });\n },\n };\n },\n});\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\nconst BUILTIN_CONSTRUCTORS = new Map<string, string>([\n ['Date', 'date'],\n ['Array', 'array'],\n ['Function', 'function'],\n ['Promise', 'promise'],\n ['Map', 'map'],\n ['Set', 'set'],\n ['String', 'string'],\n ['Number', 'number'],\n ['Boolean', 'boolean'],\n ['Symbol', 'symbol'],\n ['BigInt', 'bigint'],\n ['Blob', 'blob'],\n]);\n\ntype Options = [];\ntype MessageIds = 'noInstanceofBuiltins';\n\nexport const noInstanceofBuiltins = createRule<Options, MessageIds>({\n name: 'no-instanceof-builtins',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Prefer primitive schema functions over instance(Constructor) for built-in types.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n noInstanceofBuiltins:\n 'Prefer the native Valibot schema {{preferred}}() instead of instance({{constructor}}).',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n if (!isValibotCall(node, imports, 'instance') || node.arguments.length !== 1) {\n return;\n }\n\n const arg = node.arguments[0];\n\n if (arg.type !== 'Identifier') {\n return;\n }\n\n const constructorName = arg.name;\n const preferredSchema = BUILTIN_CONSTRUCTORS.get(constructorName);\n\n if (!preferredSchema) {\n return;\n }\n\n const preferredCalleeText = getPreferredCalleeText(node, preferredSchema, imports);\n\n context.report({\n node,\n messageId: 'noInstanceofBuiltins',\n data: {\n preferred: preferredSchema,\n constructor: constructorName,\n },\n fix(fixer) {\n return fixer.replaceText(node, `${preferredCalleeText}()`);\n },\n });\n },\n };\n },\n});\n\nfunction getPreferredCalleeText(\n call: Parameters<typeof isValibotCall>[0],\n targetName: string,\n imports: ValibotImports,\n): string {\n if (call.callee.type === 'MemberExpression') {\n return `${sourceTextForMemberNamespace(call)}.${targetName}`;\n }\n\n const localName = getLocalImportName(imports, targetName);\n return localName ?? targetName;\n}\n\nfunction sourceTextForMemberNamespace(\n call: Parameters<typeof isValibotCall>[0],\n): string {\n if (\n call.callee.type === 'MemberExpression' &&\n call.callee.object.type === 'Identifier'\n ) {\n return call.callee.object.name;\n }\n\n return 'v';\n}\n\nfunction getLocalImportName(\n imports: ValibotImports,\n importedName: string,\n): string | undefined {\n for (const [localName, importedValue] of imports.importedNames) {\n if (importedValue === importedName) {\n return localName;\n }\n }\n\n return undefined;\n}\n","import { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'emptyPipe' | 'redundantPipe';\n\nexport const noEmptyPipe = createRule<Options, MessageIds>({\n name: 'no-empty-pipe',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Disallow empty pipe() calls or pipe() calls with a single argument.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n emptyPipe: 'Avoid calling pipe() with no arguments.',\n redundantPipe: 'Avoid calling pipe() with only a single schema. Remove the pipe() wrapper.',\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n if (!isValibotCall(node, imports, 'pipe')) {\n return;\n }\n\n if (node.arguments.length === 0) {\n context.report({\n node,\n messageId: 'emptyPipe',\n });\n return;\n }\n\n if (node.arguments.length === 1) {\n const singleArg = node.arguments[0];\n context.report({\n node,\n messageId: 'redundantPipe',\n fix(fixer) {\n return fixer.replaceText(node, sourceCode.getText(singleArg));\n },\n });\n }\n },\n };\n },\n});\n","import type { TSESLint, TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n type ValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { isValibotCall } from '../utils/is-valibot-call';\nimport {\n getPipeActionDescriptors,\n type PipeActionDescriptor,\n} from '../utils/pipe-analysis';\n\nconst EXPLICIT_KEY_MUTATION_ACTION_NAMES = new Set([\n 'normalize',\n 'rawTransform',\n 'transform',\n 'trim',\n 'trimEnd',\n 'trimStart',\n]);\n\ntype Options = [];\ntype MessageIds = 'transformInRecordKey';\n\nexport const noTransformInRecordKey = createRule<Options, MessageIds>({\n name: 'no-transform-in-record-key',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow transforms in record() key schemas, which can silently mutate keys and cause collisions.',\n },\n schema: [],\n messages: {\n transformInRecordKey:\n \"Avoid using '{{actionName}}()' in a record() key schema. Transformed record keys can change silently and collide during parsing.\",\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n const sourceCode = context.sourceCode as Readonly<\n TSESLint.SourceCode & {\n getScope(node: TSESTree.Node): ScopeLike;\n }\n >;\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (\n !hasValibotImports(imports) ||\n !isValibotCall(node, imports, 'record')\n ) {\n return;\n }\n\n for (const action of getTransformingKeyActions(\n node.arguments[0],\n imports,\n sourceCode,\n )) {\n context.report({\n node: action.node,\n messageId: 'transformInRecordKey',\n data: {\n actionName: action.name,\n },\n });\n }\n },\n };\n },\n});\n\ninterface VariableLike {\n defs: Array<{\n node: TSESTree.Node;\n }>;\n}\n\ninterface ScopeLike {\n set: Map<string, VariableLike>;\n upper: ScopeLike | null;\n}\n\nfunction getTransformingKeyActions(\n node: TSESTree.Node | null | undefined,\n imports: ValibotImports,\n sourceCode: Readonly<\n TSESLint.SourceCode & {\n getScope(node: TSESTree.Node): ScopeLike;\n }\n >,\n visitedNodes = new Set<TSESTree.Node>(),\n): PipeActionDescriptor[] {\n if (!node || visitedNodes.has(node)) {\n return [];\n }\n\n visitedNodes.add(node);\n\n if (node.type === 'Identifier') {\n const resolvedExpression = resolveIdentifierExpression(node, sourceCode);\n\n return resolvedExpression\n ? getTransformingKeyActions(\n resolvedExpression,\n imports,\n sourceCode,\n visitedNodes,\n )\n : [];\n }\n\n if (node.type !== 'CallExpression') {\n return [];\n }\n\n const transformingActions = isValibotCall(node, imports, 'pipe')\n ? getPipeActionDescriptors(node, imports, sourceCode).filter((action) =>\n isTransformingKeyActionName(action.name),\n )\n : [];\n\n return [\n ...transformingActions,\n ...node.arguments.flatMap((argument) =>\n getTransformingKeyActions(argument, imports, sourceCode, visitedNodes),\n ),\n ];\n}\n\nfunction resolveIdentifierExpression(\n node: TSESTree.Identifier,\n sourceCode: Readonly<\n TSESLint.SourceCode & {\n getScope(node: TSESTree.Node): ScopeLike;\n }\n >,\n): TSESTree.Expression | null {\n let scope: ScopeLike | null = sourceCode.getScope(node);\n\n while (scope) {\n const definition = scope.set.get(node.name)?.defs[0];\n\n if (definition?.node.type === 'VariableDeclarator') {\n return definition.node.init ?? null;\n }\n\n scope = scope.upper;\n }\n\n return null;\n}\n\nfunction isTransformingKeyActionName(name: string): boolean {\n return EXPLICIT_KEY_MUTATION_ACTION_NAMES.has(name) || /^to[A-Z]/u.test(name);\n}\n","const ISSUE_MESSAGE_PARAMETER_INDEX_ZERO = new Set([\n 'base64',\n 'bic',\n 'bigint',\n 'blob',\n 'boolean',\n 'creditCard',\n 'cuid2',\n 'date',\n 'decimal',\n 'digits',\n 'domain',\n 'email',\n 'emoji',\n 'empty',\n 'file',\n 'finite',\n 'function',\n 'hexadecimal',\n 'hexColor',\n 'imei',\n 'integer',\n 'ip',\n 'ipv4',\n 'ipv6',\n 'isbn',\n 'isoDate',\n 'isoDateTime',\n 'isoDateTimeSecond',\n 'isoTime',\n 'isoTimeSecond',\n 'isoTimestamp',\n 'isoWeek',\n 'isrc',\n 'jwsCompact',\n 'mac',\n 'mac48',\n 'mac64',\n 'nan',\n 'nanoid',\n 'never',\n 'nonEmpty',\n 'null',\n 'number',\n 'octal',\n 'promise',\n 'rfcEmail',\n 'safeInteger',\n 'slug',\n 'string',\n 'symbol',\n 'toBigint',\n 'toDate',\n 'toNumber',\n 'toString',\n 'ulid',\n 'undefined',\n 'url',\n 'uuid',\n 'void',\n]);\n\nconst ISSUE_MESSAGE_PARAMETER_INDEX_ONE = new Set([\n 'array',\n 'arrayAsync',\n 'bytes',\n 'check',\n 'checkAsync',\n 'checkItems',\n 'checkItemsAsync',\n 'custom',\n 'customAsync',\n 'endsWith',\n 'entries',\n 'enum',\n 'everyItem',\n 'excludes',\n 'graphemes',\n 'gtValue',\n 'guard',\n 'hash',\n 'includes',\n 'instance',\n 'intersect',\n 'intersectAsync',\n 'keyof',\n 'length',\n 'literal',\n 'looseObject',\n 'looseObjectAsync',\n 'looseTuple',\n 'looseTupleAsync',\n 'ltValue',\n 'maxBytes',\n 'maxEntries',\n 'maxGraphemes',\n 'maxLength',\n 'maxSize',\n 'maxValue',\n 'mimeType',\n 'minBytes',\n 'minEntries',\n 'minGraphemes',\n 'minLength',\n 'minSize',\n 'minValue',\n 'multipleOf',\n 'nonNullable',\n 'nonNullableAsync',\n 'nonNullish',\n 'nonNullishAsync',\n 'nonOptional',\n 'nonOptionalAsync',\n 'notBytes',\n 'notEntries',\n 'notGraphemes',\n 'notLength',\n 'notSize',\n 'notValue',\n 'notValues',\n 'object',\n 'objectAsync',\n 'parseBoolean',\n 'parseJson',\n 'picklist',\n 'regex',\n 'required',\n 'requiredAsync',\n 'set',\n 'setAsync',\n 'size',\n 'someItem',\n 'startsWith',\n 'strictObject',\n 'strictObjectAsync',\n 'strictTuple',\n 'strictTupleAsync',\n 'stringifyJson',\n 'tuple',\n 'tupleAsync',\n 'union',\n 'unionAsync',\n 'value',\n 'values',\n]);\n\nconst ISSUE_MESSAGE_PARAMETER_INDEX_TWO = new Set([\n 'map',\n 'mapAsync',\n 'maxWords',\n 'minWords',\n 'notWords',\n 'objectWithRest',\n 'objectWithRestAsync',\n 'partialCheck',\n 'partialCheckAsync',\n 'record',\n 'recordAsync',\n 'tupleWithRest',\n 'tupleWithRestAsync',\n 'variant',\n 'variantAsync',\n 'words',\n]);\n\nexport function getIssueMessageParameterIndex(name: string): 0 | 1 | 2 | null {\n if (ISSUE_MESSAGE_PARAMETER_INDEX_ZERO.has(name)) {\n return 0;\n }\n\n if (ISSUE_MESSAGE_PARAMETER_INDEX_ONE.has(name)) {\n return 1;\n }\n\n if (ISSUE_MESSAGE_PARAMETER_INDEX_TWO.has(name)) {\n return 2;\n }\n\n return null;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nimport { createRule } from '../utils/create-rule';\nimport {\n collectValibotImports,\n createEmptyValibotImports,\n hasValibotImports,\n} from '../utils/collect-valibot-imports';\nimport { getIssueMessageParameterIndex } from '../utils/issue-message-signatures';\nimport { getValibotCallName, isValibotCall } from '../utils/is-valibot-call';\n\ntype Options = [];\ntype MessageIds = 'missingIssueMessage';\n\nexport const requireIssueMessages = createRule<Options, MessageIds>({\n name: 'require-issue-messages',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Require explicit custom issue messages on Valibot schemas and issue-producing actions.',\n },\n schema: [],\n messages: {\n missingIssueMessage:\n \"Provide a custom issue message for '{{name}}()' using its message argument or a direct message() wrapper.\",\n },\n },\n defaultOptions: [],\n create(context) {\n let imports = createEmptyValibotImports();\n\n return {\n Program(node) {\n imports = collectValibotImports(node);\n },\n CallExpression(node) {\n if (!hasValibotImports(imports)) {\n return;\n }\n\n const callName = getValibotCallName(node, imports);\n\n if (!callName) {\n return;\n }\n\n const messageParameterIndex = getIssueMessageParameterIndex(callName);\n\n if (messageParameterIndex === null) {\n return;\n }\n\n if (\n hasInlineIssueMessage(node, messageParameterIndex) ||\n isWrappedByDirectMessageCall(node, imports)\n ) {\n return;\n }\n\n context.report({\n node,\n messageId: 'missingIssueMessage',\n data: {\n name: callName,\n },\n });\n },\n };\n },\n});\n\nfunction hasInlineIssueMessage(\n node: TSESTree.CallExpression,\n messageParameterIndex: number,\n): boolean {\n const messageArgument = node.arguments[messageParameterIndex];\n\n return (\n Boolean(messageArgument) && !isMissingMessageExpression(messageArgument)\n );\n}\n\nfunction isWrappedByDirectMessageCall(\n node: TSESTree.CallExpression,\n imports: Parameters<typeof isValibotCall>[1],\n): boolean {\n const parent = node.parent;\n\n return (\n parent?.type === 'CallExpression' &&\n parent.arguments[0] === node &&\n isValibotCall(parent, imports, 'message') &&\n Boolean(parent.arguments[1]) &&\n !isMissingMessageExpression(parent.arguments[1])\n );\n}\n\nfunction isMissingMessageExpression(\n node: TSESTree.CallExpressionArgument,\n): boolean {\n return (\n (node.type === 'Identifier' && node.name === 'undefined') ||\n (node.type === 'Literal' &&\n (node.value === null || node.value === undefined)) ||\n (node.type === 'UnaryExpression' && node.operator === 'void')\n );\n}\n","import type {\n ConfigName,\n RuleMap,\n RuleRegistryEntry,\n RulesConfig,\n} from '../types';\n\nimport { requireIssueMessages } from './require-issue-messages';\nimport { consistentImport } from './consistent-import';\nimport { consistentSchemaConvention } from './consistent-schema-convention';\nimport { noRecreatedSchemas } from './no-recreated-schemas';\nimport { noDuplicatePipeActions } from './no-duplicate-pipe-actions';\nimport { noSchemaAsType } from './no-schema-as-type';\nimport { preferPicklist } from './prefer-picklist';\nimport { preferNullableOverUnionNull } from './prefer-nullable-over-union-null';\nimport { preferOptionalOverUnionUndefined } from './prefer-optional-over-union-undefined';\nimport { preferVariant } from './prefer-variant';\nimport { preferNullish } from './prefer-nullish';\nimport { noUnguardedParse } from './no-unguarded-parse';\nimport { noRedundantSchemaWrappers } from './no-redundant-schema-wrappers';\nimport { noAnySchema } from './no-any-schema';\nimport { noLooseObject } from './no-loose-object';\nimport { noUnknownSchema } from './no-unknown-schema';\nimport { noInstanceofBuiltins } from './no-instanceof-builtins';\nimport { noEmptyPipe } from './no-empty-pipe';\nimport { noTransformInRecordKey } from './no-transform-in-record-key';\n\nexport const ruleRegistry: RuleRegistryEntry[] = [\n {\n name: 'no-any-schema',\n rule: noAnySchema,\n configs: {\n strict: 'warn',\n },\n },\n {\n name: 'no-unknown-schema',\n rule: noUnknownSchema,\n configs: {\n strict: 'warn',\n },\n },\n {\n name: 'no-unguarded-parse',\n rule: noUnguardedParse,\n configs: {\n recommended: 'error',\n strict: 'error',\n },\n },\n {\n name: 'no-redundant-schema-wrappers',\n rule: noRedundantSchemaWrappers,\n configs: {\n recommended: 'error',\n strict: 'error',\n },\n },\n {\n name: 'prefer-nullish',\n rule: preferNullish,\n configs: {\n recommended: 'warn',\n strict: 'warn',\n },\n },\n {\n name: 'prefer-nullable-over-union-null',\n rule: preferNullableOverUnionNull,\n configs: {\n recommended: 'warn',\n strict: 'warn',\n },\n },\n {\n name: 'prefer-optional-over-union-undefined',\n rule: preferOptionalOverUnionUndefined,\n configs: {\n recommended: 'warn',\n strict: 'warn',\n },\n },\n {\n name: 'no-duplicate-pipe-actions',\n rule: noDuplicatePipeActions,\n configs: {\n recommended: 'warn',\n strict: 'warn',\n },\n },\n {\n name: 'require-issue-messages',\n rule: requireIssueMessages,\n configs: {\n strict: 'warn',\n },\n },\n {\n name: 'no-recreated-schemas',\n rule: noRecreatedSchemas,\n configs: {\n strict: 'warn',\n },\n },\n {\n name: 'no-schema-as-type',\n rule: noSchemaAsType,\n configs: {\n strict: 'error',\n },\n typeScriptOnly: true,\n },\n {\n name: 'consistent-import',\n rule: consistentImport,\n configs: {\n stylistic: 'warn',\n },\n },\n {\n name: 'consistent-schema-convention',\n rule: consistentSchemaConvention,\n configs: {\n stylistic: 'warn',\n },\n },\n {\n name: 'prefer-variant',\n rule: preferVariant,\n configs: {\n stylistic: 'warn',\n },\n },\n {\n name: 'prefer-picklist',\n rule: preferPicklist,\n configs: {\n stylistic: 'warn',\n },\n },\n {\n name: 'no-loose-object',\n rule: noLooseObject,\n configs: {\n strict: 'warn',\n },\n },\n {\n name: 'no-instanceof-builtins',\n rule: noInstanceofBuiltins,\n configs: {\n recommended: 'error',\n strict: 'error',\n },\n },\n {\n name: 'no-empty-pipe',\n rule: noEmptyPipe,\n configs: {\n recommended: 'error',\n strict: 'error',\n },\n },\n {\n name: 'no-transform-in-record-key',\n rule: noTransformInRecordKey,\n configs: {\n recommended: 'error',\n strict: 'error',\n },\n },\n];\n\nexport const rules = Object.fromEntries(\n ruleRegistry.map(({ name, rule }) => [name, rule]),\n) as RuleMap;\n\nexport function getRulesForConfig(configName: ConfigName): RulesConfig {\n return Object.fromEntries(\n ruleRegistry.flatMap(({ name, configs }) => {\n const entry = configs[configName];\n\n return entry ? [[`valibot/${name}`, entry]] : [];\n }),\n );\n}\n\nexport function getRuleNamesForConfig(configName: ConfigName): string[] {\n return ruleRegistry\n .filter(({ configs }) => configName in configs)\n .map(({ name }) => name)\n .sort();\n}\n","import type { FlatConfigArray, FlatPluginShape } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport function createRecommendedConfig(\n plugin: FlatPluginShape,\n): FlatConfigArray {\n return [\n {\n name: 'valibot/recommended',\n plugins: {\n valibot: plugin,\n },\n rules: getRulesForConfig('recommended'),\n },\n ];\n}\n","import type { FlatConfigArray, FlatPluginShape } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport function createStrictConfig(plugin: FlatPluginShape): FlatConfigArray {\n return [\n {\n name: 'valibot/strict',\n plugins: {\n valibot: plugin,\n },\n rules: getRulesForConfig('strict'),\n },\n ];\n}\n","import type { FlatConfigArray, FlatPluginShape } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport function createStylisticConfig(\n plugin: FlatPluginShape,\n): FlatConfigArray {\n return [\n {\n name: 'valibot/stylistic',\n plugins: {\n valibot: plugin,\n },\n rules: getRulesForConfig('stylistic'),\n },\n ];\n}\n","import type { FlatConfigMap, FlatPluginShape } from '../../types';\n\nimport { createRecommendedConfig } from './recommended';\nimport { createStrictConfig } from './strict';\nimport { createStylisticConfig } from './stylistic';\n\nexport function createFlatConfigs(plugin: FlatPluginShape): FlatConfigMap {\n return {\n recommended: createRecommendedConfig(plugin),\n strict: createStrictConfig(plugin),\n stylistic: createStylisticConfig(plugin),\n };\n}\n","import type { LegacyConfig } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport const recommended: LegacyConfig = {\n plugins: ['valibot'],\n rules: getRulesForConfig('recommended'),\n};\n","import type { LegacyConfig } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport const strict: LegacyConfig = {\n plugins: ['valibot'],\n rules: getRulesForConfig('strict'),\n};\n","import type { LegacyConfig } from '../../types';\n\nimport { getRulesForConfig } from '../../rules';\n\nexport const stylistic: LegacyConfig = {\n plugins: ['valibot'],\n rules: getRulesForConfig('stylistic'),\n};\n","import { recommended } from './recommended';\nimport { strict } from './strict';\nimport { stylistic } from './stylistic';\n\nexport const legacyConfigs = {\n recommended,\n strict,\n stylistic,\n};\n\n","import packageJson from '../package.json';\n\nimport { createFlatConfigs } from './configs/flat';\nimport { legacyConfigs } from './configs/legacy';\nimport { rules } from './rules';\nimport type { FlatPluginShape, ValibotPlugin } from './types';\n\nconst basePlugin: FlatPluginShape & {\n configs: typeof legacyConfigs;\n} = {\n meta: {\n name: 'eslint-plugin-valibot',\n version: packageJson.version,\n },\n rules,\n configs: legacyConfigs,\n};\n\nexport const flatConfigs = createFlatConfigs(basePlugin);\nexport const configs = legacyConfigs;\n\nconst plugin: ValibotPlugin = {\n ...basePlugin,\n flatConfigs,\n};\n\nexport default plugin;\n"],"mappings":"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","names":["resolveOptions","getPreferredCalleeText","sourceTextForMemberNamespace","getLocalImportName","OBJECT_SCHEMA_NAMES","getMatchedSchema","isWithinObjectSchemaEntry","getPreferredCalleeText","isSchemaOption","sourceTextForMemberNamespace","getLocalImportName","OBJECT_SCHEMA_NAMES","getPreferredCalleeText","sourceTextForMemberNamespace","getLocalImportName","getPreferredCalleeText","sourceTextForMemberNamespace","getLocalImportName","getPreferredCalleeText","sourceTextForMemberNamespace","getLocalImportName","configs","plugin","plugin","plugin","plugin"]}
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "eslint-plugin-valibot",
3
+ "version": "0.1.0",
4
+ "description": "ESLint rules for safer, more maintainable Valibot usage.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/nimaebra/eslint-plugin-valibot.git"
9
+ },
10
+ "homepage": "https://github.com/nimaebra/eslint-plugin-valibot#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/nimaebra/eslint-plugin-valibot/issues"
13
+ },
14
+ "type": "module",
15
+ "sideEffects": false,
16
+ "main": "./dist/index.cjs",
17
+ "module": "./dist/index.mjs",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.mjs",
23
+ "require": "./dist/index.cjs"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "keywords": [
31
+ "eslint",
32
+ "eslint-plugin",
33
+ "eslintplugin",
34
+ "valibot",
35
+ "schema",
36
+ "validation",
37
+ "typescript"
38
+ ],
39
+ "engines": {
40
+ "node": "^20.19.0 || ^22.13.0 || >=24.0.0"
41
+ },
42
+ "packageManager": "pnpm@10.33.4",
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "scripts": {
47
+ "build": "tsup --config tsup.config.ts",
48
+ "changeset": "changeset",
49
+ "clean": "rimraf dist coverage",
50
+ "configs:check": "tsx scripts/check-configs.ts",
51
+ "create:rule": "tsx scripts/generate-rule.ts",
52
+ "docs:build": "eslint-doc-generator . && tsx scripts/build-configs-doc.ts",
53
+ "docs:check": "eslint-doc-generator --check . && tsx scripts/check-docs.ts",
54
+ "format": "prettier . --write",
55
+ "format:check": "prettier . --check",
56
+ "lint": "eslint .",
57
+ "lint:fix": "eslint . --fix",
58
+ "knip": "knip",
59
+ "pack:dry-run": "pnpm pack --dry-run",
60
+ "prepublishOnly": "pnpm check",
61
+ "release:publish": "changeset publish",
62
+ "smoke:pack": "tsx scripts/smoke-pack.ts",
63
+ "typecheck": "tsc -p tsconfig.json --noEmit",
64
+ "test": "vitest run tests/rules tests/configs",
65
+ "test:integration": "vitest run tests/integration",
66
+ "test:watch": "vitest",
67
+ "check": "pnpm lint && pnpm typecheck && pnpm knip && pnpm test && pnpm build && pnpm test:integration && pnpm docs:check && pnpm configs:check",
68
+ "version-packages": "changeset version"
69
+ },
70
+ "peerDependencies": {
71
+ "eslint": "^9.0.0 || ^10.0.0",
72
+ "valibot": "^1.0.0"
73
+ },
74
+ "devDependencies": {
75
+ "@changesets/cli": "^2.31.0",
76
+ "@eslint/js": "^10.0.1",
77
+ "@types/node": "^24.12.0",
78
+ "@typescript-eslint/utils": "^8.59.4",
79
+ "eslint": "^10.4.0",
80
+ "eslint-doc-generator": "^3.6.0",
81
+ "globals": "^17.6.0",
82
+ "knip": "^6.14.1",
83
+ "prettier": "^3.8.3",
84
+ "rimraf": "^6.1.3",
85
+ "tsup": "^8.5.1",
86
+ "tsx": "^4.22.3",
87
+ "typescript": "^6.0.3",
88
+ "typescript-eslint": "^8.59.4",
89
+ "vite": "^7.2.4",
90
+ "vitest": "^4.1.7"
91
+ }
92
+ }