{
  "version": 3,
  "sources": ["../src/plugin.ts", "../package.json", "../src/_internal/plugin-meta.ts", "../src/configs/all-rule-levels.ts", "../src/_internal/rule-deprecation.ts", "../src/rules.ts", "../src/_internal/rule-catalog.ts", "_internal/rule-catalog-assignments.json", "../src/rules/class-match-filename.ts", "../src/_internal/rule-creator.ts", "../src/rules/comment-spacing.ts", "../src/rules/consistent-empty-lines.ts", "../src/rules/consistent-enum-members.ts", "../src/rules/consistent-filename.ts", "../src/_internal/casing.ts", "../src/_internal/identifier-blocks.ts", "../src/rules/consistent-import.ts", "../src/rules/consistent-optional-props.ts", "../src/rules/consistent-source-extension.ts", "../src/rules/consistent-symbol-description.ts", "../src/rules/decorator-position.ts", "../src/rules/default-case.ts", "../src/_internal/create-external-rule.ts", "../src/_internal/get-core-rule.ts", "../src/_internal/create-import-pattern-rule.ts", "../src/_internal/import-patterns.ts", "../src/rules/disallow-import.ts", "../src/rules/export-matching-filename-only.ts", "../src/rules/jsx-no-jsx-as-prop.ts", "../src/_internal/jsx-prop-stability.ts", "../src/_internal/jsx-react-analysis.ts", "../src/rules/jsx-no-new-array-as-prop.ts", "../src/rules/jsx-no-new-function-as-prop.ts", "../src/rules/jsx-no-new-object-as-prop.ts", "../src/rules/match-filename.ts", "../src/rules/max-identifier-blocks.ts", "../src/rules/no-assign-mutated-array.ts", "../src/rules/no-at-sign-import.ts", "../src/rules/no-at-sign-internal-import.ts", "../src/rules/no-chain-coalescence-mixture.ts", "../src/rules/no-commented-out-code.ts", "../src/rules/no-const-enum.ts", "../src/rules/no-constructor-bind.ts", "../src/_internal/constructor-migration.ts", "../src/rules/no-constructor-state.ts", "../src/rules/no-deprecated.ts", "../src/_internal/ignore-patterns.ts", "../src/_internal/symbol-usage.ts", "../src/_internal/ssr-dom-globals.ts", "../src/_internal/node-identity.ts", "../src/rules/no-dom-globals-in-constructor.ts", "../src/rules/no-dom-globals-in-module-scope.ts", "../src/rules/no-dom-globals-in-react-cc-render.ts", "../src/rules/no-dom-globals-in-react-fc.ts", "../src/rules/no-enum.ts", "../src/rules/no-expression-empty-lines.ts", "../src/rules/no-foreach.ts", "../src/rules/no-function-declare-after-return.ts", "../src/rules/no-implicit-any-catch.ts", "../src/rules/no-index-import.ts", "../src/rules/no-internal-modules.ts", "../src/rules/no-internal.ts", "../src/rules/no-invalid-jsx-nesting.ts", "../src/_internal/html-jsx-nesting.ts", "../src/rules/no-language-mixing.ts", "../src/rules/no-misused-generics.ts", "../src/rules/no-negated-conditions.ts", "../src/rules/no-nodejs-modules.ts", "../src/rules/no-only-tests.ts", "../src/rules/no-param-reassign.ts", "../src/rules/no-relative-parent-import.ts", "../src/rules/no-restricted-syntax.ts", "../src/_internal/syntax-selectors.ts", "../src/rules/no-self-import.ts", "../src/rules/no-shadow.ts", "../src/rules/no-sibling-import.ts", "../src/rules/no-single-line-comment.ts", "../src/rules/no-t.ts", "../src/rules/no-underscore-export.ts", "../src/rules/no-unnecessary-as-const.ts", "../src/rules/no-unnecessary-break.ts", "../src/rules/no-unnecessary-initialization.ts", "../src/rules/no-unnecessary-template-literal.ts", "../src/rules/no-unstable-react-children.ts", "../src/_internal/react-memo-stability.ts", "../src/rules/no-unstable-react-values.ts", "../src/rules/no-use-extend-native.ts", "../src/rules/no-vulnerable.ts", "../src/rules/no-writeonly.ts", "../src/rules/object-format.ts", "../src/rules/only-export-name.ts", "../src/rules/prefer-arrow-function-property.ts", "../src/rules/prefer-const-require.ts", "../src/rules/prefer-interface.ts", "../src/rules/prefer-less-than.ts", "../src/rules/prefer-object-has-own.ts", "../src/rules/prefer-only-export.ts", "../src/rules/react-prefer-function-component.ts", "../src/rules/require-jsdoc.ts", "../src/rules/require-memo.ts", "../src/rules/require-syntax.ts", "../src/rules/require-usememo-children.ts", "../src/rules/require-usememo.ts", "../src/rules/restrict-identifier-characters.ts", "../src/rules/sort-array.ts", "../src/rules/sort-call-signature.ts", "../src/rules/sort-class-members.ts", "../src/rules/sort-construct-signature.ts", "../src/rules/sort-export-specifiers.ts", "../src/rules/sort-keys.ts", "../src/rules/sort-top-comments.ts", "../src/rules/switch-case-spacing.ts", "../src/rules/template-literal-format.ts", "../src/rules/throw-error.ts", "../src/rules/typescript-array-callback-return-type.ts", "../src/rules/typescript-class-methods-use-this.ts", "../src/rules/typescript-consistent-array-type-name.ts", "../src/rules/typescript-define-function-in-one-statement.ts", "../src/rules/typescript-exhaustive-switch.ts", "../src/rules/typescript-no-boolean-literal-type.ts", "../src/rules/typescript-no-complex-declarator-type.ts", "../src/rules/typescript-no-complex-return-type.ts", "../src/rules/typescript-no-empty-interfaces.ts", "../src/rules/typescript-no-inferrable-types.ts", "../src/rules/typescript-no-multi-type-tuples.ts", "../src/rules/typescript-no-never.ts", "../src/rules/typescript-no-redundant-undefined-const.ts", "../src/rules/typescript-no-redundant-undefined-default-parameter.ts", "../src/rules/typescript-no-redundant-undefined-let.ts", "../src/rules/typescript-no-redundant-undefined-optional.ts", "../src/rules/typescript-no-redundant-undefined-promise-return-type.ts", "../src/rules/typescript-no-redundant-undefined-readonly-property.ts", "../src/rules/typescript-no-redundant-undefined-return-type.ts", "../src/rules/typescript-no-redundant-undefined-var.ts", "../src/rules/typescript-no-restricted-syntax.ts", "../src/rules/typescript-no-unsafe-object-assign.ts", "../src/rules/typescript-no-unsafe-object-assignment.ts", "../src/rules/typescript-prefer-array-type-alias.ts", "../src/rules/typescript-prefer-class-method.ts", "../src/rules/typescript-prefer-enum.ts", "../src/rules/typescript-prefer-named-tuple-members.ts", "../src/rules/typescript-prefer-readonly-array-parameter.ts", "../src/rules/typescript-prefer-readonly-array.ts", "../src/rules/typescript-prefer-readonly-index-signature.ts", "../src/rules/typescript-prefer-readonly-map.ts", "../src/rules/typescript-prefer-readonly-property.ts", "../src/rules/typescript-prefer-readonly-record.ts", "../src/rules/typescript-prefer-readonly-set.ts", "../src/rules/typescript-require-prop-type-annotation.ts", "../src/rules/typescript-require-readonly-array-property-type.ts", "../src/rules/typescript-require-readonly-array-return-type.ts", "../src/rules/typescript-require-readonly-array-type-alias.ts", "../src/rules/typescript-require-readonly-map-parameter-type.ts", "../src/rules/typescript-require-readonly-map-property-type.ts", "../src/rules/typescript-require-readonly-map-return-type.ts", "../src/rules/typescript-require-readonly-map-type-alias.ts", "../src/rules/typescript-require-readonly-record-parameter-type.ts", "../src/rules/typescript-require-readonly-record-property-type.ts", "../src/rules/typescript-require-readonly-record-return-type.ts", "../src/rules/typescript-require-readonly-record-type-alias.ts", "../src/rules/typescript-require-readonly-set-parameter-type.ts", "../src/rules/typescript-require-readonly-set-property-type.ts", "../src/rules/typescript-require-readonly-set-return-type.ts", "../src/rules/typescript-require-readonly-set-type-alias.ts", "../src/rules/typescript-require-this-void.ts", "../src/rules/underscore-internal.ts", "../src/configs/all-strict-with-deprecated.ts", "../src/configs/all-strict.ts", "../src/configs/all-with-deprecated.ts", "../src/configs/all.ts", "../src/configs/minimal.ts", "../src/configs/recommended.ts", "../src/configs/strict-type-checked.ts", "../src/configs/strict.ts", "../src/configs.ts"],
  "sourcesContent": ["import { pluginMeta, type PluginMeta } from \"./_internal/plugin-meta.js\";\nimport { configs } from \"./configs.js\";\nimport { rules } from \"./rules.js\";\n\ninterface PluginModule {\n    readonly configs: typeof configs;\n    readonly meta: PluginMeta;\n    readonly processors: Readonly<Record<string, never>>;\n    readonly rules: typeof rules;\n}\n\n/**\n * ESLint plugin module export.\n */\nconst plugin: PluginModule = {\n    configs,\n    meta: pluginMeta,\n    processors: {},\n    rules,\n};\n\nexport default plugin;\n", "{\n    \"$schema\": \"https://www.schemastore.org/package.json\",\n    \"name\": \"eslint-plugin-etc-misc\",\n    \"version\": \"3.0.1\",\n    \"private\": false,\n    \"description\": \"ESLint Plugin combining eslint-plugin-etc and eslint-plugin-misc!\",\n    \"keywords\": [\n        \"eslint\",\n        \"eslint-plugin\",\n        \"eslintplugin\",\n        \"etc\",\n        \"misc\",\n        \"tslint\"\n    ],\n    \"homepage\": \"https://nick2bad4u.github.io/eslint-plugin-etc-misc\",\n    \"bugs\": {\n        \"url\": \"https://github.com/Nick2bad4u/eslint-plugin-etc-misc/issues\",\n        \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/Nick2bad4u/eslint-plugin-etc-misc.git\"\n    },\n    \"license\": \"MIT\",\n    \"author\": \"Nick2bad4u\",\n    \"contributors\": [\n        {\n            \"name\": \"Nick2bad4u\",\n            \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\",\n            \"url\": \"https://nick2bad4u.github.io/eslint-plugin-etc-misc\"\n        }\n    ],\n    \"sideEffects\": false,\n    \"type\": \"module\",\n    \"exports\": {\n        \".\": {\n            \"import\": {\n                \"types\": \"./dist/plugin.d.ts\",\n                \"default\": \"./dist/plugin.js\"\n            },\n            \"require\": {\n                \"types\": \"./dist/plugin.d.cts\",\n                \"default\": \"./dist/plugin.cjs\"\n            },\n            \"default\": \"./dist/plugin.js\"\n        },\n        \"./package.json\": \"./package.json\"\n    },\n    \"main\": \"./dist/plugin.cjs\",\n    \"module\": \"./dist/plugin.js\",\n    \"types\": \"./dist/plugin.d.cts\",\n    \"files\": [\n        \"dist\",\n        \"docs/rules\",\n        \"THIRD_PARTY_NOTICES.md\"\n    ],\n    \"workspaces\": [\n        \"docs/docusaurus\"\n    ],\n    \"scripts\": {\n        \"bench:eslint:stats\": \"node benchmarks/run-eslint-stats.mjs\",\n        \"bench:eslint:timing\": \"npx cross-env TIMING=1 npx eslint --config benchmarks/eslint-timing.config.mjs benchmarks/fixtures/recommended-valid.fixture.ts\",\n        \"prebuild\": \"npm run build:clean\",\n        \"build\": \"npx tsc -b tsconfig.build.json --force && npm run build:types:cjs && npm run build:cjs && npm run build:verify\",\n        \"build:cjs\": \"npx esbuild dist/plugin.js --bundle --format=cjs --platform=node --packages=external --sourcemap --outfile=dist/plugin.cjs --footer:js=\\\"module.exports = module.exports.default;\\\"\",\n        \"build:clean\": \"node -e \\\"require('node:fs').rmSync('dist',{recursive:true,force:true})\\\"\",\n        \"build:eslint-inspector\": \"npx @eslint/config-inspector build --outDir \\\"docs/docusaurus/static/eslint-inspector\\\" --base \\\"/eslint-plugin-etc-misc/eslint-inspector/\\\"\",\n        \"build:eslint-inspector:local\": \"npx @eslint/config-inspector\",\n        \"build:types:cjs\": \"node scripts/build-cjs-types.mjs\",\n        \"build:verify\": \"node scripts/verify-built-plugin-meta.mjs\",\n        \"changelog:generate\": \"git cliff --config node_modules/gitcliff-config-nick2bad4u/cliff.toml --github-repo Nick2bad4u/eslint-plugin-etc-misc --output CHANGELOG.md\",\n        \"changelog:preview\": \"git cliff --config node_modules/gitcliff-config-nick2bad4u/cliff.toml --github-repo Nick2bad4u/eslint-plugin-etc-misc --unreleased\",\n        \"changelog:release-notes\": \"git cliff --config node_modules/gitcliff-config-nick2bad4u/cliff.toml --github-repo Nick2bad4u/eslint-plugin-etc-misc --current\",\n        \"clean:cache\": \"node scripts/remove-paths.mjs dist coverage cache .cache .vite .turbo\",\n        \"clean:cache:coverage\": \"node scripts/remove-paths.mjs coverage .coverage\",\n        \"clean:cache:dist\": \"node scripts/remove-paths.mjs dist release\",\n        \"clean:cache:eslint\": \"node scripts/remove-paths.mjs .cache/.eslintcache\",\n        \"clean:cache:ncu\": \"node scripts/remove-paths.mjs .cache/.ncu-cache.json\",\n        \"clean:cache:prettier\": \"node scripts/remove-paths.mjs .cache/.prettier-cache .prettier-cache .prettiercache\",\n        \"clean:cache:stryker\": \"node scripts/remove-paths.mjs .stryker-tmp\",\n        \"clean:cache:stylelint\": \"node scripts/remove-paths.mjs .cache/stylelintcache stylelintcache .stylelintcache\",\n        \"clean:cache:temp\": \"node scripts/remove-paths.mjs \\\".temp/.**\\\"\",\n        \"clean:cache:typescript\": \"node scripts/remove-paths.mjs .cache/**.tsbuildinfo .cache/builds\",\n        \"clean:cache:vite\": \"node scripts/remove-paths.mjs .cache/vite .cache/vitest .cache/vitest-zero-coverage .cache/vite-zero-coverage\",\n        \"clean:database\": \"node scripts/remove-paths.mjs %appdata%/uptime-watcher/uptime-watcher.sqlite\",\n        \"clean:docs\": \"node scripts/remove-paths.mjs docs/docusaurus/.docusaurus/** docs/docusaurus/build/** docs/docusaurus/site-docs/developer/api/**\",\n        \"clean:docusaurus\": \"npm run clean:docs && npm run --workspace docs/docusaurus clear\",\n        \"commit\": \"npx git-cz\",\n        \"contrib\": \"npx all-contributors\",\n        \"contrib:add\": \"npx all-contributors add\",\n        \"contrib:check\": \"npx all-contributors check\",\n        \"contrib:compare\": \"npm run contrib:check\",\n        \"contrib:generate\": \"npx all-contributors generate\",\n        \"coverage\": \"npx vitest run --coverage\",\n        \"docs:api\": \"npm run --workspace docs/docusaurus docs:api\",\n        \"docs:build\": \"npm run --workspace docs/docusaurus build\",\n        \"docs:build:local\": \"npm run --workspace docs/docusaurus build:local\",\n        \"docs:check-links\": \"node ./scripts/check-doc-links.mjs\",\n        \"docs:serve\": \"npm run --workspace docs/docusaurus serve\",\n        \"docs:start\": \"npm run --workspace docs/docusaurus start\",\n        \"docs:toc\": \"npx remark docs --use remark-toc --output\",\n        \"docs:typecheck\": \"npm run --workspace docs/docusaurus typecheck\",\n        \"docs:typedoc\": \"node scripts/run-typedoc-docs.mjs\",\n        \"docs:validate-links\": \"npx remark docs --use remark-validate-links --frail\",\n        \"knip\": \"node scripts/run-knip.mjs\",\n        \"prelint\": \"npm run build\",\n        \"lint\": \"npx cross-env NODE_OPTIONS=--max_old_space_size=16384 npx eslint --cache --cache-strategy content --cache-location .cache/.eslintcache\",\n        \"lint:action\": \"npm run lint:actions\",\n        \"lint:actions\": \"actionlint -color -shellcheck= -pyflakes=\",\n        \"lint:all\": \"npm run lint && npm run lint:css && npm run lint:prettier && npm run lint:remark && npm run lint:package && npm run lint:gitleaks && npm run lint:secretlint && npm run lint:yaml && npm run lint:yamllint && npm run lint:actions && npm run lint:circular\",\n        \"lint:all:fix\": \"npm run lint:fix && npm run lint:remark:fix && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular\",\n        \"lint:all:fix:quiet\": \"npm run lint:fix:quiet && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular\",\n        \"lint:circular\": \"node scripts/check-module-graph.mjs --circular\",\n        \"prelint:compat:eslint9\": \"npm run build\",\n        \"lint:compat:eslint9\": \"node scripts/eslint9-compat-smoke.mjs\",\n        \"lint:config:build\": \"npm run build:eslint-inspector\",\n        \"lint:config:inspect\": \"npx eslint --inspect-config\",\n        \"lint:css\": \"npx stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty && echo \\\"Stylelint done!\\\"\",\n        \"lint:css:fix\": \"npx stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n        \"lint:depcheck\": \"node scripts/run-knip.mjs --dependencies\",\n        \"lint:deps\": \"node scripts/run-knip.mjs --dependencies && npm run knip\",\n        \"lint:dupes\": \"npx jscpd src/ --config node_modules/jscpd-config-nick2bad4u/jscpd.json\",\n        \"lint:dupes:all\": \"npx jscpd src/ --config node_modules/jscpd-config-nick2bad4u/jscpd.json --min-lines 3\",\n        \"lint:dupes:skiplocal\": \"npx jscpd src/ --skipLocal --config node_modules/jscpd-config-nick2bad4u/jscpd.json\",\n        \"lint:dupes:skiplocal:all\": \"npx jscpd src/ --skipLocal --config node_modules/jscpd-config-nick2bad4u/jscpd.json --min-lines 3\",\n        \"lint:duplicates\": \"npm run lint:dupes\",\n        \"lint:exports\": \"npx ts-unused-exports tsconfig.json src/plugin.ts --excludePathsFromReport=plugin.ts\",\n        \"lint:fix\": \"npx cross-env NODE_OPTIONS=--max_old_space_size=16384 npx eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix\",\n        \"lint:fix:quiet\": \"npx cross-env ESLINT_PROGRESS=off NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix && echo \\\"Eslint fix done!\\\"\",\n        \"lint:gitleaks\": \"gitleaks dir --config .gitleaks.toml .\",\n        \"lint:grype\": \"grype . -c .grype.yaml --name eslint-plugin-etc-misc\",\n        \"lint:jscpd\": \"npx jscpd --config node_modules/jscpd-config-nick2bad4u/jscpd.json\",\n        \"lint:knip\": \"npm run knip\",\n        \"lint:knip:exports\": \"node scripts/run-knip.mjs --include exports,nsExports,types,nsTypes,enumMembers,duplicates\",\n        \"lint:knip:unused:exports\": \"node scripts/run-knip.mjs --dependencies --exports\",\n        \"lint:leaves\": \"node scripts/check-module-graph.mjs --leaves\",\n        \"lint:lychee\": \"lychee --config node_modules/lychee-config-nick2bad4u/lychee.toml .\",\n        \"lint:lychee:smoke\": \"lychee --config node_modules/lychee-config-nick2bad4u/lychee.toml --dump-inputs README.md\",\n        \"lint:node-version-files\": \"node scripts/sync-node-version-files.mjs --check\",\n        \"lint:npm-version\": \"node scripts/setup-package-manager.mjs --check\",\n        \"lint:orphans\": \"node scripts/check-module-graph.mjs --orphans\",\n        \"lint:package\": \"npm run lint:npm-version && npm run lint:node-version-files && npm run lint:package-sort && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n        \"lint:package:strict\": \"npm run lint:npm-version && npm run lint:node-version-files && npm run lint:package-sort && npm run lint:package-check:strict && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n        \"lint:package-check\": \"npx publint && npx attw --pack .\",\n        \"lint:package-check:strict\": \"npx publint && npx attw --pack . --profile strict --config-path ./.attw.json\",\n        \"lint:package-json\": \"npx npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n        \"lint:package-sort\": \"npx sort-package-json \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:package-sort-check\": \"npx sort-package-json --check \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:packagelintrc\": \"npx npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n        \"lint:prettier\": \"npx prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --check\",\n        \"lint:prettier:fix\": \"npx prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --write\",\n        \"lint:publint\": \"npx publint\",\n        \"lint:quiet\": \"npx cross-env ESLINT_PROGRESS=nofile NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache && echo \\\"Eslint done!\\\"\",\n        \"lint:remark\": \"npx remark . --frail --ignore-path .remarkignore\",\n        \"lint:remark:fix\": \"npx remark . --ignore-path .remarkignore --output\",\n        \"lint:secretlint\": \"npx secretlint --secretlintrc .secretlintrc.cjs --secretlintignore .secretlintignore \\\"./*\\\" \\\".vscode/**\\\" \\\"assets/**\\\" \\\"src/**\\\" \\\"electron/**\\\" \\\"shared/**\\\" \\\"config/**\\\" \\\"scripts/**\\\" \\\"playwright/**\\\" \\\"storybook/**\\\" \\\".storybook\\\" \\\"tests/**\\\" \\\"benchmarks/**\\\" \\\".devin/**\\\" \\\"public/**\\\" \\\".github/**\\\" \\\"docs/Architecture/**\\\" \\\"docs/*\\\" \\\"docs/assets/**\\\" \\\"docs/Guides/**\\\" \\\"docs/Testing/**\\\" \\\"docs/TSDoc/**\\\" \\\"docs/docusaurus/src/**\\\" \\\"docs/docusaurus/static/**\\\" \\\"docs/docusaurus/blog/**\\\" \\\"docs/docusaurus/docs/**\\\" \\\"docs/docusaurus/docs/*\\\"\",\n        \"lint:secrets\": \"detect-secrets scan\",\n        \"lint:unused\": \"node scripts/run-knip.mjs --include unlisted,unresolved,duplicates\",\n        \"lint:unused-deps\": \"node scripts/run-knip.mjs --dependencies\",\n        \"lint:yaml\": \"npx cross-env NODE_OPTIONS=--max_old_space_size=16384 npx eslint --cache --cache-strategy content --cache-location .cache/.eslintcache \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint done!\\\"\",\n        \"lint:yaml:fix\": \"npx cross-env NODE_OPTIONS=--max_old_space_size=16384 npx eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint (fix) done!\\\"\",\n        \"lint:yamllint\": \"yamllint -c .yamllint .\",\n        \"open:coverage\": \"npx open-cli coverage/index.html\",\n        \"prepublishOnly\": \"npm run release:check\",\n        \"release:check\": \"npm run release:verify\",\n        \"release:verify\": \"npm run lint:all && npm run typecheck && npm run test && npm pack --dry-run\",\n        \"remark:fix\": \"npx remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail --quiet --output -- \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\"\",\n        \"remark:test-config\": \"npx remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"README.md\\\"\",\n        \"setup:npm\": \"node scripts/setup-package-manager.mjs --install\",\n        \"sync:node-version-files\": \"node scripts/sync-node-version-files.mjs\",\n        \"sync:peer-eslint-range\": \"node scripts/sync-peer-eslint-range.mjs\",\n        \"sync:preset-rule-links\": \"node scripts/sync-preset-rule-links.mjs\",\n        \"sync:readme-rules-table\": \"node scripts/sync-readme-rules-table.mjs\",\n        \"sync:rule-catalog-ids\": \"node scripts/sync-rule-catalog-ids.mjs\",\n        \"sync:rules:write\": \"npm run sync:readme-rules-table && npm run sync:peer-eslint-range && npm run sync:node-version-files\",\n        \"pretest\": \"npm run build\",\n        \"test\": \"npx vitest run\",\n        \"test:ci\": \"npx cross-env CI=true npx vitest run --reporter=default\",\n        \"test:coverage\": \"npx vitest run --coverage --reporter=default\",\n        \"test:coverage:detailed\": \"npx vitest run --coverage --reporter=verbose\",\n        \"test:coverage:minimal\": \"npx vitest run --coverage --reporter=dot\",\n        \"test:coverage:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:coverage:quiet\": \"npx vitest run --coverage --reporter=default --silent\",\n        \"test:coverage:verbose\": \"npx vitest run --coverage --reporter=verbose\",\n        \"test:detailed\": \"npx vitest run --reporter=verbose\",\n        \"test:minimal\": \"npx vitest run --reporter=dot\",\n        \"test:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:quiet\": \"npx vitest run --reporter=default --silent\",\n        \"test:serial\": \"npx cross-env MAX_THREADS=1 npx vitest run\",\n        \"test:stryker\": \"npx stryker run --ignoreStatic --concurrency 12 --incrementalFile .cache/stryker/incremental-fast.json\",\n        \"test:stryker:ci\": \"npx cross-env CI=true npx stryker run --ignoreStatic --concurrency 2 --incrementalFile .cache/stryker/incremental-fast-ci.json\",\n        \"test:stryker:full\": \"npx stryker run --concurrency 12 --incrementalFile .cache/stryker/incremental-full.json\",\n        \"test:stryker:full:ci\": \"npx cross-env CI=true npx stryker run --concurrency 2 --incrementalFile .cache/stryker/incremental-full-ci.json\",\n        \"test:verbose\": \"npx vitest run --reporter=verbose\",\n        \"test:watch\": \"npx vitest\",\n        \"typecheck\": \"npx tsc -p tsconfig.json --noEmit && npx tsc -p tsconfig.build.json --noEmit && npx tsc -p tsconfig.eslint.json --noEmit && npx tsc -p tsconfig.js.json --noEmit && npm run --workspace docs/docusaurus typecheck\",\n        \"typecheck:all\": \"npm run typecheck\",\n        \"types:update\": \"npx typesync\",\n        \"update-actions\": \"npx actions-up --yes --style sha\",\n        \"update-all\": \"npm run update-actions && npm run update-deps\",\n        \"update-deps\": \"npx ncu --configFileName .ncurc.workspaces.json --configFilePath node_modules/ncu-config-nick2bad4u && npm install && npm run sync:rules:write\"\n    },\n    \"dependencies\": {\n        \"@typescript-eslint/parser\": \"^8.67.0\",\n        \"@typescript-eslint/type-utils\": \"^8.67.0\",\n        \"@typescript-eslint/utils\": \"^8.67.0\",\n        \"globals\": \"^17.11.0\",\n        \"minimatch\": \"^10.2.6\",\n        \"recheck\": \"^4.5.0\",\n        \"ts-extras\": \"^1.3.0\",\n        \"tsutils\": \"^3.21.0\",\n        \"type-fest\": \"^5.8.0\"\n    },\n    \"devDependencies\": {\n        \"@arethetypeswrong/cli\": \"^0.18.5\",\n        \"@eslint/config-inspector\": \"^3.3.0\",\n        \"@eslint/json\": \"^2.0.1\",\n        \"@microsoft/tsdoc-config\": \"^0.18.1\",\n        \"@stryker-ignorer/console-all\": \"^0.3.2\",\n        \"@stryker-mutator/api\": \"^9.6.1\",\n        \"@stryker-mutator/core\": \"^9.6.1\",\n        \"@stryker-mutator/typescript-checker\": \"^9.6.1\",\n        \"@stryker-mutator/vitest-runner\": \"^9.6.1\",\n        \"@types/mdast\": \"^4.0.4\",\n        \"@types/node\": \"^26.2.0\",\n        \"@types/unist\": \"^3.0.3\",\n        \"@typescript-eslint/rule-tester\": \"^8.67.0\",\n        \"@vitest/coverage-v8\": \"^4.1.11\",\n        \"@vitest/ui\": \"^4.1.11\",\n        \"all-contributors-cli\": \"^6.26.1\",\n        \"cross-env\": \"^10.1.0\",\n        \"esbuild\": \"^0.28.2\",\n        \"eslint\": \"^10.8.1\",\n        \"eslint-config-nick2bad4u\": \"^14.1.0\",\n        \"eslint-plugin-eslint-plugin\": \"^7.6.2\",\n        \"fast-check\": \"^4.9.0\",\n        \"git-cliff\": \"^2.13.1\",\n        \"gitcliff-config-nick2bad4u\": \"^1.5.0\",\n        \"gitleaks-config-nick2bad4u\": \"^1.0.4\",\n        \"jscpd\": \"^5.0.16\",\n        \"jscpd-config-nick2bad4u\": \"^1.1.0\",\n        \"knip\": \"^6.32.2\",\n        \"lychee-config-nick2bad4u\": \"^2.0.0\",\n        \"ncu-config-nick2bad4u\": \"^0.2.1\",\n        \"npm-check-updates\": \"^22.2.9\",\n        \"npm-package-json-lint\": \"^10.4.1\",\n        \"npm-package-json-lint-config-nick2bad4u\": \"^1.0.4\",\n        \"picocolors\": \"^1.1.1\",\n        \"prettier\": \"^3.9.6\",\n        \"prettier-config-nick2bad4u\": \"^2.0.2\",\n        \"publint\": \"^0.3.23\",\n        \"remark\": \"^15.0.1\",\n        \"remark-cli\": \"^12.0.1\",\n        \"remark-config-nick2bad4u\": \"^1.1.3\",\n        \"secretlint\": \"^13.0.4\",\n        \"secretlint-config-nick2bad4u\": \"^1.1.2\",\n        \"sort-package-json\": \"^4.0.0\",\n        \"stylelint\": \"^17.14.1\",\n        \"stylelint-config-nick2bad4u\": \"^2.1.0\",\n        \"stylelint-formatter-pretty\": \"^4.0.1\",\n        \"tinyglobby\": \"^0.2.17\",\n        \"ts-unused-exports\": \"^11.0.1\",\n        \"tsdoc-config-nick2bad4u\": \"^1.0.6\",\n        \"typedoc\": \"^0.28.20\",\n        \"typescript\": \"^6.0.3\",\n        \"typesync\": \"^0.14.3\",\n        \"vfile\": \"^6.0.3\",\n        \"vite\": \"^8.2.1\",\n        \"vitest\": \"^4.1.11\",\n        \"yamllint-config-nick2bad4u\": \"^1.1.1\",\n        \"yamllint-js\": \"^0.2.4\"\n    },\n    \"peerDependencies\": {\n        \"eslint\": \"^9.0.0 || ^10.7.0\",\n        \"typescript\": \">=5.0.0 <6.1.0\"\n    },\n    \"packageManager\": \"npm@12.0.2\",\n    \"engines\": {\n        \"node\": \">=20.19.0\"\n    },\n    \"devEngines\": {\n        \"runtime\": {\n            \"name\": \"node\",\n            \"version\": \">=20.19.0\",\n            \"onFail\": \"error\"\n        },\n        \"packageManager\": {\n            \"name\": \"npm\",\n            \"version\": \"12.0.2\",\n            \"onFail\": \"error\"\n        }\n    },\n    \"publishConfig\": {\n        \"provenance\": true,\n        \"registry\": \"https://registry.npmjs.org/\"\n    },\n    \"allowScripts\": {\n        \"@swc/core@1.15.43\": true,\n        \"core-js@3.49.0\": false,\n        \"esbuild@0.28.2\": true,\n        \"fsevents@2.3.3\": false,\n        \"unrs-resolver@1.12.2\": true\n    },\n    \"readme\": \"README.md\"\n}\n", "// JSON module specifiers require an explicit file extension at runtime.\n// eslint-disable-next-line import-x/extensions -- Node.js cannot resolve this JSON module without its extension.\nimport packageJson from \"../../package.json\" with { type: \"json\" };\n\n/**\n * Metadata exposed by the ESLint plugin module.\n */\nexport type PluginMeta = Readonly<{\n    name: \"eslint-plugin-etc-misc\";\n    namespace: PluginNamespace;\n    version: string;\n}>;\n\n/**\n * Namespace used to register the plugin in flat configurations.\n */\nexport type PluginNamespace = \"etc-misc\";\n\n/**\n * Immutable metadata describing this ESLint plugin package.\n */\nexport const pluginMeta: PluginMeta = {\n    name: \"eslint-plugin-etc-misc\",\n    namespace: \"etc-misc\",\n    version: packageJson.version,\n};\n", "import { objectEntries } from \"ts-extras\";\n\nimport { hasDeprecatedSamePluginReplacement } from \"../_internal/rule-deprecation.js\";\nimport { rules as pluginRules } from \"../rules.js\";\n\ninterface AllRuleLevelsOptions {\n    readonly includeDeprecated: boolean;\n    readonly strict: boolean;\n}\n\ntype AllRuleSeverity = \"error\" | \"warn\";\n\nconst getRuleSeverity = (\n    ruleModule: Readonly<(typeof pluginRules)[string]>,\n    strict: boolean\n): AllRuleSeverity => {\n    if (ruleModule.meta.deprecated !== false) {\n        return \"warn\";\n    }\n\n    return strict || ruleModule.meta.type === \"problem\" ? \"error\" : \"warn\";\n};\n\n/**\n * Build an exhaustive preset rule map with an explicit deprecation policy.\n */\nexport const createAllRuleLevels = ({\n    includeDeprecated,\n    strict,\n}: Readonly<AllRuleLevelsOptions>): Readonly<\n    Record<string, AllRuleSeverity>\n> => {\n    let ruleLevelsAccumulator: Record<string, AllRuleSeverity> = {};\n\n    for (const [ruleName, ruleModule] of objectEntries(pluginRules)) {\n        const isDeprecated = ruleModule.meta.deprecated !== false;\n\n        if (\n            isDeprecated &&\n            (!includeDeprecated ||\n                hasDeprecatedSamePluginReplacement({\n                    deprecated: ruleModule.meta.deprecated,\n                    ruleId: ruleName,\n                }))\n        ) {\n            continue;\n        }\n\n        ruleLevelsAccumulator = {\n            ...ruleLevelsAccumulator,\n            [`etc-misc/${ruleName}`]: getRuleSeverity(ruleModule, strict),\n        };\n    }\n\n    return Object.freeze(ruleLevelsAccumulator);\n};\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { ArrayElement, UnknownArray } from \"type-fest\";\n\nimport { isDefined } from \"ts-extras\";\n\ntype DeprecatedInfo = Exclude<\n    TSESLint.RuleMetaData<string>[\"deprecated\"],\n    boolean | undefined\n>;\ntype ReplacedByInfo = ArrayElement<NonNullable<DeprecatedInfo[\"replacedBy\"]>>;\n\ntype RuleDeprecationOptions = Readonly<{\n    readonly availableUntil?: string;\n    readonly deprecatedSince?: string;\n    readonly message: string;\n    readonly replacedBy?: readonly ReplacedByInfo[];\n    readonly ruleId: string;\n}>;\n\ntype RuleModule = TSESLint.RuleModule<string, Readonly<UnknownArray>>;\n\nconst docsBaseUrl =\n    \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules\";\n\n/**\n * Create a replacement descriptor for deprecation metadata.\n */\nexport const createReplacementRuleInfo = (\n    replacement: Readonly<{\n        readonly plugin?: Readonly<{\n            readonly name: string;\n            readonly url?: string;\n        }>;\n        readonly rule?: Readonly<{\n            readonly name: string;\n            readonly url?: string;\n        }>;\n    }>\n): ReplacedByInfo => ({\n    ...(isDefined(replacement.plugin) && { plugin: replacement.plugin }),\n    ...(isDefined(replacement.rule) && { rule: replacement.rule }),\n});\n\n/**\n * Create standardized deprecation metadata for this plugin.\n */\nexport const createDeprecatedRuleInfo = ({\n    availableUntil = \"4.0.0\",\n    deprecatedSince = \"1.0.0\",\n    message,\n    replacedBy = [],\n    ruleId,\n}: RuleDeprecationOptions): DeprecatedInfo => ({\n    availableUntil,\n    deprecatedSince,\n    message,\n    ...(replacedBy.length > 0 && { replacedBy: [...replacedBy] }),\n    url: `${docsBaseUrl}/${ruleId.replaceAll(\"/\", \"-\")}`,\n});\n\n/**\n * Determine whether structured deprecation metadata points to a replacement\n * that belongs to this plugin.\n */\nexport const hasDeprecatedSamePluginReplacement = ({\n    deprecated,\n    ruleId,\n}: Readonly<{\n    readonly deprecated: TSESLint.RuleMetaData<string>[\"deprecated\"];\n    readonly ruleId: string;\n}>): boolean => {\n    if (typeof deprecated !== \"object\") {\n        return false;\n    }\n\n    return (\n        deprecated.replacedBy?.some(\n            (replacement) =>\n                replacement.plugin === undefined &&\n                isDefined(replacement.rule?.name) &&\n                replacement.rule.name !== ruleId\n        ) ?? false\n    );\n};\n\n/**\n * Apply deprecated+frozen lifecycle metadata to a rule module.\n */\nexport const withDeprecatedRuleLifecycle = <TRule extends RuleModule>(\n    rule: TRule,\n    options: RuleDeprecationOptions\n): TRule => ({\n    ...rule,\n    meta: {\n        ...rule.meta,\n        deprecated: createDeprecatedRuleInfo(options),\n        ...(rule.meta.docs !== undefined && {\n            docs: {\n                ...rule.meta.docs,\n                deprecated: true,\n                frozen: true,\n                recommended: false,\n            },\n        }),\n    },\n});\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { UnknownArray } from \"type-fest\";\n\nimport { assertDefined, objectEntries, objectKeys, setHas } from \"ts-extras\";\n\nimport type { RuleDocsMetadata } from \"./_internal/rule-creator.js\";\n\nimport { buildRuleCatalog } from \"./_internal/rule-catalog.js\";\nimport * as matchFilenameRuleModule from \"./rules/class-match-filename.js\";\nimport * as commentSpacingModule from \"./rules/comment-spacing.js\";\nimport * as consistentEmptyLinesModule from \"./rules/consistent-empty-lines.js\";\nimport * as consistentEnumMembersModule from \"./rules/consistent-enum-members.js\";\nimport * as consistentFilenameModule from \"./rules/consistent-filename.js\";\nimport * as consistentImportModule from \"./rules/consistent-import.js\";\nimport * as consistentOptionalPropsModule from \"./rules/consistent-optional-props.js\";\nimport * as consistentSourceExtensionModule from \"./rules/consistent-source-extension.js\";\nimport * as consistentSymbolDescriptionModule from \"./rules/consistent-symbol-description.js\";\nimport * as decoratorPositionModule from \"./rules/decorator-position.js\";\nimport * as defaultCaseModule from \"./rules/default-case.js\";\nimport * as disallowImportModule from \"./rules/disallow-import.js\";\nimport * as exportMatchingFilenameOnlyModule from \"./rules/export-matching-filename-only.js\";\nimport * as jsxNoJsxAsPropModule from \"./rules/jsx-no-jsx-as-prop.js\";\nimport * as jsxNoNewArrayAsPropModule from \"./rules/jsx-no-new-array-as-prop.js\";\nimport * as jsxNoNewFunctionAsPropModule from \"./rules/jsx-no-new-function-as-prop.js\";\nimport * as jsxNoNewObjectAsPropModule from \"./rules/jsx-no-new-object-as-prop.js\";\nimport * as matchFilenameModule from \"./rules/match-filename.js\";\nimport * as maxIdentifierBlocksModule from \"./rules/max-identifier-blocks.js\";\nimport * as noAssignMutatedArrayModule from \"./rules/no-assign-mutated-array.js\";\nimport * as noAtSignImportModule from \"./rules/no-at-sign-import.js\";\nimport * as noAtSignInternalImportModule from \"./rules/no-at-sign-internal-import.js\";\nimport * as noChainCoalescenceMixtureModule from \"./rules/no-chain-coalescence-mixture.js\";\nimport * as noCommentedOutCodeModule from \"./rules/no-commented-out-code.js\";\nimport * as noConstEnumModule from \"./rules/no-const-enum.js\";\nimport * as noConstructorBindModule from \"./rules/no-constructor-bind.js\";\nimport * as noConstructorStateModule from \"./rules/no-constructor-state.js\";\nimport * as noDeprecatedModule from \"./rules/no-deprecated.js\";\nimport * as noDomGlobalsInConstructorModule from \"./rules/no-dom-globals-in-constructor.js\";\nimport * as noDomGlobalsInModuleScopeModule from \"./rules/no-dom-globals-in-module-scope.js\";\nimport * as noDomGlobalsInReactCcRenderModule from \"./rules/no-dom-globals-in-react-cc-render.js\";\nimport * as noDomGlobalsInReactFcModule from \"./rules/no-dom-globals-in-react-fc.js\";\nimport * as noEnumModule from \"./rules/no-enum.js\";\nimport * as noExpressionEmptyLinesModule from \"./rules/no-expression-empty-lines.js\";\nimport * as noForeachModule from \"./rules/no-foreach.js\";\nimport * as noFunctionDeclareAfterReturnModule from \"./rules/no-function-declare-after-return.js\";\nimport * as noImplicitAnyCatchModule from \"./rules/no-implicit-any-catch.js\";\nimport * as noIndexImportModule from \"./rules/no-index-import.js\";\nimport * as noInternalModulesModule from \"./rules/no-internal-modules.js\";\nimport * as noInternalModule from \"./rules/no-internal.js\";\nimport * as noInvalidJsxNestingModule from \"./rules/no-invalid-jsx-nesting.js\";\nimport * as noLanguageMixingModule from \"./rules/no-language-mixing.js\";\nimport * as noMisusedGenericsModule from \"./rules/no-misused-generics.js\";\nimport * as noNegatedConditionsModule from \"./rules/no-negated-conditions.js\";\nimport * as noNodejsModulesModule from \"./rules/no-nodejs-modules.js\";\nimport * as noOnlyTestsModule from \"./rules/no-only-tests.js\";\nimport * as noParamReassignModule from \"./rules/no-param-reassign.js\";\nimport * as noRelativeParentImportModule from \"./rules/no-relative-parent-import.js\";\nimport * as noRestrictedSyntaxModule from \"./rules/no-restricted-syntax.js\";\nimport * as noSelfImportModule from \"./rules/no-self-import.js\";\nimport * as noShadowModule from \"./rules/no-shadow.js\";\nimport * as noSiblingImportModule from \"./rules/no-sibling-import.js\";\nimport * as noSingleLineCommentModule from \"./rules/no-single-line-comment.js\";\nimport * as noTModule from \"./rules/no-t.js\";\nimport * as noUnderscoreExportModule from \"./rules/no-underscore-export.js\";\nimport * as noUnnecessaryAsConstModule from \"./rules/no-unnecessary-as-const.js\";\nimport * as noUnnecessaryBreakModule from \"./rules/no-unnecessary-break.js\";\nimport * as noUnnecessaryInitializationModule from \"./rules/no-unnecessary-initialization.js\";\nimport * as noUnnecessaryTemplateLiteralModule from \"./rules/no-unnecessary-template-literal.js\";\nimport * as noUnstableReactChildrenModule from \"./rules/no-unstable-react-children.js\";\nimport * as noUnstableReactValuesModule from \"./rules/no-unstable-react-values.js\";\nimport * as noUseExtendNativeModule from \"./rules/no-use-extend-native.js\";\nimport * as noVulnerableModule from \"./rules/no-vulnerable.js\";\nimport * as noWriteonlyModule from \"./rules/no-writeonly.js\";\nimport * as objectFormatModule from \"./rules/object-format.js\";\nimport * as onlyExportNameModule from \"./rules/only-export-name.js\";\nimport * as preferArrowFunctionPropertyModule from \"./rules/prefer-arrow-function-property.js\";\nimport * as preferConstRequireModule from \"./rules/prefer-const-require.js\";\nimport * as preferInterfaceModule from \"./rules/prefer-interface.js\";\nimport * as preferLessThanModule from \"./rules/prefer-less-than.js\";\nimport * as preferObjectHasOwnModule from \"./rules/prefer-object-has-own.js\";\nimport * as preferOnlyExportModule from \"./rules/prefer-only-export.js\";\nimport * as reactPreferFunctionComponentModule from \"./rules/react-prefer-function-component.js\";\nimport * as requireJSDocModule from \"./rules/require-jsdoc.js\";\nimport * as requireMemoModule from \"./rules/require-memo.js\";\nimport * as requireSyntaxModule from \"./rules/require-syntax.js\";\nimport * as requireUsememoChildrenModule from \"./rules/require-usememo-children.js\";\nimport * as requireUsememoModule from \"./rules/require-usememo.js\";\nimport * as restrictIdentifierCharactersModule from \"./rules/restrict-identifier-characters.js\";\nimport * as sortArrayModule from \"./rules/sort-array.js\";\nimport * as sortCallSignatureModule from \"./rules/sort-call-signature.js\";\nimport * as sortClassMembersModule from \"./rules/sort-class-members.js\";\nimport * as sortConstructSignatureModule from \"./rules/sort-construct-signature.js\";\nimport * as sortExportSpecifiersModule from \"./rules/sort-export-specifiers.js\";\nimport * as sortKeysModule from \"./rules/sort-keys.js\";\nimport * as sortTopCommentsModule from \"./rules/sort-top-comments.js\";\nimport * as switchCaseSpacingModule from \"./rules/switch-case-spacing.js\";\nimport * as templateLiteralFormatModule from \"./rules/template-literal-format.js\";\nimport * as throwErrorModule from \"./rules/throw-error.js\";\nimport * as typescriptArrayCallbackReturnTypeModule from \"./rules/typescript-array-callback-return-type.js\";\nimport * as typescriptClassMethodsUseThisModule from \"./rules/typescript-class-methods-use-this.js\";\nimport * as typescriptConsistentArrayTypeNameModule from \"./rules/typescript-consistent-array-type-name.js\";\nimport * as typescriptDefineFunctionInOneStatementModule from \"./rules/typescript-define-function-in-one-statement.js\";\nimport * as typescriptExhaustiveSwitchModule from \"./rules/typescript-exhaustive-switch.js\";\nimport * as typescriptNoBooleanLiteralTypeModule from \"./rules/typescript-no-boolean-literal-type.js\";\nimport * as typescriptNoComplexDeclaratorTypeModule from \"./rules/typescript-no-complex-declarator-type.js\";\nimport * as typescriptNoComplexReturnTypeModule from \"./rules/typescript-no-complex-return-type.js\";\nimport * as typescriptNoEmptyInterfacesModule from \"./rules/typescript-no-empty-interfaces.js\";\nimport * as typescriptNoInferrableTypesModule from \"./rules/typescript-no-inferrable-types.js\";\nimport * as typescriptNoMultiTypeTuplesModule from \"./rules/typescript-no-multi-type-tuples.js\";\nimport * as typescriptNoNeverModule from \"./rules/typescript-no-never.js\";\nimport * as typescriptNoRedundantUndefinedConstModule from \"./rules/typescript-no-redundant-undefined-const.js\";\nimport * as typescriptNoRedundantUndefinedDefaultParameterModule from \"./rules/typescript-no-redundant-undefined-default-parameter.js\";\nimport * as typescriptNoRedundantUndefinedLetModule from \"./rules/typescript-no-redundant-undefined-let.js\";\nimport * as typescriptNoRedundantUndefinedOptionalModule from \"./rules/typescript-no-redundant-undefined-optional.js\";\nimport * as typescriptNoRedundantUndefinedPromiseReturnTypeModule from \"./rules/typescript-no-redundant-undefined-promise-return-type.js\";\nimport * as typescriptNoRedundantUndefinedReadonlyPropertyModule from \"./rules/typescript-no-redundant-undefined-readonly-property.js\";\nimport * as typescriptNoRedundantUndefinedReturnTypeModule from \"./rules/typescript-no-redundant-undefined-return-type.js\";\nimport * as typescriptNoRedundantUndefinedVarModule from \"./rules/typescript-no-redundant-undefined-var.js\";\nimport * as typescriptNoRestrictedSyntaxModule from \"./rules/typescript-no-restricted-syntax.js\";\nimport * as typescriptNoUnsafeObjectAssignModule from \"./rules/typescript-no-unsafe-object-assign.js\";\nimport * as typescriptNoUnsafeObjectAssignmentModule from \"./rules/typescript-no-unsafe-object-assignment.js\";\nimport * as typescriptPreferArrayTypeAliasModule from \"./rules/typescript-prefer-array-type-alias.js\";\nimport * as typescriptPreferClassMethodModule from \"./rules/typescript-prefer-class-method.js\";\nimport * as typescriptPreferEnumModule from \"./rules/typescript-prefer-enum.js\";\nimport * as typescriptPreferNamedTupleMembersModule from \"./rules/typescript-prefer-named-tuple-members.js\";\nimport * as typescriptPreferReadonlyArrayParameterModule from \"./rules/typescript-prefer-readonly-array-parameter.js\";\nimport * as typescriptPreferReadonlyArrayModule from \"./rules/typescript-prefer-readonly-array.js\";\nimport * as typescriptPreferReadonlyIndexSignatureModule from \"./rules/typescript-prefer-readonly-index-signature.js\";\nimport * as typescriptPreferReadonlyMapModule from \"./rules/typescript-prefer-readonly-map.js\";\nimport * as typescriptPreferReadonlyPropertyModule from \"./rules/typescript-prefer-readonly-property.js\";\nimport * as typescriptPreferReadonlyRecordModule from \"./rules/typescript-prefer-readonly-record.js\";\nimport * as typescriptPreferReadonlySetModule from \"./rules/typescript-prefer-readonly-set.js\";\nimport * as typescriptRequirePropTypeAnnotationModule from \"./rules/typescript-require-prop-type-annotation.js\";\nimport * as typescriptRequireReadonlyArrayPropertyTypeModule from \"./rules/typescript-require-readonly-array-property-type.js\";\nimport * as typescriptRequireReadonlyArrayReturnTypeModule from \"./rules/typescript-require-readonly-array-return-type.js\";\nimport * as typescriptRequireReadonlyArrayTypeAliasModule from \"./rules/typescript-require-readonly-array-type-alias.js\";\nimport * as typescriptRequireReadonlyMapParameterTypeModule from \"./rules/typescript-require-readonly-map-parameter-type.js\";\nimport * as typescriptRequireReadonlyMapPropertyTypeModule from \"./rules/typescript-require-readonly-map-property-type.js\";\nimport * as typescriptRequireReadonlyMapReturnTypeModule from \"./rules/typescript-require-readonly-map-return-type.js\";\nimport * as typescriptRequireReadonlyMapTypeAliasModule from \"./rules/typescript-require-readonly-map-type-alias.js\";\nimport * as typescriptRequireReadonlyRecordParameterTypeModule from \"./rules/typescript-require-readonly-record-parameter-type.js\";\nimport * as typescriptRequireReadonlyRecordPropertyTypeModule from \"./rules/typescript-require-readonly-record-property-type.js\";\nimport * as typescriptRequireReadonlyRecordReturnTypeModule from \"./rules/typescript-require-readonly-record-return-type.js\";\nimport * as typescriptRequireReadonlyRecordTypeAliasModule from \"./rules/typescript-require-readonly-record-type-alias.js\";\nimport * as typescriptRequireReadonlySetParameterTypeModule from \"./rules/typescript-require-readonly-set-parameter-type.js\";\nimport * as typescriptRequireReadonlySetPropertyTypeModule from \"./rules/typescript-require-readonly-set-property-type.js\";\nimport * as typescriptRequireReadonlySetReturnTypeModule from \"./rules/typescript-require-readonly-set-return-type.js\";\nimport * as typescriptRequireReadonlySetTypeAliasModule from \"./rules/typescript-require-readonly-set-type-alias.js\";\nimport * as typescriptRequireThisVoidModule from \"./rules/typescript-require-this-void.js\";\nimport * as underscoreInternalModule from \"./rules/underscore-internal.js\";\n\ntype BaseRuleModule = TSESLint.RuleModule<\n    string,\n    Readonly<UnknownArray>,\n    RuleDocsMetadata\n>;\n\ntype RuleModule = BaseRuleModule &\n    Readonly<{\n        readonly meta: BaseRuleModule[\"meta\"] &\n            Readonly<{ readonly languages: readonly [\"js/js\"] }>;\n    }>;\n\nconst rulesWithRequiredTypeChecking = new Set<string>([\n    \"no-assign-mutated-array\",\n    \"no-deprecated\",\n    \"no-foreach\",\n    \"no-implicit-any-catch\",\n    \"no-internal\",\n    \"no-misused-generics\",\n    \"throw-error\",\n    \"typescript/array-callback-return-type\",\n    \"typescript/no-never\",\n    \"typescript/no-unsafe-object-assign\",\n    \"typescript/prefer-enum\",\n]);\n\nconst recommendedRuleNames = new Set<string>([\n    \"consistent-optional-props\",\n    \"no-assign-mutated-array\",\n    \"no-const-enum\",\n    \"no-function-declare-after-return\",\n    \"no-internal\",\n    \"no-t\",\n    \"no-unnecessary-as-const\",\n    \"no-unnecessary-break\",\n    \"no-unnecessary-initialization\",\n    \"no-vulnerable\",\n    \"typescript/no-boolean-literal-type\",\n    \"typescript/prefer-readonly-index-signature\",\n    \"typescript/require-readonly-array-return-type\",\n    \"typescript/require-this-void\",\n]);\n\n/**\n * Rule implementations keyed by rule name.\n */\nconst baseRules: Readonly<Record<string, BaseRuleModule>> = {\n    \"class-match-filename\": matchFilenameRuleModule.default,\n    \"comment-spacing\": commentSpacingModule.default,\n    \"consistent-empty-lines\": consistentEmptyLinesModule.default,\n    \"consistent-enum-members\": consistentEnumMembersModule.default,\n    \"consistent-filename\": consistentFilenameModule.default,\n    \"consistent-import\": consistentImportModule.default,\n    \"consistent-optional-props\": consistentOptionalPropsModule.default,\n    \"consistent-source-extension\": consistentSourceExtensionModule.default,\n    \"consistent-symbol-description\": consistentSymbolDescriptionModule.default,\n    \"decorator-position\": decoratorPositionModule.default,\n    \"default-case\": defaultCaseModule.default,\n    \"disallow-import\": disallowImportModule.default,\n    \"export-matching-filename-only\": exportMatchingFilenameOnlyModule.default,\n    \"jsx-no-jsx-as-prop\": jsxNoJsxAsPropModule.default,\n    \"jsx-no-new-array-as-prop\": jsxNoNewArrayAsPropModule.default,\n    \"jsx-no-new-function-as-prop\": jsxNoNewFunctionAsPropModule.default,\n    \"jsx-no-new-object-as-prop\": jsxNoNewObjectAsPropModule.default,\n    \"match-filename\": matchFilenameModule.default,\n    \"max-identifier-blocks\": maxIdentifierBlocksModule.default,\n    \"no-assign-mutated-array\": noAssignMutatedArrayModule.default,\n    \"no-at-sign-import\": noAtSignImportModule.default,\n    \"no-at-sign-internal-import\": noAtSignInternalImportModule.default,\n    \"no-chain-coalescence-mixture\": noChainCoalescenceMixtureModule.default,\n    \"no-commented-out-code\": noCommentedOutCodeModule.default,\n    \"no-const-enum\": noConstEnumModule.default,\n    \"no-constructor-bind\": noConstructorBindModule.default,\n    \"no-constructor-state\": noConstructorStateModule.default,\n    \"no-deprecated\": noDeprecatedModule.default,\n    \"no-dom-globals-in-constructor\": noDomGlobalsInConstructorModule.default,\n    \"no-dom-globals-in-module-scope\": noDomGlobalsInModuleScopeModule.default,\n    \"no-dom-globals-in-react-cc-render\":\n        noDomGlobalsInReactCcRenderModule.default,\n    \"no-dom-globals-in-react-fc\": noDomGlobalsInReactFcModule.default,\n    \"no-enum\": noEnumModule.default,\n    \"no-expression-empty-lines\": noExpressionEmptyLinesModule.default,\n    \"no-foreach\": noForeachModule.default,\n    \"no-function-declare-after-return\":\n        noFunctionDeclareAfterReturnModule.default,\n    \"no-implicit-any-catch\": noImplicitAnyCatchModule.default,\n    \"no-index-import\": noIndexImportModule.default,\n    \"no-internal\": noInternalModule.default,\n    \"no-internal-modules\": noInternalModulesModule.default,\n    \"no-invalid-jsx-nesting\": noInvalidJsxNestingModule.default,\n    \"no-language-mixing\": noLanguageMixingModule.default,\n    \"no-misused-generics\": noMisusedGenericsModule.default,\n    \"no-negated-conditions\": noNegatedConditionsModule.default,\n    \"no-nodejs-modules\": noNodejsModulesModule.default,\n    \"no-only-tests\": noOnlyTestsModule.default,\n    \"no-param-reassign\": noParamReassignModule.default,\n    \"no-relative-parent-import\": noRelativeParentImportModule.default,\n    \"no-restricted-syntax\": noRestrictedSyntaxModule.default,\n    \"no-self-import\": noSelfImportModule.default,\n    \"no-shadow\": noShadowModule.default,\n    \"no-sibling-import\": noSiblingImportModule.default,\n    \"no-single-line-comment\": noSingleLineCommentModule.default,\n    \"no-t\": noTModule.default,\n    \"no-underscore-export\": noUnderscoreExportModule.default,\n    \"no-unnecessary-as-const\": noUnnecessaryAsConstModule.default,\n    \"no-unnecessary-break\": noUnnecessaryBreakModule.default,\n    \"no-unnecessary-initialization\": noUnnecessaryInitializationModule.default,\n    \"no-unnecessary-template-literal\":\n        noUnnecessaryTemplateLiteralModule.default,\n    \"no-unstable-react-children\": noUnstableReactChildrenModule.default,\n    \"no-unstable-react-values\": noUnstableReactValuesModule.default,\n    \"no-use-extend-native\": noUseExtendNativeModule.default,\n    \"no-vulnerable\": noVulnerableModule.default,\n    \"no-writeonly\": noWriteonlyModule.default,\n    \"object-format\": objectFormatModule.default,\n    \"only-export-name\": onlyExportNameModule.default,\n    \"prefer-arrow-function-property\": preferArrowFunctionPropertyModule.default,\n    \"prefer-const-require\": preferConstRequireModule.default,\n    \"prefer-interface\": preferInterfaceModule.default,\n    \"prefer-less-than\": preferLessThanModule.default,\n    \"prefer-object-has-own\": preferObjectHasOwnModule.default,\n    \"prefer-only-export\": preferOnlyExportModule.default,\n    \"react-prefer-function-component\":\n        reactPreferFunctionComponentModule.default,\n    \"require-jsdoc\": requireJSDocModule.default,\n    \"require-memo\": requireMemoModule.default,\n    \"require-syntax\": requireSyntaxModule.default,\n    \"require-usememo\": requireUsememoModule.default,\n    \"require-usememo-children\": requireUsememoChildrenModule.default,\n    \"restrict-identifier-characters\":\n        restrictIdentifierCharactersModule.default,\n    \"sort-array\": sortArrayModule.default,\n    \"sort-call-signature\": sortCallSignatureModule.default,\n    \"sort-class-members\": sortClassMembersModule.default,\n    \"sort-construct-signature\": sortConstructSignatureModule.default,\n    \"sort-export-specifiers\": sortExportSpecifiersModule.default,\n    \"sort-keys\": sortKeysModule.default,\n    \"sort-top-comments\": sortTopCommentsModule.default,\n    \"switch-case-spacing\": switchCaseSpacingModule.default,\n    \"template-literal-format\": templateLiteralFormatModule.default,\n    \"throw-error\": throwErrorModule.default,\n    \"typescript/array-callback-return-type\":\n        typescriptArrayCallbackReturnTypeModule.default,\n    \"typescript/class-methods-use-this\":\n        typescriptClassMethodsUseThisModule.default,\n    \"typescript/consistent-array-type-name\":\n        typescriptConsistentArrayTypeNameModule.default,\n    \"typescript/define-function-in-one-statement\":\n        typescriptDefineFunctionInOneStatementModule.default,\n    \"typescript/exhaustive-switch\": typescriptExhaustiveSwitchModule.default,\n    \"typescript/no-boolean-literal-type\":\n        typescriptNoBooleanLiteralTypeModule.default,\n    \"typescript/no-complex-declarator-type\":\n        typescriptNoComplexDeclaratorTypeModule.default,\n    \"typescript/no-complex-return-type\":\n        typescriptNoComplexReturnTypeModule.default,\n    \"typescript/no-empty-interfaces\": typescriptNoEmptyInterfacesModule.default,\n    \"typescript/no-inferrable-types\": typescriptNoInferrableTypesModule.default,\n    \"typescript/no-multi-type-tuples\":\n        typescriptNoMultiTypeTuplesModule.default,\n    \"typescript/no-never\": typescriptNoNeverModule.default,\n    \"typescript/no-redundant-undefined-const\":\n        typescriptNoRedundantUndefinedConstModule.default,\n    \"typescript/no-redundant-undefined-default-parameter\":\n        typescriptNoRedundantUndefinedDefaultParameterModule.default,\n    \"typescript/no-redundant-undefined-let\":\n        typescriptNoRedundantUndefinedLetModule.default,\n    \"typescript/no-redundant-undefined-optional\":\n        typescriptNoRedundantUndefinedOptionalModule.default,\n    \"typescript/no-redundant-undefined-promise-return-type\":\n        typescriptNoRedundantUndefinedPromiseReturnTypeModule.default,\n    \"typescript/no-redundant-undefined-readonly-property\":\n        typescriptNoRedundantUndefinedReadonlyPropertyModule.default,\n    \"typescript/no-redundant-undefined-return-type\":\n        typescriptNoRedundantUndefinedReturnTypeModule.default,\n    \"typescript/no-redundant-undefined-var\":\n        typescriptNoRedundantUndefinedVarModule.default,\n    \"typescript/no-restricted-syntax\":\n        typescriptNoRestrictedSyntaxModule.default,\n    \"typescript/no-unsafe-object-assign\":\n        typescriptNoUnsafeObjectAssignModule.default,\n    \"typescript/no-unsafe-object-assignment\":\n        typescriptNoUnsafeObjectAssignmentModule.default,\n    \"typescript/prefer-array-type-alias\":\n        typescriptPreferArrayTypeAliasModule.default,\n    \"typescript/prefer-class-method\": typescriptPreferClassMethodModule.default,\n    \"typescript/prefer-enum\": typescriptPreferEnumModule.default,\n    \"typescript/prefer-named-tuple-members\":\n        typescriptPreferNamedTupleMembersModule.default,\n    \"typescript/prefer-readonly-array\":\n        typescriptPreferReadonlyArrayModule.default,\n    \"typescript/prefer-readonly-array-parameter\":\n        typescriptPreferReadonlyArrayParameterModule.default,\n    \"typescript/prefer-readonly-index-signature\":\n        typescriptPreferReadonlyIndexSignatureModule.default,\n    \"typescript/prefer-readonly-map\": typescriptPreferReadonlyMapModule.default,\n    \"typescript/prefer-readonly-property\":\n        typescriptPreferReadonlyPropertyModule.default,\n    \"typescript/prefer-readonly-record\":\n        typescriptPreferReadonlyRecordModule.default,\n    \"typescript/prefer-readonly-set\": typescriptPreferReadonlySetModule.default,\n    \"typescript/require-prop-type-annotation\":\n        typescriptRequirePropTypeAnnotationModule.default,\n    \"typescript/require-readonly-array-property-type\":\n        typescriptRequireReadonlyArrayPropertyTypeModule.default,\n    \"typescript/require-readonly-array-return-type\":\n        typescriptRequireReadonlyArrayReturnTypeModule.default,\n    \"typescript/require-readonly-array-type-alias\":\n        typescriptRequireReadonlyArrayTypeAliasModule.default,\n    \"typescript/require-readonly-map-parameter-type\":\n        typescriptRequireReadonlyMapParameterTypeModule.default,\n    \"typescript/require-readonly-map-property-type\":\n        typescriptRequireReadonlyMapPropertyTypeModule.default,\n    \"typescript/require-readonly-map-return-type\":\n        typescriptRequireReadonlyMapReturnTypeModule.default,\n    \"typescript/require-readonly-map-type-alias\":\n        typescriptRequireReadonlyMapTypeAliasModule.default,\n    \"typescript/require-readonly-record-parameter-type\":\n        typescriptRequireReadonlyRecordParameterTypeModule.default,\n    \"typescript/require-readonly-record-property-type\":\n        typescriptRequireReadonlyRecordPropertyTypeModule.default,\n    \"typescript/require-readonly-record-return-type\":\n        typescriptRequireReadonlyRecordReturnTypeModule.default,\n    \"typescript/require-readonly-record-type-alias\":\n        typescriptRequireReadonlyRecordTypeAliasModule.default,\n    \"typescript/require-readonly-set-parameter-type\":\n        typescriptRequireReadonlySetParameterTypeModule.default,\n    \"typescript/require-readonly-set-property-type\":\n        typescriptRequireReadonlySetPropertyTypeModule.default,\n    \"typescript/require-readonly-set-return-type\":\n        typescriptRequireReadonlySetReturnTypeModule.default,\n    \"typescript/require-readonly-set-type-alias\":\n        typescriptRequireReadonlySetTypeAliasModule.default,\n    \"typescript/require-this-void\": typescriptRequireThisVoidModule.default,\n    \"underscore-internal\": underscoreInternalModule.default,\n};\n\nconst ruleCatalog = buildRuleCatalog(objectKeys(baseRules));\n\nconst withCatalogDocsMetadata = (\n    ruleName: string,\n    ruleModule: Readonly<BaseRuleModule>\n): RuleModule => {\n    const catalogEntry = ruleCatalog.byRuleName[ruleName];\n\n    if (!catalogEntry) {\n        throw new Error(`Missing rule catalog entry for rule \"${ruleName}\".`);\n    }\n\n    const currentDocsMetadata = ruleModule.meta.docs;\n    assertDefined(currentDocsMetadata);\n\n    const hasRequiredTypeChecking = setHas(\n        rulesWithRequiredTypeChecking,\n        ruleName\n    );\n    const deprecatedMetadata = ruleModule.meta.deprecated ?? false;\n    const isDeprecatedRule = deprecatedMetadata !== false;\n    const docsWithCatalogMetadata: RuleDocsMetadata = {\n        ...currentDocsMetadata,\n        catalogId: catalogEntry.catalogId,\n        catalogIndex: catalogEntry.catalogIndex,\n        deprecated: currentDocsMetadata.deprecated ?? isDeprecatedRule,\n        frozen:\n            currentDocsMetadata.frozen ??\n            currentDocsMetadata.deprecated ??\n            isDeprecatedRule,\n        recommended:\n            !isDeprecatedRule && setHas(recommendedRuleNames, ruleName),\n        requiresTypeChecking:\n            currentDocsMetadata.requiresTypeChecking ?? hasRequiredTypeChecking,\n        ruleName,\n    };\n\n    return {\n        ...ruleModule,\n        meta: {\n            ...ruleModule.meta,\n            deprecated: deprecatedMetadata,\n            docs: docsWithCatalogMetadata,\n            languages: [\"js/js\"],\n        },\n    };\n};\n\nconst decoratedRuleEntries = objectEntries(baseRules).map(\n    ([ruleName, ruleModule]) =>\n        [ruleName, withCatalogDocsMetadata(ruleName, ruleModule)] as const\n);\n\nlet decoratedRulesAccumulator: Readonly<Record<string, RuleModule>> = {};\n\nfor (const [ruleName, ruleModule] of decoratedRuleEntries) {\n    decoratedRulesAccumulator = {\n        ...decoratedRulesAccumulator,\n        [ruleName]: ruleModule,\n    };\n}\n\nconst decoratedRules: Readonly<Record<string, RuleModule>> =\n    decoratedRulesAccumulator;\n\n/**\n * Rule implementations keyed by rule name with normalized docs metadata.\n */\nexport const rules: Readonly<Record<string, RuleModule>> =\n    Object.freeze(decoratedRules);\n", "import type { UnknownRecord } from \"type-fest\";\n\nimport { isSafeInteger, keyIn, objectEntries, setHas } from \"ts-extras\";\n\n// eslint-disable-next-line import-x/extensions -- Node.js requires the JSON extension at runtime.\nimport rawRuleCatalogAssignments from \"./rule-catalog-assignments.json\" with { type: \"json\" };\n\n/**\n * Global rule catalog indexed by rule name and documentation id.\n */\ntype RuleCatalog = Readonly<{\n    readonly byDocId: Readonly<Record<string, RuleCatalogEntry>>;\n    readonly byRuleName: Readonly<Record<string, RuleCatalogEntry>>;\n    readonly ordered: readonly RuleCatalogEntry[];\n}>;\n\n/**\n * Single rule entry in the global catalog.\n */\ntype RuleCatalogAssignment = Readonly<{\n    readonly catalogIndex: number;\n    readonly status: \"active\" | \"retired\";\n}>;\n\n/**\n * Single rule entry in the global catalog.\n */\ntype RuleCatalogEntry = Readonly<{\n    readonly catalogId: string;\n    readonly catalogIndex: number;\n    readonly docId: string;\n    readonly isTypeScriptRule: boolean;\n    readonly ruleName: string;\n}>;\n\nconst isUnknownRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst parseRuleCatalogAssignments = (\n    value: unknown\n): Readonly<Record<string, RuleCatalogAssignment>> => {\n    if (!isUnknownRecord(value)) {\n        throw new TypeError(\"Rule catalog assignments must be an object.\");\n    }\n\n    let assignments: Readonly<Record<string, RuleCatalogAssignment>> = {};\n\n    for (const [ruleName, rawAssignment] of objectEntries(value)) {\n        if (!isUnknownRecord(rawAssignment)) {\n            throw new TypeError(\n                `Rule catalog assignment for \"${ruleName}\" must be an object.`\n            );\n        }\n\n        const catalogIndex = rawAssignment[\"catalogIndex\"];\n        const status = rawAssignment[\"status\"];\n\n        if (\n            typeof catalogIndex !== \"number\" ||\n            !isSafeInteger(catalogIndex) ||\n            catalogIndex < 1\n        ) {\n            throw new TypeError(\n                `Rule catalog index for \"${ruleName}\" must be a positive safe integer.`\n            );\n        }\n\n        if (status !== \"active\" && status !== \"retired\") {\n            throw new TypeError(\n                `Rule catalog status for \"${ruleName}\" must be active or retired.`\n            );\n        }\n\n        assignments = {\n            ...assignments,\n            [ruleName]: { catalogIndex, status },\n        };\n    }\n\n    return assignments;\n};\n\nconst ruleCatalogAssignments = parseRuleCatalogAssignments(\n    rawRuleCatalogAssignments\n);\n\nconst hasRuleCatalogAssignment = (ruleName: string): boolean =>\n    keyIn(ruleCatalogAssignments, ruleName);\n\nconst includesSetValue = <Value>(\n    values: ReadonlySet<Value>,\n    value: Value\n): boolean => setHas(values, value);\n\nconst toCatalogNumericPart = (catalogIndex: number): string =>\n    `${catalogIndex}`.padStart(3, \"0\");\n\n/**\n * Format a catalog index as an ID like `R001`.\n */\nconst toRuleCatalogId = (catalogIndex: number): string =>\n    `R${toCatalogNumericPart(catalogIndex)}`;\n\n/**\n * Convert a rule name to its documentation page id.\n */\nconst toRuleDocId = (ruleName: string): string => ruleName.replaceAll(\"/\", \"-\");\n\n/**\n * Build a globally ordered rule catalog from persistent, never-reused ids.\n *\n * @throws When catalog assignments are duplicated or inconsistent.\n */\nexport const buildRuleCatalog = (ruleNames: readonly string[]): RuleCatalog => {\n    const registeredRuleNames = new Set(ruleNames);\n    const seenCatalogIndexes = new Set<number>();\n    let activeEntries: readonly RuleCatalogEntry[] = [];\n    let byRuleName: Readonly<Record<string, RuleCatalogEntry>> = {};\n    let byDocId: Readonly<Record<string, RuleCatalogEntry>> = {};\n\n    for (const [ruleName, assignment] of objectEntries(\n        ruleCatalogAssignments\n    )) {\n        const { catalogIndex, status } = assignment;\n\n        if (includesSetValue(seenCatalogIndexes, catalogIndex)) {\n            throw new Error(`Duplicate rule catalog index R${catalogIndex}.`);\n        }\n\n        seenCatalogIndexes.add(catalogIndex);\n\n        if (status === \"retired\") {\n            if (includesSetValue(registeredRuleNames, ruleName)) {\n                throw new Error(\n                    `Retired rule catalog entry \"${ruleName}\" is still registered.`\n                );\n            }\n\n            continue;\n        }\n\n        if (!includesSetValue(registeredRuleNames, ruleName)) {\n            throw new Error(\n                `Active rule catalog entry \"${ruleName}\" is not registered.`\n            );\n        }\n\n        const docId = toRuleDocId(ruleName);\n        const entry: RuleCatalogEntry = {\n            catalogId: toRuleCatalogId(catalogIndex),\n            catalogIndex,\n            docId,\n            isTypeScriptRule: ruleName.startsWith(\"typescript/\"),\n            ruleName,\n        };\n\n        activeEntries = [...activeEntries, entry];\n        byRuleName = { ...byRuleName, [ruleName]: entry };\n        byDocId = { ...byDocId, [docId]: entry };\n    }\n\n    for (const ruleName of registeredRuleNames) {\n        if (!hasRuleCatalogAssignment(ruleName)) {\n            throw new Error(\n                `Registered rule \"${ruleName}\" has no persistent catalog assignment.`\n            );\n        }\n    }\n\n    const ordered = activeEntries.toSorted(\n        (leftEntry, rightEntry) =>\n            leftEntry.catalogIndex - rightEntry.catalogIndex\n    );\n\n    return {\n        byDocId,\n        byRuleName,\n        ordered,\n    };\n};\n\nexport type { RuleCatalog, RuleCatalogEntry };\n", "{\r\n    \"array-type\": {\r\n        \"catalogIndex\": 1,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"class-match-filename\": {\r\n        \"catalogIndex\": 2,\r\n        \"status\": \"active\"\r\n    },\r\n    \"comment-spacing\": {\r\n        \"catalogIndex\": 3,\r\n        \"status\": \"active\"\r\n    },\r\n    \"compat\": {\r\n        \"catalogIndex\": 4,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"consistent-empty-lines\": {\r\n        \"catalogIndex\": 5,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-enum-members\": {\r\n        \"catalogIndex\": 6,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-filename\": {\r\n        \"catalogIndex\": 7,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-import\": {\r\n        \"catalogIndex\": 8,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-optional-props\": {\r\n        \"catalogIndex\": 9,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-source-extension\": {\r\n        \"catalogIndex\": 10,\r\n        \"status\": \"active\"\r\n    },\r\n    \"consistent-symbol-description\": {\r\n        \"catalogIndex\": 11,\r\n        \"status\": \"active\"\r\n    },\r\n    \"decorator-position\": {\r\n        \"catalogIndex\": 12,\r\n        \"status\": \"active\"\r\n    },\r\n    \"default-case\": {\r\n        \"catalogIndex\": 13,\r\n        \"status\": \"active\"\r\n    },\r\n    \"disallow-import\": {\r\n        \"catalogIndex\": 14,\r\n        \"status\": \"active\"\r\n    },\r\n    \"export-matching-filename-only\": {\r\n        \"catalogIndex\": 15,\r\n        \"status\": \"active\"\r\n    },\r\n    \"jsx-no-jsx-as-prop\": {\r\n        \"catalogIndex\": 16,\r\n        \"status\": \"active\"\r\n    },\r\n    \"jsx-no-new-array-as-prop\": {\r\n        \"catalogIndex\": 17,\r\n        \"status\": \"active\"\r\n    },\r\n    \"jsx-no-new-function-as-prop\": {\r\n        \"catalogIndex\": 18,\r\n        \"status\": \"active\"\r\n    },\r\n    \"jsx-no-new-object-as-prop\": {\r\n        \"catalogIndex\": 19,\r\n        \"status\": \"active\"\r\n    },\r\n    \"match-filename\": {\r\n        \"catalogIndex\": 20,\r\n        \"status\": \"active\"\r\n    },\r\n    \"max-identifier-blocks\": {\r\n        \"catalogIndex\": 21,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-assign-mutated-array\": {\r\n        \"catalogIndex\": 22,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-at-sign-import\": {\r\n        \"catalogIndex\": 23,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-at-sign-internal-import\": {\r\n        \"catalogIndex\": 24,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-chain-coalescence-mixture\": {\r\n        \"catalogIndex\": 25,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-commented-out-code\": {\r\n        \"catalogIndex\": 26,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-const-enum\": {\r\n        \"catalogIndex\": 27,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-constructor-bind\": {\r\n        \"catalogIndex\": 28,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-constructor-state\": {\r\n        \"catalogIndex\": 29,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-deprecated\": {\r\n        \"catalogIndex\": 30,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-dom-globals-in-constructor\": {\r\n        \"catalogIndex\": 31,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-dom-globals-in-module-scope\": {\r\n        \"catalogIndex\": 32,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-dom-globals-in-react-cc-render\": {\r\n        \"catalogIndex\": 33,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-dom-globals-in-react-fc\": {\r\n        \"catalogIndex\": 34,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-enum\": {\r\n        \"catalogIndex\": 35,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-explicit-type-exports\": {\r\n        \"catalogIndex\": 36,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-expression-empty-lines\": {\r\n        \"catalogIndex\": 37,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-foreach\": {\r\n        \"catalogIndex\": 38,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-function-declare-after-return\": {\r\n        \"catalogIndex\": 39,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-implicit-any-catch\": {\r\n        \"catalogIndex\": 40,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-index-import\": {\r\n        \"catalogIndex\": 41,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-internal\": {\r\n        \"catalogIndex\": 42,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-internal-modules\": {\r\n        \"catalogIndex\": 43,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-invalid-jsx-nesting\": {\r\n        \"catalogIndex\": 44,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-language-mixing\": {\r\n        \"catalogIndex\": 45,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-misused-generics\": {\r\n        \"catalogIndex\": 46,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-mixed-enums\": {\r\n        \"catalogIndex\": 47,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-negated-conditions\": {\r\n        \"catalogIndex\": 48,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-nodejs-modules\": {\r\n        \"catalogIndex\": 49,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-only-tests\": {\r\n        \"catalogIndex\": 50,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-param-reassign\": {\r\n        \"catalogIndex\": 51,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-relative-parent-import\": {\r\n        \"catalogIndex\": 52,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-restricted-syntax\": {\r\n        \"catalogIndex\": 53,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-secret\": {\r\n        \"catalogIndex\": 54,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-self-import\": {\r\n        \"catalogIndex\": 55,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-shadow\": {\r\n        \"catalogIndex\": 56,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-sibling-import\": {\r\n        \"catalogIndex\": 57,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-single-line-comment\": {\r\n        \"catalogIndex\": 58,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-t\": {\r\n        \"catalogIndex\": 59,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-underscore-export\": {\r\n        \"catalogIndex\": 60,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unnecessary-as-const\": {\r\n        \"catalogIndex\": 61,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unnecessary-break\": {\r\n        \"catalogIndex\": 62,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unnecessary-initialization\": {\r\n        \"catalogIndex\": 63,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unnecessary-template-literal\": {\r\n        \"catalogIndex\": 64,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unstable-react-children\": {\r\n        \"catalogIndex\": 159,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unstable-react-values\": {\r\n        \"catalogIndex\": 158,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-unused-disable\": {\r\n        \"catalogIndex\": 65,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-unused-imports\": {\r\n        \"catalogIndex\": 66,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-unused-vars\": {\r\n        \"catalogIndex\": 67,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-use-extend-native\": {\r\n        \"catalogIndex\": 68,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-useless-generics\": {\r\n        \"catalogIndex\": 69,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-value-tostring\": {\r\n        \"catalogIndex\": 70,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"no-vulnerable\": {\r\n        \"catalogIndex\": 71,\r\n        \"status\": \"active\"\r\n    },\r\n    \"no-writeonly\": {\r\n        \"catalogIndex\": 72,\r\n        \"status\": \"active\"\r\n    },\r\n    \"object-format\": {\r\n        \"catalogIndex\": 73,\r\n        \"status\": \"active\"\r\n    },\r\n    \"only-export-name\": {\r\n        \"catalogIndex\": 74,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-arrow-function-property\": {\r\n        \"catalogIndex\": 75,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-const-require\": {\r\n        \"catalogIndex\": 76,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-includes\": {\r\n        \"catalogIndex\": 77,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"prefer-interface\": {\r\n        \"catalogIndex\": 78,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-less-than\": {\r\n        \"catalogIndex\": 79,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-object-has-own\": {\r\n        \"catalogIndex\": 80,\r\n        \"status\": \"active\"\r\n    },\r\n    \"prefer-only-export\": {\r\n        \"catalogIndex\": 81,\r\n        \"status\": \"active\"\r\n    },\r\n    \"react-prefer-function-component\": {\r\n        \"catalogIndex\": 82,\r\n        \"status\": \"active\"\r\n    },\r\n    \"require-jsdoc\": {\r\n        \"catalogIndex\": 83,\r\n        \"status\": \"active\"\r\n    },\r\n    \"require-memo\": {\r\n        \"catalogIndex\": 84,\r\n        \"status\": \"active\"\r\n    },\r\n    \"require-syntax\": {\r\n        \"catalogIndex\": 85,\r\n        \"status\": \"active\"\r\n    },\r\n    \"require-usememo\": {\r\n        \"catalogIndex\": 86,\r\n        \"status\": \"active\"\r\n    },\r\n    \"require-usememo-children\": {\r\n        \"catalogIndex\": 87,\r\n        \"status\": \"active\"\r\n    },\r\n    \"restrict-identifier-characters\": {\r\n        \"catalogIndex\": 88,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-array\": {\r\n        \"catalogIndex\": 89,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-call-signature\": {\r\n        \"catalogIndex\": 90,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-class-members\": {\r\n        \"catalogIndex\": 91,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-construct-signature\": {\r\n        \"catalogIndex\": 92,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-export-specifiers\": {\r\n        \"catalogIndex\": 93,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-exports\": {\r\n        \"catalogIndex\": 94,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"sort-imports\": {\r\n        \"catalogIndex\": 95,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"sort-keys\": {\r\n        \"catalogIndex\": 96,\r\n        \"status\": \"active\"\r\n    },\r\n    \"sort-top-comments\": {\r\n        \"catalogIndex\": 97,\r\n        \"status\": \"active\"\r\n    },\r\n    \"switch-case-spacing\": {\r\n        \"catalogIndex\": 98,\r\n        \"status\": \"active\"\r\n    },\r\n    \"template-literal-format\": {\r\n        \"catalogIndex\": 99,\r\n        \"status\": \"active\"\r\n    },\r\n    \"throw-error\": {\r\n        \"catalogIndex\": 100,\r\n        \"status\": \"active\"\r\n    },\r\n    \"throw-new-error\": {\r\n        \"catalogIndex\": 101,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"typescript/array-callback-return-type\": {\r\n        \"catalogIndex\": 106,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/class-methods-use-this\": {\r\n        \"catalogIndex\": 107,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/compat\": {\r\n        \"catalogIndex\": 108,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"typescript/consistent-array-type-name\": {\r\n        \"catalogIndex\": 109,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/define-function-in-one-statement\": {\r\n        \"catalogIndex\": 110,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/exhaustive-switch\": {\r\n        \"catalogIndex\": 111,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-boolean-literal-type\": {\r\n        \"catalogIndex\": 112,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-complex-declarator-type\": {\r\n        \"catalogIndex\": 113,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-complex-return-type\": {\r\n        \"catalogIndex\": 114,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-empty-interfaces\": {\r\n        \"catalogIndex\": 115,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-inferrable-types\": {\r\n        \"catalogIndex\": 116,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-multi-type-tuples\": {\r\n        \"catalogIndex\": 117,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-never\": {\r\n        \"catalogIndex\": 118,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-const\": {\r\n        \"catalogIndex\": 119,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-default-parameter\": {\r\n        \"catalogIndex\": 120,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-let\": {\r\n        \"catalogIndex\": 121,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-optional\": {\r\n        \"catalogIndex\": 122,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-promise-return-type\": {\r\n        \"catalogIndex\": 123,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-readonly-property\": {\r\n        \"catalogIndex\": 124,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-return-type\": {\r\n        \"catalogIndex\": 125,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-redundant-undefined-var\": {\r\n        \"catalogIndex\": 126,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-restricted-syntax\": {\r\n        \"catalogIndex\": 127,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-unsafe-object-assign\": {\r\n        \"catalogIndex\": 128,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/no-unsafe-object-assignment\": {\r\n        \"catalogIndex\": 129,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-array-type-alias\": {\r\n        \"catalogIndex\": 130,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-class-method\": {\r\n        \"catalogIndex\": 131,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-enum\": {\r\n        \"catalogIndex\": 132,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-named-tuple-members\": {\r\n        \"catalogIndex\": 133,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-array\": {\r\n        \"catalogIndex\": 134,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-array-parameter\": {\r\n        \"catalogIndex\": 135,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-index-signature\": {\r\n        \"catalogIndex\": 136,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-map\": {\r\n        \"catalogIndex\": 137,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-property\": {\r\n        \"catalogIndex\": 138,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-record\": {\r\n        \"catalogIndex\": 139,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/prefer-readonly-set\": {\r\n        \"catalogIndex\": 140,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-prop-type-annotation\": {\r\n        \"catalogIndex\": 141,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-array-property-type\": {\r\n        \"catalogIndex\": 142,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-array-return-type\": {\r\n        \"catalogIndex\": 143,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-array-type-alias\": {\r\n        \"catalogIndex\": 144,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-map-parameter-type\": {\r\n        \"catalogIndex\": 145,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-map-property-type\": {\r\n        \"catalogIndex\": 146,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-map-return-type\": {\r\n        \"catalogIndex\": 147,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-map-type-alias\": {\r\n        \"catalogIndex\": 148,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-record-parameter-type\": {\r\n        \"catalogIndex\": 149,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-record-property-type\": {\r\n        \"catalogIndex\": 150,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-record-return-type\": {\r\n        \"catalogIndex\": 151,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-record-type-alias\": {\r\n        \"catalogIndex\": 152,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-set-parameter-type\": {\r\n        \"catalogIndex\": 153,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-set-property-type\": {\r\n        \"catalogIndex\": 154,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-set-return-type\": {\r\n        \"catalogIndex\": 155,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-readonly-set-type-alias\": {\r\n        \"catalogIndex\": 156,\r\n        \"status\": \"active\"\r\n    },\r\n    \"typescript/require-this-void\": {\r\n        \"catalogIndex\": 157,\r\n        \"status\": \"active\"\r\n    },\r\n    \"underscore-internal\": {\r\n        \"catalogIndex\": 102,\r\n        \"status\": \"active\"\r\n    },\r\n    \"unused-internal-properties\": {\r\n        \"catalogIndex\": 103,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"uppercase-iife\": {\r\n        \"catalogIndex\": 104,\r\n        \"status\": \"retired\"\r\n    },\r\n    \"words\": {\r\n        \"catalogIndex\": 105,\r\n        \"status\": \"retired\"\r\n    }\r\n}\r\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport path from \"node:path\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"mismatch\";\n\ntype Options = readonly [];\n\nconst getFileStem = (filePath: string): string => {\n    const extension = path.extname(filePath);\n    return path.basename(filePath, extension);\n};\n\n/**\n * Require top-level class declarations to match the current filename.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"Program > ExportDefaultDeclaration > ClassDeclaration > Identifier.id, Program > ExportNamedDeclaration > ClassDeclaration > Identifier.id, Program > ClassDeclaration > Identifier.id\":\n            (node: Readonly<es.Identifier>): void => {\n                const fileName = context.filename;\n                if (fileName === \"<input>\") {\n                    return;\n                }\n\n                const fileStem = getFileStem(fileName);\n                if (fileStem.length === 0 || fileStem === node.name) {\n                    return;\n                }\n\n                context.report({\n                    data: {\n                        expected: fileStem,\n                        got: node.name,\n                    },\n                    messageId: \"mismatch\",\n                    node,\n                });\n            },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require class names to match the current filename.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/class-match-filename\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            mismatch:\n                \"Class name '{{got}}' does not match filename '{{expected}}'. Rename the class or the file.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"class-match-filename\",\n});\n\nexport default rule;\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { Except, UnknownArray } from \"type-fest\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\n/**\n * Additional docs metadata used by this plugin's rule catalog and presets.\n */\nexport interface RuleDocsMetadata extends TSESLint.RuleMetaDataDocs {\n    readonly catalogId?: string;\n    readonly catalogIndex?: number;\n    readonly deprecated?: boolean;\n    readonly frozen?: boolean;\n    readonly recommended?: boolean;\n    readonly requiresTypeChecking?: boolean;\n    readonly ruleName?: string;\n    readonly suggestion?: boolean;\n}\n\ntype RuleCreatorFactory = <\n    Options extends Readonly<UnknownArray>,\n    MessageIds extends string,\n>(\n    definition: RuleDefinition<Options, MessageIds>\n) => Readonly<{ readonly name: string }> &\n    TSESLint.RuleModule<MessageIds, Options, RuleDocsMetadata>;\n\ntype RuleDefinition<\n    Options extends Readonly<UnknownArray>,\n    MessageIds extends string,\n> = Readonly<{\n    readonly create: (\n        context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n        optionsWithDefault: Readonly<Options>\n    ) => TSESLint.RuleListener;\n    readonly defaultOptions?: Readonly<Options>;\n    readonly meta: Except<\n        TSESLint.RuleMetaData<MessageIds, RuleDocsMetadata, Options>,\n        \"docs\"\n    > &\n        Readonly<{\n            readonly docs: RuleDocsMetadata & TSESLint.RuleMetaDataDocs;\n            readonly languages: RuleLanguages;\n        }>;\n    readonly name: string;\n}>;\n\ntype RuleLanguages = readonly [\"js/js\"];\n\n/**\n * Shared rule factory for plugin rules.\n */\nconst createRuleCreator = ESLintUtils.RuleCreator;\n\n/**\n * Typed factory for defining plugin rules with consistent docs URLs.\n */\nexport const ruleCreator: RuleCreatorFactory =\n    createRuleCreator<RuleDocsMetadata>((name) => {\n        const docsPathName = name.replaceAll(\"/\", \"-\");\n\n        return `https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/${docsPathName}`;\n    });\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_TOKEN_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"invalidSpacing\";\n\ntype Options = readonly [];\n\nconst isEslintDirectiveComment = (comment: Readonly<es.Comment>): boolean =>\n    comment.type === AST_TOKEN_TYPES.Block &&\n    comment.value.trimStart().startsWith(\"eslint-\");\n\nconst expectedBlankLines = (comment: Readonly<es.Comment>): 0 | 1 => {\n    if (\n        comment.type === AST_TOKEN_TYPES.Line ||\n        isEslintDirectiveComment(comment)\n    ) {\n        return 0;\n    }\n\n    return /\\r\\n|\\n/v.test(comment.value) ? 1 : 0;\n};\n\nconst buildFix =\n    (\n        sourceCode: Readonly<TSESLint.SourceCode>,\n        comment: Readonly<es.Comment>,\n        nextNode: Readonly<es.Node | es.Token>,\n        expected: number\n    ): TSESLint.ReportFixFunction =>\n    (fixer): TSESLint.RuleFix => {\n        const textBetween = sourceCode.text.slice(\n            comment.range[1],\n            arrayFirst(nextNode.range)\n        );\n        const lineEnding = textBetween.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n        const indentation = \" \".repeat(nextNode.loc.start.column);\n\n        return fixer.replaceTextRange(\n            [comment.range[1], arrayFirst(nextNode.range)],\n            `${lineEnding.repeat(expected + 1)}${indentation}`\n        );\n    };\n\n/**\n * Enforce consistent blank-line spacing after comments.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        Program: (): void => {\n            const comments = context.sourceCode.getAllComments();\n\n            for (const comment of comments) {\n                const nextNode = context.sourceCode.getTokenAfter(comment, {\n                    includeComments: false,\n                });\n                if (nextNode !== null) {\n                    const blankLines =\n                        nextNode.loc.start.line - comment.loc.end.line - 1;\n                    const expected = expectedBlankLines(comment);\n                    if (blankLines !== expected) {\n                        context.report({\n                            fix: buildFix(\n                                context.sourceCode,\n                                comment,\n                                nextNode,\n                                expected\n                            ),\n                            messageId: \"invalidSpacing\",\n                            node: comment,\n                        });\n                    }\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce consistent blank-line spacing after comments.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/comment-spacing\",\n        },\n        fixable: \"whitespace\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            invalidSpacing: \"Incorrect blank-line spacing after this comment.\",\n        },\n        schema: [],\n        type: \"layout\",\n    },\n    name: \"comment-spacing\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin, stringSplit } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"inconsistent\";\n\ntype Options = readonly [];\n\nconst splitLines = (sourceText: string): readonly string[] =>\n    stringSplit(sourceText.replaceAll(/\\r\\n?/gv, \"\\n\"), \"\\n\");\n\nconst collapseEmptyLines = (sourceText: string): string => {\n    const lines = splitLines(sourceText);\n    let output: readonly string[] = [];\n    let emptyRun = 0;\n\n    for (const line of lines) {\n        const isEmpty = line.trim().length === 0;\n        if (!isEmpty) {\n            emptyRun = 0;\n            output = [...output, line];\n            continue;\n        }\n\n        if (emptyRun < 1) {\n            output = [...output, line];\n        }\n\n        emptyRun += 1;\n    }\n\n    return arrayJoin(output, \"\\n\");\n};\n\nconst hasTooManyEmptyLines = (sourceText: string): boolean => {\n    let emptyRun = 0;\n\n    for (const line of splitLines(sourceText)) {\n        if (line.trim().length === 0) {\n            emptyRun += 1;\n            if (emptyRun >= 2) {\n                return true;\n            }\n        } else {\n            emptyRun = 0;\n        }\n    }\n\n    return false;\n};\n\n/**\n * Enforce at most one consecutive empty line.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        Program: (node: Readonly<es.Program>): void => {\n            const sourceText = context.sourceCode.getText();\n            if (!hasTooManyEmptyLines(sourceText)) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer): TSESLint.RuleFix =>\n                    fixer.replaceTextRange(\n                        [0, sourceText.length],\n                        collapseEmptyLines(sourceText)\n                    ),\n                messageId: \"inconsistent\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"enforce at most one consecutive empty line.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-empty-lines\",\n        },\n        fixable: \"whitespace\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            inconsistent:\n                \"Consecutive empty lines should be collapsed to a single blank line.\",\n        },\n        schema: [],\n        type: \"layout\",\n    },\n    name: \"consistent-empty-lines\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of @stylistic/no-multiple-empty-lines.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@stylistic\",\n                url: \"https://eslint.style/\",\n            },\n            rule: {\n                name: \"no-multiple-empty-lines\",\n                url: \"https://eslint.style/rules/no-multiple-empty-lines\",\n            },\n        }),\n    ],\n    ruleId: \"consistent-empty-lines\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = String.raw`TSEnumMember:not([id.name=/^[A-Z][A-Z_\\d]*$/u], [initializer.value=/^[A-Z][A-Z_\\d]*$/u])`;\n\n/**\n * Enforce SCREAMING_SNAKE_CASE enum member names and literal values.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce SCREAMING_SNAKE_CASE enum member names and string literal values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-enum-members\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Enum member names and string values must use SCREAMING_SNAKE_CASE.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"consistent-enum-members\",\n});\n\nexport default rule;\n", "import { safeCastTo } from \"ts-extras\";\n\nimport { type Casing, filenameStem, toCasing } from \"../_internal/casing.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"inconsistent\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly format?: Casing;\n    }>,\n];\n\nconst defaultOptions = {\n    format: safeCastTo<Casing>(\"kebab-case\"),\n};\n\n/**\n * Enforce filename casing consistency with optional selector-based overrides.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => ({\n        Program: (node): void => {\n            if (context.filename === \"<input>\") {\n                return;\n            }\n\n            const stem = filenameStem(context.filename);\n            const expected = toCasing(\n                stem,\n                options.format ?? defaultOptions.format\n            );\n            if (stem === expected) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    expected,\n                },\n                messageId: \"inconsistent\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        defaultOptions: [defaultOptions],\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description: \"enforce filename casing consistency.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-filename\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            inconsistent: \"Filename should use '{{expected}}' casing.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for filename casing consistency enforcement.\",\n                properties: {\n                    format: {\n                        description:\n                            \"Expected casing format for filename stems.\",\n                        enum: [\n                            \"camelCase\",\n                            \"kebab-case\",\n                            \"PascalCase\",\n                        ],\n                        type: \"string\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"consistent-filename\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of unicorn/filename-case.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"unicorn\",\n                url: \"https://github.com/sindresorhus/eslint-plugin-unicorn\",\n            },\n            rule: {\n                name: \"filename-case\",\n                url: \"https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/filename-case.md\",\n            },\n        }),\n    ],\n    ruleId: \"consistent-filename\",\n});\n\nexport default deprecatedRule;\n", "import { arrayAt, arrayJoin, stringSplit } from \"ts-extras\";\n\nimport { splitIdentifierBlocks } from \"./identifier-blocks.js\";\n\n/**\n * Supported casing formats for identifier transformations.\n */\nexport type Casing =\n    | \"camelCase\"\n    | \"kebab-case\"\n    | \"PascalCase\";\n\nconst splitWords = (value: string): readonly string[] =>\n    splitIdentifierBlocks(value).map((word) => word.toLowerCase());\n\nconst toPascal = (value: string): string =>\n    arrayJoin(\n        splitWords(value).map(\n            (word) => `${word.at(0)?.toUpperCase() ?? \"\"}${word.slice(1)}`\n        ),\n        \"\"\n    );\n\n/**\n * Convert an input string into the requested casing format.\n */\nexport const toCasing = (value: string, format: Casing): string => {\n    switch (format) {\n        case \"camelCase\": {\n            const pascal = toPascal(value);\n            return `${pascal.at(0)?.toLowerCase() ?? \"\"}${pascal.slice(1)}`;\n        }\n\n        case \"kebab-case\": {\n            return arrayJoin(splitWords(value), \"-\");\n        }\n\n        case \"PascalCase\": {\n            return toPascal(value);\n        }\n\n        default: {\n            return value;\n        }\n    }\n};\n\n/**\n * Extract the final filename segment without extension.\n */\nexport const filenameStem = (filePath: string): string => {\n    const normalizedPath = filePath.replaceAll(\"\\\\\", \"/\");\n    const pathSegments = stringSplit(normalizedPath, \"/\");\n    const lastPathSegment = arrayAt(pathSegments, -1) ?? filePath;\n\n    return lastPathSegment.replace(/\\.[^.\\/]+$/v, \"\");\n};\n", "import { stringSplit } from \"ts-extras\";\n\nconst camelCaseBoundaryPattern = /(?<=[\\da-z])(?=[A-Z])/gv;\nconst nonAlphanumericPattern = /[^0-9A-Za-z]+/gv;\nconst whitespacePattern = /\\s+/gv;\n\n/**\n * Split identifier-like text into non-empty blocks while preserving original\n * block casing.\n */\nexport const splitIdentifierBlocks = (value: string): readonly string[] => {\n    const normalized = value\n        .replaceAll(camelCaseBoundaryPattern, \" \")\n        .replaceAll(nonAlphanumericPattern, \" \")\n        .trim();\n\n    if (normalized.length === 0) {\n        return [];\n    }\n\n    const normalizedWhitespace = normalized.replaceAll(whitespacePattern, \" \");\n\n    return stringSplit(normalizedWhitespace, \" \").filter(\n        (segment) => segment.length > 0\n    );\n};\n\n/**\n * Count non-empty identifier blocks after casing/punctuation normalization.\n */\nexport const countIdentifierBlocks = (value: string): number =>\n    splitIdentifierBlocks(value).length;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype ImportStyle =\n    | \"default\"\n    | \"mixed\"\n    | \"named\"\n    | \"namespace\"\n    | \"side-effect\";\n\ntype MessageIds = \"inconsistent\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly style?: ImportStyle;\n    }>,\n];\n\nconst styleFromImport = (node: Readonly<es.ImportDeclaration>): ImportStyle => {\n    if (node.specifiers.length === 0) {\n        return \"side-effect\";\n    }\n\n    const hasDefault = node.specifiers.some(\n        (specifier) => specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier\n    );\n    const hasNamed = node.specifiers.some(\n        (specifier) => specifier.type === AST_NODE_TYPES.ImportSpecifier\n    );\n    const hasNamespace = node.specifiers.some(\n        (specifier) =>\n            specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier\n    );\n\n    if (hasNamespace) {\n        return \"namespace\";\n    }\n\n    if (hasDefault && hasNamed) {\n        return \"mixed\";\n    }\n\n    if (hasDefault) {\n        return \"default\";\n    }\n\n    return \"named\";\n};\n\n/**\n * Enforce consistent import declaration style per module source.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const seen = new Map<string, ImportStyle>();\n\n        return {\n            ImportDeclaration: (node: Readonly<es.ImportDeclaration>): void => {\n                if (typeof node.source.value !== \"string\") {\n                    return;\n                }\n\n                const source = node.source.value;\n                const style = styleFromImport(node);\n                const expected = options.style ?? seen.get(source) ?? style;\n                if (!isDefined(options.style)) {\n                    seen.set(source, expected);\n                }\n\n                if (style === expected) {\n                    return;\n                }\n\n                context.report({\n                    data: {\n                        expected,\n                        source,\n                    },\n                    messageId: \"inconsistent\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce consistent import declaration style per module source.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-import\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            inconsistent:\n                \"Imports from '{{source}}' should use '{{expected}}' style consistently.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for global import declaration style enforcement.\",\n                properties: {\n                    style: {\n                        description:\n                            \"When provided, all imports must use this style.\",\n                        enum: [\n                            \"default\",\n                            \"mixed\",\n                            \"named\",\n                            \"namespace\",\n                            \"side-effect\",\n                        ],\n                        type: \"string\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"consistent-import\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = arrayJoin(\n    [\n        \"TSPropertySignature[optional=true] > TSTypeAnnotation > TSUnionType\",\n        \"PropertyDefinition[optional=true] > TSTypeAnnotation > TSUnionType\",\n    ],\n    \", \"\n);\n\nconst buildOptionalUnionFixText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\n/**\n * Disallow redundant `undefined` unions on already-optional properties.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [selector]: (node: Readonly<es.Node>): void => {\n                if (node.type !== AST_NODE_TYPES.TSUnionType) {\n                    return;\n                }\n\n                const fixedTypeText = buildOptionalUnionFixText(\n                    sourceCode,\n                    node\n                );\n                if (!isDefined(fixedTypeText)) {\n                    return;\n                }\n\n                const fix = (\n                    fixer: Readonly<TSESLint.RuleFixer>\n                ): TSESLint.RuleFix => fixer.replaceText(node, fixedTypeText);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` unions on optional property declarations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-optional-props\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Optional properties should not redundantly include `undefined` in their type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"consistent-optional-props\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector = \"Literal.source[value=/.(?:js|json|ts)$/u]\";\n\n/**\n * Disallow explicit `.js`, `.json`, and `.ts` source extensions in\n * imports/exports.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"require consistent import/export source paths without file extensions.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-source-extension\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Remove the source file extension from this import/export path.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"consistent-source-extension\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of import/extensions.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"import\",\n                url: \"https://github.com/import-js/eslint-plugin-import\",\n            },\n            rule: {\n                name: \"extensions\",\n                url: \"https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/extensions.md\",\n            },\n        }),\n    ],\n    ruleId: \"consistent-source-extension\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector = String.raw`CallExpression[callee.name='Symbol'] > Literal:not([value=/^(?:[\\da-z-]|__)+$/u])`;\n\n/**\n * Require `Symbol` descriptions to use kebab-case style.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require consistent kebab-case symbol descriptions.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/consistent-symbol-description\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer kebab-case Symbol descriptions.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"consistent-symbol-description\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\nconst preferInlineAlignment = \"prefer-inline\";\n\ntype Alignment = \"above\" | typeof preferInlineAlignment;\n\ntype DecoratedMember =\n    | es.AccessorProperty\n    | es.MethodDefinition\n    | es.PropertyDefinition;\n\ntype DecoratorMatcher =\n    readonly [string, Readonly<{ readonly withArgs: boolean }>] | string;\n\ntype MessageIds = \"expectedAbove\" | \"expectedInline\";\n\ntype NormalizedOptions = Readonly<{\n    readonly methods: Alignment;\n    readonly overrides: Readonly<{\n        readonly above: readonly DecoratorMatcher[];\n        readonly [preferInlineAlignment]: readonly DecoratorMatcher[];\n    }>;\n    readonly printWidth: number;\n    readonly properties: Alignment;\n}>;\n\ntype Options = readonly [\n    Readonly<{\n        readonly methods?: Alignment;\n        readonly overrides?: Readonly<{\n            readonly above?: readonly DecoratorMatcher[];\n            readonly [preferInlineAlignment]?: readonly DecoratorMatcher[];\n        }>;\n        readonly printWidth?: number;\n        readonly properties?: Alignment;\n    }>?,\n];\n\nconst defaultOptions = [\n    {\n        methods: \"above\",\n        overrides: {\n            above: [],\n            [preferInlineAlignment]: [],\n        },\n        printWidth: 100,\n        properties: preferInlineAlignment,\n    },\n] as const satisfies Options;\n\nconst getStaticPropertyName = (\n    expression: Readonly<es.Expression | es.PrivateIdentifier>\n): string | undefined => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name;\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.Literal &&\n        typeof expression.value === \"string\"\n    ) {\n        return expression.value;\n    }\n\n    return undefined;\n};\n\nconst getDecoratorName = (\n    expression: Readonly<es.Expression>\n): string | undefined => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name;\n    }\n\n    if (expression.type === AST_NODE_TYPES.CallExpression) {\n        return getDecoratorName(expression.callee);\n    }\n\n    if (expression.type === AST_NODE_TYPES.ChainExpression) {\n        return getDecoratorName(expression.expression);\n    }\n\n    if (expression.type === AST_NODE_TYPES.MemberExpression) {\n        const objectName = getDecoratorName(expression.object);\n        const propertyName = getStaticPropertyName(expression.property);\n\n        if (isDefined(objectName) && isDefined(propertyName)) {\n            return `${objectName}.${propertyName}`;\n        }\n    }\n\n    return undefined;\n};\n\nconst normalizeConfiguredName = (name: string): string =>\n    name.startsWith(\"@\") ? name.slice(1) : name;\n\nconst isCalledDecorator = (decorator: Readonly<es.Decorator>): boolean =>\n    decorator.expression.type === AST_NODE_TYPES.CallExpression;\n\nconst matcherMatchesDecorator = (\n    matcher: DecoratorMatcher,\n    decorator: Readonly<es.Decorator>,\n    decoratorName: string | undefined\n): boolean => {\n    const [rawName, matcherOptions] =\n        typeof matcher === \"string\" ? [matcher, undefined] : matcher;\n\n    if (\n        decoratorName === undefined ||\n        normalizeConfiguredName(rawName) !== decoratorName\n    ) {\n        return false;\n    }\n\n    return (\n        !isDefined(matcherOptions) ||\n        matcherOptions.withArgs === isCalledDecorator(decorator)\n    );\n};\n\nconst normalizeOptions = (rawOptions: Options[0]): NormalizedOptions => ({\n    methods: rawOptions?.methods ?? arrayFirst(defaultOptions).methods,\n    overrides: {\n        above: rawOptions?.overrides?.above ?? [],\n        [preferInlineAlignment]:\n            rawOptions?.overrides?.[preferInlineAlignment] ?? [],\n    },\n    printWidth: rawOptions?.printWidth ?? arrayFirst(defaultOptions).printWidth,\n    properties: rawOptions?.properties ?? arrayFirst(defaultOptions).properties,\n});\n\nconst getConfiguredAlignment = (\n    decorator: Readonly<es.Decorator>,\n    decoratorName: string | undefined,\n    options: Readonly<NormalizedOptions>\n): Alignment | undefined => {\n    // A decorator listed in both groups is ambiguous. Prefer the safer,\n    // vertically expanded representation deterministically.\n    if (\n        options.overrides.above.some((matcher) =>\n            matcherMatchesDecorator(matcher, decorator, decoratorName)\n        )\n    ) {\n        return \"above\";\n    }\n\n    if (\n        options.overrides[preferInlineAlignment].some((matcher) =>\n            matcherMatchesDecorator(matcher, decorator, decoratorName)\n        )\n    ) {\n        return preferInlineAlignment;\n    }\n\n    return undefined;\n};\n\nconst getHeaderEnd = (member: Readonly<DecoratedMember>): number => {\n    if (\n        member.type === AST_NODE_TYPES.MethodDefinition &&\n        member.value.body !== null\n    ) {\n        return arrayFirst(member.value.body.range);\n    }\n\n    return member.range[1];\n};\n\nconst getProjectedInlineLength = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    decorator: Readonly<es.Decorator>,\n    member: Readonly<DecoratedMember>\n): number => {\n    const headerText = sourceCode.text\n        .slice(arrayFirst(decorator.range), getHeaderEnd(member))\n        .replaceAll(/\\s+/gv, \" \")\n        .trim();\n\n    return decorator.loc.start.column + headerText.length;\n};\n\nconst getLineIndentation = (\n    sourceText: string,\n    index: number\n): string | undefined => {\n    const lineStart = sourceText.lastIndexOf(\"\\n\", index - 1) + 1;\n    const indentation = sourceText.slice(lineStart, index);\n\n    return /^\\s*$/v.test(indentation) ? indentation : undefined;\n};\n\nconst createWhitespaceFix = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    decorator: Readonly<es.Decorator>,\n    memberStart: number,\n    alignment: Alignment\n): ((fixer: TSESLint.RuleFixer) => null | TSESLint.RuleFix) => {\n    const whitespaceRange = [decorator.range[1], memberStart] as const;\n\n    return (fixer): null | TSESLint.RuleFix => {\n        const whitespace = context.sourceCode.text.slice(...whitespaceRange);\n\n        // Replacing comments or other tokens would be destructive. The report\n        // remains useful, but deliberately has no fix in that case.\n        if (!/^\\s*$/v.test(whitespace)) {\n            return null;\n        }\n\n        if (alignment === preferInlineAlignment) {\n            return fixer.replaceTextRange(whitespaceRange, \" \");\n        }\n\n        const indentation = getLineIndentation(\n            context.sourceCode.text,\n            arrayFirst(decorator.range)\n        );\n\n        if (!isDefined(indentation)) {\n            return null;\n        }\n\n        const newline = context.sourceCode.text.includes(\"\\r\\n\")\n            ? \"\\r\\n\"\n            : \"\\n\";\n\n        return fixer.replaceTextRange(\n            whitespaceRange,\n            `${newline}${indentation}`\n        );\n    };\n};\n\nconst checkMember = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    member: Readonly<DecoratedMember>,\n    options: Readonly<NormalizedOptions>\n): void => {\n    const decorator = arrayAt(member.decorators, -1);\n\n    if (!isDefined(decorator)) {\n        return;\n    }\n\n    const decoratorName = getDecoratorName(decorator.expression);\n    const firstMemberToken = context.sourceCode.getTokenAfter(decorator);\n\n    if (firstMemberToken === null) {\n        return;\n    }\n\n    const configuredAlignment = getConfiguredAlignment(\n        decorator,\n        decoratorName,\n        options\n    );\n    const memberAlignment =\n        member.type === AST_NODE_TYPES.MethodDefinition\n            ? options.methods\n            : options.properties;\n    let desiredAlignment = configuredAlignment ?? memberAlignment;\n\n    // A multiline decorator cannot be safely collapsed. Likewise, respect the\n    // configured width by expanding an otherwise inline-preferred declaration.\n    if (\n        desiredAlignment === preferInlineAlignment &&\n        (decorator.loc.start.line !== decorator.loc.end.line ||\n            getProjectedInlineLength(context.sourceCode, decorator, member) >\n                options.printWidth)\n    ) {\n        desiredAlignment = \"above\";\n    }\n\n    const isInline = decorator.loc.end.line === firstMemberToken.loc.start.line;\n    const alignmentMatches =\n        desiredAlignment === preferInlineAlignment ? isInline : !isInline;\n\n    if (alignmentMatches) {\n        return;\n    }\n\n    const displayName =\n        decoratorName ?? context.sourceCode.getText(decorator.expression);\n\n    context.report({\n        data: {\n            name: displayName,\n        },\n        fix: createWhitespaceFix(\n            context,\n            decorator,\n            arrayFirst(firstMemberToken.range),\n            desiredAlignment\n        ),\n        messageId:\n            desiredAlignment === preferInlineAlignment\n                ? \"expectedInline\"\n                : \"expectedAbove\",\n        node: decorator,\n    });\n};\n\n/** Enforce configured class-member decorator placement. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [rawOptions]) => {\n        const options = normalizeOptions(rawOptions);\n\n        return {\n            AccessorProperty: (node: Readonly<es.AccessorProperty>): void => {\n                checkMember(context, node, options);\n            },\n            MethodDefinition: (node: Readonly<es.MethodDefinition>): void => {\n                checkMember(context, node, options);\n            },\n            PropertyDefinition: (\n                node: Readonly<es.PropertyDefinition>\n            ): void => {\n                checkMember(context, node, options);\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [\n            {\n                methods: \"above\",\n                overrides: {\n                    above: [],\n                    [preferInlineAlignment]: [],\n                },\n                printWidth: 100,\n                properties: preferInlineAlignment,\n            },\n        ],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce consistent placement of decorators on class properties and methods.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/decorator-position\",\n        },\n        fixable: \"whitespace\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            expectedAbove:\n                \"Decorator '@{{name}}' must be placed above the decorated member.\",\n            expectedInline:\n                \"Decorator '@{{name}}' must be inline with the decorated member.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description: \"Decorator placement configuration.\",\n                properties: {\n                    methods: {\n                        description: \"Default placement for method decorators.\",\n                        enum: [preferInlineAlignment, \"above\"],\n                        type: \"string\",\n                    },\n                    overrides: {\n                        additionalProperties: false,\n                        description: \"Decorator-specific placement overrides.\",\n                        properties: {\n                            above: {\n                                description:\n                                    \"Decorators that must be placed above the member.\",\n                                items: {\n                                    oneOf: [\n                                        { type: \"string\" },\n                                        {\n                                            additionalItems: false,\n                                            items: [\n                                                { type: \"string\" },\n                                                {\n                                                    additionalProperties: false,\n                                                    properties: {\n                                                        withArgs: {\n                                                            type: \"boolean\",\n                                                        },\n                                                    },\n                                                    required: [\"withArgs\"],\n                                                    type: \"object\",\n                                                },\n                                            ],\n                                            maxItems: 2,\n                                            minItems: 2,\n                                            type: \"array\",\n                                        },\n                                    ],\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                            [preferInlineAlignment]: {\n                                description:\n                                    \"Decorators that should share a line with the member.\",\n                                items: {\n                                    oneOf: [\n                                        { type: \"string\" },\n                                        {\n                                            additionalItems: false,\n                                            items: [\n                                                { type: \"string\" },\n                                                {\n                                                    additionalProperties: false,\n                                                    properties: {\n                                                        withArgs: {\n                                                            type: \"boolean\",\n                                                        },\n                                                    },\n                                                    required: [\"withArgs\"],\n                                                    type: \"object\",\n                                                },\n                                            ],\n                                            maxItems: 2,\n                                            minItems: 2,\n                                            type: \"array\",\n                                        },\n                                    ],\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                        },\n                        type: \"object\",\n                    },\n                    printWidth: {\n                        description:\n                            \"Maximum projected line width for inline placement.\",\n                        minimum: 1,\n                        type: \"number\",\n                    },\n                    properties: {\n                        description:\n                            \"Default placement for property and auto-accessor decorators.\",\n                        enum: [preferInlineAlignment, \"above\"],\n                        type: \"string\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"layout\",\n    },\n    name: \"decorator-position\",\n});\n\nexport default rule;\n", "import { assertDefined } from \"ts-extras\";\n\nimport { adaptExternalRule } from \"../_internal/create-external-rule.js\";\nimport { getCoreRule } from \"../_internal/get-core-rule.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\nconst externalRule = getCoreRule(\"default-case\");\n\n/**\n * Proxy of ESLint core `default-case` with plugin-local docs URL.\n */\nconst adaptedRule: ReturnType<typeof adaptExternalRule> = adaptExternalRule(\n    externalRule,\n    \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/default-case\"\n);\nconst baseDocs = adaptedRule.meta.docs;\nassertDefined(baseDocs);\n\nconst rule: typeof adaptedRule = {\n    ...adaptedRule,\n    meta: {\n        ...adaptedRule.meta,\n        docs: {\n            ...baseDocs,\n            recommended: false,\n        },\n    },\n};\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because this rule directly proxies ESLint core default-case.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"eslint\",\n                url: \"https://eslint.org/docs/latest/rules/\",\n            },\n            rule: {\n                name: \"default-case\",\n                url: \"https://eslint.org/docs/latest/rules/default-case\",\n            },\n        }),\n    ],\n    ruleId: \"default-case\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { UnknownArray, UnknownRecord } from \"type-fest\";\n\nimport { keyIn, objectEntries, safeCastTo } from \"ts-extras\";\n\nimport type { RuleDocsMetadata } from \"./rule-creator.js\";\n\ntype RuleContext = TSESLint.RuleContext<string, Readonly<UnknownArray>>;\ntype RuleModule = Readonly<{\n    readonly meta: Readonly<{ readonly languages: readonly [\"js/js\"] }> &\n        TSESLint.RuleMetaData<string, RuleDocsMetadata, Readonly<UnknownArray>>;\n}> &\n    TSESLint.RuleModule<string, Readonly<UnknownArray>, RuleDocsMetadata>;\n\nconst isObjectRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null;\n\nconst hasCreateFunction = (\n    value: unknown\n): value is Readonly<UnknownRecord> &\n    Readonly<{ readonly create: RuleModule[\"create\"] }> =>\n    isObjectRecord(value) && typeof value[\"create\"] === \"function\";\n\nconst isRuleMetaDocs = (value: unknown): value is TSESLint.RuleMetaDataDocs =>\n    isObjectRecord(value) && typeof value[\"description\"] === \"string\";\n\nconst getNormalizedMetaType = (value: unknown): RuleModule[\"meta\"][\"type\"] => {\n    if (value === \"layout\" || value === \"problem\" || value === \"suggestion\") {\n        return value;\n    }\n\n    return \"problem\";\n};\n\nconst getNormalizedMetaMessages = (value: unknown): Record<string, string> => {\n    if (!isObjectRecord(value)) {\n        return {};\n    }\n\n    let normalizedMessages: Record<string, string> = {};\n\n    for (const [key, message] of objectEntries(value)) {\n        if (typeof message !== \"string\") {\n            continue;\n        }\n\n        normalizedMessages = {\n            ...normalizedMessages,\n            [key]: message,\n        };\n    }\n\n    return normalizedMessages;\n};\n\ntype RuleSchema = RuleModule[\"meta\"][\"schema\"];\ntype RuleSchemaObject = Exclude<RuleSchema, Readonly<UnknownArray>>;\n\nconst isJsonSchemaLike = (value: unknown): value is RuleSchemaObject => {\n    if (!isObjectRecord(value)) {\n        return false;\n    }\n\n    return (\n        keyIn(value, \"allOf\") ||\n        keyIn(value, \"anyOf\") ||\n        keyIn(value, \"oneOf\") ||\n        keyIn(value, \"properties\") ||\n        keyIn(value, \"type\")\n    );\n};\n\nconst isJsonSchemaArray = (\n    value: unknown\n): value is readonly RuleSchemaObject[] =>\n    Array.isArray(value) && value.every((entry) => isJsonSchemaLike(entry));\n\nconst getNormalizedMetaSchema = (\n    value: unknown\n): RuleModule[\"meta\"][\"schema\"] => {\n    if (isJsonSchemaArray(value)) {\n        return value;\n    }\n\n    if (isJsonSchemaLike(value)) {\n        return value;\n    }\n\n    return [];\n};\n\nconst createLegacyContextCompat = (context: RuleContext): RuleContext =>\n    new Proxy(context, {\n        get: (target, property, receiver): unknown => {\n            if (property === \"getSourceCode\") {\n                return (): Readonly<TSESLint.SourceCode> => target.sourceCode;\n            }\n\n            if (property === \"getFilename\") {\n                return (): string => target.filename;\n            }\n\n            if (property === \"getPhysicalFilename\") {\n                return (): string => target.physicalFilename;\n            }\n\n            if (property === \"getCwd\") {\n                return (): string => target.cwd;\n            }\n\n            return Reflect.get(target, property, receiver);\n        },\n    });\n\n/**\n * Adapt an ESLint rule so it points docs to this repository.\n *\n * @throws When the external rule does not expose a create function.\n */\nexport const adaptExternalRule = (\n    externalRule: unknown,\n    docsUrl: string\n): RuleModule => {\n    if (!hasCreateFunction(externalRule)) {\n        throw new TypeError(\"External rule module does not expose create().\");\n    }\n\n    const externalRuleRecord = externalRule;\n    const externalMetaRecord = isObjectRecord(externalRuleRecord[\"meta\"])\n        ? externalRuleRecord[\"meta\"]\n        : {};\n    const externalDocs = isRuleMetaDocs(externalMetaRecord[\"docs\"])\n        ? externalMetaRecord[\"docs\"]\n        : {\n              description:\n                  \"External rule re-exported by eslint-plugin-etc-misc.\",\n          };\n    const create: RuleModule[\"create\"] = (context) =>\n        externalRule.create(createLegacyContextCompat(context));\n    const externalRuleModule =\n        safeCastTo<Partial<RuleModule>>(externalRuleRecord);\n\n    return {\n        ...externalRuleModule,\n        create,\n        defaultOptions: Array.isArray(externalRuleRecord[\"defaultOptions\"])\n            ? safeCastTo<Readonly<UnknownArray>>(\n                  externalRuleRecord[\"defaultOptions\"]\n              )\n            : [],\n        meta: {\n            ...externalMetaRecord,\n            docs: {\n                ...externalDocs,\n                url: docsUrl,\n            },\n            languages: [\"js/js\"],\n            messages: getNormalizedMetaMessages(externalMetaRecord[\"messages\"]),\n            schema: getNormalizedMetaSchema(externalMetaRecord[\"schema\"]),\n            type: getNormalizedMetaType(externalMetaRecord[\"type\"]),\n        },\n    };\n};\n", "import { builtinRules } from \"eslint/use-at-your-own-risk\";\nimport { isDefined } from \"ts-extras\";\n\n/**\n * Resolve a core ESLint rule module by rule ID.\n *\n * @throws When ESLint does not expose the requested rule.\n */\nexport const getCoreRule = (ruleId: string): unknown => {\n    // eslint-disable-next-line @typescript-eslint/no-deprecated -- ESLint currently exposes core rule modules through this entrypoint.\n    const coreRule = builtinRules.get(ruleId);\n    if (!isDefined(coreRule)) {\n        throw new Error(`Missing core ESLint rule \"${ruleId}\".`);\n    }\n\n    return coreRule;\n};\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    getImportSourceFromNode,\n    shouldReportImportSource,\n} from \"./import-patterns.js\";\nimport { ruleCreator } from \"./rule-creator.js\";\n\n/**\n * Rule factory options for import source pattern rules.\n */\ninterface CreateImportPatternRuleOptions {\n    /**\n     * Default disallow patterns applied when options do not override\n     * `disallow`.\n     */\n    readonly defaultDisallowPatterns: readonly string[];\n    /**\n     * Human-friendly rule description.\n     */\n    readonly description: string;\n    /**\n     * Rule identifier used for metadata and exported rule map key.\n     */\n    readonly name: string;\n}\n\ntype ImportPatternMessageIds = \"disallowedSource\";\n\n/**\n * Rule options tuple for import pattern rules.\n */\ntype ImportPatternRuleOptions = readonly [\n    {\n        readonly allow?: readonly string[];\n        readonly disallow?: readonly string[];\n    }?,\n];\n\nconst createImportVisitors = (\n    context: Parameters<\n        ReturnType<\n            typeof ruleCreator<\n                ImportPatternRuleOptions,\n                ImportPatternMessageIds\n            >\n        >[\"create\"]\n    >[0],\n    defaultDisallowPatterns: readonly string[]\n): Readonly<Record<string, (node: Readonly<es.Node>) => void>> => ({\n    \"ImportDeclaration, ExportNamedDeclaration[source], ExportAllDeclaration, ImportExpression\":\n        (node: Readonly<es.Node>): void => {\n            const sourceText = getImportSourceFromNode(node);\n            if (!isDefined(sourceText)) {\n                return;\n            }\n\n            const [options = {}] = context.options;\n            if (\n                !shouldReportImportSource(\n                    sourceText,\n                    options,\n                    defaultDisallowPatterns\n                )\n            ) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    source: sourceText,\n                },\n                messageId: \"disallowedSource\",\n                node,\n            });\n        },\n});\n\n/**\n * Creates a rule that disallows import/export sources by glob pattern.\n *\n * @param options - Rule creation options.\n *\n * @returns ESLint rule module.\n */\nexport const createImportPatternRule = ({\n    defaultDisallowPatterns,\n    description,\n    name,\n}: Readonly<CreateImportPatternRuleOptions>): ReturnType<\n    typeof ruleCreator<ImportPatternRuleOptions, ImportPatternMessageIds>\n> =>\n    ruleCreator<ImportPatternRuleOptions, ImportPatternMessageIds>({\n        create: (context) =>\n            createImportVisitors(context, defaultDisallowPatterns),\n        meta: {\n            defaultOptions: [{}],\n            docs: {\n                description,\n                recommended: false,\n                url: `https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/${name.replaceAll(\"/\", \"-\")}`,\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                disallowedSource:\n                    \"Import source `{{ source }}` is disallowed by this rule.\",\n            },\n            schema: [\n                {\n                    additionalProperties: false,\n                    properties: {\n                        allow: {\n                            items: {\n                                type: \"string\",\n                            },\n                            type: \"array\",\n                        },\n                        disallow: {\n                            items: {\n                                type: \"string\",\n                            },\n                            type: \"array\",\n                        },\n                    },\n                    type: \"object\",\n                },\n            ],\n            type: \"problem\",\n        },\n        name,\n    });\n\nexport type { ImportPatternRuleOptions };\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { minimatch } from \"minimatch\";\n\n/**\n * Allow/disallow glob options for import source checks.\n */\ntype ImportPathOptions = Readonly<{\n    readonly allow?: readonly string[];\n    readonly disallow?: readonly string[];\n}>;\n\nconst hasAnyPatternMatch = (\n    value: string,\n    patterns: readonly string[]\n): boolean =>\n    patterns.some((pattern) =>\n        minimatch(value, pattern, {\n            dot: true,\n            nocase: false,\n        })\n    );\n\nconst getImportSourceText = (node: Readonly<es.Node>): string | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ExportAllDeclaration ||\n        node.type === AST_NODE_TYPES.ImportDeclaration\n    ) {\n        return node.source.value;\n    }\n\n    if (node.type === AST_NODE_TYPES.ExportNamedDeclaration) {\n        return node.source?.value;\n    }\n\n    if (node.type === AST_NODE_TYPES.ImportExpression) {\n        return node.source.type === AST_NODE_TYPES.Literal &&\n            typeof node.source.value === \"string\"\n            ? node.source.value\n            : undefined;\n    }\n\n    return undefined;\n};\n\nconst toMergedOptions = (\n    options: Readonly<ImportPathOptions> | undefined,\n    defaultDisallowPatterns: readonly string[]\n): Required<ImportPathOptions> => ({\n    allow: options?.allow ?? [],\n    disallow: options?.disallow ?? defaultDisallowPatterns,\n});\n\n/**\n * Determines whether an import source should be reported.\n *\n * @param sourceText - Source text from an import/export node.\n * @param options - Rule options for allow/disallow overrides.\n * @param defaultDisallowPatterns - Rule-specific default disallow patterns.\n *\n * @returns `true` when the source matches a disallow pattern and no allow\n *   pattern.\n */\nexport const shouldReportImportSource = (\n    sourceText: string,\n    options: Readonly<ImportPathOptions> | undefined,\n    defaultDisallowPatterns: readonly string[]\n): boolean => {\n    const mergedOptions = toMergedOptions(options, defaultDisallowPatterns);\n    if (!hasAnyPatternMatch(sourceText, mergedOptions.disallow)) {\n        return false;\n    }\n\n    return !hasAnyPatternMatch(sourceText, mergedOptions.allow);\n};\n\n/**\n * Gets import source text from supported import/export AST nodes.\n *\n * @param node - AST node to inspect.\n *\n * @returns Source text when present and string-literal based, otherwise\n *   `undefined`.\n */\nexport const getImportSourceFromNode = (\n    node: Readonly<es.Node>\n): string | undefined => getImportSourceText(node);\n\nexport type { ImportPathOptions };\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow import and export sources by configured glob patterns.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [],\n        description:\n            \"disallow import sources using configurable glob patterns.\",\n        name: \"disallow-import\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport path from \"node:path\";\nimport { isEmpty } from \"ts-extras\";\n\nimport { type Casing, filenameStem, toCasing } from \"../_internal/casing.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"onlyExport\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly format?: Casing;\n    }>,\n];\n\nconst exportedNamesFromDeclaration = (\n    node: Readonly<es.ExportNamedDeclaration>\n): readonly string[] => {\n    if (node.specifiers.length > 0) {\n        return node.specifiers.flatMap((specifier) =>\n            specifier.exported.type === AST_NODE_TYPES.Identifier\n                ? [specifier.exported.name]\n                : []\n        );\n    }\n\n    if (\n        node.declaration?.type === AST_NODE_TYPES.ClassDeclaration ||\n        node.declaration?.type === AST_NODE_TYPES.FunctionDeclaration\n    ) {\n        return node.declaration.id === null ? [] : [node.declaration.id.name];\n    }\n\n    return [];\n};\n\n/**\n * Enforce that exports matching the filename are the only export in the file.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        let namedExports: readonly {\n            readonly name: string;\n            readonly node: es.Node;\n        }[] = [];\n\n        return {\n            ExportDefaultDeclaration: (\n                node: Readonly<es.ExportDefaultDeclaration>\n            ): void => {\n                namedExports = [\n                    ...namedExports,\n                    {\n                        name: \"default\",\n                        node,\n                    },\n                ];\n            },\n            ExportNamedDeclaration: (\n                node: Readonly<es.ExportNamedDeclaration>\n            ): void => {\n                for (const name of exportedNamesFromDeclaration(node)) {\n                    namedExports = [...namedExports, { name, node }];\n                }\n            },\n            \"Program:exit\": (): void => {\n                if (context.filename === \"<input>\") {\n                    return;\n                }\n\n                const stem = filenameStem(path.resolve(context.filename));\n                const expected = toCasing(stem, options.format ?? \"PascalCase\");\n                const matching = namedExports.filter(\n                    (entry) => entry.name === expected\n                );\n                if (isEmpty(matching) || namedExports.length <= 1) {\n                    return;\n                }\n\n                for (const entry of namedExports) {\n                    if (entry.name === expected) {\n                        continue;\n                    }\n\n                    context.report({\n                        data: {\n                            expected,\n                        },\n                        messageId: \"onlyExport\",\n                        node: entry.node,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{ format: \"PascalCase\" }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce filename-matching exports to be the only export.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/export-matching-filename-only\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            onlyExport:\n                \"When exporting '{{expected}}', it must be the only export in this file.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for filename-matching export exclusivity checks.\",\n                properties: {\n                    format: {\n                        description:\n                            \"Casing format used to derive expected export name from filename.\",\n                        enum: [\n                            \"camelCase\",\n                            \"kebab-case\",\n                            \"PascalCase\",\n                        ],\n                        type: \"string\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"export-matching-filename-only\",\n});\n\nexport default rule;\n", "import { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport type {\n    JsxPropRuleOption,\n    JsxPropRuleOptions,\n} from \"../_internal/jsx-prop-stability.js\";\n\nimport { createJsxPropStabilityVisitor } from \"../_internal/jsx-prop-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"unstableJsxProp\";\n\ntype Options = JsxPropRuleOptions;\n\nconst defaultOption: JsxPropRuleOption = { nativeAllowList: \"all\" };\nconst defaultOptions: Options = [defaultOption];\n\n/** Disallow render-local JSX allocations used as JSX props. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options = defaultOption]) =>\n        createJsxPropStabilityVisitor({\n            context,\n            matcher: (expression) =>\n                expression.type === AST_NODE_TYPES.JSXElement ||\n                expression.type === AST_NODE_TYPES.JSXFragment,\n            options,\n            report: (node) => {\n                context.report({\n                    messageId: \"unstableJsxProp\",\n                    node,\n                });\n            },\n        }),\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ nativeAllowList: \"all\" }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local JSX allocations used as JSX props.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/jsx-no-jsx-as-prop\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableJsxProp:\n                \"Avoid creating JSX during render when passing it as a prop solely for reference stability; prefer composition or memoize only after measuring.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for intrinsic JSX attributes that accept JSX values.\",\n                properties: {\n                    nativeAllowList: {\n                        description:\n                            \"Intrinsic attribute names to ignore, or all intrinsic attributes.\",\n                        oneOf: [\n                            {\n                                description:\n                                    \"Ignore every attribute on intrinsic JSX elements.\",\n                                enum: [\"all\"],\n                                type: \"string\",\n                            },\n                            {\n                                description:\n                                    \"Case-insensitive intrinsic attribute names to ignore.\",\n                                items: {\n                                    description:\n                                        \"An intrinsic JSX attribute name.\",\n                                    type: \"string\",\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                        ],\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"jsx-no-jsx-as-prop\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because no-unstable-react-values consolidates JSX prop stability checks.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"no-unstable-react-values\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n            },\n        }),\n    ],\n    ruleId: \"jsx-no-jsx-as-prop\",\n});\n\nexport default deprecatedRule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    type TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    getEnclosingFunction,\n    getJsxAttributeName,\n    getSameFunctionConstInitializer,\n    getSimpleJsxElementName,\n    isIntrinsicJsxName,\n    isUnshadowedGlobalIdentifier,\n    unwrapExpression,\n} from \"./jsx-react-analysis.js\";\n\n/** Shared option for allowing attributes on intrinsic JSX elements. */\ntype JsxPropRuleOption = Readonly<{\n    readonly nativeAllowList?: \"all\" | readonly string[];\n}>;\n\n/** Rule options tuple used by all render-local JSX prop rules. */\ntype JsxPropRuleOptions = readonly [JsxPropRuleOption?];\n\n/** Predicate for the render-local expression identity a rule reports. */\ntype StabilityMatcher = (\n    expression: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n) => boolean;\n\ntype VisitorArguments = Readonly<{\n    readonly context: Readonly<\n        TSESLint.RuleContext<string, JsxPropRuleOptions>\n    >;\n    readonly matcher: StabilityMatcher;\n    readonly options: JsxPropRuleOption;\n    readonly report: (node: Readonly<es.Expression>) => void;\n}>;\n\nconst containsExpression = (\n    expressions: ReadonlySet<Readonly<es.Expression>>,\n    expression: Readonly<es.Expression>\n): boolean => setHas(expressions, expression);\n\nconst isPrimitiveLiteralValue = (value: unknown): boolean =>\n    value === null ||\n    typeof value === \"bigint\" ||\n    typeof value === \"boolean\" ||\n    typeof value === \"number\" ||\n    typeof value === \"string\";\n\nconst isStaticallyPrimitiveExpression = (\n    expression: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return isPrimitiveLiteralValue(unwrappedExpression.value);\n    }\n\n    if (\n        unwrappedExpression.type === AST_NODE_TYPES.BinaryExpression ||\n        unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral ||\n        unwrappedExpression.type === AST_NODE_TYPES.UnaryExpression ||\n        unwrappedExpression.type === AST_NODE_TYPES.UpdateExpression\n    ) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Identifier) {\n        return (\n            (unwrappedExpression.name === \"Infinity\" ||\n                unwrappedExpression.name === \"NaN\" ||\n                unwrappedExpression.name === \"undefined\") &&\n            isUnshadowedGlobalIdentifier(sourceCode, unwrappedExpression)\n        );\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ConditionalExpression) {\n        return (\n            isStaticallyPrimitiveExpression(\n                unwrappedExpression.consequent,\n                sourceCode\n            ) &&\n            isStaticallyPrimitiveExpression(\n                unwrappedExpression.alternate,\n                sourceCode\n            )\n        );\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.LogicalExpression) {\n        return (\n            isStaticallyPrimitiveExpression(\n                unwrappedExpression.left,\n                sourceCode\n            ) &&\n            isStaticallyPrimitiveExpression(\n                unwrappedExpression.right,\n                sourceCode\n            )\n        );\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.SequenceExpression) {\n        const finalExpression = arrayAt(unwrappedExpression.expressions, -1);\n\n        return (\n            isDefined(finalExpression) &&\n            isStaticallyPrimitiveExpression(finalExpression, sourceCode)\n        );\n    }\n\n    return false;\n};\n\nconst isNativeAttributeAllowed = (\n    node: Readonly<es.JSXAttribute>,\n    option: Readonly<JsxPropRuleOption>\n): boolean => {\n    const elementName = getSimpleJsxElementName(node.parent);\n\n    if (!isDefined(elementName) || !isIntrinsicJsxName(elementName)) {\n        return false;\n    }\n\n    const allowedAttributeNames = option.nativeAllowList;\n\n    if (allowedAttributeNames === \"all\") {\n        return true;\n    }\n\n    const attributeName = getJsxAttributeName(node);\n\n    if (!isDefined(attributeName) || !isDefined(allowedAttributeNames)) {\n        return false;\n    }\n\n    return allowedAttributeNames.some(\n        (allowedName) =>\n            allowedName.toLowerCase() === attributeName.toLowerCase()\n    );\n};\n\nconst collectMatchingExpressions = (\n    expression: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    matcher: StabilityMatcher,\n    visitedExpressions: Set<Readonly<es.Expression>>\n): readonly Readonly<es.Expression>[] => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (containsExpression(visitedExpressions, unwrappedExpression)) {\n        return [];\n    }\n\n    visitedExpressions.add(unwrappedExpression);\n\n    if (matcher(unwrappedExpression, sourceCode)) {\n        return [unwrappedExpression];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.LogicalExpression) {\n        return [\n            ...collectMatchingExpressions(\n                unwrappedExpression.left,\n                sourceCode,\n                matcher,\n                visitedExpressions\n            ),\n            ...collectMatchingExpressions(\n                unwrappedExpression.right,\n                sourceCode,\n                matcher,\n                visitedExpressions\n            ),\n        ];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ConditionalExpression) {\n        return [\n            ...collectMatchingExpressions(\n                unwrappedExpression.consequent,\n                sourceCode,\n                matcher,\n                visitedExpressions\n            ),\n            ...collectMatchingExpressions(\n                unwrappedExpression.alternate,\n                sourceCode,\n                matcher,\n                visitedExpressions\n            ),\n        ];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.SequenceExpression) {\n        const finalExpression = arrayAt(unwrappedExpression.expressions, -1);\n\n        return isDefined(finalExpression)\n            ? collectMatchingExpressions(\n                  finalExpression,\n                  sourceCode,\n                  matcher,\n                  visitedExpressions\n              )\n            : [];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Identifier) {\n        const initializer = getSameFunctionConstInitializer(\n            sourceCode,\n            unwrappedExpression\n        );\n\n        return isDefined(initializer)\n            ? collectMatchingExpressions(\n                  initializer,\n                  sourceCode,\n                  matcher,\n                  visitedExpressions\n              )\n            : [];\n    }\n\n    return [];\n};\n\n/** Build the shared conservative JSX-attribute visitor used by perf rules. */\nexport const createJsxPropStabilityVisitor = ({\n    context,\n    matcher,\n    options,\n    report,\n}: VisitorArguments): TSESLint.RuleListener => {\n    const reportedNodes = new Set<Readonly<es.Expression>>();\n\n    return {\n        JSXAttribute: (node: Readonly<es.JSXAttribute>): void => {\n            if (\n                node.value?.type !== AST_NODE_TYPES.JSXExpressionContainer ||\n                node.value.expression.type ===\n                    AST_NODE_TYPES.JSXEmptyExpression ||\n                isNativeAttributeAllowed(node, options) ||\n                !isDefined(getEnclosingFunction(context.sourceCode, node))\n            ) {\n                return;\n            }\n\n            const matches = collectMatchingExpressions(\n                node.value.expression,\n                context.sourceCode,\n                matcher,\n                new Set()\n            );\n\n            for (const match of matches) {\n                if (containsExpression(reportedNodes, match)) {\n                    continue;\n                }\n\n                reportedNodes.add(match);\n                report(match);\n            }\n        },\n    };\n};\n\n/** Match an unshadowed built-in constructor call or construction. */\nexport const isBuiltinAllocation = (\n    expression: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    constructorName:\n        | \"Array\"\n        | \"Function\"\n        | \"Object\"\n): boolean => {\n    if (\n        expression.type !== AST_NODE_TYPES.CallExpression &&\n        expression.type !== AST_NODE_TYPES.NewExpression\n    ) {\n        return false;\n    }\n\n    if (expression.callee.type !== AST_NODE_TYPES.Identifier) {\n        return false;\n    }\n\n    if (\n        expression.callee.name !== constructorName ||\n        !isUnshadowedGlobalIdentifier(sourceCode, expression.callee)\n    ) {\n        return false;\n    }\n\n    if (constructorName !== \"Object\") {\n        return true;\n    }\n\n    const firstArgument = arrayAt(expression.arguments, 0);\n\n    return (\n        !isDefined(firstArgument) ||\n        (firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n            isStaticallyPrimitiveExpression(firstArgument, sourceCode))\n    );\n};\n\n/** Match a call to `.bind`, which always creates a new bound function. */\nexport const isBindCall = (expression: Readonly<es.Expression>): boolean =>\n    expression.type === AST_NODE_TYPES.CallExpression &&\n    expression.callee.type === AST_NODE_TYPES.MemberExpression &&\n    ((expression.callee.computed &&\n        expression.callee.property.type === AST_NODE_TYPES.Literal &&\n        expression.callee.property.value === \"bind\") ||\n        (!expression.callee.computed &&\n            expression.callee.property.type === AST_NODE_TYPES.Identifier &&\n            expression.callee.property.name === \"bind\"));\n\nexport type { JsxPropRuleOption, JsxPropRuleOptions, StabilityMatcher };\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { Minimatch } from \"minimatch\";\nimport { isDefined, objectEntries, objectHasOwn, setHas } from \"ts-extras\";\n\n/** JavaScript function nodes that introduce a lexical function scope. */\ntype FunctionNode =\n    | es.ArrowFunctionExpression\n    | es.FunctionDeclaration\n    | es.FunctionExpression;\n\n/** Source-code abstraction used by the shared JSX and React helpers. */\ntype SourceCode = TSESLint.SourceCode;\n\ntype Variable = TSESLint.Scope.Variable;\n\nconst functionNodeTypes: ReadonlySet<es.Node[\"type\"]> = new Set([\n    AST_NODE_TYPES.ArrowFunctionExpression,\n    AST_NODE_TYPES.FunctionDeclaration,\n    AST_NODE_TYPES.FunctionExpression,\n]);\n\nconst intrinsicJsxNamePattern = /^[a-z]/v;\n\ntype JsxName = es.JSXAttribute[\"name\"] | es.JSXOpeningElement[\"name\"];\n\nconst getSimpleJsxName = (name: Readonly<JsxName>): string | undefined =>\n    name.type === AST_NODE_TYPES.JSXIdentifier ? name.name : undefined;\n\n/** Return whether a node introduces a JavaScript function scope. */\nexport const isFunctionNode = (\n    node: Readonly<es.Node>\n): node is Readonly<FunctionNode> => setHas(functionNodeTypes, node.type);\n\n/** Remove transparent TypeScript and optional-chain wrappers from an expression. */\nexport const unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    if (expression.type === AST_NODE_TYPES.ChainExpression) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\n/** Return a simple JSX tag name, or `undefined` for member/namespaced names. */\nexport const getSimpleJsxElementName = (\n    node: Readonly<es.JSXOpeningElement>\n): string | undefined => getSimpleJsxName(node.name);\n\n/** React treats an ASCII-lowercase JSX identifier as a host/custom element. */\nexport const isIntrinsicJsxName = (name: string): boolean =>\n    intrinsicJsxNamePattern.test(name);\n\n/** Return whether an opening element is component-like rather than intrinsic. */\nexport const isComponentOpeningElement = (\n    node: Readonly<es.JSXOpeningElement>\n): boolean => {\n    const name = getSimpleJsxElementName(node);\n\n    return !isDefined(name) || !isIntrinsicJsxName(name);\n};\n\n/** Return a static JSX attribute name. */\nexport const getJsxAttributeName = (\n    node: Readonly<es.JSXAttribute>\n): string | undefined => getSimpleJsxName(node.name);\n\n/** Find the nearest enclosing JavaScript function. */\nexport const getEnclosingFunction = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): Readonly<FunctionNode> | undefined => {\n    const ancestors = sourceCode.getAncestors(node);\n\n    for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n        const ancestor = ancestors[index];\n\n        if (isDefined(ancestor) && isFunctionNode(ancestor)) {\n            return ancestor;\n        }\n    }\n\n    return undefined;\n};\n\n/** Find a lexical variable by walking the scope chain. */\nexport const findVariable = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>\n): Readonly<Variable> | undefined => {\n    let scope: null | TSESLint.Scope.Scope = sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        const variable = scope.set.get(identifier.name);\n\n        if (isDefined(variable)) {\n            return variable;\n        }\n\n        scope = scope.upper;\n    }\n\n    return undefined;\n};\n\n/**\n * Resolve an identifier only when it has one `const` declarator in the same\n * function. Module constants and mutable/control-flow-dependent bindings are\n * deliberately excluded.\n */\nexport const getSameFunctionConstInitializer = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>\n): Readonly<es.Expression> | undefined => {\n    const variable = findVariable(sourceCode, identifier);\n\n    if (!isDefined(variable) || variable.defs.length !== 1) {\n        return undefined;\n    }\n\n    const [definition] = variable.defs;\n\n    if (\n        definition?.type !== TSESLint.Scope.DefinitionType.Variable ||\n        definition.node.id.type !== AST_NODE_TYPES.Identifier ||\n        definition.node.id.name !== identifier.name ||\n        definition.node.init === null ||\n        definition.node.parent.kind !== \"const\"\n    ) {\n        return undefined;\n    }\n\n    const useFunction = getEnclosingFunction(sourceCode, identifier);\n    const declarationFunction = getEnclosingFunction(\n        sourceCode,\n        definition.node\n    );\n\n    if (useFunction !== declarationFunction || !isDefined(useFunction)) {\n        return undefined;\n    }\n\n    return definition.node.init;\n};\n\nconst isNode = (value: unknown): value is Readonly<es.Node> =>\n    typeof value === \"object\" &&\n    value !== null &&\n    objectHasOwn(value, \"type\") &&\n    typeof value.type === \"string\";\n\nconst getChildNodes = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): readonly Readonly<es.Node>[] => {\n    const visitorKeys = sourceCode.visitorKeys[node.type] ?? [];\n    const childNodes: Readonly<es.Node>[] = [];\n\n    const addNode = (value: unknown): void => {\n        if (isNode(value)) {\n            childNodes.push(value);\n        }\n    };\n\n    for (const visitorKey of visitorKeys) {\n        const value: unknown = Reflect.get(node, visitorKey);\n\n        if (Array.isArray(value)) {\n            for (const item of value) {\n                addNode(item);\n            }\n\n            continue;\n        }\n\n        addNode(value);\n    }\n\n    return childNodes;\n};\n\n/** Return whether a function directly contains JSX, excluding nested functions. */\nexport const functionContainsJsx = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<FunctionNode>\n): boolean => {\n    if (\n        node.body.type === AST_NODE_TYPES.JSXElement ||\n        node.body.type === AST_NODE_TYPES.JSXFragment\n    ) {\n        return true;\n    }\n\n    const stack: es.Node[] = [...getChildNodes(sourceCode, node.body)];\n\n    while (stack.length > 0) {\n        const current = stack.pop();\n\n        if (isDefined(current)) {\n            if (\n                current.type === AST_NODE_TYPES.JSXElement ||\n                current.type === AST_NODE_TYPES.JSXFragment\n            ) {\n                return true;\n            }\n\n            if (!isFunctionNode(current)) {\n                stack.push(...getChildNodes(sourceCode, current));\n            }\n        }\n    }\n\n    return false;\n};\n\n/** Return a statically known class member name. */\nexport const getStaticClassMemberName = (\n    node: Readonly<es.MethodDefinition | es.PropertyDefinition>\n): string | undefined => {\n    if (node.key.type === AST_NODE_TYPES.Identifier && !node.computed) {\n        return node.key.name;\n    }\n\n    if (\n        node.key.type === AST_NODE_TYPES.Literal &&\n        typeof node.key.value === \"string\"\n    ) {\n        return node.key.value;\n    }\n\n    return undefined;\n};\n\n/** Return the static terminal name of a direct/member call. */\nexport const getCallName = (\n    node: Readonly<es.CallExpression>\n): string | undefined => {\n    const callee = unwrapExpression(node.callee);\n\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee.name;\n    }\n\n    if (\n        callee.type === AST_NODE_TYPES.MemberExpression &&\n        !callee.computed &&\n        callee.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return callee.property.name;\n    }\n\n    return undefined;\n};\n\n/** Return whether a name follows React's conventional component casing. */\nexport const isComponentName = (name: string): boolean => {\n    const firstCharacter = name.at(0);\n\n    return (\n        firstCharacter?.toUpperCase() === firstCharacter &&\n        firstCharacter?.toLowerCase() !== firstCharacter\n    );\n};\n\n/** Return whether a name follows the conventional custom-hook shape. */\nexport const isHookName = (name: string): boolean =>\n    name === \"use\" || /^use[0-9A-Z]/v.test(name);\n\n/** Resolve an exact/glob boolean policy. Exact entries take precedence. */\nexport const getNamePolicy = (\n    name: string,\n    policies: Readonly<Record<string, boolean>>\n): boolean | undefined => {\n    if (objectHasOwn(policies, name)) {\n        return policies[name];\n    }\n\n    for (const [pattern, policy] of objectEntries(policies)) {\n        const minimatch = new Minimatch(pattern);\n\n        if (minimatch.match(name)) {\n            return policy;\n        }\n    }\n\n    return undefined;\n};\n\n/** Return whether an identifier is not shadowed by a local declaration. */\nexport const isUnshadowedGlobalIdentifier = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const variable = findVariable(sourceCode, identifier);\n\n    return !isDefined(variable) || variable.defs.length === 0;\n};\n\nexport type { FunctionNode, SourceCode };\n", "import { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport type {\n    JsxPropRuleOption,\n    JsxPropRuleOptions,\n} from \"../_internal/jsx-prop-stability.js\";\n\nimport {\n    createJsxPropStabilityVisitor,\n    isBuiltinAllocation,\n} from \"../_internal/jsx-prop-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"unstableArrayProp\";\n\ntype Options = JsxPropRuleOptions;\n\nconst defaultOption: JsxPropRuleOption = { nativeAllowList: \"all\" };\nconst defaultOptions: Options = [defaultOption];\n\n/** Disallow render-local array allocations used as JSX props. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options = defaultOption]) =>\n        createJsxPropStabilityVisitor({\n            context,\n            matcher: (expression, sourceCode) =>\n                expression.type === AST_NODE_TYPES.ArrayExpression ||\n                isBuiltinAllocation(expression, sourceCode, \"Array\"),\n            options,\n            report: (node) => {\n                context.report({\n                    messageId: \"unstableArrayProp\",\n                    node,\n                });\n            },\n        }),\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ nativeAllowList: \"all\" }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local array allocations used as JSX props.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/jsx-no-new-array-as-prop\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableArrayProp:\n                \"Avoid creating this array during render when passing it as a prop; lift it or memoize it only when stable identity is required.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for intrinsic JSX attributes that accept array values.\",\n                properties: {\n                    nativeAllowList: {\n                        description:\n                            \"Intrinsic attribute names to ignore, or all intrinsic attributes.\",\n                        oneOf: [\n                            {\n                                description:\n                                    \"Ignore every attribute on intrinsic JSX elements.\",\n                                enum: [\"all\"],\n                                type: \"string\",\n                            },\n                            {\n                                description:\n                                    \"Case-insensitive intrinsic attribute names to ignore.\",\n                                items: {\n                                    description:\n                                        \"An intrinsic JSX attribute name.\",\n                                    type: \"string\",\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                        ],\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"jsx-no-new-array-as-prop\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because no-unstable-react-values consolidates JSX prop stability checks.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"no-unstable-react-values\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n            },\n        }),\n    ],\n    ruleId: \"jsx-no-new-array-as-prop\",\n});\n\nexport default deprecatedRule;\n", "import { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport type {\n    JsxPropRuleOption,\n    JsxPropRuleOptions,\n} from \"../_internal/jsx-prop-stability.js\";\n\nimport {\n    createJsxPropStabilityVisitor,\n    isBindCall,\n    isBuiltinAllocation,\n} from \"../_internal/jsx-prop-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"unstableFunctionProp\";\n\ntype Options = JsxPropRuleOptions;\n\nconst defaultOption: JsxPropRuleOption = { nativeAllowList: \"all\" };\nconst defaultOptions: Options = [defaultOption];\n\n/** Disallow render-local function allocations used as JSX props. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options = defaultOption]) =>\n        createJsxPropStabilityVisitor({\n            context,\n            matcher: (expression, sourceCode) =>\n                expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n                expression.type === AST_NODE_TYPES.FunctionExpression ||\n                isBindCall(expression) ||\n                isBuiltinAllocation(expression, sourceCode, \"Function\"),\n            options,\n            report: (node) => {\n                context.report({\n                    messageId: \"unstableFunctionProp\",\n                    node,\n                });\n            },\n        }),\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ nativeAllowList: \"all\" }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local function allocations used as JSX props.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/jsx-no-new-function-as-prop\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableFunctionProp:\n                \"Avoid creating this function during render when passing it as a prop; use a stable callback only when identity affects rendering or an API contract.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for intrinsic JSX attributes that accept function values.\",\n                properties: {\n                    nativeAllowList: {\n                        description:\n                            \"Intrinsic attribute names to ignore, or all intrinsic attributes.\",\n                        oneOf: [\n                            {\n                                description:\n                                    \"Ignore every attribute on intrinsic JSX elements.\",\n                                enum: [\"all\"],\n                                type: \"string\",\n                            },\n                            {\n                                description:\n                                    \"Case-insensitive intrinsic attribute names to ignore.\",\n                                items: {\n                                    description:\n                                        \"An intrinsic JSX attribute name.\",\n                                    type: \"string\",\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                        ],\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"jsx-no-new-function-as-prop\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because no-unstable-react-values consolidates JSX prop stability checks.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"no-unstable-react-values\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n            },\n        }),\n    ],\n    ruleId: \"jsx-no-new-function-as-prop\",\n});\n\nexport default deprecatedRule;\n", "import { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport type {\n    JsxPropRuleOption,\n    JsxPropRuleOptions,\n} from \"../_internal/jsx-prop-stability.js\";\n\nimport {\n    createJsxPropStabilityVisitor,\n    isBuiltinAllocation,\n} from \"../_internal/jsx-prop-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"unstableObjectProp\";\n\ntype Options = JsxPropRuleOptions;\n\nconst defaultOption: JsxPropRuleOption = { nativeAllowList: \"all\" };\nconst defaultOptions: Options = [defaultOption];\n\n/** Disallow render-local object allocations used as JSX props. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options = defaultOption]) =>\n        createJsxPropStabilityVisitor({\n            context,\n            matcher: (expression, sourceCode) =>\n                expression.type === AST_NODE_TYPES.ObjectExpression ||\n                isBuiltinAllocation(expression, sourceCode, \"Object\"),\n            options,\n            report: (node) => {\n                context.report({\n                    messageId: \"unstableObjectProp\",\n                    node,\n                });\n            },\n        }),\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ nativeAllowList: \"all\" }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local object allocations used as JSX props.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/jsx-no-new-object-as-prop\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableObjectProp:\n                \"Avoid creating this object during render when passing it as a prop; lift it or memoize it only when stable identity is required.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for intrinsic JSX attributes that accept object values.\",\n                properties: {\n                    nativeAllowList: {\n                        description:\n                            \"Intrinsic attribute names to ignore, or all intrinsic attributes.\",\n                        oneOf: [\n                            {\n                                description:\n                                    \"Ignore every attribute on intrinsic JSX elements.\",\n                                enum: [\"all\"],\n                                type: \"string\",\n                            },\n                            {\n                                description:\n                                    \"Case-insensitive intrinsic attribute names to ignore.\",\n                                items: {\n                                    description:\n                                        \"An intrinsic JSX attribute name.\",\n                                    type: \"string\",\n                                },\n                                type: \"array\",\n                                uniqueItems: true,\n                            },\n                        ],\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"jsx-no-new-object-as-prop\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because no-unstable-react-values consolidates JSX prop stability checks.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"no-unstable-react-values\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n            },\n        }),\n    ],\n    ruleId: \"jsx-no-new-object-as-prop\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport path from \"node:path\";\nimport { isDefined } from \"ts-extras\";\n\nimport { type Casing, filenameStem, toCasing } from \"../_internal/casing.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"mismatch\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly format?: Casing;\n        readonly match?: boolean;\n        readonly prefix?: string;\n        readonly selector?: readonly string[] | string;\n        readonly suffix?: string;\n    }>,\n];\n\nconst defaultSelectors = [\n    \"ClassDeclaration > Identifier.id\",\n    \"FunctionDeclaration > Identifier.id\",\n    \"TSInterfaceDeclaration > Identifier.id\",\n    \"TSTypeAliasDeclaration > Identifier.id\",\n] as const;\n\nconst normalizeSelector = (\n    selector: Options[0][\"selector\"]\n): readonly string[] => {\n    if (!isDefined(selector)) {\n        return defaultSelectors;\n    }\n\n    if (typeof selector === \"string\") {\n        return [selector];\n    }\n\n    return selector;\n};\n\n/**\n * Enforce that selected declaration identifiers match the current filename.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const selectorList = normalizeSelector(options.selector);\n        let listeners: Readonly<\n            Record<string, (node: Readonly<es.Node>) => void>\n        > = {};\n\n        for (const selector of selectorList) {\n            listeners = {\n                ...listeners,\n                [selector]: (node: Readonly<es.Node>): void => {\n                    if (\n                        context.filename === \"<input>\" ||\n                        node.type !== AST_NODE_TYPES.Identifier\n                    ) {\n                        return;\n                    }\n\n                    const stem = filenameStem(path.resolve(context.filename));\n                    const expected = `${options.prefix ?? \"\"}${toCasing(\n                        node.name,\n                        options.format ?? \"kebab-case\"\n                    )}${options.suffix ?? \"\"}`;\n                    const isMatches = stem === expected;\n\n                    if ((options.match ?? true) ? isMatches : !isMatches) {\n                        return;\n                    }\n\n                    context.report({\n                        data: {\n                            expected,\n                        },\n                        messageId: \"mismatch\",\n                        node,\n                    });\n                },\n            };\n        }\n\n        return listeners;\n    },\n    meta: {\n        defaultOptions: [{ format: \"kebab-case\", match: true }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce selected declaration identifiers to match filename casing.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/match-filename\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            mismatch: \"Identifier should match filename '{{expected}}'.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for declaration-name to filename matching.\",\n                properties: {\n                    format: {\n                        description:\n                            \"Casing format applied to declaration identifiers.\",\n                        enum: [\n                            \"camelCase\",\n                            \"kebab-case\",\n                            \"PascalCase\",\n                        ],\n                        type: \"string\",\n                    },\n                    match: {\n                        description:\n                            \"Whether declaration names must match (true) or must differ from (false) filename.\",\n                        type: \"boolean\",\n                    },\n                    prefix: {\n                        description:\n                            \"Prefix expected before transformed identifier.\",\n                        type: \"string\",\n                    },\n                    selector: {\n                        description:\n                            \"Selector(s) used to pick declaration identifiers to compare.\",\n                        oneOf: [\n                            {\n                                description: \"Single selector string.\",\n                                type: \"string\",\n                            },\n                            {\n                                description: \"Multiple selector strings.\",\n                                items: {\n                                    description: \"Selector string.\",\n                                    type: \"string\",\n                                },\n                                type: \"array\",\n                            },\n                        ],\n                    },\n                    suffix: {\n                        description:\n                            \"Suffix expected after transformed identifier.\",\n                        type: \"string\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"match-filename\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin } from \"ts-extras\";\n\nimport { countIdentifierBlocks } from \"../_internal/identifier-blocks.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst maxIdentifierBlocks = 4;\n\nconst disallowedSelector = arrayJoin(\n    [\"Identifier.id\", \":not(Property[shorthand=true]) > Identifier.key\"],\n    \", \"\n);\n\n/**\n * Disallow identifiers containing more than four casing blocks.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Identifier>): void => {\n            if (countIdentifierBlocks(node.name) <= maxIdentifierBlocks) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    max: maxIdentifierBlocks,\n                },\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow identifiers with more than four casing blocks.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/max-identifier-blocks\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Identifier should not contain more than {{max}} blocks.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"max-identifier-blocks\",\n});\n\nexport default rule;\n", "import type ts from \"typescript\";\n\nimport {\n    containsAllTypesByName,\n    getConstrainedTypeAtLocation,\n    isTypeArrayTypeOrUnionOfArrayTypes,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n} from \"@typescript-eslint/utils\";\nimport { setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\nconst readonlyArrayTypeNames = new Set([\"ReadonlyArray\"]);\n\nconst isArrayLikeType = (\n    typeChecker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): boolean => {\n    const apparentType = typeChecker.getApparentType(type);\n\n    return (\n        typeChecker.isArrayType(apparentType) ||\n        typeChecker.isTupleType(apparentType) ||\n        isTypeArrayTypeOrUnionOfArrayTypes(type, typeChecker) ||\n        containsAllTypesByName(type, false, readonlyArrayTypeNames, true)\n    );\n};\n\nconst creatorMethodNames = new Set([\n    \"concat\",\n    \"entries\",\n    \"filter\",\n    \"keys\",\n    \"map\",\n    \"slice\",\n    \"splice\",\n    \"values\",\n]);\n\nconst isArrayFactoryCallee = (callee: Readonly<es.Expression>): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee.name === \"Array\";\n    }\n\n    if (\n        callee.type === AST_NODE_TYPES.MemberExpression &&\n        callee.object.type === AST_NODE_TYPES.Identifier &&\n        callee.object.name === \"Array\" &&\n        callee.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return callee.property.name === \"from\" || callee.property.name === \"of\";\n    }\n\n    return false;\n};\n\nconst isNewArray = (node: Readonly<es.Expression>): boolean => {\n    if (node.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (node.type === AST_NODE_TYPES.CallExpression) {\n        return isArrayFactoryCallee(node.callee);\n    }\n\n    return false;\n};\n\nconst hasReferencedArrayMutation = (\n    callExpression: Readonly<es.CallExpression>\n): boolean => {\n    if (callExpression.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return true;\n    }\n\n    const { object, property } = callExpression.callee;\n\n    if (\n        property.type === AST_NODE_TYPES.Identifier &&\n        setHas(creatorMethodNames, property.name)\n    ) {\n        return false;\n    }\n\n    if (isNewArray(object)) {\n        return false;\n    }\n\n    if (object.type === AST_NODE_TYPES.CallExpression) {\n        return hasReferencedArrayMutation(object);\n    }\n\n    return true;\n};\n\n/**\n * Disallow assigning arrays returned by mutating methods like `fill`,\n * `reverse`, and `sort`.\n */\nconst rule: ReturnType<typeof ruleCreator<readonly [], MessageIds>> =\n    ruleCreator<readonly [], MessageIds>({\n        create: (context) => {\n            const parserServices = ESLintUtils.getParserServices(context);\n            const typeChecker = parserServices.program.getTypeChecker();\n\n            return {\n                \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name=/^(?:fill|reverse|sort)$/]\":\n                    (callExpression: Readonly<es.CallExpression>) => {\n                        const { callee } = callExpression;\n                        if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n                            return;\n                        }\n\n                        const { property } = callee;\n                        if (property.type !== AST_NODE_TYPES.Identifier) {\n                            return;\n                        }\n\n                        if (\n                            callExpression.parent.type ===\n                            AST_NODE_TYPES.ExpressionStatement\n                        ) {\n                            return;\n                        }\n\n                        const objectType = getConstrainedTypeAtLocation(\n                            parserServices,\n                            callee.object\n                        );\n                        if (!isArrayLikeType(typeChecker, objectType)) {\n                            return;\n                        }\n\n                        if (!hasReferencedArrayMutation(callExpression)) {\n                            return;\n                        }\n\n                        context.report({\n                            messageId: \"forbidden\",\n                            node: property,\n                        });\n                    },\n            };\n        },\n        meta: {\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description:\n                    \"disallow assigning values returned from mutating array methods.\",\n                frozen: false,\n                recommended: true,\n                requiresTypeChecking: true,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-assign-mutated-array\",\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden: \"Assignment of mutated arrays is forbidden.\",\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name: \"no-assign-mutated-array\",\n    });\n\nexport default rule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow importing exactly from `@`.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\"@\"],\n        description: \"disallow imports from @.\",\n        name: \"no-at-sign-import\",\n    });\n\nexport default rule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow importing internal module paths under `@/`.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\"@/**\"],\n        description: \"disallow internal imports under @/.\",\n        name: \"no-at-sign-internal-import\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \"LogicalExpression[operator='??'][left.type='ChainExpression']\";\n\n/**\n * Disallow mixing optional chaining expressions directly with nullish\n * coalescing.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow mixing chain and coalescence operators in a single expression.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-chain-coalescence-mixture\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Do not mix optional chaining and nullish coalescing in the same expression.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-chain-coalescence-mixture\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport parser from \"@typescript-eslint/parser\";\nimport { AST_NODE_TYPES, AST_TOKEN_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayJoin, isDefined, stringSplit } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype CommentBlock = Readonly<{\n    readonly content: string;\n    readonly loc: es.SourceLocation;\n}>;\n\ntype MessageIds = \"forbidden\";\n\nconst parserOptions: Readonly<{\n    readonly ecmaVersion: \"latest\";\n    readonly sourceType: \"module\";\n}> = {\n    ecmaVersion: \"latest\",\n    sourceType: \"module\",\n};\n\nconst parseCommentProgram = (\n    cache: ReadonlyMap<string, es.Program | null>,\n    content: string\n): readonly [\n    ReadonlyMap<string, es.Program | null>,\n    es.Program | undefined,\n] => {\n    const cached = cache.get(content);\n    if (cached !== undefined) {\n        return [cache, cached ?? undefined];\n    }\n\n    try {\n        const parsed = parser.parse(content, parserOptions);\n        const nextCache = new Map(cache);\n        nextCache.set(content, parsed);\n        return [nextCache, parsed];\n    } catch {\n        const nextCache = new Map(cache);\n        nextCache.set(content, null);\n        return [nextCache, undefined];\n    }\n};\n\nconst isRegionComment = (content: string): boolean => {\n    const normalized = content.trimStart().toLowerCase();\n    return (\n        normalized.startsWith(\"#endregion\") || normalized.startsWith(\"#region\")\n    );\n};\n\nconst stripLeadingAsterisk = (line: string): string => {\n    const trimmedLine = line.trimStart();\n    if (!trimmedLine.startsWith(\"*\")) {\n        return line;\n    }\n\n    return trimmedLine.slice(1);\n};\n\nconst normalizeBlockCommentContent = (content: string): string =>\n    arrayJoin(\n        stringSplit(content, \"\\n\").map((line) => stripLeadingAsterisk(line)),\n        \"\\n\"\n    );\n\nconst toLocCopy = (loc: Readonly<es.SourceLocation>): es.SourceLocation => ({\n    end: loc.end,\n    start: loc.start,\n});\n\nconst toCommentBlocks = (\n    comments: readonly Readonly<es.Comment>[]\n): readonly CommentBlock[] => {\n    let blocks: readonly CommentBlock[] = [];\n    let previousLineComment: es.LineComment | null = null;\n\n    for (const comment of comments) {\n        if (comment.type === AST_TOKEN_TYPES.Block) {\n            blocks = [\n                ...blocks,\n                {\n                    content: normalizeBlockCommentContent(comment.value),\n                    loc: toLocCopy(comment.loc),\n                },\n            ];\n            previousLineComment = null;\n            continue;\n        }\n\n        const previousBlockIndex =\n            previousLineComment?.loc.start.line === comment.loc.start.line - 1\n                ? blocks.length - 1\n                : -1;\n        const previousBlock =\n            previousBlockIndex >= 0 ? blocks[previousBlockIndex] : undefined;\n\n        blocks = isDefined(previousBlock)\n            ? [\n                  ...blocks.slice(0, previousBlockIndex),\n                  {\n                      content: `${previousBlock.content}\\n${comment.value}`,\n                      loc: {\n                          end: comment.loc.end,\n                          start: previousBlock.loc.start,\n                      },\n                  },\n                  ...blocks.slice(previousBlockIndex + 1),\n              ]\n            : [\n                  ...blocks,\n                  {\n                      content: comment.value,\n                      loc: toLocCopy(comment.loc),\n                  },\n              ];\n\n        previousLineComment = comment;\n    }\n\n    return blocks;\n};\n\nconst isExpressionOrIdentifierOrLiteral = (\n    node: Readonly<es.Node>\n): boolean => {\n    if (\n        node.type === AST_NODE_TYPES.Identifier ||\n        node.type === AST_NODE_TYPES.Literal\n    ) {\n        return true;\n    }\n\n    if (node.type !== AST_NODE_TYPES.BinaryExpression) {\n        return false;\n    }\n\n    return (\n        isExpressionOrIdentifierOrLiteral(node.left) &&\n        isExpressionOrIdentifierOrLiteral(node.right)\n    );\n};\n\nconst isTrivialProgram = (program: Readonly<es.Program>): boolean => {\n    if (program.body.length === 0) {\n        return true;\n    }\n\n    if (\n        program.body.length === 1 &&\n        arrayFirst(program.body)?.type === AST_NODE_TYPES.LabeledStatement\n    ) {\n        return true;\n    }\n\n    return program.body.every(\n        (statement) =>\n            statement.type === AST_NODE_TYPES.ExpressionStatement &&\n            isExpressionOrIdentifierOrLiteral(statement.expression)\n    );\n};\n\nconst getWrappedContent = (\n    content: string,\n    node: null | Readonly<es.Node>\n): string | undefined => {\n    if (node === null) {\n        return undefined;\n    }\n\n    if (node.type === AST_NODE_TYPES.ArrayExpression) {\n        return `const wrapper = [${content}]`;\n    }\n\n    if (node.type === AST_NODE_TYPES.ClassBody) {\n        return `class Wrapper { ${content} }`;\n    }\n\n    if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n        return `function wrapper(${content}) {}`;\n    }\n\n    if (node.type === AST_NODE_TYPES.ImportDeclaration) {\n        return `import { ${content} } from \"wrapper\"`;\n    }\n\n    if (node.type === AST_NODE_TYPES.ObjectExpression) {\n        return `const wrapper = { ${content} }`;\n    }\n\n    if (node.type === AST_NODE_TYPES.SwitchStatement) {\n        return `switch (wrapper) { ${content} }`;\n    }\n\n    if (node.type === AST_NODE_TYPES.TSInterfaceBody) {\n        return `interface Wrapper { ${content} }`;\n    }\n\n    if (node.type === AST_NODE_TYPES.TSTypeLiteral) {\n        return `type Wrapper = { ${content} }`;\n    }\n\n    return undefined;\n};\n\n/**\n * Disallow comment blocks that appear to contain executable or declaration\n * code.\n */\nconst rule: ReturnType<typeof ruleCreator<readonly [], MessageIds>> =\n    ruleCreator<readonly [], MessageIds>({\n        create: (context) => {\n            let parseCache: ReadonlyMap<string, es.Program | null> = new Map<\n                string,\n                es.Program | null\n            >();\n\n            const parseComment = (content: string): es.Program | undefined => {\n                const [nextCache, parsedComment] = parseCommentProgram(\n                    parseCache,\n                    content\n                );\n                parseCache = nextCache;\n                return parsedComment;\n            };\n\n            const shouldReportBlock = (\n                block: Readonly<CommentBlock>\n            ): boolean => {\n                const parsedComment = parseComment(block.content);\n                if (parsedComment !== undefined) {\n                    return !isTrivialProgram(parsedComment);\n                }\n\n                const index = context.sourceCode.getIndexFromLoc(\n                    block.loc.start\n                );\n                const node = context.sourceCode.getNodeByRangeIndex(index);\n                const wrappedContent = getWrappedContent(block.content, node);\n\n                return (\n                    isDefined(wrappedContent) &&\n                    parseComment(wrappedContent) !== undefined\n                );\n            };\n\n            return {\n                Program: () => {\n                    for (const block of toCommentBlocks(\n                        context.sourceCode.getAllComments()\n                    )) {\n                        if (\n                            !isRegionComment(block.content) &&\n                            shouldReportBlock(block)\n                        ) {\n                            context.report({\n                                loc: block.loc,\n                                messageId: \"forbidden\",\n                            });\n                        }\n                    }\n                },\n            };\n        },\n        meta: {\n            deprecated: true,\n            docs: {\n                deprecated: true,\n                description: \"disallow commented-out code blocks.\",\n                frozen: true,\n                recommended: false,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-commented-out-code\",\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden: \"Commented-out code is forbidden.\",\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name: \"no-commented-out-code\",\n    });\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message:\n        \"Deprecated in favor of eslint-plugin-no-commented-code/no-commented-code.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"no-commented-code\",\n                url: \"https://www.npmjs.com/package/eslint-plugin-no-commented-code\",\n            },\n            rule: {\n                name: \"no-commented-code\",\n                url: \"https://www.npmjs.com/package/eslint-plugin-no-commented-code\",\n            },\n        }),\n    ],\n    ruleId: \"no-commented-out-code\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveConst\";\n\ntype Options = readonly [\n    {\n        readonly allowLocal?: boolean;\n    }?,\n];\n\nconst defaultOptions: Options = [{}];\n\nconst isExportedEnumDeclaration = (\n    node: Readonly<es.TSEnumDeclaration>\n): boolean => node.parent.type === AST_NODE_TYPES.ExportNamedDeclaration;\n\nconst getConstToken = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.TSEnumDeclaration>\n) =>\n    sourceCode.getFirstToken(node, {\n        filter: (token): boolean => token.value === \"const\",\n    }) ?? undefined;\n\n/**\n * Disallow `const enum` declarations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            TSEnumDeclaration: (node: Readonly<es.TSEnumDeclaration>) => {\n                if (!node.const) {\n                    return;\n                }\n\n                const [{ allowLocal = false } = {}] = context.options;\n                if (allowLocal && !isExportedEnumDeclaration(node)) {\n                    return;\n                }\n\n                const constToken = getConstToken(sourceCode, node);\n                const fix: TSESLint.ReportFixFunction | undefined =\n                    constToken === undefined\n                        ? undefined\n                        : (fixer) => {\n                              let tokenRemovalEnd = constToken.range[1];\n                              while (\n                                  tokenRemovalEnd < sourceCode.text.length &&\n                                  (sourceCode.text.at(tokenRemovalEnd) ===\n                                      \" \" ||\n                                      sourceCode.text.at(tokenRemovalEnd) ===\n                                          \"\\t\")\n                              ) {\n                                  tokenRemovalEnd += 1;\n                              }\n\n                              return fixer.removeRange([\n                                  arrayFirst(constToken.range),\n                                  tokenRemovalEnd,\n                              ]);\n                          };\n\n                context.report({\n                    messageId: \"forbidden\",\n                    node: node.id,\n                    ...(fix !== undefined && {\n                        fix,\n                        suggest: [\n                            {\n                                fix,\n                                messageId: \"suggestRemoveConst\",\n                            },\n                        ],\n                    }),\n                });\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow const enum declarations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-const-enum\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"`const enum` declarations are forbidden.\",\n            suggestRemoveConst:\n                \"Remove the const modifier from this enum declaration.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for allowing non-exported const enum declarations.\",\n                properties: {\n                    allowLocal: {\n                        description:\n                            \"Allow const enum declarations when they are not exported.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-const-enum\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayLast } from \"ts-extras\";\n\nimport {\n    getDirectConstructorAssignments,\n    getStaticThisMemberName,\n} from \"../_internal/constructor-migration.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype BoundMethodAssignment = Readonly<{\n    readonly methodName: string;\n}>;\n\ntype MessageIds = \"convertToArrowField\" | \"preferArrowField\";\ntype Options = readonly [];\n\nconst getBoundMethodAssignment = (\n    assignment: Readonly<es.AssignmentExpression>\n): BoundMethodAssignment | null => {\n    const assignedName = getStaticThisMemberName(assignment.left);\n    if (\n        assignedName === null ||\n        assignment.right.type !== AST_NODE_TYPES.CallExpression ||\n        assignment.right.optional ||\n        assignment.right.arguments.length !== 1 ||\n        arrayFirst(assignment.right.arguments)?.type !==\n            AST_NODE_TYPES.ThisExpression\n    ) {\n        return null;\n    }\n\n    const bindMember = assignment.right.callee;\n    if (\n        bindMember.type !== AST_NODE_TYPES.MemberExpression ||\n        bindMember.computed ||\n        bindMember.optional ||\n        bindMember.property.type !== AST_NODE_TYPES.Identifier ||\n        bindMember.property.name !== \"bind\"\n    ) {\n        return null;\n    }\n\n    const boundName = getStaticThisMemberName(bindMember.object);\n    return boundName === assignedName ? { methodName: assignedName } : null;\n};\n\nconst getConvertibleMethod = (\n    constructorDefinition: Readonly<es.MethodDefinition>,\n    methodName: string,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): es.MethodDefinition | null => {\n    const classBody = constructorDefinition.parent;\n    const method = classBody.body.find(\n        (element): element is es.MethodDefinition =>\n            element.type === AST_NODE_TYPES.MethodDefinition &&\n            element.kind === \"method\" &&\n            !element.computed &&\n            element.key.type === AST_NODE_TYPES.Identifier &&\n            element.key.name === methodName\n    );\n\n    if (method === undefined) {\n        return null;\n    }\n\n    const body = method.value.body;\n    if (\n        body === null ||\n        method.value.generator ||\n        method.static ||\n        method.decorators.length > 0\n    ) {\n        return null;\n    }\n\n    const prefix = sourceCode.text\n        .slice(arrayFirst(method.range), arrayFirst(method.key.range))\n        .trim();\n    if (prefix !== \"\" && prefix !== \"async\") {\n        return null;\n    }\n\n    const parametersAndReturnType = sourceCode.text\n        .slice(arrayLast(method.key.range), arrayFirst(body.range))\n        .trim();\n    if (!parametersAndReturnType.startsWith(\"(\")) {\n        return null;\n    }\n\n    const bodyText = sourceCode.getText(body);\n    if (/\\b(?:arguments|super|yield)\\b|\\bnew\\s*\\.\\s*target\\b/v.test(bodyText)) {\n        return null;\n    }\n\n    return method;\n};\n\nconst buildSuggestion = (\n    fixer: TSESLint.RuleFixer,\n    statement: Readonly<es.ExpressionStatement>,\n    method: Readonly<es.MethodDefinition>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): readonly TSESLint.RuleFix[] => {\n    const body = method.value.body;\n    if (body === null) {\n        return [];\n    }\n\n    const parametersAndReturnType = sourceCode.text\n        .slice(arrayLast(method.key.range), arrayFirst(body.range))\n        .trim();\n    const bodyText = sourceCode.getText(body);\n    const keyText = sourceCode.getText(method.key);\n    const asyncPrefix = method.value.async ? \"async \" : \"\";\n\n    return [\n        fixer.remove(statement),\n        fixer.replaceText(\n            method,\n            `${keyText} = ${asyncPrefix}${parametersAndReturnType} => ${bodyText}`\n        ),\n    ];\n};\n\n/**\n * Discourage binding a class method to its instance in the constructor.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"MethodDefinition[kind='constructor']\": (\n            constructorDefinition: Readonly<es.MethodDefinition>\n        ): void => {\n            for (const {\n                assignment,\n                statement,\n            } of getDirectConstructorAssignments(constructorDefinition)) {\n                const binding = getBoundMethodAssignment(assignment);\n                if (binding === null) {\n                    continue;\n                }\n\n                const method = getConvertibleMethod(\n                    constructorDefinition,\n                    binding.methodName,\n                    context.sourceCode\n                );\n\n                if (\n                    method === null ||\n                    context.sourceCode.getCommentsInside(statement).length > 0\n                ) {\n                    context.report({\n                        data: { methodName: binding.methodName },\n                        messageId: \"preferArrowField\",\n                        node: assignment,\n                    });\n                } else {\n                    context.report({\n                        data: { methodName: binding.methodName },\n                        messageId: \"preferArrowField\",\n                        node: assignment,\n                        suggest: [\n                            {\n                                data: { methodName: binding.methodName },\n                                fix: (fixer) =>\n                                    buildSuggestion(\n                                        fixer,\n                                        statement,\n                                        method,\n                                        context.sourceCode\n                                    ),\n                                messageId: \"convertToArrowField\",\n                            },\n                        ],\n                    });\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow binding class methods in constructors when an instance arrow field is preferred.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-constructor-bind\",\n        },\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            convertToArrowField:\n                \"Convert '{{methodName}}' to an instance arrow-function field and remove the constructor binding.\",\n            preferArrowField:\n                \"Avoid binding '{{methodName}}' in the constructor; prefer an instance arrow-function field when its semantics are acceptable.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-constructor-bind\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\n/** A direct assignment expression and its containing constructor statement. */\nexport type DirectConstructorAssignment = Readonly<{\n    readonly assignment: es.AssignmentExpression;\n    readonly statement: es.ExpressionStatement;\n}>;\n\n/**\n * Return direct expression-statement assignments from a concrete constructor.\n */\nexport const getDirectConstructorAssignments = (\n    constructorDefinition: Readonly<es.MethodDefinition>\n): readonly DirectConstructorAssignment[] => {\n    const body = constructorDefinition.value.body;\n    if (body === null) {\n        return [];\n    }\n\n    return body.body.flatMap((statement) =>\n        statement.type === AST_NODE_TYPES.ExpressionStatement &&\n        statement.expression.type === AST_NODE_TYPES.AssignmentExpression &&\n        statement.expression.operator === \"=\"\n            ? [\n                  {\n                      assignment: statement.expression,\n                      statement,\n                  },\n              ]\n            : []\n    );\n};\n\n/**\n * Resolve a non-computed `this.name` expression.\n */\nexport const getStaticThisMemberName = (\n    expression: Readonly<es.Expression>\n): null | string =>\n    expression.type === AST_NODE_TYPES.MemberExpression &&\n    !expression.computed &&\n    expression.object.type === AST_NODE_TYPES.ThisExpression &&\n    expression.property.type === AST_NODE_TYPES.Identifier\n        ? expression.property.name\n        : null;\n\n/**\n * Resolve the class that owns a method definition.\n */\nexport const getOwningClass = (\n    methodDefinition: Readonly<es.MethodDefinition>\n): es.ClassDeclaration | es.ClassExpression => methodDefinition.parent.parent;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayLast, setHas } from \"ts-extras\";\n\nimport {\n    getDirectConstructorAssignments,\n    getOwningClass,\n    getStaticThisMemberName,\n} from \"../_internal/constructor-migration.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"moveStateToField\" | \"preferStateField\";\ntype Options = readonly [];\n\nconst magicInitializerNames = new Set([\n    \"Infinity\",\n    \"NaN\",\n    \"undefined\",\n]);\n\nconst isSimpleInitializer = (expression: Readonly<es.Node>): boolean => {\n    if (expression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return setHas(magicInitializerNames, expression.name);\n    }\n\n    if (expression.type === AST_NODE_TYPES.ArrayExpression) {\n        return expression.elements.every(\n            (element) =>\n                element !== null &&\n                element.type !== AST_NODE_TYPES.SpreadElement &&\n                isSimpleInitializer(element)\n        );\n    }\n\n    if (expression.type !== AST_NODE_TYPES.ObjectExpression) {\n        return false;\n    }\n\n    return expression.properties.every((property) => {\n        if (\n            property.type !== AST_NODE_TYPES.Property ||\n            property.kind !== \"init\" ||\n            property.method ||\n            property.value.type === AST_NODE_TYPES.ArrayPattern ||\n            property.value.type === AST_NODE_TYPES.AssignmentPattern ||\n            property.value.type === AST_NODE_TYPES.ObjectPattern\n        ) {\n            return false;\n        }\n\n        return isSimpleInitializer(property.value);\n    });\n};\n\nconst hasRelocationSensitiveSyntax = (\n    expression: Readonly<es.Node>\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return true;\n    }\n\n    if (expression.type === AST_NODE_TYPES.ArrayExpression) {\n        return expression.elements.some(\n            (element) =>\n                element !== null &&\n                element.type !== AST_NODE_TYPES.SpreadElement &&\n                hasRelocationSensitiveSyntax(element)\n        );\n    }\n\n    if (expression.type !== AST_NODE_TYPES.ObjectExpression) {\n        return false;\n    }\n\n    return expression.properties.some(\n        (property) =>\n            property.type === AST_NODE_TYPES.Property &&\n            (property.computed || hasRelocationSensitiveSyntax(property.value))\n    );\n};\n\nconst isSuperCallStatement = (statement: Readonly<es.Statement>): boolean =>\n    statement.type === AST_NODE_TYPES.ExpressionStatement &&\n    statement.expression.type === AST_NODE_TYPES.CallExpression &&\n    statement.expression.callee.type === AST_NODE_TYPES.Super;\n\nconst canSuggestStateField = (\n    constructorDefinition: Readonly<es.MethodDefinition>,\n    statement: Readonly<es.ExpressionStatement>,\n    initializer: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): boolean => {\n    if (\n        !isSimpleInitializer(initializer) ||\n        hasRelocationSensitiveSyntax(initializer)\n    ) {\n        return false;\n    }\n\n    if (sourceCode.getCommentsInside(statement).length > 0) {\n        return false;\n    }\n\n    const owningClass = getOwningClass(constructorDefinition);\n    const body = constructorDefinition.value.body;\n    if (body === null) {\n        return false;\n    }\n\n    const hasOtherFields = owningClass.body.body.some(\n        (element) => element.type === AST_NODE_TYPES.PropertyDefinition\n    );\n    if (hasOtherFields) {\n        return false;\n    }\n\n    if (owningClass.superClass === null) {\n        return body.body.length === 1 && arrayFirst(body.body) === statement;\n    }\n\n    const firstStatement = arrayFirst(body.body);\n    return (\n        body.body.length === 2 &&\n        arrayLast(body.body) === statement &&\n        firstStatement !== undefined &&\n        isSuperCallStatement(firstStatement)\n    );\n};\n\nconst buildStateFieldSuggestion = (\n    fixer: TSESLint.RuleFixer,\n    constructorDefinition: Readonly<es.MethodDefinition>,\n    statement: Readonly<es.ExpressionStatement>,\n    initializer: Readonly<es.Expression>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): readonly TSESLint.RuleFix[] => {\n    const constructorLineStart =\n        sourceCode.text.lastIndexOf(\n            \"\\n\",\n            arrayFirst(constructorDefinition.range) - 1\n        ) + 1;\n    const linePrefix = sourceCode.text.slice(\n        constructorLineStart,\n        arrayFirst(constructorDefinition.range)\n    );\n    const indentation = /^\\s*$/v.test(linePrefix) ? linePrefix : \"\";\n    const separator = indentation === \"\" ? \" \" : `\\n${indentation}`;\n    const initializerText = sourceCode.getText(initializer);\n\n    return [\n        fixer.insertTextBefore(\n            constructorDefinition,\n            `state = ${initializerText};${separator}`\n        ),\n        fixer.remove(statement),\n    ];\n};\n\n/**\n * Discourage assigning a simple initial state value in a constructor.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"MethodDefinition[kind='constructor']\": (\n            constructorDefinition: Readonly<es.MethodDefinition>\n        ): void => {\n            for (const {\n                assignment,\n                statement,\n            } of getDirectConstructorAssignments(constructorDefinition)) {\n                if (\n                    getStaticThisMemberName(assignment.left) !== \"state\" ||\n                    !isSimpleInitializer(assignment.right)\n                ) {\n                    continue;\n                }\n\n                const canSuggest = canSuggestStateField(\n                    constructorDefinition,\n                    statement,\n                    assignment.right,\n                    context.sourceCode\n                );\n\n                if (canSuggest) {\n                    context.report({\n                        messageId: \"preferStateField\",\n                        node: assignment,\n                        suggest: [\n                            {\n                                fix: (fixer) =>\n                                    buildStateFieldSuggestion(\n                                        fixer,\n                                        constructorDefinition,\n                                        statement,\n                                        assignment.right,\n                                        context.sourceCode\n                                    ),\n                                messageId: \"moveStateToField\",\n                            },\n                        ],\n                    });\n                } else {\n                    context.report({\n                        messageId: \"preferStateField\",\n                        node: assignment,\n                    });\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow simple initial state assignments in constructors when a class field is preferred.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-constructor-state\",\n        },\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            moveStateToField:\n                \"Move this simple initial state value to a class field.\",\n            preferStateField:\n                \"Avoid assigning simple initial state in the constructor; prefer a class field when initialization-order semantics are acceptable.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-constructor-state\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\nimport { isDefined, isEmpty } from \"ts-extras\";\n\nimport {\n    compileIgnorePatterns,\n    type IgnoreMode,\n    type IgnorePatternBuckets,\n} from \"../_internal/ignore-patterns.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport {\n    getIdentifierSymbol,\n    getJsDocTagComments,\n    hasAnyPatternMatch,\n    isDeclarationIdentifier,\n    isImportOrExportSpecifier,\n} from \"../_internal/symbol-usage.js\";\n\ntype MessageIds =\n    | \"forbidden\"\n    | \"forbiddenWithComment\"\n    | \"invalidIgnorePattern\";\n\ntype Options = readonly [\n    {\n        readonly ignored?: Readonly<Record<string, IgnoreMode>>;\n    }?,\n];\n\nconst defaultOptions: Options = [{}];\n\n/**\n * Disallow usages of symbols tagged with `@deprecated`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const [{ ignored = {} } = {}] = context.options;\n        const parserServices = ESLintUtils.getParserServices(context);\n        const typeChecker = parserServices.program.getTypeChecker();\n        const compiledIgnorePatterns = compileIgnorePatterns(ignored);\n        const ignorePatterns: IgnorePatternBuckets =\n            compiledIgnorePatterns.patterns;\n\n        return {\n            Identifier: (node: Readonly<es.Identifier>) => {\n                if (isImportOrExportSpecifier(node.parent)) {\n                    return;\n                }\n\n                if (isDeclarationIdentifier(node)) {\n                    return;\n                }\n\n                const symbol = getIdentifierSymbol(parserServices, node);\n                if (!isDefined(symbol)) {\n                    return;\n                }\n\n                const symbolName = symbol.getName();\n                if (hasAnyPatternMatch(symbolName, ignorePatterns.name)) {\n                    return;\n                }\n\n                const fullyQualifiedName =\n                    typeChecker.getFullyQualifiedName(symbol);\n                if (\n                    hasAnyPatternMatch(fullyQualifiedName, ignorePatterns.path)\n                ) {\n                    return;\n                }\n\n                const deprecatedComments = getJsDocTagComments(\n                    symbol,\n                    typeChecker,\n                    \"deprecated\"\n                );\n                if (isEmpty(deprecatedComments)) {\n                    return;\n                }\n\n                for (const comment of deprecatedComments) {\n                    if (!isDefined(comment)) {\n                        context.report({\n                            data: { name: symbolName },\n                            messageId: \"forbidden\",\n                            node,\n                        });\n                        continue;\n                    }\n\n                    context.report({\n                        data: {\n                            comment,\n                            name: symbolName,\n                        },\n                        messageId: \"forbiddenWithComment\",\n                        node,\n                    });\n                }\n            },\n            Program: (node: Readonly<es.Program>) => {\n                for (const invalidPattern of compiledIgnorePatterns.invalidPatterns) {\n                    context.report({\n                        data: {\n                            pattern: invalidPattern,\n                        },\n                        messageId: \"invalidIgnorePattern\",\n                        node,\n                    });\n                }\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description: \"disallow usage of APIs tagged with @deprecated.\",\n            frozen: true,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-deprecated\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: '\"{{name}}\" is deprecated.',\n            forbiddenWithComment: '\"{{name}}\" is deprecated: {{comment}}',\n            invalidIgnorePattern:\n                \"Invalid ignored regex pattern '{{pattern}}'. Update this rule option to a valid regular expression.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Options for ignoring deprecated symbols by name or declaration path pattern.\",\n                properties: {\n                    ignored: {\n                        additionalProperties: {\n                            description:\n                                'Match behavior for the pattern key. Use \"name\" to match symbol names or \"path\" to match fully-qualified declaration paths.',\n                            enum: [\"name\", \"path\"],\n                            type: \"string\",\n                        },\n                        description: \"Map of regex patterns to ignore mode.\",\n                        type: \"object\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-deprecated\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of @typescript-eslint/no-deprecated.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"no-deprecated\",\n                url: \"https://typescript-eslint.io/rules/no-deprecated\",\n            },\n        }),\n    ],\n    ruleId: \"no-deprecated\",\n});\n\nexport default deprecatedRule;\n", "import { objectEntries } from \"ts-extras\";\n\n/**\n * Compiled ignore-pattern result grouped by mode with invalid entries tracked.\n */\nexport type CompiledIgnorePatterns = Readonly<{\n    readonly invalidPatterns: readonly string[];\n    readonly patterns: IgnorePatternBuckets;\n}>;\n\n/**\n * Supported matching modes for symbol-ignore configuration.\n */\nexport type IgnoreMode = \"name\" | \"path\";\n\n/**\n * Compiled regex buckets for name- and path-based ignores.\n */\nexport type IgnorePatternBuckets = Readonly<{\n    readonly name: readonly RegExp[];\n    readonly path: readonly RegExp[];\n}>;\n\n/* eslint-disable security/detect-non-literal-regexp -- Rule options intentionally accept user-provided regex strings. */\n/**\n * Compile ignore-option regex patterns into mode buckets.\n *\n * Invalid regex patterns are returned for caller-side reporting so rule\n * configuration issues are never swallowed silently.\n */\nexport const compileIgnorePatterns = (\n    ignored: Readonly<Record<string, IgnoreMode>>\n): CompiledIgnorePatterns => {\n    let namePatterns: readonly RegExp[] = [];\n    let pathPatterns: readonly RegExp[] = [];\n    let invalidPatterns: readonly string[] = [];\n\n    for (const [pattern, mode] of objectEntries(ignored)) {\n        try {\n            const regularExpression = new RegExp(pattern, \"u\");\n            if (mode === \"name\") {\n                namePatterns = [...namePatterns, regularExpression];\n            } else {\n                pathPatterns = [...pathPatterns, regularExpression];\n            }\n        } catch {\n            invalidPatterns = [...invalidPatterns, pattern];\n        }\n    }\n\n    return {\n        invalidPatterns,\n        patterns: {\n            name: namePatterns,\n            path: pathPatterns,\n        },\n    };\n};\n/* eslint-enable security/detect-non-literal-regexp -- Re-enable dynamic-regex checks outside option pattern compilation. */\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\nimport type { UnknownRecord } from \"type-fest\";\n\nimport { getConstrainedTypeAtLocation } from \"@typescript-eslint/type-utils\";\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, keyIn } from \"ts-extras\";\n\ntype JsDocTagInfo = Readonly<{\n    readonly name: string;\n    readonly text?: readonly JsDocTagTextPart[] | string;\n}>;\n\ntype JsDocTagTextPart = Readonly<{ readonly text: string }>;\n\ntype ParserServices = Readonly<\n    Parameters<typeof getConstrainedTypeAtLocation>[0]\n>;\n\ntype SymbolWithJsDocTags = Readonly<{\n    readonly getJsDocTags: (checker?: unknown) => readonly JsDocTagInfo[];\n}>;\n\n/**\n * Whether an identifier belongs to an import/export specifier position.\n */\nexport const isImportOrExportSpecifier = (\n    parent: Readonly<es.Node> | undefined\n): boolean =>\n    parent?.type === AST_NODE_TYPES.ExportSpecifier ||\n    parent?.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n    parent?.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n    parent?.type === AST_NODE_TYPES.ImportSpecifier;\n\n/**\n * Whether an identifier is the declaration identifier for supported node types.\n */\nexport const isDeclarationIdentifier = (\n    node: Readonly<es.Identifier>\n): boolean => {\n    const { parent } = node;\n    if (!isDefined(parent)) {\n        return false;\n    }\n\n    if (\n        parent.type === AST_NODE_TYPES.TSInterfaceDeclaration ||\n        parent.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n    ) {\n        return parent.id === node;\n    }\n\n    if (\n        parent.type === AST_NODE_TYPES.ClassDeclaration ||\n        parent.type === AST_NODE_TYPES.FunctionDeclaration ||\n        parent.type === AST_NODE_TYPES.TSDeclareFunction ||\n        parent.type === AST_NODE_TYPES.TSEnumDeclaration\n    ) {\n        return parent.id === node;\n    }\n\n    if (parent.type === AST_NODE_TYPES.VariableDeclarator) {\n        return parent.id === node;\n    }\n\n    return false;\n};\n\nconst normalizeTagComment = (\n    text:\n        | readonly JsDocTagTextPart[]\n        | string\n        | undefined\n): string | undefined => {\n    if (!isDefined(text)) {\n        return undefined;\n    }\n\n    if (typeof text === \"string\") {\n        const normalized = text.trim().replaceAll(/\\s+/gv, \" \");\n        return normalized.length > 0 ? normalized : undefined;\n    }\n\n    const normalized = arrayJoin(\n        text.map((part) => part.text),\n        \"\"\n    )\n        .replaceAll(/\\s+/gv, \" \")\n        .trim();\n\n    return normalized.length > 0 ? normalized : undefined;\n};\n\nconst isUnknownRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null;\n\nconst isSymbolWithJsDocTags = (\n    symbol: unknown\n): symbol is SymbolWithJsDocTags => {\n    if (!isUnknownRecord(symbol)) {\n        return false;\n    }\n\n    if (!keyIn(symbol, \"getJsDocTags\")) {\n        return false;\n    }\n\n    return typeof symbol[\"getJsDocTags\"] === \"function\";\n};\n\n/**\n * Collect normalized comment payloads for a specific JSDoc tag name.\n */\nexport const getJsDocTagComments = (\n    symbol: unknown,\n    checker: unknown,\n    tagName: string\n): readonly (string | undefined)[] => {\n    if (!isSymbolWithJsDocTags(symbol)) {\n        return [];\n    }\n\n    const tags = symbol.getJsDocTags();\n    const resolvedTags = tags.length > 0 ? tags : symbol.getJsDocTags(checker);\n\n    return resolvedTags\n        .filter((tag) => tag.name === tagName)\n        .map((tag) => normalizeTagComment(tag.text));\n};\n\n/**\n * Return true when text matches any compiled regex pattern.\n */\nexport const hasAnyPatternMatch = (\n    text: string,\n    patterns: readonly Readonly<RegExp>[]\n): boolean => patterns.some((pattern) => pattern.test(text));\n\n/**\n * Resolve the symbol at identifier location, falling back to constrained type.\n */\nexport const getIdentifierSymbol = (\n    parserServices: ParserServices,\n    node: Readonly<es.Identifier>\n): ReturnType<ParserServices[\"getSymbolAtLocation\"]> | undefined => {\n    const symbolFromLocation = parserServices.getSymbolAtLocation(node);\n    if (isDefined(symbolFromLocation)) {\n        return symbolFromLocation;\n    }\n\n    return getConstrainedTypeAtLocation(parserServices, node).getSymbol();\n};\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES, TSESLint } from \"@typescript-eslint/utils\";\nimport globals from \"globals\";\nimport {\n    arrayFirst,\n    assertNever,\n    isDefined,\n    objectHasOwn,\n    objectKeys,\n    setHas,\n} from \"ts-extras\";\n\nimport { isSameNode } from \"./node-identity.js\";\nimport { ruleCreator } from \"./rule-creator.js\";\n\ntype AnalysisCache = Readonly<{\n    readonly effectiveExecutionFunctions: readonly [\n        WeakMap<Readonly<es.Node>, null | Readonly<FunctionNode>>,\n        WeakMap<Readonly<es.Node>, null | Readonly<FunctionNode>>,\n    ];\n    readonly functionContainsJsx: WeakMap<Readonly<FunctionNode>, boolean>;\n    readonly guardAvailability: WeakMap<\n        Readonly<es.Expression>,\n        Map<string, GuardAvailability>\n    >;\n    readonly guardedUses: WeakMap<Readonly<es.Node>, Map<string, boolean>>;\n    readonly references: WeakMap<\n        Readonly<es.Identifier>,\n        null | TSESLint.Scope.Reference\n    >;\n}>;\n\n/** Execution phase whose eager browser-global accesses a rule reports. */\ntype ExecutionContext =\n    | \"constructor\"\n    | \"module\"\n    | \"react-class-render\"\n    | \"react-function-component\";\n\ntype FunctionNode =\n    | es.ArrowFunctionExpression\n    | es.FunctionDeclaration\n    | es.FunctionExpression;\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\ntype SourceCode = TSESLint.SourceCode;\n\nconst browserOnlyGlobalNames: ReadonlySet<string> = new Set(\n    objectKeys(globals.browser).filter(\n        (name) => !objectHasOwn(globals.node, name)\n    )\n);\n\nconst functionNodeTypes: ReadonlySet<es.Node[\"type\"]> = new Set([\n    AST_NODE_TYPES.ArrowFunctionExpression,\n    AST_NODE_TYPES.FunctionDeclaration,\n    AST_NODE_TYPES.FunctionExpression,\n]);\n\nconst transparentTypeScriptNodeTypes: ReadonlySet<string> = new Set([\n    \"TSAsExpression\",\n    \"TSInstantiationExpression\",\n    \"TSNonNullExpression\",\n    \"TSParameterProperty\",\n    \"TSSatisfiesExpression\",\n    \"TSTypeAssertion\",\n]);\n\nconst isNode = (value: unknown): value is Readonly<es.Node> =>\n    typeof value === \"object\" && value !== null && objectHasOwn(value, \"type\");\n\nconst isFunctionNode = (\n    node: Readonly<es.Node>\n): node is Readonly<FunctionNode> => setHas(functionNodeTypes, node.type);\n\nconst isBrowserOnlyGlobalName = (name: string): boolean =>\n    setHas(browserOnlyGlobalNames, name);\n\nconst containsExpression = (\n    expressions: ReadonlySet<Readonly<es.Expression>>,\n    expression: Readonly<es.Expression>\n): boolean => setHas(expressions, expression);\n\nconst unwrapCallee = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.ChainExpression ||\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSInstantiationExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapCallee(expression.expression);\n    }\n\n    return expression;\n};\n\nconst getStaticMemberName = (\n    node: Readonly<es.MemberExpression>\n): string | undefined => {\n    if (!node.computed && node.property.type === AST_NODE_TYPES.Identifier) {\n        return node.property.name;\n    }\n\n    if (\n        node.computed &&\n        node.property.type === AST_NODE_TYPES.Literal &&\n        typeof node.property.value === \"string\"\n    ) {\n        return node.property.value;\n    }\n\n    return undefined;\n};\n\nconst getReference = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    cache: Readonly<AnalysisCache>\n): null | Readonly<TSESLint.Scope.Reference> => {\n    const cachedReference = cache.references.get(identifier);\n\n    if (isDefined(cachedReference) || cache.references.has(identifier)) {\n        return cachedReference ?? null;\n    }\n\n    let scope: null | TSESLint.Scope.Scope = sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        for (const reference of scope.references) {\n            if (reference.identifier === identifier) {\n                cache.references.set(identifier, reference);\n                return reference;\n            }\n        }\n\n        for (const reference of scope.through) {\n            if (reference.identifier === identifier) {\n                cache.references.set(identifier, reference);\n                return reference;\n            }\n        }\n\n        scope = scope.upper;\n    }\n\n    cache.references.set(identifier, null);\n    return null;\n};\n\nconst isReferenceIdentifier = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    const reference = getReference(sourceCode, identifier, cache);\n\n    return (\n        reference !== null &&\n        (reference.resolved === null || reference.resolved.defs.length === 0)\n    );\n};\n\nconst isImportedIdentifier = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    cache: Readonly<AnalysisCache>\n): boolean =>\n    getReference(sourceCode, identifier, cache)?.resolved?.defs.some(\n        (definition) =>\n            definition.type === TSESLint.Scope.DefinitionType.ImportBinding\n    ) === true;\n\nconst isTypeOnlyPosition = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): boolean =>\n    sourceCode.getAncestors(node).some(\n        (ancestor) =>\n            ancestor.type.startsWith(\"TS\") &&\n            // eslint-disable-next-line typefest/prefer-ts-extras-set-has -- The generic helper rejects the heterogeneous TSESTree node-type union.\n            !transparentTypeScriptNodeTypes.has(ancestor.type)\n    );\n\nconst isDirectTypeofOperand = (node: Readonly<es.Node>): boolean => {\n    let operand: Readonly<es.Node> = node;\n    let parent: Readonly<es.Node> | undefined = operand.parent;\n\n    while (\n        isDefined(parent) &&\n        (parent.type === AST_NODE_TYPES.ChainExpression ||\n            // eslint-disable-next-line typefest/prefer-ts-extras-set-has -- The generic helper rejects the heterogeneous TSESTree node-type union.\n            transparentTypeScriptNodeTypes.has(parent.type)) &&\n        Reflect.get(parent, \"expression\") === operand\n    ) {\n        operand = parent;\n        parent = operand.parent;\n    }\n\n    return (\n        parent?.type === AST_NODE_TYPES.UnaryExpression &&\n        parent.operator === \"typeof\" &&\n        parent.argument === operand\n    );\n};\n\ntype GuardAvailability =\n    | \"false\"\n    | \"true\"\n    | undefined;\n\nconst invertAvailability = (\n    availability: GuardAvailability\n): GuardAvailability => {\n    if (availability === \"true\") {\n        return \"false\";\n    }\n\n    if (availability === \"false\") {\n        return \"true\";\n    }\n\n    return undefined;\n};\n\nconst getStringLiteralValue = (\n    node: Readonly<es.Expression | es.PrivateIdentifier>\n): string | undefined =>\n    node.type === AST_NODE_TYPES.Literal && typeof node.value === \"string\"\n        ? node.value\n        : undefined;\n\nconst getGlobalThisMemberName = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.Expression>,\n    cache: Readonly<AnalysisCache>\n): string | undefined => {\n    const unwrappedExpression = unwrapCallee(expression);\n\n    if (unwrappedExpression.type !== AST_NODE_TYPES.MemberExpression) {\n        return undefined;\n    }\n\n    const object = unwrappedExpression.object;\n\n    return object.type === AST_NODE_TYPES.Identifier &&\n        object.name === \"globalThis\" &&\n        isReferenceIdentifier(sourceCode, object, cache)\n        ? getStaticMemberName(unwrappedExpression)\n        : undefined;\n};\n\nconst getTypeofGlobalName = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Expression | es.PrivateIdentifier>,\n    cache: Readonly<AnalysisCache>\n): string | undefined => {\n    if (\n        node.type !== AST_NODE_TYPES.UnaryExpression ||\n        node.operator !== \"typeof\"\n    ) {\n        return undefined;\n    }\n\n    if (node.argument.type === AST_NODE_TYPES.Identifier) {\n        return isReferenceIdentifier(sourceCode, node.argument, cache)\n            ? node.argument.name\n            : undefined;\n    }\n\n    return getGlobalThisMemberName(sourceCode, node.argument, cache);\n};\n\nconst getInGlobalName = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.BinaryExpression>,\n    cache: Readonly<AnalysisCache>\n): string | undefined => {\n    if (\n        expression.operator !== \"in\" ||\n        expression.left.type !== AST_NODE_TYPES.Literal ||\n        typeof expression.left.value !== \"string\"\n    ) {\n        return undefined;\n    }\n\n    const right = unwrapCallee(expression.right);\n\n    return right.type === AST_NODE_TYPES.Identifier &&\n        right.name === \"globalThis\" &&\n        isReferenceIdentifier(sourceCode, right, cache)\n        ? expression.left.value\n        : undefined;\n};\n\nconst getImmutablePredicateInitializer = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    cache: Readonly<AnalysisCache>\n): Readonly<es.Expression> | undefined => {\n    const reference = getReference(sourceCode, identifier, cache);\n    const variable = reference?.resolved;\n\n    if (variable === null || variable?.defs.length !== 1) {\n        return undefined;\n    }\n\n    const [definition] = variable.defs;\n\n    return definition?.type === TSESLint.Scope.DefinitionType.Variable &&\n        definition.node.id.type === AST_NODE_TYPES.Identifier &&\n        definition.node.id.name === identifier.name &&\n        definition.node.init !== null &&\n        definition.node.parent.kind === \"const\"\n        ? definition.node.init\n        : undefined;\n};\n\ntype GuardResolver = (expression: Readonly<es.Expression>) => GuardAvailability;\n\nconst getIdentifierGuardAvailability = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    cache: Readonly<AnalysisCache>,\n    resolveGuard: GuardResolver\n): GuardAvailability => {\n    const initializer = getImmutablePredicateInitializer(\n        sourceCode,\n        identifier,\n        cache\n    );\n\n    return isDefined(initializer) ? resolveGuard(initializer) : undefined;\n};\n\nconst isEqualityOperator = (\n    operator: es.BinaryExpression[\"operator\"]\n): boolean => operator === \"==\" || operator === \"===\";\n\nconst isInequalityOperator = (\n    operator: es.BinaryExpression[\"operator\"]\n): boolean => operator === \"!=\" || operator === \"!==\";\n\nconst getTypeofComparisonAvailability = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.BinaryExpression>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>\n): GuardAvailability => {\n    const leftTypeofName = getTypeofGlobalName(\n        sourceCode,\n        expression.left,\n        cache\n    );\n    const rightTypeofName = getTypeofGlobalName(\n        sourceCode,\n        expression.right,\n        cache\n    );\n    const comparedValue = isDefined(leftTypeofName)\n        ? getStringLiteralValue(expression.right)\n        : getStringLiteralValue(expression.left);\n\n    if (\n        (leftTypeofName ?? rightTypeofName) !== globalName ||\n        !isDefined(comparedValue)\n    ) {\n        return undefined;\n    }\n\n    if (comparedValue === \"undefined\") {\n        if (isEqualityOperator(expression.operator)) {\n            return \"false\";\n        }\n\n        return isInequalityOperator(expression.operator) ? \"true\" : undefined;\n    }\n\n    return isEqualityOperator(expression.operator) &&\n        (comparedValue === \"object\" || comparedValue === \"function\")\n        ? \"true\"\n        : undefined;\n};\n\nconst getBinaryGuardAvailability = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.BinaryExpression>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>\n): GuardAvailability => {\n    const inGlobalName = getInGlobalName(sourceCode, expression, cache);\n\n    return isDefined(inGlobalName)\n        ? inGlobalName === globalName\n            ? \"true\"\n            : undefined\n        : getTypeofComparisonAvailability(\n              sourceCode,\n              expression,\n              globalName,\n              cache\n          );\n};\n\nconst getUncachedGuardAvailability = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.Expression>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>,\n    resolveGuard: GuardResolver\n): GuardAvailability => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return getIdentifierGuardAvailability(\n            sourceCode,\n            expression,\n            cache,\n            resolveGuard\n        );\n    }\n\n    if (expression.type === AST_NODE_TYPES.UnaryExpression) {\n        return expression.operator === \"!\"\n            ? invertAvailability(resolveGuard(expression.argument))\n            : undefined;\n    }\n\n    return expression.type === AST_NODE_TYPES.BinaryExpression\n        ? getBinaryGuardAvailability(sourceCode, expression, globalName, cache)\n        : undefined;\n};\n\nconst getAvailabilityGuard = (\n    sourceCode: Readonly<SourceCode>,\n    expression: Readonly<es.Expression>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>,\n    visitedExpressions: Set<Readonly<es.Expression>> = new Set()\n): GuardAvailability => {\n    const unwrappedExpression = unwrapCallee(expression);\n    const cachedByName = cache.guardAvailability.get(unwrappedExpression);\n\n    if (cachedByName?.has(globalName) === true) {\n        return cachedByName.get(globalName);\n    }\n\n    if (containsExpression(visitedExpressions, unwrappedExpression)) {\n        return undefined;\n    }\n\n    visitedExpressions.add(unwrappedExpression);\n\n    const resolveGuard: GuardResolver = (candidate) =>\n        getAvailabilityGuard(\n            sourceCode,\n            candidate,\n            globalName,\n            cache,\n            visitedExpressions\n        );\n    const availability = getUncachedGuardAvailability(\n        sourceCode,\n        unwrappedExpression,\n        globalName,\n        cache,\n        resolveGuard\n    );\n\n    const availabilityByName =\n        cachedByName ?? new Map<string, GuardAvailability>();\n    availabilityByName.set(globalName, availability);\n    cache.guardAvailability.set(unwrappedExpression, availabilityByName);\n\n    return availability;\n};\n\nconst isGuardedByAncestor = (\n    sourceCode: Readonly<SourceCode>,\n    ancestor: Readonly<es.Node>,\n    childOnPath: Readonly<es.Node>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    if (\n        ancestor.type === AST_NODE_TYPES.IfStatement ||\n        ancestor.type === AST_NODE_TYPES.ConditionalExpression\n    ) {\n        const availability = getAvailabilityGuard(\n            sourceCode,\n            ancestor.test,\n            globalName,\n            cache\n        );\n\n        return (\n            (availability === \"true\" &&\n                isSameNode(ancestor.consequent, childOnPath)) ||\n            (availability === \"false\" &&\n                isSameNode(ancestor.alternate, childOnPath))\n        );\n    }\n\n    if (\n        ancestor.type !== AST_NODE_TYPES.LogicalExpression ||\n        ancestor.right !== childOnPath\n    ) {\n        return false;\n    }\n\n    const availability = getAvailabilityGuard(\n        sourceCode,\n        ancestor.left,\n        globalName,\n        cache\n    );\n\n    return (\n        (availability === \"true\" && ancestor.operator === \"&&\") ||\n        (availability === \"false\" && ancestor.operator === \"||\")\n    );\n};\n\nconst isGuardedAvailabilityUse = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>,\n    globalName: string,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    const cachedByName = cache.guardedUses.get(node);\n\n    if (cachedByName?.has(globalName) === true) {\n        return cachedByName.get(globalName) ?? false;\n    }\n\n    const ancestors = sourceCode.getAncestors(node);\n    let guarded = false;\n\n    for (let index = 0; index < ancestors.length; index += 1) {\n        const ancestor = ancestors[index];\n        const childOnPath = ancestors[index + 1] ?? node;\n\n        if (\n            ancestor !== undefined &&\n            isGuardedByAncestor(\n                sourceCode,\n                ancestor,\n                childOnPath,\n                globalName,\n                cache\n            )\n        ) {\n            guarded = true;\n            break;\n        }\n    }\n\n    const guardedByName = cachedByName ?? new Map<string, boolean>();\n    guardedByName.set(globalName, guarded);\n    cache.guardedUses.set(node, guardedByName);\n\n    return guarded;\n};\n\nconst getEnclosingFunction = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): Readonly<FunctionNode> | undefined => {\n    const ancestors = sourceCode.getAncestors(node);\n\n    for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n        const ancestor = ancestors[index];\n\n        if (ancestor !== undefined && isFunctionNode(ancestor)) {\n            return ancestor;\n        }\n    }\n\n    return undefined;\n};\n\nconst getCallName = (node: Readonly<es.CallExpression>): string | undefined => {\n    const callee = unwrapCallee(node.callee);\n\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee.name;\n    }\n\n    if (\n        callee.type === AST_NODE_TYPES.MemberExpression &&\n        !callee.computed &&\n        callee.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return callee.property.name;\n    }\n\n    return undefined;\n};\n\nconst getCalleeRootIdentifier = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Identifier> | undefined => {\n    const callee = unwrapCallee(expression);\n\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee;\n    }\n\n    if (callee.type === AST_NODE_TYPES.CallExpression) {\n        return getCalleeRootIdentifier(callee.callee);\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return undefined;\n    }\n\n    return callee.object.type === AST_NODE_TYPES.Super\n        ? undefined\n        : getCalleeRootIdentifier(callee.object);\n};\n\nconst recognizedComponentWrapperNames: ReadonlySet<string> = new Set([\n    \"forwardRef\",\n    \"memo\",\n    \"observer\",\n]);\n\n/**\n * Recognize established wrappers by name and arbitrary third-party wrappers by\n * import provenance. Requiring either signal prevents ordinary calls such as\n * `items.map(Component)` from acquiring component ownership merely because the\n * result is assigned to an uppercase binding or default-exported.\n */\nconst isComponentWrapperCall = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.CallExpression>,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    const callName = getCallName(node);\n\n    if (\n        isDefined(callName) &&\n        setHas(recognizedComponentWrapperNames, callName)\n    ) {\n        return true;\n    }\n\n    const rootIdentifier = getCalleeRootIdentifier(node.callee);\n\n    return (\n        isDefined(rootIdentifier) &&\n        isImportedIdentifier(sourceCode, rootIdentifier, cache)\n    );\n};\n\nconst isTransparentCalleeWrapper = (\n    parent: Readonly<es.Node> | undefined,\n    child: Readonly<es.Node>\n): boolean =>\n    parent !== undefined &&\n    (parent.type === AST_NODE_TYPES.ChainExpression ||\n        // eslint-disable-next-line typefest/prefer-ts-extras-set-has -- The generic helper rejects the heterogeneous TSESTree node-type union.\n        transparentTypeScriptNodeTypes.has(parent.type)) &&\n    Reflect.get(parent, \"expression\") === child;\n\nconst isImmediatelyInvoked = (node: Readonly<FunctionNode>): boolean => {\n    let calleeNode: Readonly<es.Node> = node;\n    let parent: es.Node | undefined = calleeNode.parent;\n\n    while (\n        parent !== undefined &&\n        isTransparentCalleeWrapper(parent, calleeNode)\n    ) {\n        calleeNode = parent;\n        parent = calleeNode.parent;\n    }\n\n    if (parent?.type !== AST_NODE_TYPES.CallExpression) {\n        return false;\n    }\n\n    return isSameNode(unwrapCallee(parent.callee), node);\n};\n\nconst renderTimeHookNames: ReadonlySet<string> = new Set([\n    \"useMemo\",\n    \"useReducer\",\n    \"useState\",\n]);\n\nconst isCallArgumentAtIndex = (\n    node: Readonly<FunctionNode>,\n    index: number\n): boolean =>\n    node.type !== AST_NODE_TYPES.FunctionDeclaration &&\n    node.parent.type === AST_NODE_TYPES.CallExpression &&\n    node.parent.arguments[index] === node;\n\nconst isRenderTimeHookCallback = (node: Readonly<FunctionNode>): boolean => {\n    if (\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.parent.type !== AST_NODE_TYPES.CallExpression\n    ) {\n        return false;\n    }\n\n    const callName = getCallName(node.parent);\n\n    if (!setHas(renderTimeHookNames, callName ?? \"\")) {\n        return false;\n    }\n\n    // UseMemo factories and useState lazy initializers execute while rendering.\n    // A useReducer reducer is deferred until dispatch; only its third-argument\n    // initializer executes during initialization.\n    return callName === \"useReducer\"\n        ? isCallArgumentAtIndex(node, 2)\n        : isCallArgumentAtIndex(node, 0);\n};\n\nconst synchronousIterationCallbackNames: ReadonlySet<string> = new Set([\n    \"every\",\n    \"filter\",\n    \"find\",\n    \"findIndex\",\n    \"findLast\",\n    \"findLastIndex\",\n    \"flatMap\",\n    \"forEach\",\n    \"map\",\n    \"reduce\",\n    \"reduceRight\",\n    \"some\",\n]);\n\nconst isSynchronousIterationCallback = (\n    node: Readonly<FunctionNode>\n): boolean =>\n    node.type !== AST_NODE_TYPES.FunctionDeclaration &&\n    node.parent.type === AST_NODE_TYPES.CallExpression &&\n    isCallArgumentAtIndex(node, 0) &&\n    setHas(synchronousIterationCallbackNames, getCallName(node.parent) ?? \"\");\n\nconst isRenderTimeNestedFunction = (node: Readonly<FunctionNode>): boolean =>\n    isImmediatelyInvoked(node) ||\n    isRenderTimeHookCallback(node) ||\n    isSynchronousIterationCallback(node);\n\nconst getEffectiveExecutionFunction = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>,\n    includeRenderTimeHooks: boolean,\n    cache: Readonly<AnalysisCache>\n): Readonly<FunctionNode> | undefined => {\n    const executionFunctionCache =\n        cache.effectiveExecutionFunctions[includeRenderTimeHooks ? 1 : 0];\n    const cachedExecutionFunction = executionFunctionCache.get(node);\n\n    if (\n        cachedExecutionFunction !== undefined ||\n        executionFunctionCache.has(node)\n    ) {\n        return cachedExecutionFunction ?? undefined;\n    }\n\n    let enclosingFunction = getEnclosingFunction(sourceCode, node);\n\n    while (isDefined(enclosingFunction)) {\n        if (\n            !isImmediatelyInvoked(enclosingFunction) &&\n            !isSynchronousIterationCallback(enclosingFunction) &&\n            (!includeRenderTimeHooks ||\n                !isRenderTimeHookCallback(enclosingFunction))\n        ) {\n            break;\n        }\n\n        enclosingFunction = getEnclosingFunction(sourceCode, enclosingFunction);\n    }\n\n    executionFunctionCache.set(node, enclosingFunction ?? null);\n    return enclosingFunction;\n};\n\nconst isWithinNode = (\n    node: Readonly<es.Node>,\n    container: Readonly<es.Node>\n): boolean =>\n    arrayFirst(node.range) >= arrayFirst(container.range) &&\n    node.range[1] <= container.range[1];\n\nconst getInstancePropertyInitializer = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): Readonly<es.PropertyDefinition> | undefined => {\n    const ancestors = sourceCode.getAncestors(node);\n\n    for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n        const ancestor = ancestors[index];\n\n        if (\n            ancestor?.type === AST_NODE_TYPES.PropertyDefinition &&\n            !ancestor.static &&\n            ancestor.value !== null &&\n            isWithinNode(node, ancestor.value)\n        ) {\n            return ancestor;\n        }\n    }\n\n    return undefined;\n};\n\nconst getChildNodes = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): readonly Readonly<es.Node>[] => {\n    const visitorKeys = sourceCode.visitorKeys[node.type] ?? [];\n    let childNodes: readonly Readonly<es.Node>[] = [];\n\n    const addNode = (value: unknown): void => {\n        if (isNode(value)) {\n            childNodes = [...childNodes, value];\n        }\n    };\n\n    for (const visitorKey of visitorKeys) {\n        const value: unknown = Reflect.get(node, visitorKey);\n\n        if (Array.isArray(value)) {\n            for (const item of value) {\n                addNode(item);\n            }\n\n            continue;\n        }\n\n        addNode(value);\n    }\n\n    return childNodes;\n};\n\nconst getFunctionJsxSearchChildren = (\n    sourceCode: Readonly<SourceCode>,\n    current: Readonly<es.Node>\n): readonly Readonly<es.Node>[] => {\n    if (!isFunctionNode(current)) {\n        return getChildNodes(sourceCode, current);\n    }\n\n    return isRenderTimeNestedFunction(current) ? [current.body] : [];\n};\n\nconst functionContainsJsx = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<FunctionNode>,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    const cachedResult = cache.functionContainsJsx.get(node);\n\n    if (isDefined(cachedResult)) {\n        return cachedResult;\n    }\n\n    if (\n        node.body.type === AST_NODE_TYPES.JSXElement ||\n        node.body.type === AST_NODE_TYPES.JSXFragment\n    ) {\n        cache.functionContainsJsx.set(node, true);\n        return true;\n    }\n\n    const stack: es.Node[] = [...getChildNodes(sourceCode, node.body)];\n\n    while (stack.length > 0) {\n        const current = stack.pop();\n\n        if (current !== undefined) {\n            if (\n                current.type === AST_NODE_TYPES.JSXElement ||\n                current.type === AST_NODE_TYPES.JSXFragment\n            ) {\n                cache.functionContainsJsx.set(node, true);\n                return true;\n            }\n\n            stack.push(...getFunctionJsxSearchChildren(sourceCode, current));\n        }\n    }\n\n    cache.functionContainsJsx.set(node, false);\n    return false;\n};\n\nconst getStaticMethodName = (\n    node: Readonly<es.MethodDefinition>\n): string | undefined => {\n    if (!node.computed && node.key.type === AST_NODE_TYPES.Identifier) {\n        return node.key.name;\n    }\n\n    if (\n        node.key.type === AST_NODE_TYPES.Literal &&\n        typeof node.key.value === \"string\"\n    ) {\n        return node.key.value;\n    }\n\n    return undefined;\n};\n\nconst isConstructorFunction = (node: Readonly<FunctionNode>): boolean =>\n    node.type === AST_NODE_TYPES.FunctionExpression &&\n    node.parent.type === AST_NODE_TYPES.MethodDefinition &&\n    node.parent.kind === \"constructor\";\n\nconst isReactClassRenderFunction = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<FunctionNode>,\n    cache: Readonly<AnalysisCache>\n): boolean =>\n    node.type === AST_NODE_TYPES.FunctionExpression &&\n    node.parent.type === AST_NODE_TYPES.MethodDefinition &&\n    node.parent.kind === \"method\" &&\n    !node.parent.static &&\n    getStaticMethodName(node.parent) === \"render\" &&\n    functionContainsJsx(sourceCode, node, cache);\n\nconst isComponentName = (name: string): boolean => {\n    const firstCharacter = name.at(0);\n\n    return (\n        isDefined(firstCharacter) &&\n        firstCharacter === firstCharacter.toUpperCase() &&\n        firstCharacter !== firstCharacter.toLowerCase()\n    );\n};\n\nconst isReactFunctionComponent = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<FunctionNode>,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    if (!functionContainsJsx(sourceCode, node, cache)) {\n        return false;\n    }\n\n    if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n        return node.id === null || isComponentName(node.id.name);\n    }\n\n    let valueNode: Readonly<es.Node> = node;\n    let parent: Readonly<es.Node> | undefined = valueNode.parent;\n\n    while (isDefined(parent) && isTransparentCalleeWrapper(parent, valueNode)) {\n        valueNode = parent;\n        parent = valueNode.parent;\n    }\n\n    while (\n        parent?.type === AST_NODE_TYPES.CallExpression &&\n        isSameNode(arrayFirst(parent.arguments), valueNode) &&\n        isComponentWrapperCall(sourceCode, parent, cache)\n    ) {\n        valueNode = parent;\n        parent = valueNode.parent;\n\n        while (\n            isDefined(parent) &&\n            isTransparentCalleeWrapper(parent, valueNode)\n        ) {\n            valueNode = parent;\n            parent = valueNode.parent;\n        }\n    }\n\n    if (\n        parent?.type === AST_NODE_TYPES.VariableDeclarator &&\n        parent.id.type === AST_NODE_TYPES.Identifier\n    ) {\n        return isComponentName(parent.id.name);\n    }\n\n    return parent?.type === AST_NODE_TYPES.ExportDefaultDeclaration;\n};\n\nconst isInExecutionContext = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>,\n    executionContext: ExecutionContext,\n    cache: Readonly<AnalysisCache>\n): boolean => {\n    const includeRenderTimeHooks =\n        executionContext === \"react-function-component\";\n    const executionFunction = getEffectiveExecutionFunction(\n        sourceCode,\n        node,\n        includeRenderTimeHooks,\n        cache\n    );\n    const instanceInitializer = getInstancePropertyInitializer(\n        sourceCode,\n        node\n    );\n\n    switch (executionContext) {\n        case \"constructor\": {\n            return (\n                (executionFunction === undefined &&\n                    instanceInitializer !== undefined) ||\n                (executionFunction !== undefined &&\n                    isConstructorFunction(executionFunction))\n            );\n        }\n        case \"module\": {\n            return (\n                executionFunction === undefined &&\n                instanceInitializer === undefined\n            );\n        }\n        case \"react-class-render\": {\n            return (\n                executionFunction !== undefined &&\n                isReactClassRenderFunction(sourceCode, executionFunction, cache)\n            );\n        }\n        case \"react-function-component\": {\n            return (\n                executionFunction !== undefined &&\n                isReactFunctionComponent(sourceCode, executionFunction, cache)\n            );\n        }\n        default: {\n            return assertNever(executionContext);\n        }\n    }\n};\n\nconst shouldReportGlobalUse = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>,\n    globalName: string,\n    executionContext: ExecutionContext,\n    cache: Readonly<AnalysisCache>\n): boolean =>\n    isBrowserOnlyGlobalName(globalName) &&\n    !isTypeOnlyPosition(sourceCode, node) &&\n    !isDirectTypeofOperand(node) &&\n    !isGuardedAvailabilityUse(sourceCode, node, globalName, cache) &&\n    isInExecutionContext(sourceCode, node, executionContext, cache);\n\n/** Create one SSR DOM-global rule with shared lexical and execution analysis. */\nexport const createSsrDomGlobalsRule = ({\n    description,\n    executionContext,\n    message,\n    name,\n}: Readonly<{\n    readonly description: string;\n    readonly executionContext: ExecutionContext;\n    readonly message: string;\n    readonly name: string;\n}>): ReturnType<typeof ruleCreator<Options, MessageIds>> =>\n    ruleCreator<Options, MessageIds>({\n        create: (context) => {\n            const cache: AnalysisCache = {\n                effectiveExecutionFunctions: [new WeakMap(), new WeakMap()],\n                functionContainsJsx: new WeakMap(),\n                guardAvailability: new WeakMap(),\n                guardedUses: new WeakMap(),\n                references: new WeakMap(),\n            };\n\n            return {\n                Identifier: (node: Readonly<es.Identifier>): void => {\n                    if (\n                        !isReferenceIdentifier(\n                            context.sourceCode,\n                            node,\n                            cache\n                        ) ||\n                        !shouldReportGlobalUse(\n                            context.sourceCode,\n                            node,\n                            node.name,\n                            executionContext,\n                            cache\n                        )\n                    ) {\n                        return;\n                    }\n\n                    context.report({\n                        data: {\n                            name: node.name,\n                        },\n                        messageId: \"forbidden\",\n                        node,\n                    });\n                },\n                MemberExpression: (\n                    node: Readonly<es.MemberExpression>\n                ): void => {\n                    if (\n                        node.object.type !== AST_NODE_TYPES.Identifier ||\n                        node.object.name !== \"globalThis\" ||\n                        !isReferenceIdentifier(\n                            context.sourceCode,\n                            node.object,\n                            cache\n                        )\n                    ) {\n                        return;\n                    }\n\n                    const globalName = getStaticMemberName(node);\n\n                    if (\n                        !isDefined(globalName) ||\n                        !shouldReportGlobalUse(\n                            context.sourceCode,\n                            node,\n                            globalName,\n                            executionContext,\n                            cache\n                        )\n                    ) {\n                        return;\n                    }\n\n                    context.report({\n                        data: {\n                            name: `globalThis.${globalName}`,\n                        },\n                        messageId: \"forbidden\",\n                        node,\n                    });\n                },\n            };\n        },\n        defaultOptions: [],\n        meta: {\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description,\n                frozen: false,\n                recommended: false,\n                url: `https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/${name}`,\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden: message,\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name,\n    });\n\nexport type { ExecutionContext };\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\n/** Return whether two ESTree node references identify the same AST node. */\nexport const isSameNode = (\n    left:\n        | null\n        | Readonly<es.Node>\n        | undefined,\n    right:\n        | null\n        | Readonly<es.Node>\n        | undefined\n): boolean => Object.is(left, right);\n", "import { createSsrDomGlobalsRule } from \"../_internal/ssr-dom-globals.js\";\n\n/** Disallow eager browser-global access during class construction. */\nconst rule: ReturnType<typeof createSsrDomGlobalsRule> =\n    createSsrDomGlobalsRule({\n        description: \"disallow browser-only globals during class construction.\",\n        executionContext: \"constructor\",\n        message:\n            \"Browser global '{{name}}' is unsafe during server-side construction. Defer the access to a client-only lifecycle or guard it with typeof.\",\n        name: \"no-dom-globals-in-constructor\",\n    });\n\nexport default rule;\n", "import { createSsrDomGlobalsRule } from \"../_internal/ssr-dom-globals.js\";\n\n/** Disallow eager browser-global access during module evaluation. */\nconst rule: ReturnType<typeof createSsrDomGlobalsRule> =\n    createSsrDomGlobalsRule({\n        description: \"disallow browser-only globals during module evaluation.\",\n        executionContext: \"module\",\n        message:\n            \"Browser global '{{name}}' is unavailable during server-side module evaluation. Defer the access or guard it with typeof.\",\n        name: \"no-dom-globals-in-module-scope\",\n    });\n\nexport default rule;\n", "import { createSsrDomGlobalsRule } from \"../_internal/ssr-dom-globals.js\";\n\n/** Disallow browser-global access during React class rendering. */\nconst rule: ReturnType<typeof createSsrDomGlobalsRule> =\n    createSsrDomGlobalsRule({\n        description:\n            \"disallow browser-only globals while rendering React class components.\",\n        executionContext: \"react-class-render\",\n        message:\n            \"Browser global '{{name}}' is unsafe during server-side class-component rendering. Defer the access to a client-only lifecycle or guard it with typeof.\",\n        name: \"no-dom-globals-in-react-cc-render\",\n    });\n\nexport default rule;\n", "import { createSsrDomGlobalsRule } from \"../_internal/ssr-dom-globals.js\";\n\n/** Disallow browser-global access during React function rendering. */\nconst rule: ReturnType<typeof createSsrDomGlobalsRule> =\n    createSsrDomGlobalsRule({\n        description:\n            \"disallow browser-only globals while rendering React function components.\",\n        executionContext: \"react-function-component\",\n        message:\n            \"Browser global '{{name}}' is unsafe during server-side function-component rendering. Defer the access to an effect or event handler, or guard it with typeof.\",\n        name: \"no-dom-globals-in-react-fc\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\n/**\n * Disallow TypeScript enum declarations.\n */\nconst rule: ReturnType<typeof ruleCreator<readonly [], MessageIds>> =\n    ruleCreator<readonly [], MessageIds>({\n        create: (context) => ({\n            TSEnumDeclaration: (node: Readonly<es.TSEnumDeclaration>) => {\n                context.report({\n                    messageId: \"forbidden\",\n                    node: node.id,\n                });\n            },\n        }),\n        meta: {\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description: \"disallow TypeScript enum declarations.\",\n                frozen: false,\n                recommended: false,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-enum\",\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden: \"`enum` declarations are forbidden.\",\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name: \"no-enum\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin, stringSplit } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst splitLines = (sourceText: string): readonly string[] =>\n    stringSplit(sourceText.replaceAll(/\\r\\n?/gv, \"\\n\"), \"\\n\");\n\nconst hasBlankLine = (text: string): boolean =>\n    splitLines(text).some((line) => line.trim().length === 0);\n\nconst normalizeExpressionSource = (sourceText: string): string => {\n    const lines = splitLines(sourceText).map((line) => line.trimEnd());\n\n    return arrayJoin(\n        lines.filter((line) => line.trim().length > 0),\n        \"\\n\"\n    );\n};\n\nconst createFix =\n    (\n        sourceCode: Readonly<TSESLint.SourceCode>,\n        node: Readonly<es.ExpressionStatement>\n    ): TSESLint.ReportFixFunction =>\n    (fixer): TSESLint.RuleFix => {\n        const sourceText = sourceCode.getText(node.expression);\n        const replacement = `${normalizeExpressionSource(sourceText)};`;\n\n        return fixer.replaceText(node, replacement);\n    };\n\n/**\n * Disallow blank lines inside expression statements.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ExpressionStatement: (node: Readonly<es.ExpressionStatement>): void => {\n            const sourceText = context.sourceCode.getText(node.expression);\n            if (!hasBlankLine(sourceText)) {\n                return;\n            }\n\n            context.report({\n                fix: createFix(context.sourceCode, node),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow blank lines inside expression statements.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-expression-empty-lines\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Expression statement contains unnecessary blank lines.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-expression-empty-lines\",\n});\n\nexport default rule;\n", "import type ts from \"typescript\";\n\nimport {\n    containsAllTypesByName,\n    getConstrainedTypeAtLocation,\n    isTypeArrayTypeOrUnionOfArrayTypes,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n} from \"@typescript-eslint/utils\";\nimport { setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [\n    {\n        readonly types?: readonly string[];\n    }?,\n];\n\nconst defaultOptions: Options = [{}];\n\nconst defaultTypes: readonly string[] = [\n    \"Array\",\n    \"Map\",\n    \"NodeList\",\n    \"Set\",\n];\n\nconst getConfiguredTypeNames = (\n    configuredTypes: readonly string[]\n): ReadonlySet<string> => {\n    const typeNames = new Set<string>();\n\n    for (const configuredType of configuredTypes) {\n        typeNames.add(configuredType);\n        if (configuredType === \"Array\") {\n            typeNames.add(\"ReadonlyArray\");\n        }\n    }\n\n    return typeNames;\n};\n\nconst isConfiguredCollectionType = (\n    typeChecker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>,\n    configuredTypeNames: ReadonlySet<string>\n): boolean => {\n    if (setHas(configuredTypeNames, \"Array\")) {\n        const apparentType = typeChecker.getApparentType(type);\n\n        if (\n            typeChecker.isArrayType(apparentType) ||\n            typeChecker.isTupleType(apparentType) ||\n            isTypeArrayTypeOrUnionOfArrayTypes(type, typeChecker)\n        ) {\n            return true;\n        }\n    }\n\n    return containsAllTypesByName(\n        type,\n        false,\n        new Set(configuredTypeNames),\n        true\n    );\n};\n\n/**\n * Disallow calling `forEach` on configured collection types.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const typeChecker = parserServices.program.getTypeChecker();\n\n        const [{ types = defaultTypes } = {}] = context.options;\n        const configuredTypeNames = getConfiguredTypeNames(types);\n\n        return {\n            \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='forEach']\":\n                (callExpression: Readonly<es.CallExpression>) => {\n                    const { callee } = callExpression;\n                    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n                        return;\n                    }\n\n                    const objectType = getConstrainedTypeAtLocation(\n                        parserServices,\n                        callee.object\n                    );\n                    if (\n                        !isConfiguredCollectionType(\n                            typeChecker,\n                            objectType,\n                            configuredTypeNames\n                        )\n                    ) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"forbidden\",\n                        node: callee.property,\n                    });\n                },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow calling forEach on configured collection types.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-foreach\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Calling `forEach` is forbidden for this type.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for collection type names that are not allowed to use forEach.\",\n                properties: {\n                    types: {\n                        description:\n                            \"Type names to disallow forEach on (for example Array, Map, NodeList, Set).\",\n                        items: {\n                            type: \"string\",\n                        },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-foreach\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayLast } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\n/**\n * Returns true if the given node is a `BlockStatement` or a `Program` \u2014 i.e., a\n * node that has a `body` array of `Statement` nodes.\n */\nconst isStatementList = (\n    node: Readonly<es.Node>\n): node is es.BlockStatement | es.Program =>\n    node.type === AST_NODE_TYPES.BlockStatement ||\n    node.type === AST_NODE_TYPES.Program;\n\nconst getLineStartIndex = (sourceText: string, index: number): number =>\n    sourceText.lastIndexOf(\"\\n\", index - 1) + 1;\n\nconst getSafeFixRangeStart = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.FunctionDeclaration>\n): number => {\n    const declarationStart = arrayFirst(node.range);\n    const tokenBeforeDeclaration = sourceCode.getTokenBefore(node);\n    const tokenBeforeEnd =\n        tokenBeforeDeclaration === null\n            ? 0\n            : arrayLast(tokenBeforeDeclaration.range);\n\n    const commentsBeforeDeclaration = sourceCode\n        .getCommentsBefore(node)\n        .filter(\n            (comment) =>\n                arrayFirst(comment.range) >= tokenBeforeEnd &&\n                arrayLast(comment.range) <= declarationStart\n        );\n\n    const firstLeadingComment = arrayFirst(commentsBeforeDeclaration);\n    const firstMovableNodeStart =\n        firstLeadingComment === undefined\n            ? declarationStart\n            : arrayFirst(firstLeadingComment.range);\n\n    return getLineStartIndex(sourceCode.text, firstMovableNodeStart);\n};\n\nconst getSafeFixRangeEnd = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.FunctionDeclaration>\n): number => {\n    const declarationEnd = arrayLast(node.range);\n    const tokenAfterDeclaration = sourceCode.getTokenAfter(node);\n\n    if (tokenAfterDeclaration === null) {\n        return declarationEnd;\n    }\n\n    return getLineStartIndex(\n        sourceCode.text,\n        arrayFirst(tokenAfterDeclaration.range)\n    );\n};\n\n/**\n * Disallow function declarations that appear after a `return` statement in the\n * same block scope.\n *\n * JavaScript hoists function declarations to the top of their enclosing scope,\n * so placing a function declaration after a `return` works at runtime. However,\n * it hurts readability and confuses readers who are not aware of hoisting.\n *\n * Only `FunctionDeclaration` nodes are targeted. Arrow-function expressions,\n * function expressions assigned to variables, and any code that is genuinely\n * unreachable are not in scope for this rule \u2014 `no-unreachable` already covers\n * that case.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ReturnStatement(node: Readonly<es.ReturnStatement>): void {\n            const parent = node.parent;\n\n            // Only check return statements that live directly inside a block\n            // (`BlockStatement`) or at the top level of a script/module\n            // (`Program`). Return statements inside a `SwitchCase` consequent\n            // do not have a traditional `body` array, so skip them.\n            if (!isStatementList(parent)) {\n                return;\n            }\n\n            const siblings = parent.body;\n            const returnIndex = siblings.indexOf(node);\n\n            // Scan every statement that follows this return in the same block.\n            for (let i = returnIndex + 1; i < siblings.length; i++) {\n                const sibling = siblings[i];\n\n                if (sibling?.type !== AST_NODE_TYPES.FunctionDeclaration) {\n                    continue;\n                }\n\n                // Capture in closure for the fix function.\n                const functionDeclaration = sibling;\n                const returnStatement = node;\n\n                context.report({\n                    data: {\n                        name: functionDeclaration.id.name,\n                    },\n                    fix(fixer) {\n                        const sourceCode = context.sourceCode;\n\n                        // Text of the function declaration to move.\n                        const declarationEnd = arrayLast(\n                            functionDeclaration.range\n                        );\n                        const fixRangeStart = getSafeFixRangeStart(\n                            sourceCode,\n                            functionDeclaration\n                        );\n                        const fixRangeEnd = getSafeFixRangeEnd(\n                            sourceCode,\n                            functionDeclaration\n                        );\n                        const functionAndLeadingCommentsText =\n                            sourceCode.text.slice(\n                                fixRangeStart,\n                                declarationEnd\n                            );\n\n                        if (\n                            functionAndLeadingCommentsText.trim().length === 0\n                        ) {\n                            return null;\n                        }\n\n                        // We want to insert before the return statement.\n                        // Determine the correct indentation by looking at the\n                        // token that starts the return statement.\n                        const returnToken =\n                            sourceCode.getFirstToken(returnStatement);\n                        if (returnToken === null) {\n                            return null;\n                        }\n                        const indentationEnd = arrayFirst(returnToken.range);\n                        const returnLineStart = getLineStartIndex(\n                            sourceCode.text,\n                            indentationEnd\n                        );\n\n                        return [\n                            fixer.insertTextBeforeRange(\n                                [returnLineStart, returnLineStart],\n                                `${functionAndLeadingCommentsText}\\n`\n                            ),\n                            fixer.removeRange([fixRangeStart, fixRangeEnd]),\n                        ];\n                    },\n                    messageId: \"forbidden\",\n                    node: functionDeclaration,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow function declarations after a return statement.\",\n            frozen: false,\n            recommended: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-function-declare-after-return\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Function declaration '{{name}}' should be moved before the return statement for readability.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-function-declare-after-return\",\n});\n\nexport default rule;\n", "import {\n    getConstrainedTypeAtLocation,\n    isPromiseLike,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n    type TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds =\n    | \"explicitAny\"\n    | \"implicitAny\"\n    | \"narrowed\"\n    | \"suggestExplicitUnknown\";\n\ntype Options = readonly [RuleOptions?];\n\ntype RuleOptions = Readonly<{\n    readonly allowExplicitAny?: boolean;\n}>;\n\ntype TypedProgram = NonNullable<\n    ReturnType<typeof ESLintUtils.getParserServices>[\"program\"]\n>;\n\nconst defaultOptions: Options = [{}];\n\nconst isPromiseRejectionCall = (\n    callExpression: Readonly<es.CallExpression>,\n    parserServices: Readonly<\n        Parameters<typeof getConstrainedTypeAtLocation>[0]\n    >,\n    program: TypedProgram\n): boolean => {\n    const { callee } = callExpression;\n    if (\n        callee.type !== AST_NODE_TYPES.MemberExpression ||\n        callee.object.type === AST_NODE_TYPES.Super\n    ) {\n        return false;\n    }\n\n    const objectType = getConstrainedTypeAtLocation(\n        parserServices,\n        callee.object\n    );\n\n    return isPromiseLike(program, objectType);\n};\n\nconst isParenthesized = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.Node>\n): boolean => {\n    const tokenBefore = sourceCode.getTokenBefore(node);\n    const tokenAfter = sourceCode.getTokenAfter(node);\n    if (tokenBefore === null || tokenAfter === null) {\n        return false;\n    }\n\n    return (\n        tokenBefore.value === \"(\" &&\n        tokenBefore.range[1] <= arrayFirst(node.range) &&\n        tokenAfter.value === \")\" &&\n        arrayFirst(tokenAfter.range) >= node.range[1]\n    );\n};\n\nconst replaceWithUnknownFix = (\n    fixer: TSESLint.RuleFixer,\n    typeAnnotation: Readonly<es.TSTypeAnnotation>\n): TSESLint.RuleFix => fixer.replaceText(typeAnnotation, \": unknown\");\n\nconst annotateImplicitParamFixes = (\n    fixer: TSESLint.RuleFixer,\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    parameter: Readonly<es.Identifier>\n): readonly TSESLint.RuleFix[] => {\n    if (isParenthesized(sourceCode, parameter)) {\n        return [fixer.insertTextAfter(parameter, \": unknown\")];\n    }\n\n    return [\n        fixer.insertTextBefore(parameter, \"(\"),\n        fixer.insertTextAfter(parameter, \": unknown)\"),\n    ];\n};\n\n/**\n * Require explicit `unknown` (or optionally `any`) for Promise rejection\n * callbacks.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const sourceCode = context.sourceCode;\n        const [{ allowExplicitAny = false } = {}] = context.options;\n\n        const checkRejectionCallback = (\n            callExpression: Readonly<es.CallExpression>,\n            callback: Readonly<es.CallExpressionArgument>\n        ): void => {\n            if (\n                callback.type !== AST_NODE_TYPES.ArrowFunctionExpression &&\n                callback.type !== AST_NODE_TYPES.FunctionExpression\n            ) {\n                return;\n            }\n\n            const [parameter] = callback.params;\n            if (parameter?.type !== AST_NODE_TYPES.Identifier) {\n                return;\n            }\n\n            if (\n                !isPromiseRejectionCall(\n                    callExpression,\n                    parserServices,\n                    parserServices.program\n                )\n            ) {\n                return;\n            }\n\n            if (parameter.typeAnnotation === undefined) {\n                context.report({\n                    fix: (fixer) =>\n                        annotateImplicitParamFixes(\n                            fixer,\n                            sourceCode,\n                            parameter\n                        ),\n                    messageId: \"implicitAny\",\n                    node: parameter,\n                    suggest: [\n                        {\n                            fix: (fixer) =>\n                                annotateImplicitParamFixes(\n                                    fixer,\n                                    sourceCode,\n                                    parameter\n                                ),\n                            messageId: \"suggestExplicitUnknown\",\n                        },\n                    ],\n                });\n                return;\n            }\n\n            const { typeAnnotation } = parameter;\n            const annotationType = typeAnnotation.typeAnnotation.type;\n            if (annotationType === AST_NODE_TYPES.TSUnknownKeyword) {\n                return;\n            }\n\n            if (annotationType === AST_NODE_TYPES.TSAnyKeyword) {\n                if (allowExplicitAny) {\n                    return;\n                }\n\n                context.report({\n                    fix: (fixer) =>\n                        replaceWithUnknownFix(fixer, typeAnnotation),\n                    messageId: \"explicitAny\",\n                    node: parameter,\n                    suggest: [\n                        {\n                            fix: (fixer) =>\n                                replaceWithUnknownFix(fixer, typeAnnotation),\n                            messageId: \"suggestExplicitUnknown\",\n                        },\n                    ],\n                });\n                return;\n            }\n\n            context.report({\n                messageId: \"narrowed\",\n                node: parameter,\n                suggest: [\n                    {\n                        fix: (fixer) =>\n                            replaceWithUnknownFix(fixer, typeAnnotation),\n                        messageId: \"suggestExplicitUnknown\",\n                    },\n                ],\n            });\n        };\n\n        return {\n            \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='catch']\":\n                (callExpression: Readonly<es.CallExpression>) => {\n                    const [callback] = callExpression.arguments;\n                    if (callback !== undefined) {\n                        checkRejectionCallback(callExpression, callback);\n                    }\n                },\n            \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='then']\":\n                (callExpression: Readonly<es.CallExpression>) => {\n                    const callback = callExpression.arguments[1];\n                    if (callback !== undefined) {\n                        checkRejectionCallback(callExpression, callback);\n                    }\n                },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require explicit unknown for Promise rejection callback parameters.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            suggestion: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-implicit-any-catch\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            explicitAny: \"Explicit `any` in Promise rejection callback.\",\n            implicitAny: \"Implicit `any` in Promise rejection callback.\",\n            narrowed:\n                \"Error type in Promise rejection callback must be `unknown` or `any`.\",\n            suggestExplicitUnknown:\n                \"Use `unknown` to force safe, explicit narrowing before access.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for Promise rejection callback annotation enforcement.\",\n                properties: {\n                    allowExplicitAny: {\n                        description:\n                            \"Whether an explicit `any` annotation is allowed for rejection callback parameters.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"no-implicit-any-catch\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/use-unknown-in-catch-callback-variable rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"use-unknown-in-catch-callback-variable\",\n                url: \"https://typescript-eslint.io/rules/use-unknown-in-catch-callback-variable/\",\n            },\n        }),\n    ],\n    ruleId: \"no-implicit-any-catch\",\n});\n\nexport default deprecatedRule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow importing from \".\".\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\".\"],\n        description: \"disallow imports from the current directory root (.).\",\n        name: \"no-index-import\",\n    });\n\nexport default rule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow importing nested internal module paths.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\n            \"./*/**\",\n            \"[^@]*/**\",\n            \"@?*/*/**\",\n        ],\n        description: \"disallow importing internal modules.\",\n        name: \"no-internal-modules\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\nimport { isDefined, isEmpty } from \"ts-extras\";\n\nimport {\n    compileIgnorePatterns,\n    type IgnoreMode,\n    type IgnorePatternBuckets,\n} from \"../_internal/ignore-patterns.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    getIdentifierSymbol,\n    getJsDocTagComments,\n    hasAnyPatternMatch,\n    isDeclarationIdentifier,\n    isImportOrExportSpecifier,\n} from \"../_internal/symbol-usage.js\";\n\ntype MessageIds =\n    | \"forbidden\"\n    | \"forbiddenWithComment\"\n    | \"invalidIgnorePattern\";\n\ntype Options = readonly [\n    {\n        readonly ignored?: Readonly<Record<string, IgnoreMode>>;\n    }?,\n];\n\nconst defaultOptions: Options = [{}];\n\n/**\n * Disallow usages of symbols tagged with `@internal`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const [{ ignored = {} } = {}] = context.options;\n        const parserServices = ESLintUtils.getParserServices(context);\n        const typeChecker = parserServices.program.getTypeChecker();\n        const compiledIgnorePatterns = compileIgnorePatterns(ignored);\n        const ignorePatterns: IgnorePatternBuckets =\n            compiledIgnorePatterns.patterns;\n\n        return {\n            Identifier: (node: Readonly<es.Identifier>) => {\n                if (isImportOrExportSpecifier(node.parent)) {\n                    return;\n                }\n\n                if (isDeclarationIdentifier(node)) {\n                    return;\n                }\n\n                const symbol = getIdentifierSymbol(parserServices, node);\n                if (!isDefined(symbol)) {\n                    return;\n                }\n\n                const symbolName = symbol.getName();\n                if (hasAnyPatternMatch(symbolName, ignorePatterns.name)) {\n                    return;\n                }\n\n                const fullyQualifiedName =\n                    typeChecker.getFullyQualifiedName(symbol);\n                if (\n                    hasAnyPatternMatch(fullyQualifiedName, ignorePatterns.path)\n                ) {\n                    return;\n                }\n\n                const internalComments = getJsDocTagComments(\n                    symbol,\n                    typeChecker,\n                    \"internal\"\n                );\n                if (isEmpty(internalComments)) {\n                    return;\n                }\n\n                for (const comment of internalComments) {\n                    if (!isDefined(comment)) {\n                        context.report({\n                            data: { name: symbolName },\n                            messageId: \"forbidden\",\n                            node,\n                        });\n                        continue;\n                    }\n\n                    context.report({\n                        data: {\n                            comment,\n                            name: symbolName,\n                        },\n                        messageId: \"forbiddenWithComment\",\n                        node,\n                    });\n                }\n            },\n            Program: (node: Readonly<es.Program>) => {\n                for (const invalidPattern of compiledIgnorePatterns.invalidPatterns) {\n                    context.report({\n                        data: {\n                            pattern: invalidPattern,\n                        },\n                        messageId: \"invalidIgnorePattern\",\n                        node,\n                    });\n                }\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow usage of APIs tagged with @internal.\",\n            frozen: false,\n            recommended: true,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-internal\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: '\"{{name}}\" is internal.',\n            forbiddenWithComment: '\"{{name}}\" is internal: {{comment}}',\n            invalidIgnorePattern:\n                \"Invalid ignored regex pattern '{{pattern}}'. Update this rule option to a valid regular expression.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Options for ignoring some internal symbols by name or declaration path pattern.\",\n                properties: {\n                    ignored: {\n                        additionalProperties: {\n                            description:\n                                'Match behavior for the pattern key. Use \"name\" to match symbol names or \"path\" to match fully-qualified declaration paths.',\n                            enum: [\"name\", \"path\"],\n                            type: \"string\",\n                        },\n                        description: \"Map of regex patterns to ignore mode.\",\n                        type: \"object\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-internal\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    type TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, isDefined } from \"ts-extras\";\n\nimport { getHtmlNestingViolation } from \"../_internal/html-jsx-nesting.js\";\nimport {\n    getSimpleJsxElementName,\n    isFunctionNode,\n    isIntrinsicJsxName,\n} from \"../_internal/jsx-react-analysis.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds =\n    | \"invalidAncestor\"\n    | \"invalidParent\"\n    | \"voidParent\";\n\ntype Options = readonly [RuleOption?];\n\ntype RuleOption = Readonly<{\n    readonly checkVoidParents?: boolean;\n}>;\n\nconst defaultOptions: Options = [{ checkVoidParents: false }];\n\nconst isTransparentArrayRenderCallback = (\n    node: Readonly<\n        | es.ArrowFunctionExpression\n        | es.FunctionDeclaration\n        | es.FunctionExpression\n    >\n): boolean => {\n    if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n        return false;\n    }\n\n    const parent = node.parent;\n\n    if (\n        parent.type !== AST_NODE_TYPES.CallExpression ||\n        arrayAt(parent.arguments, 0) !== node ||\n        parent.callee.type !== AST_NODE_TYPES.MemberExpression\n    ) {\n        return false;\n    }\n\n    const property = parent.callee.property;\n    const methodName =\n        !parent.callee.computed && property.type === AST_NODE_TYPES.Identifier\n            ? property.name\n            : parent.callee.computed &&\n                property.type === AST_NODE_TYPES.Literal &&\n                typeof property.value === \"string\"\n              ? property.value\n              : undefined;\n\n    return methodName === \"flatMap\" || methodName === \"map\";\n};\n\nconst isReturnedFromCallback = (\n    ancestors: readonly Readonly<es.Node>[],\n    functionIndex: number,\n    callback: Readonly<\n        | es.ArrowFunctionExpression\n        | es.FunctionDeclaration\n        | es.FunctionExpression\n    >\n): boolean => {\n    if (callback.type === AST_NODE_TYPES.FunctionDeclaration) {\n        return false;\n    }\n\n    if (\n        callback.type === AST_NODE_TYPES.ArrowFunctionExpression &&\n        callback.body.type !== AST_NODE_TYPES.BlockStatement\n    ) {\n        return true;\n    }\n\n    for (let index = functionIndex + 1; index < ancestors.length; index += 1) {\n        if (ancestors[index]?.type === AST_NODE_TYPES.ReturnStatement) {\n            return true;\n        }\n    }\n\n    return false;\n};\n\ntype AncestorTraversal =\n    | Readonly<{ readonly kind: \"collect\"; readonly name: string }>\n    | Readonly<{\n          readonly kind:\n              | \"clear\"\n              | \"skip\"\n              | \"stop\";\n      }>;\n\nconst getAncestorTraversal = (\n    ancestors: readonly Readonly<es.Node>[],\n    index: number,\n    ancestor: Readonly<es.Node>\n): AncestorTraversal => {\n    if (\n        ancestor.type === AST_NODE_TYPES.JSXAttribute ||\n        ancestor.type === AST_NODE_TYPES.JSXSpreadAttribute\n    ) {\n        return { kind: \"clear\" };\n    }\n\n    if (isFunctionNode(ancestor)) {\n        return isTransparentArrayRenderCallback(ancestor) &&\n            isReturnedFromCallback(ancestors, index, ancestor)\n            ? { kind: \"skip\" }\n            : { kind: \"stop\" };\n    }\n\n    if (\n        ancestor.type === AST_NODE_TYPES.ClassDeclaration ||\n        ancestor.type === AST_NODE_TYPES.ClassExpression\n    ) {\n        return { kind: \"stop\" };\n    }\n\n    if (ancestor.type !== AST_NODE_TYPES.JSXElement) {\n        return { kind: \"skip\" };\n    }\n\n    const ancestorName = getSimpleJsxElementName(ancestor.openingElement);\n\n    return isDefined(ancestorName) && isIntrinsicJsxName(ancestorName)\n        ? { kind: \"collect\", name: ancestorName }\n        : { kind: \"stop\" };\n};\n\nconst getIntrinsicAncestorNames = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    node: Readonly<es.JSXElement>\n): readonly string[] => {\n    const ancestors = context.sourceCode.getAncestors(node);\n    const intrinsicAncestorNames: string[] = [];\n\n    for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n        const ancestor = ancestors[index];\n\n        if (isDefined(ancestor)) {\n            const traversal = getAncestorTraversal(ancestors, index, ancestor);\n\n            if (traversal.kind === \"clear\") {\n                return [];\n            }\n\n            if (traversal.kind === \"stop\") {\n                break;\n            }\n\n            if (traversal.kind === \"collect\") {\n                intrinsicAncestorNames.push(traversal.name);\n            }\n        }\n    }\n\n    return intrinsicAncestorNames;\n};\n\n/** Validate deterministic HTML parent and ancestor relationships in JSX. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [configuredOption]) => ({\n        JSXElement: (node: Readonly<es.JSXElement>): void => {\n            const childName = getSimpleJsxElementName(node.openingElement);\n\n            if (!isDefined(childName) || !isIntrinsicJsxName(childName)) {\n                return;\n            }\n\n            const ancestorNames = getIntrinsicAncestorNames(context, node);\n            const violation = getHtmlNestingViolation(\n                childName,\n                ancestorNames,\n                configuredOption?.checkVoidParents ?? false\n            );\n\n            if (!isDefined(violation)) {\n                return;\n            }\n\n            const relatedName = violation.relatedName ?? \"unknown\";\n            const messageId =\n                violation.kind === \"ancestor\"\n                    ? \"invalidAncestor\"\n                    : violation.kind === \"void-parent\"\n                      ? \"voidParent\"\n                      : \"invalidParent\";\n\n            context.report({\n                data: { childName, relatedName },\n                messageId,\n                node: node.openingElement,\n            });\n        },\n    }),\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ checkVoidParents: false }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow deterministic invalid HTML parent and ancestor relationships in JSX.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-invalid-jsx-nesting\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            invalidAncestor:\n                \"Do not render <{{childName}}> inside a <{{relatedName}}> ancestor; the HTML parser can produce a different DOM tree.\",\n            invalidParent:\n                \"<{{childName}}> is not valid directly inside <{{relatedName}}>; use the required HTML container element.\",\n            voidParent:\n                \"Void element <{{relatedName}}> cannot contain <{{childName}}>.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for optional void-element parent validation.\",\n                properties: {\n                    checkVoidParents: {\n                        description:\n                            \"Report children written inside void JSX elements.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-invalid-jsx-nesting\",\n});\n\nexport default rule;\n", "import { arrayAt, isDefined, setHas } from \"ts-extras\";\n\n/** A deterministic invalid HTML relationship found in a JSX tree. */\ntype NestingViolation = Readonly<{\n    readonly kind:\n        | \"ancestor\"\n        | \"parent\"\n        | \"void-parent\";\n    readonly relatedName?: string;\n}>;\n\nconst headingNames: ReadonlySet<string> = new Set([\n    \"h1\",\n    \"h2\",\n    \"h3\",\n    \"h4\",\n    \"h5\",\n    \"h6\",\n]);\n\nconst pClosingDescendants: ReadonlySet<string> = new Set([\n    \"address\",\n    \"article\",\n    \"aside\",\n    \"blockquote\",\n    \"center\",\n    \"details\",\n    \"dialog\",\n    \"dir\",\n    \"div\",\n    \"dl\",\n    \"fieldset\",\n    \"figcaption\",\n    \"figure\",\n    \"footer\",\n    \"form\",\n    \"h1\",\n    \"h2\",\n    \"h3\",\n    \"h4\",\n    \"h5\",\n    \"h6\",\n    \"header\",\n    \"hgroup\",\n    \"hr\",\n    \"listing\",\n    \"main\",\n    \"menu\",\n    \"nav\",\n    \"ol\",\n    \"p\",\n    \"pre\",\n    \"search\",\n    \"section\",\n    \"summary\",\n    \"table\",\n    \"ul\",\n    \"xmp\",\n]);\n\nconst voidElementNames: ReadonlySet<string> = new Set([\n    \"area\",\n    \"base\",\n    \"br\",\n    \"col\",\n    \"embed\",\n    \"hr\",\n    \"img\",\n    \"input\",\n    \"link\",\n    \"meta\",\n    \"param\",\n    \"source\",\n    \"track\",\n    \"wbr\",\n]);\n\nconst requiredParentsByChild: Readonly<Record<string, ReadonlySet<string>>> = {\n    body: new Set([\"html\"]),\n    caption: new Set([\"table\"]),\n    col: new Set([\"colgroup\"]),\n    colgroup: new Set([\"table\"]),\n    frame: new Set([\"frameset\"]),\n    frameset: new Set([\"html\"]),\n    head: new Set([\"html\"]),\n    html: new Set(),\n    tbody: new Set([\"table\"]),\n    td: new Set([\"tr\"]),\n    tfoot: new Set([\"table\"]),\n    th: new Set([\"tr\"]),\n    thead: new Set([\"table\"]),\n    tr: new Set([\n        \"tbody\",\n        \"tfoot\",\n        \"thead\",\n    ]),\n};\n\nconst allowedChildrenByParent: Readonly<Record<string, ReadonlySet<string>>> = {\n    colgroup: new Set([\"col\", \"template\"]),\n    frameset: new Set([\"frame\"]),\n    head: new Set([\n        \"base\",\n        \"basefont\",\n        \"bgsound\",\n        \"link\",\n        \"meta\",\n        \"noframes\",\n        \"noscript\",\n        \"script\",\n        \"style\",\n        \"template\",\n        \"title\",\n    ]),\n    html: new Set([\"body\", \"head\"]),\n    optgroup: new Set([\"option\"]),\n    option: new Set(),\n    select: new Set([\n        \"hr\",\n        \"optgroup\",\n        \"option\",\n        \"script\",\n        \"template\",\n    ]),\n    table: new Set([\n        \"caption\",\n        \"colgroup\",\n        \"script\",\n        \"style\",\n        \"tbody\",\n        \"template\",\n        \"tfoot\",\n        \"thead\",\n    ]),\n    tbody: new Set([\n        \"script\",\n        \"template\",\n        \"tr\",\n    ]),\n    tfoot: new Set([\n        \"script\",\n        \"template\",\n        \"tr\",\n    ]),\n    thead: new Set([\n        \"script\",\n        \"template\",\n        \"tr\",\n    ]),\n    tr: new Set([\n        \"script\",\n        \"td\",\n        \"template\",\n        \"th\",\n    ]),\n};\n\nconst impliedEndTagNames: ReadonlySet<string> = new Set([\n    \"dd\",\n    \"dt\",\n    \"li\",\n    \"optgroup\",\n    \"option\",\n    \"p\",\n    \"rp\",\n    \"rt\",\n]);\n\nconst inScopeBoundaryNames: ReadonlySet<string> = new Set([\n    \"applet\",\n    \"caption\",\n    \"desc\",\n    \"foreignObject\",\n    \"html\",\n    \"marquee\",\n    \"object\",\n    \"table\",\n    \"td\",\n    \"template\",\n    \"th\",\n    \"title\",\n]);\n\nconst listItemScopeBoundaryNames: ReadonlySet<string> = new Set([\n    \"applet\",\n    \"area\",\n    \"article\",\n    \"aside\",\n    \"base\",\n    \"basefont\",\n    \"bgsound\",\n    \"blockquote\",\n    \"body\",\n    \"br\",\n    \"button\",\n    \"caption\",\n    \"center\",\n    \"col\",\n    \"colgroup\",\n    \"dd\",\n    \"details\",\n    \"dir\",\n    \"dl\",\n    \"dt\",\n    \"embed\",\n    \"fieldset\",\n    \"figcaption\",\n    \"figure\",\n    \"footer\",\n    \"form\",\n    \"frame\",\n    \"frameset\",\n    \"h1\",\n    \"h2\",\n    \"h3\",\n    \"h4\",\n    \"h5\",\n    \"h6\",\n    \"head\",\n    \"header\",\n    \"hgroup\",\n    \"hr\",\n    \"html\",\n    \"iframe\",\n    \"img\",\n    \"input\",\n    \"li\",\n    \"link\",\n    \"listing\",\n    \"main\",\n    \"marquee\",\n    \"menu\",\n    \"meta\",\n    \"nav\",\n    \"noembed\",\n    \"noframes\",\n    \"noscript\",\n    \"object\",\n    \"ol\",\n    \"param\",\n    \"plaintext\",\n    \"pre\",\n    \"script\",\n    \"section\",\n    \"select\",\n    \"source\",\n    \"style\",\n    \"summary\",\n    \"table\",\n    \"tbody\",\n    \"td\",\n    \"template\",\n    \"textarea\",\n    \"tfoot\",\n    \"th\",\n    \"thead\",\n    \"title\",\n    \"tr\",\n    \"track\",\n    \"ul\",\n    \"wbr\",\n    \"xmp\",\n]);\n\nconst buttonScopeBoundaryNames: ReadonlySet<string> = new Set([\n    ...inScopeBoundaryNames,\n    \"button\",\n]);\nconst paragraphAncestorNames: ReadonlySet<string> = new Set([\"p\"]);\nconst formAncestorNames: ReadonlySet<string> = new Set([\"form\"]);\nconst listItemAncestorNames: ReadonlySet<string> = new Set([\"li\"]);\nconst descriptionListItemAncestorNames: ReadonlySet<string> = new Set([\n    \"dd\",\n    \"dt\",\n]);\nconst sameTagScopedAncestors: Readonly<Record<string, ReadonlySet<string>>> = {\n    a: new Set([\"a\"]),\n    button: new Set([\"button\"]),\n    nobr: new Set([\"nobr\"]),\n};\n\nconst containsName = (names: ReadonlySet<string>, name: string): boolean =>\n    setHas(names, name);\n\nconst findAncestor = (\n    ancestorNames: readonly string[],\n    candidates: ReadonlySet<string>\n): string | undefined =>\n    ancestorNames.find((ancestorName) =>\n        containsName(candidates, ancestorName)\n    );\n\nconst findScopedAncestor = (\n    ancestorNames: readonly string[],\n    candidates: ReadonlySet<string>,\n    boundaries: ReadonlySet<string>\n): string | undefined => {\n    for (const ancestorName of ancestorNames) {\n        if (containsName(candidates, ancestorName)) {\n            return ancestorName;\n        }\n\n        if (containsName(boundaries, ancestorName)) {\n            return undefined;\n        }\n    }\n\n    return undefined;\n};\n\nconst getDirectRelationshipViolation = (\n    childName: string,\n    ancestorNames: readonly string[],\n    checkVoidParents: boolean\n): NestingViolation | undefined => {\n    const parentName = arrayAt(ancestorNames, 0);\n\n    if (\n        checkVoidParents &&\n        isDefined(parentName) &&\n        containsName(voidElementNames, parentName)\n    ) {\n        return {\n            kind: \"void-parent\",\n            relatedName: parentName,\n        };\n    }\n\n    if (!isDefined(parentName)) {\n        return undefined;\n    }\n\n    const allowedChildren = allowedChildrenByParent[parentName];\n\n    if (\n        isDefined(allowedChildren) &&\n        !containsName(allowedChildren, childName)\n    ) {\n        return {\n            kind: \"parent\",\n            relatedName: parentName,\n        };\n    }\n\n    const requiredParents = requiredParentsByChild[childName];\n\n    if (\n        isDefined(requiredParents) &&\n        !containsName(requiredParents, parentName)\n    ) {\n        return {\n            kind: \"parent\",\n            relatedName: parentName,\n        };\n    }\n\n    if (\n        containsName(headingNames, childName) &&\n        containsName(headingNames, parentName)\n    ) {\n        return {\n            kind: \"parent\",\n            relatedName: parentName,\n        };\n    }\n\n    return (childName === \"rp\" || childName === \"rt\") &&\n        containsName(impliedEndTagNames, parentName)\n        ? {\n              kind: \"parent\",\n              relatedName: parentName,\n          }\n        : undefined;\n};\n\nconst getAncestorRelationshipViolation = (\n    childName: string,\n    ancestorNames: readonly string[]\n): NestingViolation | undefined => {\n    if (containsName(pClosingDescendants, childName)) {\n        const paragraphAncestor = findScopedAncestor(\n            ancestorNames,\n            paragraphAncestorNames,\n            buttonScopeBoundaryNames\n        );\n\n        if (isDefined(paragraphAncestor)) {\n            return {\n                kind: \"ancestor\",\n                relatedName: paragraphAncestor,\n            };\n        }\n    }\n\n    const excludedAncestor = (() => {\n        if (childName === \"form\") {\n            return findAncestor(ancestorNames, formAncestorNames);\n        }\n\n        const sameTagAncestors = sameTagScopedAncestors[childName];\n        if (isDefined(sameTagAncestors)) {\n            return findScopedAncestor(\n                ancestorNames,\n                sameTagAncestors,\n                inScopeBoundaryNames\n            );\n        }\n\n        if (childName === \"li\") {\n            return findScopedAncestor(\n                ancestorNames,\n                listItemAncestorNames,\n                listItemScopeBoundaryNames\n            );\n        }\n\n        if (childName === \"dd\" || childName === \"dt\") {\n            return findScopedAncestor(\n                ancestorNames,\n                descriptionListItemAncestorNames,\n                listItemScopeBoundaryNames\n            );\n        }\n\n        return undefined;\n    })();\n\n    return isDefined(excludedAncestor)\n        ? {\n              kind: \"ancestor\",\n              relatedName: excludedAncestor,\n          }\n        : undefined;\n};\n\n/**\n * Validate parser-significant HTML parent and ancestor relationships.\n *\n * This intentionally focuses on relationships that are deterministic from JSX\n * alone. Attribute-dependent content models and custom-component output are\n * outside its scope.\n */\nexport const getHtmlNestingViolation = (\n    childName: string,\n    ancestorNames: readonly string[],\n    checkVoidParents = false\n): NestingViolation | undefined =>\n    getDirectRelationshipViolation(\n        childName,\n        ancestorNames,\n        checkVoidParents\n    ) ?? getAncestorRelationshipViolation(childName, ancestorNames);\n\nexport type { NestingViolation };\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst languageMixPattern = String.raw`/\\w[\\d_]*[^\\u0000-\\xff]|[^\\u0000-\\xff][\\d_]*\\w/u`;\nconst disallowedSelector = arrayJoin(\n    [\n        `Literal[value=${languageMixPattern}]`,\n        `TemplateElement[value.raw=${languageMixPattern}]`,\n    ],\n    \", \"\n);\n\n/**\n * Disallow mixing latin and non-latin letters within the same token.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow mixed-language tokens combining latin and non-latin letters.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-language-mixing\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Do not mix languages in a single token.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-language-mixing\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\nimport type { ArrayElement } from \"type-fest\";\nimport type * as ts from \"typescript\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\nimport * as tsutils from \"tsutils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"cannotInfer\" | \"canReplace\";\n\ntype Options = readonly [];\n\ninterface TypeParameterUsageAnalysis {\n    readonly appearsInMultipleParameters: boolean;\n    readonly usedInParameters: boolean;\n    readonly usedInReturnOrExtends: boolean;\n}\n\ntype VariableInfo = NonNullable<ReturnType<VariableUsageMap[\"get\"]>>;\n\ntype VariableUsageMap = ReturnType<typeof tsutils.collectVariableUsage>;\n\ntype VariableUse = ArrayElement<VariableInfo[\"uses\"]>;\n\nconst getVariableUses = (\n    usageMap: Readonly<VariableUsageMap>,\n    identifier: Readonly<ts.Identifier>\n): readonly VariableUse[] => usageMap.get(identifier)?.uses ?? [];\n\nconst toReportLocation = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    sourceFile: Readonly<ts.SourceFile>,\n    node: Readonly<ts.Node>\n): es.SourceLocation => {\n    const start = sourceCode.getLocFromIndex(node.getStart(sourceFile));\n    const end = sourceCode.getLocFromIndex(node.getEnd());\n\n    return {\n        end: {\n            column: end.column,\n            line: end.line,\n        },\n        start: {\n            column: start.column,\n            line: start.line,\n        },\n    } satisfies es.SourceLocation;\n};\n\nconst isTypeUseInsideConstraint = (\n    useLocation: Readonly<ts.Identifier>,\n    typeParameters: readonly Readonly<ts.TypeParameterDeclaration>[]\n): boolean =>\n    typeParameters.some((typeParameter) => {\n        const { constraint } = typeParameter;\n        if (!isDefined(constraint)) {\n            return false;\n        }\n\n        return (\n            useLocation.pos >= constraint.pos &&\n            useLocation.pos < constraint.end\n        );\n    });\n\nconst isConstrainedByAnotherTypeParameter = (\n    currentTypeParameter: Readonly<ts.TypeParameterDeclaration>,\n    allTypeParameters: readonly Readonly<ts.TypeParameterDeclaration>[],\n    usageMap: Readonly<VariableUsageMap>\n): boolean => {\n    const { constraint } = currentTypeParameter;\n    if (!isDefined(constraint)) {\n        return false;\n    }\n\n    return allTypeParameters.some((otherTypeParameter) => {\n        if (otherTypeParameter === currentTypeParameter) {\n            return false;\n        }\n\n        const uses = getVariableUses(usageMap, otherTypeParameter.name);\n\n        return uses.some(\n            (use) =>\n                use.location.pos >= constraint.pos &&\n                use.location.pos < constraint.end\n        );\n    });\n};\n\nconst isUseWithinParameterRange = (\n    usePosition: number,\n    signature: Readonly<ts.SignatureDeclaration>\n): boolean =>\n    usePosition > signature.parameters.pos &&\n    usePosition < signature.parameters.end;\n\nconst getTypeParameterReplacement = (\n    sourceFile: Readonly<ts.SourceFile>,\n    typeParameter: Readonly<ts.TypeParameterDeclaration>\n): string => {\n    const { constraint } = typeParameter;\n    if (!isDefined(constraint)) {\n        return \"unknown\";\n    }\n\n    return constraint.getText(sourceFile);\n};\n\nconst analyzeTypeParameterUses = (\n    uses: readonly Readonly<VariableUse>[],\n    signature: Readonly<ts.SignatureDeclaration>,\n    typeParameters: readonly Readonly<ts.TypeParameterDeclaration>[]\n): TypeParameterUsageAnalysis => {\n    let isAppearsInMultipleParameters = false;\n    let isUsedInParameters = false;\n    let isUsedInReturnOrExtends = tsutils.isFunctionWithBody(signature);\n\n    for (const use of uses) {\n        const isWithinParameterRange = isUseWithinParameterRange(\n            use.location.pos,\n            signature\n        );\n\n        if (isWithinParameterRange) {\n            if (isUsedInParameters) {\n                isAppearsInMultipleParameters = true;\n                break;\n            }\n\n            isUsedInParameters = true;\n        }\n\n        if (!isWithinParameterRange && !isUsedInReturnOrExtends) {\n            isUsedInReturnOrExtends =\n                use.location.pos > signature.parameters.end ||\n                isTypeUseInsideConstraint(use.location, typeParameters);\n        }\n    }\n\n    return {\n        appearsInMultipleParameters: isAppearsInMultipleParameters,\n        usedInParameters: isUsedInParameters,\n        usedInReturnOrExtends: isUsedInReturnOrExtends,\n    };\n};\n\n/**\n * Disallow type parameters that cannot be inferred or do not enforce\n * constraints.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        let usageMap: null | VariableUsageMap = null;\n\n        const checkTypeParameters = (\n            typeParameters: readonly Readonly<ts.TypeParameterDeclaration>[],\n            signature: Readonly<ts.SignatureDeclaration>\n        ): void => {\n            const currentUsageMap =\n                usageMap ??\n                tsutils.collectVariableUsage(signature.getSourceFile());\n            usageMap = currentUsageMap;\n\n            const sourceFile = signature.getSourceFile();\n\n            const reportTypeParameter = (\n                typeParameter: Readonly<ts.TypeParameterDeclaration>,\n                usageAnalysis: Readonly<TypeParameterUsageAnalysis>\n            ): void => {\n                if (usageAnalysis.appearsInMultipleParameters) {\n                    return;\n                }\n\n                if (!usageAnalysis.usedInParameters) {\n                    context.report({\n                        data: {\n                            name: typeParameter.name.text,\n                        },\n                        loc: toReportLocation(\n                            context.sourceCode,\n                            sourceFile,\n                            typeParameter\n                        ),\n                        messageId: \"cannotInfer\",\n                    });\n                    return;\n                }\n\n                if (\n                    usageAnalysis.usedInReturnOrExtends ||\n                    isConstrainedByAnotherTypeParameter(\n                        typeParameter,\n                        typeParameters,\n                        currentUsageMap\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    data: {\n                        name: typeParameter.name.text,\n                        replacement: getTypeParameterReplacement(\n                            sourceFile,\n                            typeParameter\n                        ),\n                    },\n                    loc: toReportLocation(\n                        context.sourceCode,\n                        sourceFile,\n                        typeParameter\n                    ),\n                    messageId: \"canReplace\",\n                });\n            };\n\n            for (const typeParameter of typeParameters) {\n                const uses = getVariableUses(\n                    currentUsageMap,\n                    typeParameter.name\n                );\n                const usageAnalysis = analyzeTypeParameterUses(\n                    uses,\n                    signature,\n                    typeParameters\n                );\n\n                reportTypeParameter(typeParameter, usageAnalysis);\n            }\n        };\n\n        const checkSignature = (node: Readonly<es.Node>): void => {\n            const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);\n            if (\n                !tsutils.isSignatureDeclaration(tsNode) ||\n                !isDefined(tsNode.typeParameters)\n            ) {\n                return;\n            }\n\n            checkTypeParameters(tsNode.typeParameters, tsNode);\n        };\n\n        return {\n            ArrowFunctionExpression: checkSignature,\n            FunctionDeclaration: checkSignature,\n            FunctionExpression: checkSignature,\n            MethodDefinition: checkSignature,\n            \"Program:exit\": () => {\n                usageMap = null;\n            },\n            TSCallSignatureDeclaration: checkSignature,\n            TSConstructorType: checkSignature,\n            TSConstructSignatureDeclaration: checkSignature,\n            TSDeclareFunction: checkSignature,\n            TSFunctionType: checkSignature,\n            TSIndexSignature: checkSignature,\n            TSMethodSignature: checkSignature,\n            TSPropertySignature: checkSignature,\n        };\n    },\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow type parameters that cannot be inferred or do not enforce constraints.\",\n            frozen: true,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-misused-generics\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            cannotInfer:\n                \"Type parameter '{{name}}' cannot be inferred from any parameter.\",\n            canReplace:\n                \"Type parameter '{{name}}' does not enforce a relation between types and can be replaced with '{{replacement}}'.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-misused-generics\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of @typescript-eslint/no-unnecessary-type-parameters.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"no-unnecessary-type-parameters\",\n                url: \"https://typescript-eslint.io/rules/no-unnecessary-type-parameters\",\n            },\n        }),\n    ],\n    ruleId: \"no-misused-generics\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelectors: readonly string[] = [\n    'IfStatement > BinaryExpression[operator=\"!==\"]',\n    'IfStatement > UnaryExpression[operator=\"!\"]',\n    ':not(LogicalExpression) > LogicalExpression[operator=\"&&\"] > BinaryExpression.left[operator=\"!==\"]',\n    ':not(LogicalExpression) > LogicalExpression[operator=\"&&\"] > UnaryExpression.left[operator=\"!\"]',\n    ':not(LogicalExpression) > LogicalExpression[operator=\"||\"] > BinaryExpression[operator=\"!==\"]',\n    ':not(LogicalExpression) > LogicalExpression[operator=\"||\"] > UnaryExpression[operator=\"!\"]',\n];\n\n/**\n * Disallow negated conditions in `if` and top-level logical expressions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [arrayJoin(disallowedSelectors, \", \")]: (\n            node: Readonly<es.Node>\n        ): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow negated conditions.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-negated-conditions\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Negated conditions are forbidden.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-negated-conditions\",\n});\n\nexport default rule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow importing Node.js built-in modules via the `node:` protocol.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\"node:*\"],\n        description: \"disallow imports from node: built-in module specifiers.\",\n        name: \"no-nodejs-modules\",\n    });\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayJoin, isDefined, setHas } from \"ts-extras\";\n\nimport { findVariable } from \"../_internal/jsx-react-analysis.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype CallPath = Readonly<{\n    readonly members: readonly MemberSegment[];\n    readonly root: Readonly<es.Identifier>;\n}>;\ntype ImportBinding = Readonly<{\n    readonly kind:\n        | \"default\"\n        | \"named\"\n        | \"namespace\";\n    readonly name?: string;\n    readonly source: string;\n}>;\n\ntype MemberSegment = Readonly<{\n    readonly member: Readonly<es.MemberExpression>;\n    readonly name: string;\n}>;\n\ntype MessageIds = \"focusedTest\" | \"forbiddenFunction\";\n\ntype Options = readonly [RuleOptions];\n\ntype RuleOptions = Readonly<{\n    readonly block?: readonly string[];\n    readonly fix?: boolean;\n    readonly focus?: readonly string[];\n    readonly functions?: readonly string[];\n}>;\n\n/* eslint-disable perfectionist/sort-arrays -- Preserve the framework matching order for recognizable defaults. */\nconst defaultBlocks = [\n    \"describe\",\n    \"it\",\n    \"context\",\n    \"test\",\n    \"bench\",\n    \"suite\",\n    \"QUnit\",\n    \"tape\",\n    \"fixture\",\n    \"serial\",\n    \"Feature\",\n    \"Scenario\",\n    \"Given\",\n    \"And\",\n    \"When\",\n    \"Then\",\n] as const;\n/* eslint-enable perfectionist/sort-arrays -- Re-enable after the intentional compatibility order. */\n\nconst defaultFocusedFunctions = [\"fdescribe\", \"fit\"] as const;\n\nconst defaultOptions = [\n    {\n        block: defaultBlocks,\n        fix: false,\n        focus: [\"only\"],\n        functions: defaultFocusedFunctions,\n    },\n] as const satisfies Options;\n\nconst supportedFrameworkSources: ReadonlySet<string> = new Set([\n    \"@jest/globals\",\n    \"@playwright/test\",\n    \"ava\",\n    \"bun:test\",\n    \"mocha\",\n    \"node:test\",\n    \"qunit\",\n    \"tape\",\n    \"vitest\",\n]);\n\nconst defaultImportRoots: ReadonlyMap<string, string> = new Map([\n    [\"ava\", \"test\"],\n    [\"node:test\", \"test\"],\n    [\"qunit\", \"QUnit\"],\n    [\"tape\", \"tape\"],\n]);\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.ChainExpression ||\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst getStaticMemberName = (\n    memberExpression: Readonly<es.MemberExpression>\n): string | undefined => {\n    if (\n        !memberExpression.computed &&\n        memberExpression.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return memberExpression.property.name;\n    }\n\n    return memberExpression.computed &&\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n        ? memberExpression.property.value\n        : undefined;\n};\n\nconst getCallPath = (\n    rawExpression: Readonly<es.Expression>\n): CallPath | undefined => {\n    const expression = unwrapExpression(rawExpression);\n\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return { members: [], root: expression };\n    }\n\n    if (expression.type === AST_NODE_TYPES.CallExpression) {\n        return getCallPath(expression.callee);\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return undefined;\n    }\n\n    const propertyName = getStaticMemberName(expression);\n    const objectPath = getCallPath(expression.object);\n\n    return !isDefined(propertyName) || !isDefined(objectPath)\n        ? undefined\n        : {\n              members: [\n                  ...objectPath.members,\n                  { member: expression, name: propertyName },\n              ],\n              root: objectPath.root,\n          };\n};\n\nconst getImportedName = (\n    specifier: Readonly<es.ImportSpecifier>\n): string | undefined =>\n    specifier.imported.type === AST_NODE_TYPES.Identifier\n        ? specifier.imported.name\n        : typeof specifier.imported.value === \"string\"\n          ? specifier.imported.value\n          : undefined;\n\nconst getImportBinding = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): ImportBinding | undefined => {\n    const variable = findVariable(sourceCode, identifier);\n    const definition = arrayFirst(variable?.defs ?? []);\n\n    if (\n        variable?.defs.length !== 1 ||\n        definition?.type !== TSESLint.Scope.DefinitionType.ImportBinding ||\n        definition.parent.type !== AST_NODE_TYPES.ImportDeclaration ||\n        definition.parent.importKind === \"type\" ||\n        typeof definition.parent.source.value !== \"string\" ||\n        !setHas(supportedFrameworkSources, definition.parent.source.value) ||\n        definition.node.type === AST_NODE_TYPES.TSImportEqualsDeclaration\n    ) {\n        return undefined;\n    }\n\n    const source = definition.parent.source.value;\n\n    if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n        const name = getImportedName(definition.node);\n\n        return isDefined(name) ? { kind: \"named\", name, source } : undefined;\n    }\n\n    return {\n        kind:\n            definition.node.type === AST_NODE_TYPES.ImportDefaultSpecifier\n                ? \"default\"\n                : \"namespace\",\n        source,\n    };\n};\n\nconst isUnshadowedGlobal = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const variable = findVariable(sourceCode, identifier);\n\n    return !isDefined(variable) || variable.defs.length === 0;\n};\n\nconst resolveCanonicalCallPath = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    callPath: Readonly<CallPath>,\n    trustConfiguredBlocks: boolean\n): readonly string[] | undefined => {\n    const rawParts = [\n        callPath.root.name,\n        ...callPath.members.map(({ name }) => name),\n    ];\n\n    if (\n        trustConfiguredBlocks ||\n        isUnshadowedGlobal(sourceCode, callPath.root)\n    ) {\n        return rawParts;\n    }\n\n    const binding = getImportBinding(sourceCode, callPath.root);\n\n    if (!isDefined(binding)) {\n        return undefined;\n    }\n\n    if (binding.kind === \"named\") {\n        return [binding.name ?? callPath.root.name, ...rawParts.slice(1)];\n    }\n\n    if (binding.kind === \"namespace\") {\n        return rawParts.length > 1 ? rawParts.slice(1) : undefined;\n    }\n\n    const defaultRoot = defaultImportRoots.get(binding.source);\n\n    return isDefined(defaultRoot)\n        ? [defaultRoot, ...rawParts.slice(1)]\n        : undefined;\n};\n\nconst resolveStandaloneFunctionName = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>,\n    trustConfiguredFunctions: boolean\n): string | undefined => {\n    if (\n        trustConfiguredFunctions ||\n        isUnshadowedGlobal(sourceCode, identifier)\n    ) {\n        return identifier.name;\n    }\n\n    const binding = getImportBinding(sourceCode, identifier);\n\n    return binding?.kind === \"named\" ? binding.name : undefined;\n};\n\nconst matchesBlock = (callPath: string, block: string): boolean =>\n    block.endsWith(\"*\")\n        ? callPath.startsWith(block.slice(0, -1))\n        : callPath.startsWith(`${block}.`);\n\nconst matchesDefaultNames = (\n    names: readonly string[],\n    defaults: readonly string[]\n): boolean =>\n    names.length === defaults.length &&\n    names.every((name, index) => name === defaults[index]);\n\nconst getSafeFocusFix = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    callExpression: Readonly<es.CallExpression>,\n    memberExpression: Readonly<es.MemberExpression>\n): ((fixer: TSESLint.RuleFixer) => null | TSESLint.RuleFix) | undefined => {\n    if (\n        memberExpression.computed ||\n        memberExpression.optional ||\n        callExpression.optional ||\n        memberExpression.property.type !== AST_NODE_TYPES.Identifier\n    ) {\n        return undefined;\n    }\n\n    const property = memberExpression.property;\n    const tokenBeforeProperty = sourceCode.getTokenBefore(property);\n\n    if (\n        tokenBeforeProperty?.value !== \".\" ||\n        sourceCode.text.slice(\n            arrayFirst(tokenBeforeProperty.range),\n            property.range[1]\n        ) !== `.${property.name}`\n    ) {\n        return undefined;\n    }\n\n    return (fixer) =>\n        fixer.removeRange([\n            arrayFirst(tokenBeforeProperty.range),\n            property.range[1],\n        ]);\n};\n\n/**\n * Disallow focused test invocations such as `test.only(...)`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const blocks = options.block ?? defaultBlocks;\n        const focusedNames = new Set(options.focus ?? [\"only\"]);\n        const forbiddenFunctions = new Set(\n            options.functions ?? defaultFocusedFunctions\n        );\n        const reportedFocusMembers = new Set<Readonly<es.MemberExpression>>();\n        const trustConfiguredBlocks = !matchesDefaultNames(\n            blocks,\n            defaultBlocks\n        );\n        const trustConfiguredFunctions = !matchesDefaultNames(\n            options.functions ?? defaultFocusedFunctions,\n            defaultFocusedFunctions\n        );\n\n        return {\n            CallExpression: (\n                callExpression: Readonly<es.CallExpression>\n            ): void => {\n                const callee = unwrapExpression(callExpression.callee);\n\n                if (callee.type === AST_NODE_TYPES.Identifier) {\n                    const canonicalFunctionName = resolveStandaloneFunctionName(\n                        context.sourceCode,\n                        callee,\n                        trustConfiguredFunctions\n                    );\n\n                    if (\n                        isDefined(canonicalFunctionName) &&\n                        setHas(forbiddenFunctions, canonicalFunctionName)\n                    ) {\n                        context.report({\n                            data: { functionName: callee.name },\n                            messageId: \"forbiddenFunction\",\n                            node: callee,\n                        });\n                    }\n\n                    return;\n                }\n\n                const callPath = getCallPath(callee);\n\n                if (!isDefined(callPath)) {\n                    return;\n                }\n\n                const canonicalParts = resolveCanonicalCallPath(\n                    context.sourceCode,\n                    callPath,\n                    trustConfiguredBlocks\n                );\n\n                if (!isDefined(canonicalParts)) {\n                    return;\n                }\n\n                const canonicalCallPath = arrayJoin(canonicalParts, \".\");\n\n                if (\n                    blocks.every(\n                        (block) => !matchesBlock(canonicalCallPath, block)\n                    )\n                ) {\n                    return;\n                }\n\n                for (const segment of callPath.members) {\n                    if (\n                        !setHas(focusedNames, segment.name) ||\n                        setHas(reportedFocusMembers, segment.member)\n                    ) {\n                        continue;\n                    }\n\n                    reportedFocusMembers.add(segment.member);\n\n                    const safeFix =\n                        options.fix === true\n                            ? getSafeFocusFix(\n                                  context.sourceCode,\n                                  callExpression,\n                                  segment.member\n                              )\n                            : undefined;\n                    const reportDescriptor = {\n                        data: { callPath: canonicalCallPath },\n                        messageId: \"focusedTest\" as const,\n                        node: segment.member,\n                    };\n\n                    context.report(\n                        isDefined(safeFix)\n                            ? { ...reportDescriptor, fix: safeFix }\n                            : reportDescriptor\n                    );\n                }\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [\n            {\n                block: defaultBlocks,\n                fix: false,\n                focus: [\"only\"],\n                functions: defaultFocusedFunctions,\n            },\n        ],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow focused test invocations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-only-tests\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            focusedTest:\n                \"Focused test invocation '{{callPath}}' is not permitted; remove the focus method before committing.\",\n            forbiddenFunction:\n                \"Focused test function '{{functionName}}' is not permitted; use the non-focused test API.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                properties: {\n                    block: {\n                        description:\n                            \"Test API roots or wildcard prefixes that may contain focus methods.\",\n                        items: { minLength: 1, type: \"string\" },\n                        type: \"array\",\n                        uniqueItems: true,\n                    },\n                    fix: {\n                        description:\n                            \"Whether to remove a safely recognized focus member automatically.\",\n                        type: \"boolean\",\n                    },\n                    focus: {\n                        description:\n                            \"Member names that mark a test invocation as focused.\",\n                        items: { minLength: 1, type: \"string\" },\n                        type: \"array\",\n                        uniqueItems: true,\n                    },\n                    functions: {\n                        description:\n                            \"Standalone function names that represent focused tests.\",\n                        items: { minLength: 1, type: \"string\" },\n                        type: \"array\",\n                        uniqueItems: true,\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-only-tests\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\ntype Scope = TSESLint.Scope.Scope;\n\ntype SourceCode = TSESLint.SourceCode;\n\ntype Variable = TSESLint.Scope.Variable;\n\nconst getAssignmentTargetIdentifier = (\n    node: Readonly<es.AssignmentExpression>\n): Readonly<es.Identifier> | undefined => {\n    if (node.left.type === AST_NODE_TYPES.Identifier) {\n        return node.left;\n    }\n\n    return undefined;\n};\n\nconst getScopeVariable = (\n    sourceCode: Readonly<SourceCode>,\n    identifier: Readonly<es.Identifier>\n): Readonly<Variable> | undefined => {\n    let scope: null | Scope = sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        const variable = scope.set.get(identifier.name);\n        if (variable !== undefined) {\n            return variable;\n        }\n\n        scope = scope.upper;\n    }\n\n    return undefined;\n};\n\nconst isParameterVariable = (\n    variable: Readonly<Variable> | undefined\n): boolean =>\n    variable?.defs.some(\n        (definition) =>\n            definition.type === TSESLint.Scope.DefinitionType.Parameter\n    ) ?? false;\n\nconst isInFirstFunctionExpressionStatement = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): boolean => {\n    const ancestors = sourceCode.getAncestors(node);\n    let enclosingFunction:\n        | es.ArrowFunctionExpression\n        | es.FunctionDeclaration\n        | es.FunctionExpression\n        | null = null;\n\n    for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n        const ancestor = ancestors[index];\n        if (\n            ancestor !== undefined &&\n            (ancestor.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n                ancestor.type === AST_NODE_TYPES.FunctionDeclaration ||\n                ancestor.type === AST_NODE_TYPES.FunctionExpression)\n        ) {\n            enclosingFunction = ancestor;\n            break;\n        }\n    }\n\n    if (enclosingFunction?.body.type !== AST_NODE_TYPES.BlockStatement) {\n        return false;\n    }\n\n    const [firstStatement] = enclosingFunction.body.body;\n    if (firstStatement?.type !== AST_NODE_TYPES.ExpressionStatement) {\n        return false;\n    }\n\n    return (\n        arrayFirst(node.range) >= arrayFirst(firstStatement.range) &&\n        node.range[1] <= firstStatement.range[1]\n    );\n};\n\n/**\n * Disallow parameter reassignment, except in the first expression statement of\n * a function body.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const { sourceCode } = context;\n\n        const reportIfParameterReassignment = (\n            identifier: Readonly<es.Identifier>\n        ): void => {\n            if (isInFirstFunctionExpressionStatement(sourceCode, identifier)) {\n                return;\n            }\n\n            const variable = getScopeVariable(sourceCode, identifier);\n            if (!isParameterVariable(variable)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"forbidden\",\n                node: identifier,\n            });\n        };\n\n        return {\n            AssignmentExpression: (\n                node: Readonly<es.AssignmentExpression>\n            ): void => {\n                const identifier = getAssignmentTargetIdentifier(node);\n                if (identifier === undefined) {\n                    return;\n                }\n\n                reportIfParameterReassignment(identifier);\n            },\n            UpdateExpression: (node: Readonly<es.UpdateExpression>): void => {\n                if (node.argument.type !== AST_NODE_TYPES.Identifier) {\n                    return;\n                }\n\n                reportIfParameterReassignment(node.argument);\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow parameter reassignment except in the first expression statement of a function body.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-param-reassign\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Do not reassign function parameters outside the first expression statement in the function body.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-param-reassign\",\n});\n\nexport default rule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\n/**\n * Disallow relative parent imports like `..` and `../foo`.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\n            \"..\",\n            \"../**\",\n            \"../..\",\n            \"../../**\",\n            \"../../..\",\n            \"../../../**\",\n            \"../../../..\",\n            \"../../../../**\",\n            \"../../../../..\",\n            \"../../../../../**\",\n        ],\n        description: \"disallow relative parent imports.\",\n        name: \"no-relative-parent-import\",\n    });\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of import/no-relative-parent-imports.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"import\",\n                url: \"https://github.com/import-js/eslint-plugin-import\",\n            },\n            rule: {\n                name: \"no-relative-parent-imports\",\n                url: \"https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-relative-parent-imports.md\",\n            },\n        }),\n    ],\n    ruleId: \"no-relative-parent-import\",\n});\n\nexport default deprecatedRule;\n", "import { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport {\n    buildRestrictedSyntaxListeners,\n    normalizeSyntaxSelector,\n    type SyntaxSelectorOption,\n} from \"../_internal/syntax-selectors.js\";\n\ntype MessageIds = \"customMessage\" | \"forbidden\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly selectors?: readonly SyntaxSelectorOption[];\n    }>,\n];\n\n/**\n * Disallow syntax nodes matched by configured selectors.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const selectors = options.selectors ?? [];\n        const entries = selectors.map((selector) =>\n            normalizeSyntaxSelector(selector)\n        );\n\n        return buildRestrictedSyntaxListeners(entries, (node, entry) => {\n            if (isDefined(entry.message)) {\n                context.report({\n                    data: {\n                        message: entry.message,\n                    },\n                    messageId: \"customMessage\",\n                    node,\n                });\n                return;\n            }\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        });\n    },\n    meta: {\n        defaultOptions: [{ selectors: [] }],\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow syntax nodes selected by configured AST selectors.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-restricted-syntax\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            customMessage: \"{{message}}\",\n            forbidden: \"Disallowed syntax.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description: \"Configuration for syntax selectors to disallow.\",\n                properties: {\n                    selectors: {\n                        description:\n                            \"Selector list. Each entry can be a selector string or a selector/message object.\",\n                        items: {\n                            oneOf: [\n                                {\n                                    minLength: 1,\n                                    type: \"string\",\n                                },\n                                {\n                                    additionalProperties: false,\n                                    properties: {\n                                        message: {\n                                            minLength: 1,\n                                            type: \"string\",\n                                        },\n                                        selector: {\n                                            minLength: 1,\n                                            type: \"string\",\n                                        },\n                                    },\n                                    required: [\"selector\"],\n                                    type: \"object\",\n                                },\n                            ],\n                        },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-restricted-syntax\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of ESLint core no-restricted-syntax.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"no-restricted-syntax\",\n                url: \"https://eslint.org/docs/latest/rules/no-restricted-syntax\",\n            },\n        }),\n    ],\n    ruleId: \"no-restricted-syntax\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { isDefined, keyIn } from \"ts-extras\";\n\n/**\n * Normalized selector entry used by syntax-based rules.\n */\nexport type SyntaxSelectorEntry = Readonly<{\n    readonly message?: string;\n    readonly selector: string;\n}>;\n\n/**\n * Supported selector option syntax accepted by rule options.\n */\nexport type SyntaxSelectorOption =\n    | Readonly<{\n          readonly message?: string;\n          readonly selector: string;\n      }>\n    | string;\n\nconst isSelectorObject = (\n    value: SyntaxSelectorOption\n): value is Readonly<{\n    readonly message?: string;\n    readonly selector: string;\n}> => typeof value === \"object\" && keyIn(value, \"selector\");\n\n/**\n * Normalize a selector option into a selector entry object.\n */\nexport const normalizeSyntaxSelector = (\n    selector: SyntaxSelectorOption\n): SyntaxSelectorEntry => {\n    if (isSelectorObject(selector)) {\n        if (!isDefined(selector.message)) {\n            return {\n                selector: selector.selector,\n            };\n        }\n\n        return {\n            message: selector.message,\n            selector: selector.selector,\n        };\n    }\n\n    return {\n        selector,\n    };\n};\n\n/**\n * Build ESLint selector listeners from selector entries.\n */\nexport const buildRestrictedSyntaxListeners = (\n    entries: readonly SyntaxSelectorEntry[],\n    report: (node: Readonly<es.Node>, entry: SyntaxSelectorEntry) => void\n): Readonly<Record<string, (node: Readonly<es.Node>) => void>> => {\n    const listeners: Record<string, (node: Readonly<es.Node>) => void> = {};\n\n    for (const entry of entries) {\n        listeners[entry.selector] = (node: Readonly<es.Node>): void => {\n            report(node, entry);\n        };\n    }\n\n    return listeners;\n};\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport path from \"node:path\";\nimport { arrayIncludes } from \"ts-extras\";\n\nimport { getImportSourceFromNode } from \"../_internal/import-patterns.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst importFileSuffixes = [\n    \"\",\n    \".cjs\",\n    \".d.ts\",\n    \".js\",\n    \".mjs\",\n    \".ts\",\n    \".tsx\",\n    \"/index.cjs\",\n    \"/index.js\",\n    \"/index.mjs\",\n    \"/index.ts\",\n    \"/index.tsx\",\n] as const;\n\nconst toResolvedCandidates = (\n    baseDirectory: string,\n    importSource: string\n): readonly string[] =>\n    importFileSuffixes.map((suffix) =>\n        path.resolve(baseDirectory, `${importSource}${suffix}`)\n    );\n\n/**\n * Disallow importing the current file from itself.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const currentFilePath = context.filename;\n        if (currentFilePath === \"<input>\") {\n            return {};\n        }\n\n        const normalizedCurrentFilePath = path.resolve(currentFilePath);\n        const currentFileDirectory = path.dirname(normalizedCurrentFilePath);\n\n        return {\n            \"ImportDeclaration, ExportNamedDeclaration[source], ExportAllDeclaration, ImportExpression\":\n                (node: Readonly<es.Node>): void => {\n                    const sourceText = getImportSourceFromNode(node);\n                    if (sourceText?.startsWith(\".\") !== true) {\n                        return;\n                    }\n\n                    const candidatePaths = toResolvedCandidates(\n                        currentFileDirectory,\n                        sourceText\n                    );\n\n                    if (\n                        arrayIncludes(candidatePaths, normalizedCurrentFilePath)\n                    ) {\n                        context.report({\n                            messageId: \"forbidden\",\n                            node,\n                        });\n                    }\n                },\n        };\n    },\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description: \"disallow importing the current file from itself.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-self-import\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Do not import the current file from itself.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-self-import\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of import/no-self-import.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"import\",\n                url: \"https://github.com/import-js/eslint-plugin-import\",\n            },\n            rule: {\n                name: \"no-self-import\",\n                url: \"https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-self-import.md\",\n            },\n        }),\n    ],\n    ruleId: \"no-self-import\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\ntype Scope = TSESLint.Scope.Scope;\n\ntype Variable = TSESLint.Scope.Variable;\n\nconst shouldIgnoreVariable = (variable: Readonly<Variable>): boolean =>\n    variable.defs.some(\n        (definition) =>\n            definition.node.type === AST_NODE_TYPES.TSEnumDeclaration ||\n            definition.type.includes(\"Enum\")\n    );\n\nconst findShadowedVariable = (\n    scope: Readonly<Scope>,\n    variableName: string\n): Readonly<Variable> | undefined => {\n    let upperScope = scope.upper;\n\n    while (upperScope !== null) {\n        const upperVariable = upperScope.set.get(variableName);\n        if (upperVariable !== undefined) {\n            return upperVariable;\n        }\n\n        upperScope = upperScope.upper;\n    }\n\n    return undefined;\n};\n\nconst collectScopes = (scope: Readonly<Scope>): readonly Readonly<Scope>[] => [\n    scope,\n    ...scope.childScopes.flatMap((childScope) => collectScopes(childScope)),\n];\n\n/**\n * Disallow variable declarations that shadow identifiers from parent scopes,\n * excluding enum declarations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const reportIfShadowed = (\n            scope: Readonly<Scope>,\n            variable: Readonly<Variable>\n        ): void => {\n            if (shouldIgnoreVariable(variable)) {\n                return;\n            }\n\n            const [identifier] = variable.identifiers;\n            if (identifier === undefined) {\n                return;\n            }\n\n            const shadowed = findShadowedVariable(scope, variable.name);\n            if (shadowed === undefined || shouldIgnoreVariable(shadowed)) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    name: variable.name,\n                },\n                messageId: \"forbidden\",\n                node: identifier,\n            });\n        };\n\n        return {\n            \"Program:exit\": (node: Readonly<es.Program>): void => {\n                const programScope = context.sourceCode.getScope(node);\n\n                for (const scope of collectScopes(programScope)) {\n                    for (const variable of scope.variables) {\n                        reportIfShadowed(scope, variable);\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow shadowed variables while ignoring enum declarations.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-shadow\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"'{{name}}' is already declared in an outer scope and should not be shadowed.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-shadow\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of @typescript-eslint/no-shadow.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"no-shadow\",\n                url: \"https://typescript-eslint.io/rules/no-shadow\",\n            },\n        }),\n    ],\n    ruleId: \"no-shadow\",\n});\n\nexport default deprecatedRule;\n", "import { createImportPatternRule } from \"../_internal/create-import-pattern-rule.js\";\n\n/**\n * Disallow sibling-file imports from the current directory.\n */\nconst rule: ReturnType<typeof createImportPatternRule> =\n    createImportPatternRule({\n        defaultDisallowPatterns: [\"./*\"],\n        description: \"disallow sibling imports from the current directory.\",\n        name: \"no-sibling-import\",\n    });\n\nexport default rule;\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_TOKEN_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestConvertToBlock\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly allowDirectiveComments?: boolean;\n    }>?,\n];\n\nconst directiveCommentPattern =\n    /^(?:eslint(?:-|$)|global\\s|exported\\s|ts-(?:check|expect-error|ignore|nocheck))/v;\n\nconst isDirectiveComment = (commentText: string): boolean =>\n    directiveCommentPattern.test(commentText.trimStart());\n\nconst createConvertToBlockSuggestionFix = (\n    commentValue: string,\n    commentRange: readonly [number, number]\n): TSESLint.ReportFixFunction | undefined => {\n    if (commentValue.includes(\"*/\")) {\n        return undefined;\n    }\n\n    return (fixer) =>\n        fixer.replaceTextRange(commentRange, `/*${commentValue} */`);\n};\n\n/**\n * Disallow single-line comments except optionally allowed directive comments.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const [{ allowDirectiveComments = true } = {}] = context.options;\n\n        return {\n            Program: () => {\n                for (const comment of context.sourceCode.getAllComments()) {\n                    const isDirective = isDirectiveComment(comment.value);\n                    if (\n                        comment.type === AST_TOKEN_TYPES.Line &&\n                        (!allowDirectiveComments || !isDirective)\n                    ) {\n                        const suggestionFix = isDirective\n                            ? undefined\n                            : createConvertToBlockSuggestionFix(\n                                  comment.value,\n                                  comment.range\n                              );\n\n                        context.report({\n                            ...(suggestionFix !== undefined && {\n                                fix: suggestionFix,\n                            }),\n                            loc: comment.loc,\n                            messageId: \"forbidden\",\n                            ...(suggestionFix !== undefined && {\n                                suggest: [\n                                    {\n                                        fix: suggestionFix,\n                                        messageId: \"suggestConvertToBlock\",\n                                    },\n                                ],\n                            }),\n                        });\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{ allowDirectiveComments: true }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow single-line comments.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-single-line-comment\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Single-line comments are not allowed; use block comments instead.\",\n            suggestConvertToBlock:\n                \"Convert this single-line comment to a block comment.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for allowing directive line comments.\",\n                properties: {\n                    allowDirectiveComments: {\n                        description:\n                            \"Whether to allow line comments used as lint/compiler directives.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"no-single-line-comment\",\n});\n\nexport default rule;\n", "/*\n * @license Use of this source code is governed by an MIT-style license that can\n *   be found in the LICENSE file at\n *   https://github.com/cartant/eslint-plugin-etc\n */\n\nimport type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\nconst defaultOptions: readonly {\n    readonly prefix?: string;\n}[] = [{}];\n\ntype MessageIds = \"forbidden\" | \"prefix\";\n\n/**\n * Disallow non-descriptive single-character generic type parameter names.\n */\nconst rule: ReturnType<typeof ruleCreator<typeof defaultOptions, MessageIds>> =\n    ruleCreator<typeof defaultOptions, MessageIds>({\n        create: (context) => {\n            const [{ prefix = \"\" } = {}] = context.options;\n            return {\n                \"TSTypeParameter > Identifier[name=/^.$/]\": (\n                    node: Readonly<es.Identifier>\n                ) => {\n                    context.report({\n                        data: { name: node.name },\n                        messageId: \"forbidden\",\n                        node,\n                    });\n                },\n                \"TSTypeParameter > Identifier[name=/^.{2,}$/]\": (\n                    node: Readonly<es.Identifier>\n                ) => {\n                    const { name } = node;\n                    if (prefix && !name.startsWith(prefix)) {\n                        context.report({\n                            data: { name, prefix },\n                            messageId: \"prefix\",\n                            node,\n                        });\n                    }\n                },\n            };\n        },\n        defaultOptions,\n        meta: {\n            defaultOptions: [{}],\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description: \"disallow single-character type parameters.\",\n                frozen: false,\n                recommended: true,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-t\",\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden:\n                    'Single-character type parameters are forbidden. Choose a more descriptive name for \"{{name}}\"',\n                prefix: 'Type parameter \"{{name}}\" does not have prefix \"{{prefix}}\"',\n            },\n            schema: [\n                {\n                    additionalProperties: false,\n                    description:\n                        \"Configuration for enforced generic type parameter prefix.\",\n                    properties: {\n                        prefix: {\n                            description:\n                                \"Required prefix for type parameter names longer than one character.\",\n                            type: \"string\",\n                        },\n                    },\n                    type: \"object\",\n                },\n            ],\n            type: \"problem\",\n        },\n        name: \"no-t\",\n    });\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector = arrayJoin(\n    [\n        \"ExportNamedDeclaration > FunctionDeclaration > Identifier.id[name=/^_/u]\",\n        \"ExportNamedDeclaration > TSDeclareFunction > Identifier.id[name=/^_/u]\",\n        \"ExportNamedDeclaration > VariableDeclaration > VariableDeclarator > Identifier.id[name=/^_/u]\",\n    ],\n    \", \"\n);\n\n/**\n * Disallow named exports whose identifier starts with an underscore.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow underscore-prefixed named exports.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-underscore-export\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"No underscore exports.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-underscore-export\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of ESLint core no-restricted-exports.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"eslint\",\n                url: \"https://eslint.org/docs/latest/rules/\",\n            },\n            rule: {\n                name: \"no-restricted-exports\",\n                url: \"https://eslint.org/docs/latest/rules/no-restricted-exports\",\n            },\n        }),\n    ],\n    ruleId: \"no-underscore-export\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \"VariableDeclarator > TSAsExpression[expression.properties.length=0] > TSTypeReference > Identifier[name='const'], VariableDeclarator[id.typeAnnotation] > TSAsExpression > TSTypeReference > Identifier[name='const']\";\n\nconst getAsConstExpression = (\n    node: Readonly<es.Node>\n): Readonly<es.TSAsExpression> | undefined => {\n    if (\n        node.type !== AST_NODE_TYPES.Identifier ||\n        node.parent.type !== AST_NODE_TYPES.TSTypeReference ||\n        node.parent.parent.type !== AST_NODE_TYPES.TSAsExpression\n    ) {\n        return undefined;\n    }\n\n    return node.parent.parent;\n};\n\n/**\n * Disallow unnecessary `as const` assertions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [disallowedSelector]: (node: Readonly<es.Node>): void => {\n                const asConstExpression = getAsConstExpression(node);\n                if (asConstExpression === undefined) {\n                    return;\n                }\n\n                const replacementText = sourceCode.getText(\n                    asConstExpression.expression\n                );\n\n                context.report({\n                    fix: (fixer) =>\n                        fixer.replaceText(asConstExpression, replacementText),\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow unnecessary as const assertions.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unnecessary-as-const\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Unnecessary as const assertion.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-unnecessary-as-const\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemove\";\n\ntype Options = readonly [];\n\nconst disallowedSelector = \"SwitchCase:last-child > BreakStatement.consequent\";\n\nconst createTrailingBreakRemovalFix = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.BreakStatement>\n): TSESLint.ReportFixFunction => {\n    const previousToken = sourceCode.getTokenBefore(node);\n    const previousTokenLine = previousToken?.loc.end.line;\n    const breakLine = node.loc.start.line;\n    const shouldRemoveLeadingWhitespace =\n        isDefined(previousTokenLine) && previousTokenLine === breakLine;\n\n    if (previousToken === null || !shouldRemoveLeadingWhitespace) {\n        return (fixer) => fixer.remove(node);\n    }\n\n    const leadingText = sourceCode.text.slice(\n        previousToken.range[1],\n        arrayFirst(node.range)\n    );\n    const leadingWhitespaceLength =\n        /^[\\t ]*/v.exec(leadingText)?.[0].length ?? 0;\n\n    return (fixer) =>\n        fixer.removeRange([\n            arrayFirst(node.range) - leadingWhitespaceLength,\n            node.range[1],\n        ]);\n};\n\n/**\n * Disallow unnecessary trailing break statements in switch blocks.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [disallowedSelector]: (node: Readonly<es.Node>): void => {\n                if (\n                    node.type !== AST_NODE_TYPES.BreakStatement ||\n                    node.label !== null\n                ) {\n                    return;\n                }\n\n                const fix = createTrailingBreakRemovalFix(sourceCode, node);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRemove\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow unnecessary trailing break statements.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unnecessary-break\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Unnecessary break statement at end of switch case list.\",\n            suggestRemove:\n                \"Remove the trailing break statement because it is unreachable.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-unnecessary-break\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    type TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\ntype Scope = TSESLint.Scope.Scope;\n\nconst disallowedSelector =\n    \"PropertyDefinition > Identifier.value[name='undefined'], VariableDeclaration[kind=/^(?:let|var)$/] > VariableDeclarator[id.type='Identifier'] > Identifier.init[name='undefined']\";\n\nconst getUndefinedInitializationRemovalRange = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.Node>\n): readonly [number, number] | undefined => {\n    const equalsToken = sourceCode.getTokenBefore(node, {\n        filter: (token): boolean => token.value === \"=\",\n    });\n\n    if (equalsToken === null) {\n        return undefined;\n    }\n\n    let fixStartIndex = arrayFirst(equalsToken.range);\n    const sourceText = sourceCode.text;\n\n    while (fixStartIndex > 0) {\n        const previousCharacter = sourceText.at(fixStartIndex - 1);\n        if (previousCharacter !== \" \" && previousCharacter !== \"\\t\") {\n            break;\n        }\n\n        fixStartIndex -= 1;\n    }\n\n    return [fixStartIndex, node.range[1]];\n};\n\nconst isShadowedUndefined = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    let scope: null | Scope = sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        const variable = scope.set.get(identifier.name);\n\n        if (variable !== undefined) {\n            return variable.defs.length > 0;\n        }\n\n        scope = scope.upper;\n    }\n\n    return false;\n};\n\n/**\n * Disallow explicit initialization to `undefined`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [disallowedSelector]: (node: Readonly<es.Node>): void => {\n                if (\n                    node.type !== AST_NODE_TYPES.Identifier ||\n                    isShadowedUndefined(sourceCode, node)\n                ) {\n                    return;\n                }\n\n                const removalRange = getUndefinedInitializationRemovalRange(\n                    sourceCode,\n                    node\n                );\n\n                if (!isDefined(removalRange)) {\n                    return;\n                }\n\n                const fix: TSESLint.ReportFixFunction = (fixer) =>\n                    fixer.removeRange(removalRange);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow unnecessary initialization to undefined.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unnecessary-initialization\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Unnecessary initialization to undefined.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-unnecessary-initialization\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TemplateLiteral[expressions.length=0] > TemplateElement\";\n\nconst isStringLiteralStatement = (\n    statement: Readonly<es.ProgramStatement>\n): boolean =>\n    statement.type === AST_NODE_TYPES.ExpressionStatement &&\n    statement.expression.type === AST_NODE_TYPES.Literal &&\n    typeof statement.expression.value === \"string\";\n\nconst isFunctionBody = (block: Readonly<es.BlockStatement>): boolean =>\n    (block.parent.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        block.parent.type === AST_NODE_TYPES.FunctionDeclaration ||\n        block.parent.type === AST_NODE_TYPES.FunctionExpression) &&\n    block.parent.body === block;\n\nconst wouldCreateDirective = (\n    templateLiteral: Readonly<es.TemplateLiteral>\n): boolean => {\n    const statement = templateLiteral.parent;\n\n    if (statement.type !== AST_NODE_TYPES.ExpressionStatement) {\n        return false;\n    }\n\n    const container = statement.parent;\n    let statements: readonly es.ProgramStatement[] | undefined;\n\n    if (\n        container.type === AST_NODE_TYPES.Program ||\n        (container.type === AST_NODE_TYPES.BlockStatement &&\n            isFunctionBody(container))\n    ) {\n        statements = container.body;\n    }\n\n    if (statements === undefined) {\n        return false;\n    }\n\n    for (const currentStatement of statements) {\n        if (currentStatement === statement) {\n            return true;\n        }\n\n        if (!isStringLiteralStatement(currentStatement)) {\n            return false;\n        }\n    }\n\n    return false;\n};\n\nconst toSafeStringLiteralText = (\n    templateLiteral: Readonly<es.TemplateLiteral>\n): string =>\n    JSON.stringify(\n        arrayFirst(templateLiteral.quasis)?.value.cooked ??\n            arrayFirst(templateLiteral.quasis)?.value.raw ??\n            \"\"\n    );\n\n/**\n * Disallow template literals with no expressions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            const templateLiteral =\n                node.type === AST_NODE_TYPES.TemplateElement &&\n                node.parent.type === AST_NODE_TYPES.TemplateLiteral\n                    ? node.parent\n                    : undefined;\n\n            if (templateLiteral === undefined) {\n                return;\n            }\n\n            if (\n                templateLiteral.parent.type ===\n                AST_NODE_TYPES.TaggedTemplateExpression\n            ) {\n                return;\n            }\n\n            if (wouldCreateDirective(templateLiteral)) {\n                context.report({\n                    messageId: \"forbidden\",\n                    node,\n                });\n                return;\n            }\n\n            context.report({\n                fix: (fixer) =>\n                    fixer.replaceText(\n                        templateLiteral,\n                        toSafeStringLiteralText(templateLiteral)\n                    ),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow template literals that have no interpolated expressions.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unnecessary-template-literal\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Use a string literal instead of an expression-free template literal.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"no-unnecessary-template-literal\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of unicorn/no-useless-template-literals.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"unicorn\",\n                url: \"https://github.com/sindresorhus/eslint-plugin-unicorn\",\n            },\n            rule: {\n                name: \"no-useless-template-literals\",\n                url: \"https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-useless-template-literals.md\",\n            },\n        }),\n    ],\n    ruleId: \"no-unnecessary-template-literal\",\n});\n\nexport default deprecatedRule;\n", "import { AST_NODE_TYPES, type TSESTree as es } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    getEnclosingFunction,\n    isComponentOpeningElement,\n} from \"../_internal/jsx-react-analysis.js\";\nimport { collectUnstableValues } from \"../_internal/react-memo-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"unstableChild\";\n\ntype Options = readonly [RuleOption?];\n\ntype RuleOption = Readonly<{\n    readonly strict?: boolean;\n}>;\n\nconst defaultOptions: Options = [{ strict: false }];\n\n/**\n * Report unstable child values passed to custom components without inserting\n * hooks or guessing dependency arrays.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [configuredOption]) => {\n        const strict = configuredOption?.strict ?? false;\n        const reportedNodes = new Set<Readonly<es.Expression>>();\n\n        return {\n            JSXElement: (node: Readonly<es.JSXElement>): void => {\n                if (\n                    !isComponentOpeningElement(node.openingElement) ||\n                    !isDefined(getEnclosingFunction(context.sourceCode, node))\n                ) {\n                    return;\n                }\n\n                for (const child of node.children) {\n                    const unstableValues =\n                        child.type === AST_NODE_TYPES.JSXElement ||\n                        child.type === AST_NODE_TYPES.JSXFragment\n                            ? [{ kind: \"jsx\" as const, node: child }]\n                            : child.type ===\n                                    AST_NODE_TYPES.JSXExpressionContainer &&\n                                child.expression.type !==\n                                    AST_NODE_TYPES.JSXEmptyExpression\n                              ? collectUnstableValues(\n                                    context.sourceCode,\n                                    child.expression,\n                                    strict\n                                )\n                              : [];\n\n                    for (const unstableValue of unstableValues) {\n                        if (setHas(reportedNodes, unstableValue.node)) {\n                            continue;\n                        }\n\n                        reportedNodes.add(unstableValue.node);\n                        context.report({\n                            data: { valueKind: unstableValue.kind },\n                            messageId: \"unstableChild\",\n                            node: unstableValue.node,\n                        });\n                    }\n                }\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ strict: false }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local unstable children passed to custom components.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-children\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableChild:\n                \"This {{valueKind}} child has a new identity on every render; use ordinary composition unless profiling proves stable child identity is required.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for classifying unknown child expressions.\",\n                properties: {\n                    strict: {\n                        description:\n                            \"Report calls, member expressions, and tagged templates whose identity cannot be proven stable.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"no-unstable-react-children\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    findVariable,\n    getSameFunctionConstInitializer,\n    unwrapExpression,\n} from \"./jsx-react-analysis.js\";\n\ntype MemoHookName = \"useCallback\" | \"useMemo\";\n\n/** A render-local expression and the identity category it allocates. */\ntype UnstableValue = Readonly<{\n    readonly kind: UnstableValueKind;\n    readonly node: Readonly<es.Expression>;\n}>;\n\n/** Identity categories conservatively recognized by memoization rules. */\ntype UnstableValueKind =\n    | \"array\"\n    | \"function\"\n    | \"instance\"\n    | \"jsx\"\n    | \"object\"\n    | \"unknown\";\n\nconst memoHookNames: ReadonlySet<string> = new Set([\"useCallback\", \"useMemo\"]);\n\nconst memoHookSources: ReadonlySet<string> = new Set([\n    \"preact/compat\",\n    \"preact/hooks\",\n    \"react\",\n]);\n\nconst isMemoHookName = (name: string): name is MemoHookName =>\n    setHas(memoHookNames, name);\n\nconst getImportedName = (\n    specifier: Readonly<es.ImportSpecifier>\n): string | undefined =>\n    specifier.imported.type === AST_NODE_TYPES.Identifier\n        ? specifier.imported.name\n        : typeof specifier.imported.value === \"string\"\n          ? specifier.imported.value\n          : undefined;\n\nconst getImportBinding = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n):\n    | Readonly<\n          | es.ImportDefaultSpecifier\n          | es.ImportNamespaceSpecifier\n          | es.ImportSpecifier\n      >\n    | undefined => {\n    const variable = findVariable(sourceCode, identifier);\n    const definition = arrayFirst(variable?.defs ?? []);\n\n    if (\n        variable?.defs.length !== 1 ||\n        definition?.type !== TSESLint.Scope.DefinitionType.ImportBinding ||\n        definition.parent.type !== AST_NODE_TYPES.ImportDeclaration ||\n        definition.parent.importKind === \"type\" ||\n        typeof definition.parent.source.value !== \"string\" ||\n        !setHas(memoHookSources, definition.parent.source.value) ||\n        definition.node.type === AST_NODE_TYPES.TSImportEqualsDeclaration\n    ) {\n        return undefined;\n    }\n\n    return definition.node;\n};\n\nconst isImportedDirectMemoHook = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const binding = getImportBinding(sourceCode, identifier);\n\n    return (\n        binding?.type === AST_NODE_TYPES.ImportSpecifier &&\n        binding.importKind !== \"type\" &&\n        isMemoHookName(getImportedName(binding) ?? \"\")\n    );\n};\n\nconst isImportedMemoHookNamespace = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const binding = getImportBinding(sourceCode, identifier);\n\n    return (\n        binding?.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n        binding?.type === AST_NODE_TYPES.ImportNamespaceSpecifier\n    );\n};\n\nconst getStaticMemberName = (\n    expression: Readonly<es.MemberExpression>\n): string | undefined => {\n    if (\n        !expression.computed &&\n        expression.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return expression.property.name;\n    }\n\n    return expression.computed &&\n        expression.property.type === AST_NODE_TYPES.Literal &&\n        typeof expression.property.value === \"string\"\n        ? expression.property.value\n        : undefined;\n};\n\n/** Return whether a call resolves to an imported React or Preact memo hook. */\nexport const isMemoHookCall = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    expression: Readonly<es.Expression>\n): boolean => {\n    if (expression.type !== AST_NODE_TYPES.CallExpression) {\n        return false;\n    }\n\n    const callee = unwrapExpression(expression.callee);\n\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return isImportedDirectMemoHook(sourceCode, callee);\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const object = unwrapExpression(callee.object);\n    const memberName = getStaticMemberName(callee);\n\n    return (\n        object.type === AST_NODE_TYPES.Identifier &&\n        isMemoHookName(memberName ?? \"\") &&\n        isImportedMemoHookNamespace(sourceCode, object)\n    );\n};\n\nconst containsExpression = (\n    expressions: ReadonlySet<Readonly<es.Expression>>,\n    expression: Readonly<es.Expression>\n): boolean => setHas(expressions, expression);\n\nconst getDirectUnstableValueKind = (\n    expression: Readonly<es.Expression>,\n    includeUnknown: boolean\n): undefined | UnstableValueKind => {\n    if (expression.type === AST_NODE_TYPES.ObjectExpression) {\n        return \"object\";\n    }\n\n    if (expression.type === AST_NODE_TYPES.ArrayExpression) {\n        return \"array\";\n    }\n\n    if (expression.type === AST_NODE_TYPES.NewExpression) {\n        return \"instance\";\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        expression.type === AST_NODE_TYPES.FunctionExpression\n    ) {\n        return \"function\";\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.JSXElement ||\n        expression.type === AST_NODE_TYPES.JSXFragment\n    ) {\n        return \"jsx\";\n    }\n\n    return includeUnknown &&\n        (expression.type === AST_NODE_TYPES.CallExpression ||\n            expression.type === AST_NODE_TYPES.MemberExpression ||\n            expression.type === AST_NODE_TYPES.TaggedTemplateExpression)\n        ? \"unknown\"\n        : undefined;\n};\n\n/** Collect conservative render-local values whose identities are unstable. */\nexport const collectUnstableValues = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    expression: Readonly<es.Expression>,\n    includeUnknown: boolean,\n    visitedExpressions: Set<Readonly<es.Expression>> = new Set()\n): readonly UnstableValue[] => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (containsExpression(visitedExpressions, unwrappedExpression)) {\n        return [];\n    }\n\n    visitedExpressions.add(unwrappedExpression);\n\n    if (isMemoHookCall(sourceCode, unwrappedExpression)) {\n        return [];\n    }\n\n    const directKind = getDirectUnstableValueKind(\n        unwrappedExpression,\n        includeUnknown\n    );\n\n    if (isDefined(directKind)) {\n        return [{ kind: directKind, node: unwrappedExpression }];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Identifier) {\n        const initializer = getSameFunctionConstInitializer(\n            sourceCode,\n            unwrappedExpression\n        );\n\n        return isDefined(initializer)\n            ? collectUnstableValues(\n                  sourceCode,\n                  initializer,\n                  includeUnknown,\n                  visitedExpressions\n              )\n            : [];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.LogicalExpression) {\n        return [\n            ...collectUnstableValues(\n                sourceCode,\n                unwrappedExpression.left,\n                includeUnknown,\n                visitedExpressions\n            ),\n            ...collectUnstableValues(\n                sourceCode,\n                unwrappedExpression.right,\n                includeUnknown,\n                visitedExpressions\n            ),\n        ];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ConditionalExpression) {\n        return [\n            ...collectUnstableValues(\n                sourceCode,\n                unwrappedExpression.consequent,\n                includeUnknown,\n                visitedExpressions\n            ),\n            ...collectUnstableValues(\n                sourceCode,\n                unwrappedExpression.alternate,\n                includeUnknown,\n                visitedExpressions\n            ),\n        ];\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.SequenceExpression) {\n        const finalExpression = arrayAt(unwrappedExpression.expressions, -1);\n\n        return isDefined(finalExpression)\n            ? collectUnstableValues(\n                  sourceCode,\n                  finalExpression,\n                  includeUnknown,\n                  visitedExpressions\n              )\n            : [];\n    }\n\n    return [];\n};\n\nexport type { UnstableValue, UnstableValueKind };\n", "import { AST_NODE_TYPES, type TSESTree as es } from \"@typescript-eslint/utils\";\nimport { arrayIncludes, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    getCallName,\n    getEnclosingFunction,\n    getJsxAttributeName,\n    getNamePolicy,\n    isComponentOpeningElement,\n    isHookName,\n} from \"../_internal/jsx-react-analysis.js\";\nimport {\n    collectUnstableValues,\n    isMemoHookCall,\n    type UnstableValue,\n} from \"../_internal/react-memo-stability.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds =\n    | \"unstableHookArgument\"\n    | \"unstableHookReturn\"\n    | \"unstableProp\";\n\ntype Options = readonly [RuleOption?];\n\ntype RuleOption = Readonly<{\n    readonly checkHookCalls?: boolean;\n    readonly checkHookReturnObject?: boolean;\n    readonly ignoredHookCallsNames?: Readonly<Record<string, boolean>>;\n    readonly ignoredPropNames?: readonly string[];\n    readonly strict?: boolean;\n}>;\n\nconst defaultOptions: Options = [\n    {\n        checkHookCalls: true,\n        checkHookReturnObject: false,\n        ignoredHookCallsNames: {},\n        ignoredPropNames: [],\n        strict: false,\n    },\n];\n\nconst containsMessageId = (\n    messageIds: ReadonlySet<MessageIds>,\n    messageId: MessageIds\n): boolean => setHas(messageIds, messageId);\n\nconst defaultIgnoredHookCalls: Readonly<Record<string, boolean>> = {\n    use: true,\n    useCallback: true,\n    useContext: true,\n    useDebugValue: true,\n    useDeferredValue: true,\n    useEffect: true,\n    useId: true,\n    useImperativeHandle: true,\n    useInfiniteQuery: true,\n    useInsertionEffect: true,\n    useLayoutEffect: true,\n    useMemo: true,\n    useMutation: true,\n    useQuery: true,\n    useQueryClient: true,\n    useReducer: true,\n    useRef: true,\n    useState: true,\n    useSyncExternalStore: true,\n    useTransition: true,\n};\n\nconst getFunctionName = (\n    node: Readonly<\n        | es.ArrowFunctionExpression\n        | es.FunctionDeclaration\n        | es.FunctionExpression\n    >\n): string | undefined => {\n    if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n        return node.id?.name;\n    }\n\n    return node.parent.type === AST_NODE_TYPES.VariableDeclarator &&\n        node.parent.id.type === AST_NODE_TYPES.Identifier\n        ? node.parent.id.name\n        : undefined;\n};\n\nconst getReportableObjectPropertyValue = (\n    property: Readonly<es.ObjectLiteralElement>\n): Readonly<es.Expression> | undefined => {\n    if (property.type === AST_NODE_TYPES.SpreadElement) {\n        return property.argument;\n    }\n\n    return property.value.type === AST_NODE_TYPES.AssignmentPattern ||\n        property.value.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression\n        ? undefined\n        : property.value;\n};\n\n/**\n * Report unstable values at React prop and custom-hook boundaries without\n * generating dependency arrays or changing runtime behavior.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [configuredOption]) => {\n        const option: Required<RuleOption> = {\n            checkHookCalls: true,\n            checkHookReturnObject: false,\n            ignoredHookCallsNames: {},\n            ignoredPropNames: [],\n            strict: false,\n            ...configuredOption,\n        };\n        const reportedByNode = new Map<\n            Readonly<es.Expression>,\n            Set<MessageIds>\n        >();\n\n        const reportValues = (\n            values: readonly UnstableValue[],\n            messageId: MessageIds\n        ): void => {\n            for (const value of values) {\n                const reportedMessageIds = reportedByNode.get(value.node);\n\n                if (\n                    isDefined(reportedMessageIds) &&\n                    containsMessageId(reportedMessageIds, messageId)\n                ) {\n                    continue;\n                }\n\n                if (isDefined(reportedMessageIds)) {\n                    reportedMessageIds.add(messageId);\n                } else {\n                    reportedByNode.set(value.node, new Set([messageId]));\n                }\n\n                context.report({\n                    data: { valueKind: value.kind },\n                    messageId,\n                    node: value.node,\n                });\n            }\n        };\n\n        const collect = (\n            expression: Readonly<es.Expression>\n        ): readonly UnstableValue[] =>\n            collectUnstableValues(\n                context.sourceCode,\n                expression,\n                option.strict\n            );\n\n        const reportHookReturn = (\n            expression: Readonly<es.Expression>\n        ): void => {\n            if (\n                expression.type === AST_NODE_TYPES.ObjectExpression &&\n                !option.checkHookReturnObject\n            ) {\n                for (const property of expression.properties) {\n                    const propertyValue =\n                        getReportableObjectPropertyValue(property);\n                    if (isDefined(propertyValue)) {\n                        reportValues(\n                            collect(propertyValue),\n                            \"unstableHookReturn\"\n                        );\n                    }\n                }\n                return;\n            }\n\n            reportValues(collect(expression), \"unstableHookReturn\");\n        };\n\n        const isCustomHookFunction = (\n            node: Readonly<\n                | es.ArrowFunctionExpression\n                | es.FunctionDeclaration\n                | es.FunctionExpression\n            >\n        ): boolean => {\n            const functionName = getFunctionName(node);\n\n            return isDefined(functionName) && isHookName(functionName);\n        };\n\n        return {\n            \"ArrowFunctionExpression[expression=true]\": (\n                node: Readonly<es.ArrowFunctionExpression>\n            ): void => {\n                if (\n                    node.body.type !== AST_NODE_TYPES.BlockStatement &&\n                    isCustomHookFunction(node)\n                ) {\n                    reportHookReturn(node.body);\n                }\n            },\n            CallExpression: (node: Readonly<es.CallExpression>): void => {\n                if (\n                    !option.checkHookCalls ||\n                    isMemoHookCall(context.sourceCode, node)\n                ) {\n                    return;\n                }\n\n                const hookName = getCallName(node);\n\n                if (!isDefined(hookName) || !isHookName(hookName)) {\n                    return;\n                }\n\n                const policy = getNamePolicy(hookName, {\n                    ...defaultIgnoredHookCalls,\n                    ...option.ignoredHookCallsNames,\n                });\n\n                if (policy === true) {\n                    return;\n                }\n\n                for (const argument of node.arguments) {\n                    if (argument.type !== AST_NODE_TYPES.SpreadElement) {\n                        reportValues(collect(argument), \"unstableHookArgument\");\n                    }\n                }\n            },\n            JSXAttribute: (node: Readonly<es.JSXAttribute>): void => {\n                if (\n                    node.value?.type !==\n                        AST_NODE_TYPES.JSXExpressionContainer ||\n                    node.value.expression.type ===\n                        AST_NODE_TYPES.JSXEmptyExpression ||\n                    !isComponentOpeningElement(node.parent) ||\n                    !isDefined(getEnclosingFunction(context.sourceCode, node))\n                ) {\n                    return;\n                }\n\n                const attributeName = getJsxAttributeName(node);\n\n                if (\n                    isDefined(attributeName) &&\n                    arrayIncludes(option.ignoredPropNames, attributeName)\n                ) {\n                    return;\n                }\n\n                reportValues(collect(node.value.expression), \"unstableProp\");\n            },\n            ReturnStatement: (node: Readonly<es.ReturnStatement>): void => {\n                if (node.argument === null) {\n                    return;\n                }\n\n                const enclosingFunction = getEnclosingFunction(\n                    context.sourceCode,\n                    node\n                );\n\n                if (\n                    !isDefined(enclosingFunction) ||\n                    !isCustomHookFunction(enclosingFunction)\n                ) {\n                    return;\n                }\n\n                reportHookReturn(node.argument);\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [\n            {\n                checkHookCalls: true,\n                checkHookReturnObject: false,\n                ignoredHookCallsNames: {},\n                ignoredPropNames: [],\n                strict: false,\n            },\n        ],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow render-local unstable values passed to components or custom hooks.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            unstableHookArgument:\n                \"This {{valueKind}} value has a new identity on every invocation; stabilize it only if the custom hook requires referential equality.\",\n            unstableHookReturn:\n                \"This custom hook returns a render-local {{valueKind}} value with unstable identity; expose a stable value only when consumers require it.\",\n            unstableProp:\n                \"This {{valueKind}} prop has a new identity on every render; lift or memoize it only when the child relies on referential equality.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for prop, custom-hook argument, and custom-hook return analysis.\",\n                properties: {\n                    checkHookCalls: {\n                        description:\n                            \"Report unstable arguments passed to custom hooks.\",\n                        type: \"boolean\",\n                    },\n                    checkHookReturnObject: {\n                        description:\n                            \"Report a returned object as one unstable value instead of checking its property values.\",\n                        type: \"boolean\",\n                    },\n                    ignoredHookCallsNames: {\n                        additionalProperties: {\n                            description:\n                                \"Whether an exact hook name or glob pattern is ignored.\",\n                            type: \"boolean\",\n                        },\n                        description:\n                            \"Exact hook names and glob patterns mapped to ignore policies.\",\n                        type: \"object\",\n                    },\n                    ignoredPropNames: {\n                        description:\n                            \"Component prop names excluded from identity analysis.\",\n                        items: {\n                            description: \"A component prop name to ignore.\",\n                            type: \"string\",\n                        },\n                        type: \"array\",\n                        uniqueItems: true,\n                    },\n                    strict: {\n                        description:\n                            \"Report calls, member expressions, and tagged templates whose identity cannot be proven stable.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"no-unstable-react-values\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\nimport type { ArrayValues } from \"type-fest\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, safeCastTo, setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MemberKind =\n    | \"accessor\"\n    | \"data\"\n    | \"method\";\ntype MessageIds = \"forbidden\";\n\nconst nativeGlobalNames = [\n    \"AggregateError\",\n    \"Array\",\n    \"ArrayBuffer\",\n    \"Atomics\",\n    \"BigInt\",\n    \"BigInt64Array\",\n    \"BigUint64Array\",\n    \"Boolean\",\n    \"DataView\",\n    \"Date\",\n    \"Error\",\n    \"EvalError\",\n    \"FinalizationRegistry\",\n    \"Float16Array\",\n    \"Float32Array\",\n    \"Float64Array\",\n    \"Function\",\n    \"Int8Array\",\n    \"Int16Array\",\n    \"Int32Array\",\n    \"Intl\",\n    \"JSON\",\n    \"Map\",\n    \"Math\",\n    \"Number\",\n    \"Object\",\n    \"Promise\",\n    \"Proxy\",\n    \"RangeError\",\n    \"ReferenceError\",\n    \"Reflect\",\n    \"RegExp\",\n    \"Set\",\n    \"SharedArrayBuffer\",\n    \"String\",\n    \"Symbol\",\n    \"SyntaxError\",\n    \"TypeError\",\n    \"Uint8Array\",\n    \"Uint8ClampedArray\",\n    \"Uint16Array\",\n    \"Uint32Array\",\n    \"URIError\",\n    \"WeakMap\",\n    \"WeakRef\",\n    \"WeakSet\",\n] as const;\n\ntype NativeAccess = Readonly<{\n    readonly name: NativeTypeName;\n    readonly side: NativeValueSide;\n}>;\ntype NativeTypeName = ArrayValues<typeof nativeGlobalNames>;\ntype NativeValueSide = \"instance\" | \"static\";\ntype Options = readonly [];\n\nconst nativeTypeNames: ReadonlySet<NativeTypeName> = new Set(nativeGlobalNames);\n\nconst callableNativeResults: Readonly<\n    Partial<Record<NativeTypeName, NativeTypeName>>\n> = {\n    AggregateError: \"AggregateError\",\n    Array: \"Array\",\n    BigInt: \"BigInt\",\n    Boolean: \"Boolean\",\n    Date: \"String\",\n    Error: \"Error\",\n    EvalError: \"EvalError\",\n    Function: \"Function\",\n    Number: \"Number\",\n    Object: \"Object\",\n    RangeError: \"RangeError\",\n    ReferenceError: \"ReferenceError\",\n    RegExp: \"RegExp\",\n    String: \"String\",\n    Symbol: \"Symbol\",\n    SyntaxError: \"SyntaxError\",\n    TypeError: \"TypeError\",\n    URIError: \"URIError\",\n};\n\nconst instanceDataProperties: Readonly<\n    Partial<Record<NativeTypeName, readonly string[]>>\n> = {\n    Array: [\"length\"],\n    ArrayBuffer: [\n        \"byteLength\",\n        \"detached\",\n        \"maxByteLength\",\n        \"resizable\",\n    ],\n    DataView: [\n        \"buffer\",\n        \"byteLength\",\n        \"byteOffset\",\n    ],\n    Error: [\n        \"cause\",\n        \"message\",\n        \"name\",\n        \"stack\",\n    ],\n    RegExp: [\"lastIndex\"],\n    SharedArrayBuffer: [\n        \"byteLength\",\n        \"growable\",\n        \"maxByteLength\",\n    ],\n    String: [\"length\"],\n};\n\nconst typedArrayNames: ReadonlySet<NativeTypeName> = new Set([\n    \"BigInt64Array\",\n    \"BigUint64Array\",\n    \"Float16Array\",\n    \"Float32Array\",\n    \"Float64Array\",\n    \"Int8Array\",\n    \"Int16Array\",\n    \"Int32Array\",\n    \"Uint8Array\",\n    \"Uint8ClampedArray\",\n    \"Uint16Array\",\n    \"Uint32Array\",\n]);\n\nconst isNativeTypeName = (name: string): name is NativeTypeName =>\n    setHas(nativeTypeNames, name);\n\nconst isTypedArrayName = (name: NativeTypeName): boolean =>\n    setHas(typedArrayNames, name);\n\nconst getMemberKind = (\n    descriptor: Readonly<PropertyDescriptor>\n): MemberKind => {\n    if (typeof descriptor.value === \"function\") {\n        return \"method\";\n    }\n\n    return isDefined(descriptor.get) || isDefined(descriptor.set)\n        ? \"accessor\"\n        : \"data\";\n};\n\nconst collectPropertyKinds = (\n    initialValue: unknown\n): ReadonlyMap<string, MemberKind> => {\n    const propertyKinds = new Map<string, MemberKind>();\n    let value = initialValue;\n\n    while (\n        typeof value === \"function\" ||\n        (value !== null && typeof value === \"object\")\n    ) {\n        for (const propertyKey of Reflect.ownKeys(value)) {\n            if (\n                typeof propertyKey !== \"string\" ||\n                propertyKinds.has(propertyKey)\n            ) {\n                continue;\n            }\n\n            const descriptor = Reflect.getOwnPropertyDescriptor(\n                value,\n                propertyKey\n            );\n            if (isDefined(descriptor)) {\n                propertyKinds.set(propertyKey, getMemberKind(descriptor));\n            }\n        }\n\n        value = Reflect.getPrototypeOf(value);\n    }\n\n    return propertyKinds;\n};\n\nconst addDataProperties = (\n    propertyKinds: Map<string, MemberKind>,\n    propertyNames: readonly string[]\n): void => {\n    for (const propertyName of propertyNames) {\n        if (!propertyKinds.has(propertyName)) {\n            propertyKinds.set(propertyName, \"data\");\n        }\n    }\n};\n\nconst buildPropertyKinds = (): ReadonlyMap<\n    string,\n    ReadonlyMap<string, MemberKind>\n> => {\n    const result = new Map<string, ReadonlyMap<string, MemberKind>>();\n\n    for (const nativeTypeName of nativeGlobalNames) {\n        const globalValue = safeCastTo<unknown>(\n            Reflect.get(globalThis, nativeTypeName)\n        );\n        if (!isDefined(globalValue)) {\n            continue;\n        }\n\n        result.set(\n            `${nativeTypeName}:static`,\n            collectPropertyKinds(globalValue)\n        );\n\n        if (typeof globalValue === \"function\") {\n            const prototypeValue = safeCastTo<unknown>(\n                Reflect.get(globalValue, \"prototype\")\n            );\n            const instanceKinds = new Map(collectPropertyKinds(prototypeValue));\n            const dataProperties = instanceDataProperties[nativeTypeName] ?? [];\n\n            addDataProperties(instanceKinds, dataProperties);\n\n            if (setHas(typedArrayNames, nativeTypeName)) {\n                addDataProperties(instanceKinds, [\n                    \"buffer\",\n                    \"byteLength\",\n                    \"byteOffset\",\n                    \"length\",\n                ]);\n            }\n\n            result.set(`${nativeTypeName}:instance`, instanceKinds);\n        }\n    }\n\n    return result;\n};\n\nconst propertyKindsByAccess = buildPropertyKinds();\n\nconst isUnshadowedNativeIdentifier = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    identifier: Readonly<es.Identifier>\n): identifier is es.Identifier & Readonly<{ name: NativeTypeName }> => {\n    if (!isNativeTypeName(identifier.name)) {\n        return false;\n    }\n\n    let scope: null | TSESLint.Scope.Scope =\n        context.sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        const variable = scope.set.get(identifier.name);\n        if (isDefined(variable)) {\n            return variable.defs.length === 0;\n        }\n\n        scope = scope.upper;\n    }\n\n    return true;\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.ChainExpression ||\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSInstantiationExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst getStaticPropertyName = (\n    memberExpression: Readonly<es.MemberExpression>\n): null | string => {\n    const { computed, property } = memberExpression;\n\n    if (!computed && property.type === AST_NODE_TYPES.Identifier) {\n        return property.name;\n    }\n\n    if (computed && property.type === AST_NODE_TYPES.Literal) {\n        return typeof property.value === \"string\" ||\n            typeof property.value === \"number\"\n            ? String(property.value)\n            : null;\n    }\n\n    if (\n        computed &&\n        property.type === AST_NODE_TYPES.TemplateLiteral &&\n        property.expressions.length === 0\n    ) {\n        return arrayFirst(property.quasis)?.value.cooked ?? null;\n    }\n\n    return null;\n};\n\nconst getObjectPropertyName = (\n    property: Readonly<es.Property>\n): null | string => {\n    if (!property.computed && property.key.type === AST_NODE_TYPES.Identifier) {\n        return property.key.name;\n    }\n\n    if (property.key.type === AST_NODE_TYPES.Literal) {\n        return typeof property.key.value === \"string\" ||\n            typeof property.key.value === \"number\"\n            ? String(property.key.value)\n            : null;\n    }\n\n    return null;\n};\n\nconst objectExpressionMayOwnProperty = (\n    objectExpression: Readonly<es.ObjectExpression>,\n    propertyName: string\n): boolean =>\n    objectExpression.properties.some(\n        (property) =>\n            property.type === AST_NODE_TYPES.SpreadElement ||\n            getObjectPropertyName(property) === propertyName\n    );\n\nconst inferLiteralType = (\n    literal: Readonly<es.Literal>\n): NativeTypeName | null => {\n    if (literal.value instanceof RegExp) {\n        return \"RegExp\";\n    }\n\n    if (typeof literal.value === \"bigint\") {\n        return \"BigInt\";\n    }\n\n    if (typeof literal.value === \"boolean\") {\n        return \"Boolean\";\n    }\n\n    if (typeof literal.value === \"number\") {\n        return \"Number\";\n    }\n\n    return typeof literal.value === \"string\" ? \"String\" : null;\n};\n\nconst toInstanceAccess = (name: NativeTypeName): NativeAccess => ({\n    name,\n    side: \"instance\",\n});\n\nconst booleanResultBinaryOperators: ReadonlySet<\n    Exclude<es.BinaryExpression[\"operator\"], \"in\">\n> = new Set([\n    \"!=\",\n    \"!==\",\n    \"<\",\n    \"<=\",\n    \"==\",\n    \"===\",\n    \">\",\n    \">=\",\n    \"instanceof\",\n]);\n\n/* eslint-disable @typescript-eslint/no-use-before-define -- Binary and general expression inference are intentionally mutually recursive. */\nconst inferBinaryType = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    expression: Readonly<es.BinaryExpression>\n): NativeAccess | null => {\n    if (expression.operator === \"in\") {\n        return toInstanceAccess(\"Boolean\");\n    }\n\n    if (setHas(booleanResultBinaryOperators, expression.operator)) {\n        return toInstanceAccess(\"Boolean\");\n    }\n\n    const left = inferNativeAccess(context, expression.left);\n    const right = inferNativeAccess(context, expression.right);\n    if (left === null || right === null) {\n        return null;\n    }\n\n    if (expression.operator === \"+\") {\n        const stringCoercingTypes: ReadonlySet<NativeTypeName> = new Set([\n            \"Array\",\n            \"Object\",\n            \"RegExp\",\n            \"String\",\n        ]);\n        if (\n            setHas(stringCoercingTypes, left.name) ||\n            setHas(stringCoercingTypes, right.name)\n        ) {\n            return toInstanceAccess(\"String\");\n        }\n    }\n\n    if (\n        left.name === \"BigInt\" &&\n        right.name === \"BigInt\" &&\n        expression.operator !== \">>>\"\n    ) {\n        return toInstanceAccess(\"BigInt\");\n    }\n\n    const numericInputTypes: ReadonlySet<NativeTypeName> = new Set([\n        \"Boolean\",\n        \"Number\",\n    ]);\n    return setHas(numericInputTypes, left.name) &&\n        setHas(numericInputTypes, right.name)\n        ? toInstanceAccess(\"Number\")\n        : null;\n};\n\nconst inferObjectConstructorResult = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    callArguments: readonly Readonly<es.CallExpressionArgument>[]\n): NativeAccess | null => {\n    const firstArgument = arrayFirst(callArguments);\n    if (!isDefined(firstArgument)) {\n        return toInstanceAccess(\"Object\");\n    }\n\n    if (firstArgument.type === AST_NODE_TYPES.SpreadElement) {\n        return null;\n    }\n\n    const unwrappedArgument = unwrapExpression(firstArgument);\n    if (\n        unwrappedArgument.type === AST_NODE_TYPES.Literal &&\n        unwrappedArgument.value === null\n    ) {\n        return toInstanceAccess(\"Object\");\n    }\n\n    // Object(value) returns object values unchanged, so their own properties\n    // cannot be validated from Object.prototype alone.\n    if (unwrappedArgument.type === AST_NODE_TYPES.ObjectExpression) {\n        return null;\n    }\n\n    return inferNativeAccess(context, unwrappedArgument);\n};\n\nconst inferIdentifierAccess = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    identifier: Readonly<es.Identifier>\n): NativeAccess | null =>\n    isUnshadowedNativeIdentifier(context, identifier)\n        ? { name: identifier.name, side: \"static\" }\n        : null;\n\nconst inferPrototypeAccess = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    expression: Readonly<es.MemberExpression>\n): NativeAccess | null => {\n    const propertyName = getStaticPropertyName(expression);\n    if (\n        propertyName !== \"prototype\" ||\n        expression.object.type !== AST_NODE_TYPES.Identifier ||\n        !isUnshadowedNativeIdentifier(context, expression.object)\n    ) {\n        return null;\n    }\n\n    return toInstanceAccess(expression.object.name);\n};\n\nconst inferConstructedAccess = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    expression: Readonly<es.NewExpression>\n): NativeAccess | null => {\n    if (\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        !isUnshadowedNativeIdentifier(context, expression.callee) ||\n        expression.callee.name === \"Proxy\"\n    ) {\n        return null;\n    }\n\n    return expression.callee.name === \"Object\"\n        ? inferObjectConstructorResult(context, expression.arguments)\n        : toInstanceAccess(expression.callee.name);\n};\n\nconst inferCalledAccess = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    expression: Readonly<es.CallExpression>\n): NativeAccess | null => {\n    if (\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        !isUnshadowedNativeIdentifier(context, expression.callee)\n    ) {\n        return null;\n    }\n\n    if (expression.callee.name === \"Object\") {\n        return inferObjectConstructorResult(context, expression.arguments);\n    }\n\n    const resultName = callableNativeResults[expression.callee.name];\n    return isDefined(resultName) ? toInstanceAccess(resultName) : null;\n};\n\nconst inferDirectAccess = (\n    expression: Readonly<es.Expression>\n):\n    | NativeAccess\n    | null\n    | undefined => {\n    if (expression.type === AST_NODE_TYPES.ArrayExpression) {\n        return toInstanceAccess(\"Array\");\n    }\n\n    if (expression.type === AST_NODE_TYPES.ObjectExpression) {\n        return toInstanceAccess(\"Object\");\n    }\n\n    if (expression.type === AST_NODE_TYPES.TemplateLiteral) {\n        return toInstanceAccess(\"String\");\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        expression.type === AST_NODE_TYPES.FunctionExpression\n    ) {\n        return toInstanceAccess(\"Function\");\n    }\n\n    if (expression.type === AST_NODE_TYPES.Literal) {\n        const nativeType = inferLiteralType(expression);\n        return nativeType === null ? null : toInstanceAccess(nativeType);\n    }\n\n    return undefined;\n};\n\nconst inferNativeAccess = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    rawExpression: Readonly<es.Expression>\n): NativeAccess | null => {\n    const expression = unwrapExpression(rawExpression);\n    const directAccess = inferDirectAccess(expression);\n    if (isDefined(directAccess)) {\n        return directAccess;\n    }\n\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return inferIdentifierAccess(context, expression);\n    }\n\n    if (expression.type === AST_NODE_TYPES.BinaryExpression) {\n        return inferBinaryType(context, expression);\n    }\n\n    if (expression.type === AST_NODE_TYPES.MemberExpression) {\n        return inferPrototypeAccess(context, expression);\n    }\n\n    if (expression.type === AST_NODE_TYPES.NewExpression) {\n        return inferConstructedAccess(context, expression);\n    }\n\n    return expression.type === AST_NODE_TYPES.CallExpression\n        ? inferCalledAccess(context, expression)\n        : null;\n};\n/* eslint-enable @typescript-eslint/no-use-before-define -- End mutually recursive expression inference. */\n\nconst isIndexProperty = (\n    access: Readonly<NativeAccess>,\n    name: string\n): boolean =>\n    access.side === \"instance\" &&\n    /^(?:0|[1-9]\\d*)$/v.test(name) &&\n    (access.name === \"Array\" ||\n        access.name === \"String\" ||\n        isTypedArrayName(access.name));\n\nconst isCallUsage = (\n    memberExpression: Readonly<es.MemberExpression>\n): boolean =>\n    memberExpression.parent.type === AST_NODE_TYPES.CallExpression &&\n    memberExpression.parent.callee === memberExpression;\n\n/**\n * Disallow consuming non-native members on statically recognizable built-ins.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        MemberExpression: (\n            memberExpression: Readonly<es.MemberExpression>\n        ): void => {\n            const propertyName = getStaticPropertyName(memberExpression);\n            if (propertyName === null) {\n                return;\n            }\n\n            const unwrappedObject = unwrapExpression(memberExpression.object);\n            if (\n                unwrappedObject.type === AST_NODE_TYPES.ObjectExpression &&\n                objectExpressionMayOwnProperty(unwrappedObject, propertyName)\n            ) {\n                return;\n            }\n\n            if (\n                propertyName === \"prototype\" &&\n                unwrappedObject.type === AST_NODE_TYPES.FunctionExpression\n            ) {\n                return;\n            }\n\n            const nativeAccess = inferNativeAccess(\n                context,\n                memberExpression.object\n            );\n            if (\n                nativeAccess === null ||\n                isIndexProperty(nativeAccess, propertyName)\n            ) {\n                return;\n            }\n\n            const propertyKinds = propertyKindsByAccess.get(\n                `${nativeAccess.name}:${nativeAccess.side}`\n            );\n            if (!isDefined(propertyKinds)) {\n                return;\n            }\n\n            const memberKind = propertyKinds.get(propertyName);\n            if (\n                !isDefined(memberKind) ||\n                (memberKind !== \"method\" && isCallUsage(memberExpression))\n            ) {\n                context.report({\n                    data: {\n                        nativeTypeName: nativeAccess.name,\n                        propertyName,\n                    },\n                    messageId: \"forbidden\",\n                    node: memberExpression,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow usage of non-native members on built-in JavaScript objects.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-use-extend-native\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Avoid using '{{nativeTypeName}}.{{propertyName}}' when it is not part of the native JavaScript API.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-use-extend-native\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\nimport type { Parameters as RecheckParameters } from \"recheck\";\nimport type { UnknownRecord } from \"type-fest\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { checkSync as runSynchronousRecheck } from \"recheck\";\nimport { arrayFirst, isDefined, keyIn, setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype ComplexityType = \"exponential\" | \"polynomial\";\n\ntype MessageIds = \"checkerError\" | \"vulnerable\";\n\ntype Options = readonly [RuleOption?];\n\ntype RecheckDiagnostics = ReturnType<typeof runSynchronousRecheck>;\n\ntype RecheckEnvironmentKey = \"RECHECK_BIN\" | \"RECHECK_JAR\";\n\ntype RecheckEnvironmentOverrides = Readonly<\n    Partial<Record<RecheckEnvironmentKey, string>>\n>;\n\ntype RuleOption = Readonly<\n    RecheckParameters & {\n        readonly ignoreErrors?: boolean;\n        readonly permittableComplexities?: readonly ComplexityType[];\n    }\n>;\n\nconst requireFromWorkingDirectory = createRequire(\n    path.join(process.cwd(), \"package.json\")\n);\n\nconst isUnknownRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isModuleNotFoundError = (error: unknown): boolean => {\n    if (!isUnknownRecord(error)) {\n        return false;\n    }\n\n    return keyIn(error, \"code\") && error[\"code\"] === \"MODULE_NOT_FOUND\";\n};\n\nconst createRequireFromPluginPackage = (): ReturnType<typeof createRequire> => {\n    try {\n        return createRequire(\n            requireFromWorkingDirectory.resolve(\n                \"eslint-plugin-etc-misc/package.json\"\n            )\n        );\n    } catch (error) {\n        if (isModuleNotFoundError(error)) {\n            return requireFromWorkingDirectory;\n        }\n\n        throw error;\n    }\n};\n\nconst requireFromPluginPackage = createRequireFromPluginPackage();\n\nconst shouldOverrideRuntimePath = (currentPath: string | undefined): boolean =>\n    !isDefined(currentPath) ||\n    path.basename(currentPath).toLowerCase() === \"package.json\";\n\nconst resolvePackageSiblingFile = (\n    packageJsonSpecifier: string,\n    siblingFileName: string\n): null | string => {\n    try {\n        const packageJsonPath =\n            requireFromPluginPackage.resolve(packageJsonSpecifier);\n\n        return path.join(path.dirname(packageJsonPath), siblingFileName);\n    } catch (error) {\n        if (isModuleNotFoundError(error)) {\n            return null;\n        }\n\n        throw error;\n    }\n};\n\nconst resolveRecheckJarPath = (): null | string =>\n    resolvePackageSiblingFile(\"recheck-jar/package.json\", \"recheck.jar\");\n\nconst resolveRecheckWindowsBinaryPath = (): null | string => {\n    if (process.platform !== \"win32\" || process.arch !== \"x64\") {\n        return null;\n    }\n\n    return resolvePackageSiblingFile(\n        \"recheck-windows-x64/package.json\",\n        \"recheck.exe\"\n    );\n};\n\nconst recheckJarPath =\n    process.platform === \"win32\" ? resolveRecheckJarPath() : null;\n\nconst recheckWindowsBinaryPath =\n    process.platform === \"win32\" ? resolveRecheckWindowsBinaryPath() : null;\n\n/* eslint-disable n/no-process-env -- recheck exposes backend runtime paths only through environment variables, so the rule temporarily normalizes them while invoking the analyzer. */\n\nconst deleteRecheckEnvironmentValue = (key: RecheckEnvironmentKey): void => {\n    if (key === \"RECHECK_BIN\") {\n        delete process.env[\"RECHECK_BIN\"];\n\n        return;\n    }\n\n    delete process.env[\"RECHECK_JAR\"];\n};\n\nconst getRecheckEnvironmentValue = (\n    key: RecheckEnvironmentKey\n): string | undefined =>\n    key === \"RECHECK_BIN\"\n        ? process.env[\"RECHECK_BIN\"]\n        : process.env[\"RECHECK_JAR\"];\n\nconst setRecheckEnvironmentValue = (\n    key: RecheckEnvironmentKey,\n    value: string\n): void => {\n    if (key === \"RECHECK_BIN\") {\n        process.env[\"RECHECK_BIN\"] = value;\n\n        return;\n    }\n\n    process.env[\"RECHECK_JAR\"] = value;\n};\n\nconst getRecheckEnvironmentOverrides = (): RecheckEnvironmentOverrides => {\n    if (process.platform !== \"win32\") {\n        return {};\n    }\n\n    const overrides: Partial<Record<RecheckEnvironmentKey, string>> = {};\n\n    if (\n        recheckJarPath !== null &&\n        shouldOverrideRuntimePath(getRecheckEnvironmentValue(\"RECHECK_JAR\"))\n    ) {\n        overrides.RECHECK_JAR = recheckJarPath;\n    }\n\n    if (\n        recheckWindowsBinaryPath !== null &&\n        shouldOverrideRuntimePath(getRecheckEnvironmentValue(\"RECHECK_BIN\"))\n    ) {\n        overrides.RECHECK_BIN = recheckWindowsBinaryPath;\n    }\n\n    return overrides;\n};\n\nconst restoreEnvironmentValue = (\n    key: RecheckEnvironmentKey,\n    value: string | undefined\n): void => {\n    if (!isDefined(value)) {\n        deleteRecheckEnvironmentValue(key);\n\n        return;\n    }\n\n    setRecheckEnvironmentValue(key, value);\n};\n\nconst withRecheckEnvironmentOverrides = <TResult>(\n    callback: () => TResult\n): TResult => {\n    const overrides = getRecheckEnvironmentOverrides();\n    const previousBin = getRecheckEnvironmentValue(\"RECHECK_BIN\");\n    const previousJar = getRecheckEnvironmentValue(\"RECHECK_JAR\");\n\n    if (isDefined(overrides.RECHECK_BIN)) {\n        setRecheckEnvironmentValue(\"RECHECK_BIN\", overrides.RECHECK_BIN);\n    }\n\n    if (isDefined(overrides.RECHECK_JAR)) {\n        setRecheckEnvironmentValue(\"RECHECK_JAR\", overrides.RECHECK_JAR);\n    }\n\n    try {\n        return callback();\n    } finally {\n        restoreEnvironmentValue(\"RECHECK_BIN\", previousBin);\n        restoreEnvironmentValue(\"RECHECK_JAR\", previousJar);\n    }\n};\n\nconst runRecheck = (\n    source: string,\n    flags: string,\n    parameters: Readonly<RecheckParameters>\n): RecheckDiagnostics =>\n    withRecheckEnvironmentOverrides(() =>\n        runSynchronousRecheck(source, flags, parameters)\n    );\n\n/* eslint-enable n/no-process-env -- Re-enable after the recheck environment wrapper helpers. */\n\nconst getStaticStringValue = (node: Readonly<es.Expression>): null | string => {\n    if (\n        node.type === AST_NODE_TYPES.Literal &&\n        typeof node.value === \"string\"\n    ) {\n        return node.value;\n    }\n\n    if (\n        node.type === AST_NODE_TYPES.TemplateLiteral &&\n        node.expressions.length === 0 &&\n        node.quasis.length === 1\n    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? null;\n    }\n\n    return null;\n};\n\nconst isNonSpreadArgument = (\n    argument: Readonly<es.CallExpressionArgument>\n): argument is Readonly<es.Expression> =>\n    argument.type !== AST_NODE_TYPES.SpreadElement;\n\nconst isRegExpConstructorCall = (\n    node: Readonly<es.CallExpression | es.NewExpression>\n): boolean => {\n    if (\n        node.callee.type !== AST_NODE_TYPES.Identifier ||\n        node.callee.name !== \"RegExp\"\n    ) {\n        return false;\n    }\n\n    if (node.arguments.length === 0 || node.arguments.length > 2) {\n        return false;\n    }\n\n    const sourceArgument = arrayFirst(node.arguments);\n\n    if (!isDefined(sourceArgument) || !isNonSpreadArgument(sourceArgument)) {\n        return false;\n    }\n\n    const sourceValue = getStaticStringValue(sourceArgument);\n\n    if (sourceValue === null) {\n        return false;\n    }\n\n    const flagsArgument = node.arguments[1];\n\n    if (flagsArgument === undefined) {\n        return true;\n    }\n\n    if (flagsArgument.type === AST_NODE_TYPES.SpreadElement) {\n        return false;\n    }\n\n    return isDefined(getStaticStringValue(flagsArgument));\n};\n\nconst getStaticFlagsValue = (\n    argument: Readonly<es.CallExpressionArgument> | undefined\n): null | string => {\n    if (!isDefined(argument)) {\n        return \"\";\n    }\n\n    if (!isNonSpreadArgument(argument)) {\n        return null;\n    }\n\n    return getStaticStringValue(argument);\n};\n\nconst getDiagnosticsErrorMessage = (\n    error: Readonly<{\n        readonly kind: string;\n        readonly message?: string;\n    }>\n): string => {\n    if (keyIn(error, \"message\") && typeof error.message === \"string\") {\n        return error.message;\n    }\n\n    return \"No additional details provided.\";\n};\n\nconst getThrownErrorMessage = (error: unknown): string => {\n    if (error instanceof Error && error.message.length > 0) {\n        return error.message;\n    }\n\n    if (typeof error === \"string\" && error.length > 0) {\n        return error;\n    }\n\n    return \"No additional details provided.\";\n};\n\n/**\n * Detect ReDoS-vulnerable regular expressions using `recheck`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [rawOptions]) => {\n        const options = rawOptions ?? {};\n        const {\n            ignoreErrors = true,\n            permittableComplexities = [],\n            ...recheckParameters\n        } = options;\n        const allowedComplexities = new Set(permittableComplexities);\n\n        const reportDiagnostics = (\n            node: Readonly<es.Node>,\n            source: string,\n            flags: string\n        ): void => {\n            const diagnostics = (() => {\n                try {\n                    return runRecheck(source, flags, recheckParameters);\n                } catch (error) {\n                    if (ignoreErrors) {\n                        return null;\n                    }\n\n                    context.report({\n                        data: {\n                            kind: \"unexpected\",\n                            message: getThrownErrorMessage(error),\n                        },\n                        messageId: \"checkerError\",\n                        node,\n                    });\n\n                    return null;\n                }\n            })();\n\n            if (diagnostics === null) {\n                return;\n            }\n\n            if (diagnostics.status === \"safe\") {\n                return;\n            }\n\n            if (diagnostics.status === \"vulnerable\") {\n                if (setHas(allowedComplexities, diagnostics.complexity.type)) {\n                    return;\n                }\n\n                context.report({\n                    data: {\n                        summary: diagnostics.complexity.summary,\n                    },\n                    messageId: \"vulnerable\",\n                    node,\n                });\n\n                return;\n            }\n\n            if (ignoreErrors) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    kind: diagnostics.error.kind,\n                    message: getDiagnosticsErrorMessage(diagnostics.error),\n                },\n                messageId: \"checkerError\",\n                node,\n            });\n        };\n\n        return {\n            CallExpression: (node: Readonly<es.CallExpression>): void => {\n                if (!isRegExpConstructorCall(node)) {\n                    return;\n                }\n\n                const sourceArgument = arrayFirst(node.arguments);\n\n                if (\n                    !isDefined(sourceArgument) ||\n                    !isNonSpreadArgument(sourceArgument)\n                ) {\n                    return;\n                }\n\n                const source = getStaticStringValue(sourceArgument);\n                const secondArgument = node.arguments[1];\n                const flags = getStaticFlagsValue(secondArgument);\n\n                if (source === null || flags === null) {\n                    return;\n                }\n\n                reportDiagnostics(node, source, flags);\n            },\n            Literal: (node: Readonly<es.Literal>): void => {\n                if (!(node.value instanceof RegExp)) {\n                    return;\n                }\n\n                reportDiagnostics(node, node.value.source, node.value.flags);\n            },\n            NewExpression: (node: Readonly<es.NewExpression>): void => {\n                if (!isRegExpConstructorCall(node)) {\n                    return;\n                }\n\n                const sourceArgument = arrayFirst(node.arguments);\n\n                if (\n                    !isDefined(sourceArgument) ||\n                    !isNonSpreadArgument(sourceArgument)\n                ) {\n                    return;\n                }\n\n                const source = getStaticStringValue(sourceArgument);\n                const secondArgument = node.arguments[1];\n                const flags = getStaticFlagsValue(secondArgument);\n\n                if (source === null || flags === null) {\n                    return;\n                }\n\n                reportDiagnostics(node, source, flags);\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{}],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow ReDoS-vulnerable regular expressions.\",\n            frozen: false,\n            recommended: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-vulnerable\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            checkerError:\n                \"ReDoS analysis failed ({{kind}}): {{message}}. Consider setting ignoreErrors to true for this pattern.\",\n            vulnerable:\n                \"Potential ReDoS-vulnerable regular expression detected ({{summary}}).\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for ReDoS analysis, including recheck parameters and local rule behavior flags.\",\n                properties: {\n                    ignoreErrors: {\n                        description:\n                            \"Whether to suppress errors returned by the ReDoS analyzer.\",\n                        type: \"boolean\",\n                    },\n                    permittableComplexities: {\n                        description:\n                            \"List of vulnerable complexity categories to permit without reporting.\",\n                        items: {\n                            enum: [\"polynomial\", \"exponential\"],\n                            type: \"string\",\n                        },\n                        type: \"array\",\n                        uniqueItems: true,\n                    },\n                    timeout: {\n                        description:\n                            \"Maximum analysis time budget in milliseconds passed through to recheck.\",\n                        type: [\"number\", \"null\"],\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-vulnerable\",\n});\n\nexport default rule;\n", "import { assertDefined } from \"ts-extras\";\n\nimport { adaptExternalRule } from \"../_internal/create-external-rule.js\";\nimport { getCoreRule } from \"../_internal/get-core-rule.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\nconst externalRule = getCoreRule(\"accessor-pairs\");\n\n/**\n * Proxy of ESLint core `accessor-pairs` with plugin-local docs URL.\n */\nconst adaptedRule: ReturnType<typeof adaptExternalRule> = adaptExternalRule(\n    externalRule,\n    \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-writeonly\"\n);\nconst baseDocs = adaptedRule.meta.docs;\nassertDefined(baseDocs);\n\nconst rule: typeof adaptedRule = {\n    ...adaptedRule,\n    meta: {\n        ...adaptedRule.meta,\n        docs: {\n            ...baseDocs,\n            recommended: false,\n        },\n    },\n};\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because this rule directly proxies ESLint core accessor-pairs.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"eslint\",\n                url: \"https://eslint.org/docs/latest/rules/\",\n            },\n            rule: {\n                name: \"accessor-pairs\",\n                url: \"https://eslint.org/docs/latest/rules/accessor-pairs\",\n            },\n        }),\n    ],\n    ruleId: \"no-writeonly\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"inconsistent\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly maxProperties?: number;\n    }>,\n];\n\nconst isSingleLine = (node: Readonly<es.ObjectExpression>): boolean =>\n    node.loc.start.line === node.loc.end.line;\n\n/**\n * Enforce object literal line format based on configured property count.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => ({\n        ObjectExpression: (node: Readonly<es.ObjectExpression>): void => {\n            const maxProperties = options.maxProperties ?? 1;\n            if (node.properties.length <= 1) {\n                return;\n            }\n\n            const shouldBeSingleLine = node.properties.length <= maxProperties;\n            const isCurrentlySingleLine = isSingleLine(node);\n            if (isCurrentlySingleLine === shouldBeSingleLine) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    expected: shouldBeSingleLine ? \"single-line\" : \"multi-line\",\n                },\n                messageId: \"inconsistent\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        defaultOptions: [{ maxProperties: 1 }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce object literal line format based on property count.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/object-format\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            inconsistent:\n                \"Object literal should use {{expected}} formatting for this size.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for object literal line formatting thresholds.\",\n                properties: {\n                    maxProperties: {\n                        description:\n                            \"Maximum number of properties allowed on one line.\",\n                        minimum: 0,\n                        type: \"number\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"layout\",\n    },\n    name: \"object-format\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly names?: readonly string[];\n    }>,\n];\n\nconst getExportedNames = (\n    node: Readonly<es.ExportNamedDeclaration>\n): readonly string[] => {\n    if (node.specifiers.length > 0) {\n        return node.specifiers.flatMap((specifier) => {\n            if (specifier.exported.type === AST_NODE_TYPES.Identifier) {\n                return [specifier.exported.name];\n            }\n\n            return [];\n        });\n    }\n\n    const declaration = node.declaration;\n    if (declaration === null) {\n        return [];\n    }\n\n    if (\n        declaration.type === AST_NODE_TYPES.FunctionDeclaration ||\n        declaration.type === AST_NODE_TYPES.ClassDeclaration\n    ) {\n        return declaration.id === null ? [] : [declaration.id.name];\n    }\n\n    if (declaration.type === AST_NODE_TYPES.VariableDeclaration) {\n        let names: readonly string[] = [];\n\n        for (const declarator of declaration.declarations) {\n            if (declarator.id.type === AST_NODE_TYPES.Identifier) {\n                names = [...names, declarator.id.name];\n            }\n        }\n\n        return names;\n    }\n\n    return [];\n};\n\n/**\n * Restrict exported names to a configured allow-list.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const allowedNames = new Set(options.names ?? [\"default\"]);\n\n        return {\n            ExportDefaultDeclaration: (\n                node: Readonly<es.ExportDefaultDeclaration>\n            ): void => {\n                if (setHas(allowedNames, \"default\")) {\n                    return;\n                }\n\n                context.report({\n                    data: {\n                        name: \"default\",\n                    },\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n            ExportNamedDeclaration: (\n                node: Readonly<es.ExportNamedDeclaration>\n            ): void => {\n                const exportedNames = getExportedNames(node);\n                for (const name of exportedNames) {\n                    if (setHas(allowedNames, name)) {\n                        continue;\n                    }\n\n                    context.report({\n                        data: {\n                            name,\n                        },\n                        messageId: \"forbidden\",\n                        node,\n                    });\n\n                    return;\n                }\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{ names: [\"default\"] }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow exported names that are not in a configured allow-list.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/only-export-name\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Export '{{name}}' is not allowed by only-export-name.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description: \"Configuration for the export name allow-list.\",\n                properties: {\n                    names: {\n                        description:\n                            \"Allowed export names. Default is ['default'].\",\n                        items: {\n                            minLength: 1,\n                            type: \"string\",\n                        },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"only-export-name\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \"Property > FunctionExpression.value:not([params.0.name='this'])\";\n\n/**\n * Prefer arrow-function object properties over function-expression properties.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require arrow-function properties when `this` is not required.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-arrow-function-property\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer arrow function properties.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"prefer-arrow-function-property\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \":not(VariableDeclarator) > CallExpression > Identifier.callee[name='require']\";\n\n/**\n * Require `require(...)` calls to be assigned to a const variable.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require require() calls to be assigned to const.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-const-require\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Assign require() results to a const variable.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"prefer-const-require\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { getConstrainedTypeAtLocation } from \"@typescript-eslint/type-utils\";\nimport { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayJoin, isDefined } from \"ts-extras\";\nimport * as tsutils from \"tsutils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggest\";\n\ntype Options = readonly [RuleOptions?];\n\ntype RuleOptions = Readonly<{\n    readonly allowIntersection?: boolean;\n    readonly allowLocal?: boolean;\n}>;\n\nconst defaultOptions: Options = [{}];\n\nconst isExportedTypeAlias = (\n    typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>\n): boolean =>\n    typeAliasDeclaration.parent.type ===\n        AST_NODE_TYPES.ExportNamedDeclaration &&\n    typeAliasDeclaration.parent.declaration === typeAliasDeclaration;\n\nconst getTypeAliasDeclarationParent = (\n    node: Readonly<es.Node> | undefined\n): Readonly<es.TSTypeAliasDeclaration> | undefined =>\n    node?.type === AST_NODE_TYPES.TSTypeAliasDeclaration ? node : undefined;\n\nconst formatTypeParameters = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    typeParameters:\n        | Readonly<es.TSTypeParameterDeclaration>\n        | Readonly<es.TSTypeParameterInstantiation>\n        | undefined\n): string =>\n    typeParameters === undefined ? \"\" : sourceCode.getText(typeParameters);\n\nconst createTypeLiteralFixText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>,\n    typeLiteralNode: Readonly<es.TSTypeLiteral>\n): string => {\n    const aliasTypeParameters = formatTypeParameters(\n        sourceCode,\n        typeAliasDeclaration.typeParameters\n    );\n    const literalText = sourceCode.getText(typeLiteralNode);\n\n    return `interface ${typeAliasDeclaration.id.name}${aliasTypeParameters} ${literalText}`;\n};\n\nconst createFunctionTypeFixText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>,\n    functionTypeNode: Readonly<es.TSFunctionType>\n): string => {\n    const aliasTypeParameters = formatTypeParameters(\n        sourceCode,\n        typeAliasDeclaration.typeParameters\n    );\n    const functionTypeParameters = formatTypeParameters(\n        sourceCode,\n        functionTypeNode.typeParameters\n    );\n    const parametersText = arrayJoin(\n        functionTypeNode.params.map((parameter) =>\n            sourceCode.getText(parameter)\n        ),\n        \", \"\n    );\n    const returnTypeText =\n        functionTypeNode.returnType === undefined\n            ? \"void\"\n            : sourceCode.getText(functionTypeNode.returnType.typeAnnotation);\n\n    return `interface ${typeAliasDeclaration.id.name}${aliasTypeParameters} { ${functionTypeParameters}(${parametersText}): ${returnTypeText}; }`;\n};\n\nconst createIntersectionFixText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>,\n    literalNode: Readonly<es.TSTypeLiteral> | undefined,\n    referenceNodes: readonly Readonly<es.TSTypeReference>[]\n): string => {\n    const aliasTypeParameters = formatTypeParameters(\n        sourceCode,\n        typeAliasDeclaration.typeParameters\n    );\n    const baseTypesText = arrayJoin(\n        referenceNodes.map((referenceNode) =>\n            sourceCode.getText(referenceNode)\n        ),\n        \", \"\n    );\n    const extendsClause =\n        baseTypesText.length > 0 ? ` extends ${baseTypesText}` : \"\";\n    const bodyText =\n        literalNode === undefined ? \"{}\" : sourceCode.getText(literalNode);\n\n    return `interface ${typeAliasDeclaration.id.name}${aliasTypeParameters}${extendsClause} ${bodyText}`;\n};\n\nconst canSafelyConvertIntersection = (\n    intersectionTypeNode: Readonly<es.TSIntersectionType>,\n    parserServices: Readonly<Parameters<typeof getConstrainedTypeAtLocation>[0]>\n):\n    | undefined\n    | {\n          readonly literals: readonly Readonly<es.TSTypeLiteral>[];\n          readonly references: readonly Readonly<es.TSTypeReference>[];\n      } => {\n    let literals: readonly es.TSTypeLiteral[] = [];\n    let references: readonly es.TSTypeReference[] = [];\n\n    for (const intersectionMember of intersectionTypeNode.types) {\n        if (intersectionMember.type === AST_NODE_TYPES.TSTypeLiteral) {\n            literals = [...literals, intersectionMember];\n        } else if (intersectionMember.type === AST_NODE_TYPES.TSTypeReference) {\n            references = [...references, intersectionMember];\n        } else {\n            return undefined;\n        }\n    }\n\n    if (literals.length > 1) {\n        return undefined;\n    }\n\n    for (const reference of references) {\n        const referenceType = getConstrainedTypeAtLocation(\n            parserServices,\n            reference\n        );\n        if (tsutils.unionTypeParts(referenceType).length > 1) {\n            return undefined;\n        }\n    }\n\n    return {\n        literals,\n        references,\n    };\n};\n\nconst hasFullTypeInformation = (\n    parserServices: Readonly<ReturnType<typeof ESLintUtils.getParserServices>>\n): parserServices is Parameters<typeof getConstrainedTypeAtLocation>[0] =>\n    parserServices.program !== null;\n\nconst reportTypeAlias = (\n    context: Readonly<TSESLint.RuleContext<MessageIds, Options>>,\n    typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>,\n    replacementText: string\n): void => {\n    const fix: TSESLint.ReportFixFunction = (fixer) =>\n        fixer.replaceText(typeAliasDeclaration, replacementText);\n\n    context.report({\n        fix,\n        messageId: \"forbidden\",\n        node: typeAliasDeclaration.id,\n        suggest: [\n            {\n                fix,\n                messageId: \"suggest\",\n            },\n        ],\n    });\n};\n\n/**\n * Prefer interface declarations when a type alias can be represented safely.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const [{ allowIntersection = true, allowLocal = false } = {}] =\n            context.options;\n        const sourceCode = context.sourceCode;\n        const parserServices = ESLintUtils.getParserServices(context, true);\n        const typedParserServices = hasFullTypeInformation(parserServices)\n            ? parserServices\n            : undefined;\n\n        const shouldSkipForAllowLocal = (\n            typeAliasDeclaration: Readonly<es.TSTypeAliasDeclaration>\n        ): boolean => allowLocal && !isExportedTypeAlias(typeAliasDeclaration);\n\n        return {\n            \"TSTypeAliasDeclaration > TSFunctionType\": (\n                functionTypeNode: Readonly<es.TSFunctionType>\n            ) => {\n                const typeAliasDeclaration = getTypeAliasDeclarationParent(\n                    functionTypeNode.parent\n                );\n                if (typeAliasDeclaration === undefined) {\n                    return;\n                }\n\n                if (shouldSkipForAllowLocal(typeAliasDeclaration)) {\n                    return;\n                }\n\n                reportTypeAlias(\n                    context,\n                    typeAliasDeclaration,\n                    createFunctionTypeFixText(\n                        sourceCode,\n                        typeAliasDeclaration,\n                        functionTypeNode\n                    )\n                );\n            },\n            \"TSTypeAliasDeclaration > TSIntersectionType\": (\n                intersectionTypeNode: Readonly<es.TSIntersectionType>\n            ) => {\n                if (allowIntersection || typedParserServices === undefined) {\n                    return;\n                }\n\n                const typeAliasDeclaration = getTypeAliasDeclarationParent(\n                    intersectionTypeNode.parent\n                );\n                if (typeAliasDeclaration === undefined) {\n                    return;\n                }\n\n                if (shouldSkipForAllowLocal(typeAliasDeclaration)) {\n                    return;\n                }\n\n                const conversion = canSafelyConvertIntersection(\n                    intersectionTypeNode,\n                    typedParserServices\n                );\n                if (!isDefined(conversion)) {\n                    return;\n                }\n\n                reportTypeAlias(\n                    context,\n                    typeAliasDeclaration,\n                    createIntersectionFixText(\n                        sourceCode,\n                        typeAliasDeclaration,\n                        arrayFirst(conversion.literals),\n                        conversion.references\n                    )\n                );\n            },\n            \"TSTypeAliasDeclaration > TSTypeLiteral\": (\n                typeLiteralNode: Readonly<es.TSTypeLiteral>\n            ) => {\n                const typeAliasDeclaration = getTypeAliasDeclarationParent(\n                    typeLiteralNode.parent\n                );\n                if (typeAliasDeclaration === undefined) {\n                    return;\n                }\n\n                if (shouldSkipForAllowLocal(typeAliasDeclaration)) {\n                    return;\n                }\n\n                reportTypeAlias(\n                    context,\n                    typeAliasDeclaration,\n                    createTypeLiteralFixText(\n                        sourceCode,\n                        typeAliasDeclaration,\n                        typeLiteralNode\n                    )\n                );\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{}],\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow equivalent type aliases when an interface declaration can be used.\",\n            frozen: true,\n            recommended: false,\n            suggestion: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-interface\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Type alias can be declared using an interface.\",\n            suggest: \"Use an interface instead of a type alias.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Options for allowing local aliases and intersection aliases.\",\n                properties: {\n                    allowIntersection: {\n                        description:\n                            \"Whether type aliases that use intersections are allowed.\",\n                        type: \"boolean\",\n                    },\n                    allowLocal: {\n                        description:\n                            \"Whether non-exported type aliases are allowed.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"prefer-interface\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message:\n        \"Deprecated in favor of @typescript-eslint/consistent-type-definitions.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"consistent-type-definitions\",\n                url: \"https://typescript-eslint.io/rules/consistent-type-definitions\",\n            },\n        }),\n    ],\n    ruleId: \"prefer-interface\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds =\n    | \"forbiddenGT\"\n    | \"forbiddenGTE\"\n    | \"suggestLT\"\n    | \"suggestLTE\";\n\nconst createFixes = (\n    fixer: Readonly<TSESLint.RuleFixer>,\n    context: Readonly<TSESLint.RuleContext<MessageIds, readonly []>>,\n    expression: Readonly<es.BinaryExpression>,\n    operatorText: \"<\" | \"<=\"\n): readonly TSESLint.RuleFix[] => {\n    const { left, right } = expression;\n    const operatorToken = context.sourceCode.getTokenAfter(left);\n    if (operatorToken === null) {\n        return [];\n    }\n\n    return [\n        fixer.replaceText(left, context.sourceCode.getText(right)),\n        fixer.replaceTextRange(operatorToken.range, operatorText),\n        fixer.replaceText(right, context.sourceCode.getText(left)),\n    ];\n};\n\n/**\n * Disallow greater-than comparisons in favor of less-than comparisons.\n */\nconst rule: ReturnType<typeof ruleCreator<readonly [], MessageIds>> =\n    ruleCreator<readonly [], MessageIds>({\n        create: (context) => ({\n            \"BinaryExpression[operator='>'], BinaryExpression[operator='>=']\": (\n                expression: Readonly<es.BinaryExpression>\n            ) => {\n                const useLessThanOrEqual = expression.operator === \">=\";\n                const fixOperator = useLessThanOrEqual ? \"<=\" : \"<\";\n                const messageId = useLessThanOrEqual\n                    ? \"forbiddenGTE\"\n                    : \"forbiddenGT\";\n                const suggestionMessageId = useLessThanOrEqual\n                    ? \"suggestLTE\"\n                    : \"suggestLT\";\n\n                context.report({\n                    fix: (fixer) =>\n                        createFixes(fixer, context, expression, fixOperator),\n                    messageId,\n                    node: expression,\n                    suggest: [\n                        {\n                            fix: (fixer) =>\n                                createFixes(\n                                    fixer,\n                                    context,\n                                    expression,\n                                    fixOperator\n                                ),\n                            messageId: suggestionMessageId,\n                        },\n                    ],\n                });\n            },\n        }),\n        meta: {\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description: \"disallow greater-than comparisons.\",\n                frozen: false,\n                recommended: false,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-less-than\",\n            },\n            fixable: \"code\",\n            hasSuggestions: true,\n            languages: [\"js/js\"],\n            messages: {\n                forbiddenGT: \"Greater-than comparisons are forbidden.\",\n                forbiddenGTE:\n                    \"Greater-than-or-equal comparisons are forbidden.\",\n                suggestLT: \"Use a less-than comparison instead.\",\n                suggestLTE: \"Use a less-than-or-equal comparison instead.\",\n            },\n            schema: [],\n            type: \"suggestion\",\n        },\n        name: \"prefer-less-than\",\n    });\n\nexport default rule;\n", "import { adaptExternalRule } from \"../_internal/create-external-rule.js\";\nimport { getCoreRule } from \"../_internal/get-core-rule.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\nconst externalRule = getCoreRule(\"prefer-object-has-own\");\n\nconst rule: ReturnType<typeof adaptExternalRule> = adaptExternalRule(\n    externalRule,\n    \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-object-has-own\"\n);\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of ESLint core prefer-object-has-own.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"eslint\",\n                url: \"https://eslint.org/docs/latest/rules/\",\n            },\n            rule: {\n                name: \"prefer-object-has-own\",\n                url: \"https://eslint.org/docs/latest/rules/prefer-object-has-own\",\n            },\n        }),\n    ],\n    ruleId: \"prefer-object-has-own\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"Program[body.length>1]:has(ExportDefaultDeclaration)\";\n\n/**\n * Disallow additional exports when a default export exists.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow additional exports alongside a default export.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/prefer-only-export\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Export default should be only export.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"prefer-only-export\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    findVariable,\n    getStaticClassMemberName,\n} from \"../_internal/jsx-react-analysis.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype ClassNode = es.ClassDeclaration | es.ClassExpression;\n\ninterface ClassState {\n    hasErrorBoundaryMethod: boolean;\n    hasJsx: boolean;\n    hasRenderMethod: boolean;\n    readonly isKnownReactComponent: boolean;\n    readonly node: Readonly<ClassNode>;\n}\n\ntype MessageIds = \"preferFunctionComponent\";\n\ntype Options = readonly [RuleOption?];\n\ntype RuleOption = Readonly<{\n    readonly allowErrorBoundary?: boolean;\n    readonly allowJsxUtilityClass?: boolean;\n}>;\n\nconst defaultOptions: Options = [\n    {\n        allowErrorBoundary: true,\n        allowJsxUtilityClass: false,\n    },\n];\n\nconst supportedComponentSources: ReadonlySet<string> = new Set([\n    \"inferno\",\n    \"preact\",\n    \"preact/compat\",\n    \"react\",\n]);\n\nconst componentBaseExportNames: ReadonlySet<string> = new Set([\n    \"Component\",\n    \"PureComponent\",\n]);\n\nconst getImportedName = (\n    specifier: Readonly<es.ImportSpecifier>\n): string | undefined =>\n    specifier.imported.type === AST_NODE_TYPES.Identifier\n        ? specifier.imported.name\n        : typeof specifier.imported.value === \"string\"\n          ? specifier.imported.value\n          : undefined;\n\nconst getSupportedImportBinding = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n):\n    | Readonly<\n          | es.ImportDefaultSpecifier\n          | es.ImportNamespaceSpecifier\n          | es.ImportSpecifier\n      >\n    | undefined => {\n    const variable = findVariable(sourceCode, identifier);\n    const definition = arrayFirst(variable?.defs ?? []);\n\n    if (\n        variable?.defs.length !== 1 ||\n        definition?.type !== TSESLint.Scope.DefinitionType.ImportBinding ||\n        definition.parent.type !== AST_NODE_TYPES.ImportDeclaration ||\n        definition.parent.importKind === \"type\" ||\n        typeof definition.parent.source.value !== \"string\" ||\n        !setHas(supportedComponentSources, definition.parent.source.value) ||\n        definition.node.type === AST_NODE_TYPES.TSImportEqualsDeclaration\n    ) {\n        return undefined;\n    }\n\n    return definition.node;\n};\n\nconst isDirectComponentBase = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const binding = getSupportedImportBinding(sourceCode, identifier);\n\n    return (\n        binding?.type === AST_NODE_TYPES.ImportSpecifier &&\n        binding.importKind !== \"type\" &&\n        setHas(componentBaseExportNames, getImportedName(binding) ?? \"\")\n    );\n};\n\nconst isComponentNamespace = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const binding = getSupportedImportBinding(sourceCode, identifier);\n\n    return (\n        binding?.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n        binding?.type === AST_NODE_TYPES.ImportNamespaceSpecifier\n    );\n};\n\nconst isKnownReactComponent = (\n    node: Readonly<ClassNode>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): boolean => {\n    const superClass = node.superClass;\n\n    if (superClass === null) {\n        return false;\n    }\n\n    if (superClass.type === AST_NODE_TYPES.Identifier) {\n        return isDirectComponentBase(sourceCode, superClass);\n    }\n\n    return (\n        superClass.type === AST_NODE_TYPES.MemberExpression &&\n        !superClass.computed &&\n        superClass.object.type === AST_NODE_TYPES.Identifier &&\n        isComponentNamespace(sourceCode, superClass.object) &&\n        superClass.property.type === AST_NODE_TYPES.Identifier &&\n        setHas(componentBaseExportNames, superClass.property.name)\n    );\n};\n\n/** Prefer function components while preserving class-only error boundaries. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [configuredOption]) => {\n        const option: RuleOption = {\n            allowErrorBoundary: true,\n            allowJsxUtilityClass: false,\n            ...configuredOption,\n        };\n        const classStack: ClassState[] = [];\n\n        const enterClass = (node: Readonly<ClassNode>): void => {\n            classStack.push({\n                hasErrorBoundaryMethod: false,\n                hasJsx: false,\n                hasRenderMethod: false,\n                isKnownReactComponent: isKnownReactComponent(\n                    node,\n                    context.sourceCode\n                ),\n                node,\n            });\n        };\n\n        const exitClass = (): void => {\n            const state = classStack.pop();\n\n            if (!isDefined(state)) {\n                return;\n            }\n\n            const isComponent =\n                state.isKnownReactComponent ||\n                (state.hasJsx &&\n                    (state.hasRenderMethod ||\n                        option.allowJsxUtilityClass !== true));\n\n            if (\n                !isComponent ||\n                (option.allowErrorBoundary !== false &&\n                    state.hasErrorBoundaryMethod)\n            ) {\n                return;\n            }\n\n            context.report({\n                messageId: \"preferFunctionComponent\",\n                node: state.node.id ?? state.node,\n            });\n        };\n\n        const markJsx = (): void => {\n            const state = arrayAt(classStack, -1);\n\n            if (isDefined(state)) {\n                state.hasJsx = true;\n            }\n        };\n\n        return {\n            ClassDeclaration: enterClass,\n            \"ClassDeclaration:exit\": exitClass,\n            ClassExpression: enterClass,\n            \"ClassExpression:exit\": exitClass,\n            JSXElement: markJsx,\n            JSXFragment: markJsx,\n            MethodDefinition: (node: Readonly<es.MethodDefinition>): void => {\n                const state = arrayAt(classStack, -1);\n\n                if (!isDefined(state)) {\n                    return;\n                }\n\n                const memberName = getStaticClassMemberName(node);\n\n                if (memberName === \"render\" && !node.static) {\n                    state.hasRenderMethod = true;\n                }\n\n                if (\n                    (memberName === \"componentDidCatch\" && !node.static) ||\n                    (memberName === \"getDerivedStateFromError\" && node.static)\n                ) {\n                    state.hasErrorBoundaryMethod = true;\n                }\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [\n            {\n                allowErrorBoundary: true,\n                allowJsxUtilityClass: false,\n            },\n        ],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require React-style components to use functions when class-only APIs are unnecessary.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/react-prefer-function-component\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            preferFunctionComponent:\n                \"Write this class component as a function component; keep a class only when a class-only React API is required.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for class-only APIs and JSX utility classes.\",\n                properties: {\n                    allowErrorBoundary: {\n                        description:\n                            \"Allow classes that implement a React error-boundary lifecycle.\",\n                        type: \"boolean\",\n                    },\n                    allowJsxUtilityClass: {\n                        description:\n                            \"Allow non-component classes that produce JSX outside a render method.\",\n                        type: \"boolean\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"react-prefer-function-component\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES, AST_TOKEN_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayLast, setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype JSDocKind =\n    | \"arrow-function\"\n    | \"class\"\n    | \"function\"\n    | \"method\"\n    | \"type\";\n\ntype MessageIds = \"missing\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly kinds?: readonly JSDocKind[];\n    }>,\n];\n\nconst defaultKinds: readonly JSDocKind[] = [\n    \"arrow-function\",\n    \"class\",\n    \"function\",\n    \"method\",\n    \"type\",\n];\n\ntype RuleContext = TSESLint.RuleContext<MessageIds, Options>;\n\ntype SourceCode = TSESLint.SourceCode;\n\nconst hasJSDocComment = (\n    sourceCode: Readonly<SourceCode>,\n    node: Readonly<es.Node>\n): boolean => {\n    const comments = sourceCode.getCommentsBefore(node);\n\n    const comment = arrayLast(comments);\n    return (\n        comment?.type === AST_TOKEN_TYPES.Block && comment.value.startsWith(\"*\")\n    );\n};\n\nconst reportMissingJSDoc = (\n    context: Readonly<RuleContext>,\n    node: Readonly<es.Node>\n): void => {\n    if (hasJSDocComment(context.sourceCode, node)) {\n        return;\n    }\n\n    context.report({\n        messageId: \"missing\",\n        node,\n    });\n};\n\n/**\n * Require JSDoc comments for configured declaration kinds.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const kinds = new Set(options.kinds ?? defaultKinds);\n\n        return {\n            ClassDeclaration: (node: Readonly<es.ClassDeclaration>): void => {\n                if (!setHas(kinds, \"class\") || node.id === null) {\n                    return;\n                }\n\n                reportMissingJSDoc(context, node);\n            },\n            FunctionDeclaration: (\n                node: Readonly<es.FunctionDeclaration>\n            ): void => {\n                if (!setHas(kinds, \"function\") || node.id === null) {\n                    return;\n                }\n\n                reportMissingJSDoc(context, node);\n            },\n            MethodDefinition: (node: Readonly<es.MethodDefinition>): void => {\n                if (\n                    !setHas(kinds, \"method\") ||\n                    node.kind === \"constructor\" ||\n                    node.key.type !== AST_NODE_TYPES.Identifier\n                ) {\n                    return;\n                }\n\n                reportMissingJSDoc(context, node);\n            },\n            \"TSTypeAliasDeclaration, TSInterfaceDeclaration\": (\n                node: Readonly<es.Node>\n            ): void => {\n                if (!setHas(kinds, \"type\")) {\n                    return;\n                }\n\n                if (\n                    node.type === AST_NODE_TYPES.TSInterfaceDeclaration ||\n                    node.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n                ) {\n                    reportMissingJSDoc(context, node);\n                }\n            },\n            VariableDeclarator: (\n                node: Readonly<es.VariableDeclarator>\n            ): void => {\n                if (\n                    !setHas(kinds, \"arrow-function\") ||\n                    node.id.type !== AST_NODE_TYPES.Identifier ||\n                    node.init?.type !==\n                        AST_NODE_TYPES.ArrowFunctionExpression ||\n                    node.parent.kind !== \"const\"\n                ) {\n                    return;\n                }\n\n                reportMissingJSDoc(context, node.parent);\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{ kinds: defaultKinds }],\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"require JSDoc comments for configured declaration kinds.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/require-jsdoc\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            missing: \"Missing JSDoc comment.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for declaration kinds that require JSDoc.\",\n                properties: {\n                    kinds: {\n                        description:\n                            \"Declaration kinds that must have a leading JSDoc comment.\",\n                        items: {\n                            enum: [...defaultKinds],\n                            type: \"string\",\n                        },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"require-jsdoc\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of jsdoc/require-jsdoc.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"jsdoc\",\n                url: \"https://github.com/gajus/eslint-plugin-jsdoc\",\n            },\n            rule: {\n                name: \"require-jsdoc\",\n                url: \"https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md\",\n            },\n        }),\n    ],\n    ruleId: \"require-jsdoc\",\n});\n\nexport default deprecatedRule;\n", "import type { ArrayElement } from \"type-fest\";\n\nimport { AST_NODE_TYPES, type TSESTree as es } from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    findVariable,\n    functionContainsJsx,\n    getNamePolicy,\n    isComponentName,\n    unwrapExpression,\n} from \"../_internal/jsx-react-analysis.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport { createDeprecatedRuleInfo } from \"../_internal/rule-deprecation.js\";\n\ntype ComponentFunction =\n    | es.ArrowFunctionExpression\n    | es.FunctionDeclaration\n    | es.FunctionExpression;\n\ntype MessageIds = \"memoRequired\";\n\ntype Options = readonly [RuleOption?];\n\ntype ReactBindings = Readonly<{\n    readonly forwardRefNames: ReadonlySet<string>;\n    readonly memoNames: ReadonlySet<string>;\n    readonly namespaces: ReadonlySet<string>;\n}>;\n\ntype RuleOption = Readonly<{\n    readonly ignoredComponents?: Readonly<Record<string, boolean>>;\n}>;\n\nconst defaultOptions: Options = [{ ignoredComponents: {} }];\n\nconst containsComponentFunction = (\n    functions: ReadonlySet<Readonly<ComponentFunction>>,\n    node: Readonly<ComponentFunction>\n): boolean => setHas(functions, node);\n\ntype ReactImportSpecifier = ArrayElement<es.ImportDeclaration[\"specifiers\"]>;\n\nconst isRuntimeReactImport = (\n    statement: Readonly<es.ProgramStatement>\n): statement is es.ImportDeclaration =>\n    statement.type === AST_NODE_TYPES.ImportDeclaration &&\n    (statement.source.value === \"react\" ||\n        statement.source.value === \"preact/compat\") &&\n    statement.importKind !== \"type\";\n\nconst collectReactImportSpecifier = (\n    specifier: Readonly<ReactImportSpecifier>,\n    forwardRefNames: Set<string>,\n    memoNames: Set<string>,\n    namespaces: Set<string>\n): void => {\n    if (\n        specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n        specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier\n    ) {\n        namespaces.add(specifier.local.name);\n        return;\n    }\n\n    if (\n        specifier.importKind === \"type\" ||\n        specifier.imported.type !== AST_NODE_TYPES.Identifier\n    ) {\n        return;\n    }\n\n    if (specifier.imported.name === \"memo\") {\n        memoNames.add(specifier.local.name);\n        return;\n    }\n\n    if (specifier.imported.name === \"forwardRef\") {\n        forwardRefNames.add(specifier.local.name);\n    }\n};\n\nconst collectReactBindings = (program: Readonly<es.Program>): ReactBindings => {\n    const forwardRefNames = new Set<string>();\n    const memoNames = new Set<string>();\n    const namespaces = new Set<string>();\n\n    for (const statement of program.body) {\n        if (!isRuntimeReactImport(statement)) {\n            continue;\n        }\n\n        for (const specifier of statement.specifiers) {\n            collectReactImportSpecifier(\n                specifier,\n                forwardRefNames,\n                memoNames,\n                namespaces\n            );\n        }\n    }\n\n    return { forwardRefNames, memoNames, namespaces };\n};\n\nconst isNamedReactCall = (\n    node: Readonly<es.CallExpression>,\n    directNames: ReadonlySet<string>,\n    namespaces: ReadonlySet<string>,\n    memberName: \"forwardRef\" | \"memo\"\n): boolean => {\n    const callee = unwrapExpression(node.callee);\n\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return setHas(directNames, callee.name);\n    }\n\n    return (\n        callee.type === AST_NODE_TYPES.MemberExpression &&\n        !callee.computed &&\n        callee.object.type === AST_NODE_TYPES.Identifier &&\n        setHas(namespaces, callee.object.name) &&\n        callee.property.type === AST_NODE_TYPES.Identifier &&\n        callee.property.name === memberName\n    );\n};\n\nconst getComponentFunction = (\n    expression: Readonly<es.Expression>,\n    bindings: Readonly<ReactBindings>\n): Readonly<ComponentFunction> | undefined => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (\n        unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression\n    ) {\n        return unwrappedExpression;\n    }\n\n    if (\n        unwrappedExpression.type !== AST_NODE_TYPES.CallExpression ||\n        !isNamedReactCall(\n            unwrappedExpression,\n            bindings.forwardRefNames,\n            bindings.namespaces,\n            \"forwardRef\"\n        )\n    ) {\n        return undefined;\n    }\n\n    const firstArgument = arrayFirst(unwrappedExpression.arguments);\n\n    return isDefined(firstArgument) &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement\n        ? getComponentFunction(firstArgument, bindings)\n        : undefined;\n};\n\n/** Require exported function components to use React memoization explicitly. */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [configuredOption]) => {\n        const ignoredComponents = configuredOption?.ignoredComponents ?? {};\n        const reportedNodes = new Set<Readonly<ComponentFunction>>();\n        let bindings: ReactBindings = {\n            forwardRefNames: new Set(),\n            memoNames: new Set(),\n            namespaces: new Set(),\n        };\n\n        const isMemoizedExpression = (\n            expression: Readonly<es.Expression>\n        ): boolean => {\n            const unwrappedExpression = unwrapExpression(expression);\n\n            return (\n                unwrappedExpression.type === AST_NODE_TYPES.CallExpression &&\n                isNamedReactCall(\n                    unwrappedExpression,\n                    bindings.memoNames,\n                    bindings.namespaces,\n                    \"memo\"\n                )\n            );\n        };\n\n        const reportFunction = (\n            name: string | undefined,\n            node: Readonly<ComponentFunction>\n        ): void => {\n            if (\n                node.params.length > 2 ||\n                !functionContainsJsx(context.sourceCode, node) ||\n                (isDefined(name) &&\n                    (!isComponentName(name) ||\n                        getNamePolicy(name, ignoredComponents) === true)) ||\n                containsComponentFunction(reportedNodes, node)\n            ) {\n                return;\n            }\n\n            reportedNodes.add(node);\n            context.report({\n                data: { componentName: name ?? \"default export\" },\n                messageId: \"memoRequired\",\n                node:\n                    node.type === AST_NODE_TYPES.FunctionDeclaration\n                        ? (node.id ?? node)\n                        : node,\n            });\n        };\n\n        const inspectExpression = (\n            name: string | undefined,\n            expression: Readonly<es.Expression>\n        ): void => {\n            if (isMemoizedExpression(expression)) {\n                return;\n            }\n\n            const componentFunction = getComponentFunction(\n                expression,\n                bindings\n            );\n\n            if (isDefined(componentFunction)) {\n                reportFunction(name, componentFunction);\n            }\n        };\n\n        const inspectIdentifier = (\n            identifier: Readonly<es.Identifier>\n        ): void => {\n            const variable = findVariable(context.sourceCode, identifier);\n\n            if (variable?.defs.length !== 1) {\n                return;\n            }\n\n            const definitionNode = arrayFirst(variable.defs)?.node;\n\n            if (definitionNode?.type === AST_NODE_TYPES.FunctionDeclaration) {\n                reportFunction(identifier.name, definitionNode);\n                return;\n            }\n\n            if (\n                definitionNode?.type === AST_NODE_TYPES.VariableDeclarator &&\n                definitionNode.init !== null\n            ) {\n                inspectExpression(identifier.name, definitionNode.init);\n            }\n        };\n\n        const inspectNamedDeclaration = (\n            declaration: Readonly<es.ExportNamedDeclaration>\n        ): void => {\n            if (\n                declaration.declaration?.type ===\n                AST_NODE_TYPES.FunctionDeclaration\n            ) {\n                const name = declaration.declaration.id?.name;\n\n                if (isDefined(name)) {\n                    reportFunction(name, declaration.declaration);\n                }\n                return;\n            }\n\n            if (\n                declaration.declaration?.type ===\n                AST_NODE_TYPES.VariableDeclaration\n            ) {\n                for (const declarator of declaration.declaration.declarations) {\n                    if (\n                        declarator.id.type === AST_NODE_TYPES.Identifier &&\n                        declarator.init !== null\n                    ) {\n                        inspectExpression(declarator.id.name, declarator.init);\n                    }\n                }\n                return;\n            }\n\n            if (declaration.source !== null) {\n                return;\n            }\n\n            for (const specifier of declaration.specifiers) {\n                inspectIdentifier(specifier.local);\n            }\n        };\n\n        return {\n            ExportDefaultDeclaration: (\n                node: Readonly<es.ExportDefaultDeclaration>\n            ): void => {\n                if (node.declaration.type === AST_NODE_TYPES.Identifier) {\n                    inspectIdentifier(node.declaration);\n                    return;\n                }\n\n                if (\n                    node.declaration.type === AST_NODE_TYPES.FunctionDeclaration\n                ) {\n                    reportFunction(node.declaration.id?.name, node.declaration);\n                    return;\n                }\n\n                if (\n                    node.declaration.type ===\n                        AST_NODE_TYPES.ArrowFunctionExpression ||\n                    node.declaration.type ===\n                        AST_NODE_TYPES.FunctionExpression ||\n                    node.declaration.type === AST_NODE_TYPES.CallExpression ||\n                    node.declaration.type === AST_NODE_TYPES.ChainExpression\n                ) {\n                    inspectExpression(undefined, node.declaration);\n                }\n            },\n            ExportNamedDeclaration: inspectNamedDeclaration,\n            Program: (node: Readonly<es.Program>): void => {\n                bindings = collectReactBindings(node);\n            },\n        };\n    },\n    defaultOptions,\n    meta: {\n        defaultOptions: [{ ignoredComponents: {} }],\n        deprecated: createDeprecatedRuleInfo({\n            availableUntil: \"4.0.0\",\n            deprecatedSince: \"2.0.0\",\n            message:\n                \"Deprecated because blanket React.memo requirements are not a sound performance policy and conflict with compiler-managed memoization.\",\n            ruleId: \"require-memo\",\n        }),\n        docs: {\n            deprecated: true,\n            description:\n                \"require exported function components to use explicit React memoization.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/require-memo\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            memoRequired:\n                \"Exported component '{{componentName}}' is not wrapped in React.memo(); add memoization only when profiling shows stable props make it beneficial.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for exported components that do not require memoization.\",\n                properties: {\n                    ignoredComponents: {\n                        additionalProperties: {\n                            description:\n                                \"Whether an exact component name or glob pattern is ignored.\",\n                            type: \"boolean\",\n                        },\n                        description:\n                            \"Exact component names and glob patterns mapped to ignore policies.\",\n                        type: \"object\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"require-memo\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    normalizeSyntaxSelector,\n    type SyntaxSelectorOption,\n} from \"../_internal/syntax-selectors.js\";\n\ntype MessageIds = \"customMessage\" | \"missing\";\n\ntype Options = readonly [\n    Readonly<{\n        readonly selectors?: readonly SyntaxSelectorOption[];\n    }>,\n];\n\n/**\n * Require at least one occurrence of each configured syntax selector.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context, [options]) => {\n        const entries = (options.selectors ?? []).map((selector) =>\n            normalizeSyntaxSelector(selector)\n        );\n        const counters = entries.map(() => 0);\n\n        let selectorListeners: Readonly<\n            Record<string, (node: Readonly<es.Node>) => void>\n        > = {};\n\n        for (const [index, entry] of entries.entries()) {\n            selectorListeners = {\n                ...selectorListeners,\n                [entry.selector]: (): void => {\n                    const count = counters[index] ?? 0;\n                    counters[index] = count + 1;\n                },\n            };\n        }\n\n        return {\n            ...selectorListeners,\n            \"Program:exit\": (node: Readonly<es.Program>): void => {\n                for (const [index, entry] of entries.entries()) {\n                    const count = counters[index] ?? 0;\n                    if (count === 0) {\n                        if (isDefined(entry.message)) {\n                            context.report({\n                                data: {\n                                    message: entry.message,\n                                },\n                                messageId: \"customMessage\",\n                                node,\n                            });\n                        } else {\n                            context.report({\n                                data: {\n                                    selector: entry.selector,\n                                },\n                                messageId: \"missing\",\n                                node,\n                            });\n                        }\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [{ selectors: [] }],\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require at least one match for each configured AST selector.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/require-syntax\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            customMessage: \"{{message}}\",\n            missing: \"Required syntax '{{selector}}' was not found.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                description:\n                    \"Configuration for syntax selectors that must appear at least once.\",\n                properties: {\n                    selectors: {\n                        description:\n                            \"Selector list. Each entry can be a selector string or a selector/message object.\",\n                        items: {\n                            oneOf: [\n                                {\n                                    minLength: 1,\n                                    type: \"string\",\n                                },\n                                {\n                                    additionalProperties: false,\n                                    properties: {\n                                        message: {\n                                            minLength: 1,\n                                            type: \"string\",\n                                        },\n                                        selector: {\n                                            minLength: 1,\n                                            type: \"string\",\n                                        },\n                                    },\n                                    required: [\"selector\"],\n                                    type: \"object\",\n                                },\n                            ],\n                        },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"suggestion\",\n    },\n    name: \"require-syntax\",\n});\n\nexport default rule;\n", "import {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport canonicalRule from \"./no-unstable-react-children.js\";\n\nconst compatibilityAlias: typeof canonicalRule = {\n    ...canonicalRule,\n    // eslint-disable-next-line @typescript-eslint/unbound-method -- Rule create callbacks have no receiver state; preserving identity makes this a true alias.\n    create: canonicalRule.create,\n    meta: {\n        ...canonicalRule.meta,\n        docs: {\n            ...canonicalRule.meta.docs,\n            description: \"deprecated alias for no-unstable-react-children.\",\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/require-usememo-children\",\n        },\n    },\n};\n\n/** Preserve the historical rule ID as a compatibility alias through v3. */\nconst rule: typeof compatibilityAlias = withDeprecatedRuleLifecycle(\n    compatibilityAlias,\n    {\n        availableUntil: \"4.0.0\",\n        deprecatedSince: \"2.0.0\",\n        message:\n            \"Deprecated compatibility alias. Use no-unstable-react-children instead.\",\n        replacedBy: [\n            createReplacementRuleInfo({\n                rule: {\n                    name: \"no-unstable-react-children\",\n                    url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-children\",\n                },\n            }),\n        ],\n        ruleId: \"require-usememo-children\",\n    }\n);\n\nexport default rule;\n", "import {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport canonicalRule from \"./no-unstable-react-values.js\";\n\nconst compatibilityAlias: typeof canonicalRule = {\n    ...canonicalRule,\n    // eslint-disable-next-line @typescript-eslint/unbound-method -- Rule create callbacks have no receiver state; preserving identity makes this a true alias.\n    create: canonicalRule.create,\n    meta: {\n        ...canonicalRule.meta,\n        docs: {\n            ...canonicalRule.meta.docs,\n            description: \"deprecated alias for no-unstable-react-values.\",\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/require-usememo\",\n        },\n    },\n};\n\n/** Preserve the historical rule ID as a compatibility alias through v3. */\nconst rule: typeof compatibilityAlias = withDeprecatedRuleLifecycle(\n    compatibilityAlias,\n    {\n        availableUntil: \"4.0.0\",\n        deprecatedSince: \"2.0.0\",\n        message:\n            \"Deprecated compatibility alias. Use no-unstable-react-values instead.\",\n        replacedBy: [\n            createReplacementRuleInfo({\n                rule: {\n                    name: \"no-unstable-react-values\",\n                    url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/no-unstable-react-values\",\n                },\n            }),\n        ],\n        ruleId: \"require-usememo\",\n    }\n);\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector = String.raw`Identifier[name=/[^$\\w]/u]`;\n\n/**\n * Restrict identifiers to latin letters, digits, underscores, and dollar signs.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require identifiers to contain only english characters, digits, underscore, or dollar sign.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/restrict-identifier-characters\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Identifier must consist of english characters and dollar sign.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"restrict-identifier-characters\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of ESLint core id-match.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"eslint\",\n                url: \"https://eslint.org/docs/latest/rules/\",\n            },\n            rule: {\n                name: \"id-match\",\n                url: \"https://eslint.org/docs/latest/rules/id-match\",\n            },\n        }),\n    ],\n    ruleId: \"restrict-identifier-characters\",\n});\n\nexport default deprecatedRule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESLint fixer API callback signatures. */\n\nimport type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport {\n    arrayAt,\n    arrayFirst,\n    arrayJoin,\n    isDefined,\n    isPresent,\n} from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"incorrectSorting\";\n\ntype Options = readonly [];\n\nconst getSortableValue = (\n    element: Readonly<es.Expression | es.SpreadElement>\n): string | undefined => {\n    if (element.type === AST_NODE_TYPES.Literal) {\n        return String(element.value);\n    }\n\n    return undefined;\n};\n\nconst buildFix =\n    (\n        sourceCode: Readonly<TSESLint.SourceCode>,\n        node: Readonly<es.ArrayExpression>,\n        sorted: readonly (es.Expression | es.SpreadElement)[]\n    ): TSESLint.ReportFixFunction =>\n    (fixer): TSESLint.RuleFix => {\n        const [first, last] = [\n            arrayFirst(node.elements),\n            arrayAt(node.elements, -1),\n        ];\n        if (!isPresent(first) || !isPresent(last)) {\n            return fixer.replaceText(node, sourceCode.getText(node));\n        }\n\n        return fixer.replaceTextRange(\n            [arrayFirst(first.range), last.range[1]],\n            arrayJoin(\n                sorted.map((element) => sourceCode.getText(element)),\n                \", \"\n            )\n        );\n    };\n\n/**\n * Enforce alphabetical sorting for literal array elements.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ArrayExpression: (node: Readonly<es.ArrayExpression>): void => {\n            let elements: readonly (es.Expression | es.SpreadElement)[] = [];\n            for (const element of node.elements) {\n                if (element !== null) {\n                    elements = [...elements, element];\n                }\n            }\n            if (elements.length < 2) {\n                return;\n            }\n\n            const sortKeys = elements.map((element) =>\n                getSortableValue(element)\n            );\n            if (sortKeys.some((sortKey) => !isDefined(sortKey))) {\n                return;\n            }\n\n            // eslint-disable-next-line unicorn/no-array-sort -- Node >=16.0 support baseline\n            const sorted = [...elements].sort((a, b) =>\n                (getSortableValue(a) ?? \"\").localeCompare(\n                    getSortableValue(b) ?? \"\"\n                )\n            );\n            const isUnchanged = elements.every(\n                (element, index) => element === sorted[index]\n            );\n            if (isUnchanged) {\n                return;\n            }\n\n            context.report({\n                fix: buildFix(context.sourceCode, node, sorted),\n                messageId: \"incorrectSorting\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce alphabetical sorting for literal array elements.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-array\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            incorrectSorting:\n                \"Array literal elements should be sorted alphabetically.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-array\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of perfectionist/sort-arrays.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"perfectionist\",\n                url: \"https://perfectionist.dev/\",\n            },\n            rule: {\n                name: \"sort-arrays\",\n                url: \"https://perfectionist.dev/rules/sort-arrays\",\n            },\n        }),\n    ],\n    ruleId: \"sort-array\",\n});\n\nexport default deprecatedRule;\n\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Re-enable after file-scoped fixer callback implementations. */\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \"TSInterfaceBody > TSCallSignatureDeclaration:not(:first-child)\";\n\n/**\n * Require interface call signatures to appear before all other members.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require call signatures to be the first member in interfaces.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-call-signature\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Call signature should be first.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-call-signature\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of @typescript-eslint/member-ordering.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"member-ordering\",\n                url: \"https://typescript-eslint.io/rules/member-ordering/\",\n            },\n        }),\n    ],\n    ruleId: \"sort-call-signature\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"incorrectSortingOrder\";\n\ntype Options = readonly [];\n\nconst memberName = (\n    member: Readonly<es.MethodDefinition | es.PropertyDefinition>\n): string | undefined => {\n    if (member.key.type === AST_NODE_TYPES.Identifier) {\n        return member.key.name;\n    }\n\n    if (\n        member.key.type === AST_NODE_TYPES.Literal &&\n        typeof member.key.value === \"string\"\n    ) {\n        return member.key.value;\n    }\n\n    return undefined;\n};\n\n/**\n * Enforce alphabetical sorting of class members.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ClassBody: (node: Readonly<es.ClassBody>): void => {\n            let members: readonly (\n                es.MethodDefinition | es.PropertyDefinition\n            )[] = [];\n            for (const member of node.body) {\n                if (\n                    member.type === AST_NODE_TYPES.PropertyDefinition ||\n                    member.type === AST_NODE_TYPES.MethodDefinition\n                ) {\n                    members = [...members, member];\n                }\n            }\n\n            let previousName = \"\";\n            let hasPreviousName = false;\n            for (const member of members) {\n                const currentName = memberName(member);\n                if (!isDefined(currentName)) {\n                    continue;\n                }\n\n                if (\n                    hasPreviousName &&\n                    currentName.localeCompare(previousName) < 0\n                ) {\n                    context.report({\n                        messageId: \"incorrectSortingOrder\",\n                        node: member,\n                    });\n                    return;\n                }\n\n                previousName = currentName;\n                hasPreviousName = true;\n            }\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description: \"enforce alphabetical sorting of class members.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-class-members\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            incorrectSortingOrder:\n                \"Class members should appear in alphabetical order.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-class-members\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message:\n        \"Deprecated in favor of sort-class-members/sort-class-members or perfectionist sorting rules.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"sort-class-members\",\n                url: \"https://www.npmjs.com/package/eslint-plugin-sort-class-members\",\n            },\n            rule: {\n                name: \"sort-class-members\",\n                url: \"https://www.npmjs.com/package/eslint-plugin-sort-class-members\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"perfectionist\",\n                url: \"https://perfectionist.dev/\",\n            },\n        }),\n    ],\n    ruleId: \"sort-class-members\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst disallowedSelector =\n    \"TSInterfaceBody > TSConstructSignatureDeclaration:not(:first-child)\";\n\n/**\n * Require interface construct signatures to appear before all other members.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [disallowedSelector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require construct signatures to be the first member in interfaces.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-construct-signature\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Construct signature should be first.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-construct-signature\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of @typescript-eslint/member-ordering.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"member-ordering\",\n                url: \"https://typescript-eslint.io/rules/member-ordering/\",\n            },\n        }),\n    ],\n    ruleId: \"sort-construct-signature\",\n});\n\nexport default deprecatedRule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESLint fixer API callback signatures. */\n\nimport type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayJoin, arrayLast } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"incorrectSortingOrder\";\n\ntype Options = readonly [];\n\nconst toName = (specifier: Readonly<es.ExportSpecifier>): string =>\n    specifier.exported.type === AST_NODE_TYPES.Identifier\n        ? specifier.exported.name\n        : specifier.exported.value;\n\nconst buildFix = (\n    fixer: TSESLint.RuleFixer,\n    node: Readonly<es.ExportNamedDeclaration>,\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    sorted: readonly es.ExportSpecifier[]\n): TSESLint.RuleFix => {\n    const startRange = arrayFirst(node.specifiers)?.range ?? node.range;\n    const endRange = arrayLast(node.specifiers)?.range ?? node.range;\n\n    return fixer.replaceTextRange(\n        [arrayFirst(startRange), arrayLast(endRange)],\n        arrayJoin(\n            sorted.map((specifier) => sourceCode.getText(specifier)),\n            \", \"\n        )\n    );\n};\n\n/**\n * Enforce alphabetical sorting of named export specifiers.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ExportNamedDeclaration: (\n            node: Readonly<es.ExportNamedDeclaration>\n        ): void => {\n            let exportSpecifiers: readonly es.ExportSpecifier[] = [];\n            for (const specifier of node.specifiers) {\n                exportSpecifiers = [...exportSpecifiers, specifier];\n            }\n            if (exportSpecifiers.length < 2) {\n                return;\n            }\n\n            // eslint-disable-next-line unicorn/no-array-sort -- Node >=16.0 support baseline\n            const sorted = [...exportSpecifiers].sort((a, b) =>\n                toName(a).localeCompare(toName(b))\n            );\n            const isUnchanged = exportSpecifiers.every(\n                (specifier, index) => specifier === sorted[index]\n            );\n            if (isUnchanged) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) =>\n                    buildFix(fixer, node, context.sourceCode, sorted),\n                messageId: \"incorrectSortingOrder\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce alphabetical sorting of named export specifiers.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-export-specifiers\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            incorrectSortingOrder:\n                \"Named export specifiers should be sorted alphabetically.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-export-specifiers\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of perfectionist/sort-named-exports.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"perfectionist\",\n                url: \"https://perfectionist.dev/\",\n            },\n            rule: {\n                name: \"sort-named-exports\",\n                url: \"https://perfectionist.dev/rules/sort-named-exports\",\n            },\n        }),\n    ],\n    ruleId: \"sort-export-specifiers\",\n});\n\nexport default deprecatedRule;\n\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Re-enable after file-scoped fixer callback implementations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESLint fixer API callback signatures. */\n\nimport type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayJoin, arrayLast, isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"incorrectSorting\";\n\ntype Options = readonly [];\n\nconst keyName = (property: Readonly<es.Property>): string | undefined => {\n    if (property.key.type === AST_NODE_TYPES.Identifier) {\n        return property.key.name;\n    }\n\n    if (\n        property.key.type === AST_NODE_TYPES.Literal &&\n        typeof property.key.value === \"string\"\n    ) {\n        return property.key.value;\n    }\n\n    return undefined;\n};\n\nconst buildFix =\n    (\n        sourceCode: Readonly<TSESLint.SourceCode>,\n        properties: readonly es.Property[]\n    ): TSESLint.ReportFixFunction =>\n    (fixer): TSESLint.RuleFix => {\n        const first = arrayFirst(properties);\n\n        const last = arrayLast(properties);\n        if (first === undefined || last === undefined) {\n            return fixer.insertTextAfterRange([0, 0], \"\");\n        }\n\n        // eslint-disable-next-line unicorn/no-array-sort -- Node >=16.0 support baseline\n        const sorted = [...properties].sort((a, b) =>\n            (keyName(a) ?? \"\").localeCompare(keyName(b) ?? \"\")\n        );\n\n        return fixer.replaceTextRange(\n            [arrayFirst(first.range), last.range[1]],\n            arrayJoin(\n                sorted.map((property) => sourceCode.getText(property)),\n                \", \"\n            )\n        );\n    };\n\n/**\n * Enforce alphabetical sorting of object literal keys.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        ObjectExpression: (node: Readonly<es.ObjectExpression>): void => {\n            let properties: readonly es.Property[] = [];\n            for (const property of node.properties) {\n                if (\n                    property.type === AST_NODE_TYPES.Property &&\n                    property.kind === \"init\" &&\n                    !property.computed\n                ) {\n                    properties = [...properties, property];\n                }\n            }\n            if (properties.length < 2) {\n                return;\n            }\n\n            let previousName = \"\";\n            let hasPreviousName = false;\n            for (const property of properties) {\n                const currentName = keyName(property);\n                if (!isDefined(currentName)) {\n                    return;\n                }\n\n                if (\n                    hasPreviousName &&\n                    currentName.localeCompare(previousName) < 0\n                ) {\n                    context.report({\n                        fix: buildFix(context.sourceCode, properties),\n                        messageId: \"incorrectSorting\",\n                        node: property,\n                    });\n                    return;\n                }\n\n                previousName = currentName;\n                hasPreviousName = true;\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"enforce alphabetical sorting of object literal keys.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-keys\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            incorrectSorting:\n                \"Object keys should appear in alphabetical order.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-keys\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message: \"Deprecated in favor of perfectionist/sort-objects.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"perfectionist\",\n                url: \"https://perfectionist.dev/\",\n            },\n            rule: {\n                name: \"sort-objects\",\n                url: \"https://perfectionist.dev/rules/sort-objects\",\n            },\n        }),\n    ],\n    ruleId: \"sort-keys\",\n});\n\nexport default deprecatedRule;\n\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Re-enable after file-scoped fixer callback implementations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESLint fixer API callback signatures. */\n\nimport type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { arrayFirst, arrayJoin, arrayLast } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"incorrectSorting\";\n\ntype Options = readonly [];\n\nconst commentText = (comment: Readonly<es.Comment>): string =>\n    comment.value.trim();\n\nconst buildReplacement = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    comments: readonly es.Comment[]\n): string =>\n    arrayJoin(\n        comments\n            .map((comment) => sourceCode.getText(comment))\n            // eslint-disable-next-line unicorn/no-array-sort -- Node >=16.0 support baseline\n            .sort((a, b) => a.localeCompare(b)),\n        \"\\n\"\n    );\n\n/**\n * Enforce alphabetical ordering of top-of-file comments.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        Program: (node: Readonly<es.Program>): void => {\n            const firstNode = arrayFirst(node.body);\n            if (firstNode === undefined) {\n                return;\n            }\n\n            const comments = context.sourceCode\n                .getCommentsBefore(firstNode)\n                .filter(\n                    (comment) => comment.loc.end.line < firstNode.loc.start.line\n                );\n            if (comments.length < 2) {\n                return;\n            }\n\n            const firstComment = arrayFirst(comments);\n            if (firstComment === undefined) {\n                return;\n            }\n\n            const lastComment = arrayLast(comments) ?? firstComment;\n\n            // eslint-disable-next-line unicorn/no-array-sort -- Node >=16.0 support baseline\n            const sorted = [...comments].sort((a, b) =>\n                commentText(a).localeCompare(commentText(b))\n            );\n            const isSorted = comments.every(\n                (comment, index) => comment === sorted[index]\n            );\n            if (isSorted) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer): TSESLint.RuleFix =>\n                    fixer.replaceTextRange(\n                        [arrayFirst(firstComment.range), lastComment.range[1]],\n                        buildReplacement(context.sourceCode, comments)\n                    ),\n                messageId: \"incorrectSorting\",\n                node: firstComment,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce alphabetical ordering of top-of-file comments.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/sort-top-comments\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            incorrectSorting:\n                \"Top-level comments should be sorted alphabetically.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"sort-top-comments\",\n});\n\nexport default rule;\n\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Re-enable after file-scoped fixer callback implementations. */\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayLast } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst isValidCaseBody = (node: Readonly<es.SwitchCase>): boolean => {\n    if (node.consequent.length === 0) {\n        return true;\n    }\n\n    const [firstStatement] = node.consequent;\n    const lastStatement = arrayLast(node.consequent);\n    if (firstStatement === undefined || lastStatement === undefined) {\n        return true;\n    }\n\n    const isStartsOnFollowingLine =\n        firstStatement.loc.start.line > node.loc.start.line;\n    const isStartsWithBlock =\n        firstStatement.type === AST_NODE_TYPES.BlockStatement;\n    const isEndsWithBreak =\n        lastStatement.type === AST_NODE_TYPES.BreakStatement ||\n        isStartsWithBlock;\n\n    return (isStartsOnFollowingLine || isStartsWithBlock) && isEndsWithBreak;\n};\n\n/**\n * Enforce consistent spacing and break placement inside switch cases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        SwitchCase: (node: Readonly<es.SwitchCase>): void => {\n            if (isValidCaseBody(node)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"enforce consistent spacing and break placement in switch cases.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/switch-case-spacing\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Case body should start on a new line and end with break.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"switch-case-spacing\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of @stylistic/switch-colon-spacing.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@stylistic\",\n                url: \"https://eslint.style/\",\n            },\n            rule: {\n                name: \"switch-colon-spacing\",\n                url: \"https://eslint.style/rules/switch-colon-spacing\",\n            },\n        }),\n    ],\n    ruleId: \"switch-case-spacing\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport {\n    arrayFirst,\n    arrayJoin,\n    arrayLast,\n    isEmpty,\n    stringSplit,\n} from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"invalidFormat\";\n\ntype Options = readonly [];\n\nconst isMultilineTemplate = (node: Readonly<es.TemplateLiteral>): boolean =>\n    node.loc.start.line !== node.loc.end.line;\n\nconst hasExpectedBoundaryNewlines = (\n    node: Readonly<es.TemplateLiteral>\n): boolean => {\n    const first = arrayFirst(node.quasis)?.value.raw ?? \"\";\n    const last = arrayLast(node.quasis)?.value.raw ?? \"\";\n\n    return first.startsWith(\"\\n\") && last.endsWith(\"\\n\");\n};\n\nconst normalizeTemplate = (sourceText: string): string => {\n    const lines = stringSplit(sourceText.replaceAll(/\\r\\n?/gv, \"\\n\"), \"\\n\");\n    const contentLines = lines.slice(1, -1);\n    const indents = contentLines\n        .filter((line) => line.trim().length > 0)\n        .map((line) => /^\\s*/v.exec(line)?.[0].length ?? 0);\n    const minIndent = isEmpty(indents) ? 0 : Math.min(...indents);\n\n    const normalizedContent = arrayJoin(\n        contentLines\n            .map((line) =>\n                line.length >= minIndent ? line.slice(minIndent) : line\n            )\n            .map((line) => `  ${line}`),\n        \"\\n\"\n    );\n\n    const lastLine = arrayLast(lines) ?? \"\";\n\n    return arrayJoin(\n        [\n            arrayFirst(lines),\n            normalizedContent,\n            lastLine,\n        ],\n        \"\\n\"\n    );\n};\n\nconst buildFix =\n    (\n        sourceCode: Readonly<TSESLint.SourceCode>,\n        node: Readonly<es.TemplateLiteral>\n    ): TSESLint.ReportFixFunction =>\n    (fixer): TSESLint.RuleFix => {\n        const text = sourceCode.getText(node);\n        return fixer.replaceText(node, normalizeTemplate(text));\n    };\n\n/**\n * Enforce newline boundary formatting for multiline template literals.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        TemplateLiteral: (node: Readonly<es.TemplateLiteral>): void => {\n            if (\n                !isMultilineTemplate(node) ||\n                hasExpectedBoundaryNewlines(node)\n            ) {\n                return;\n            }\n\n            context.report({\n                fix: buildFix(context.sourceCode, node),\n                messageId: \"invalidFormat\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce newline boundary formatting for multiline template literals.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/template-literal-format\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            invalidFormat:\n                \"Multiline template literals must start and end on their own lines.\",\n        },\n        schema: [],\n        type: \"layout\",\n    },\n    name: \"template-literal-format\",\n});\n\nexport default rule;\n", "import type ts from \"typescript\";\n\nimport {\n    getConstrainedTypeAtLocation,\n    isBuiltinSymbolLike,\n    isErrorLike,\n    isTypeAnyType,\n    isTypeUnknownType,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n    type TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\nimport * as tsutils from \"tsutils\";\n\nimport { isSameNode } from \"../_internal/node-identity.js\";\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestWrapInError\";\n\ntype Options = readonly [];\n\nconst isAllowedThrowableVariant = (\n    type: Readonly<ts.Type>,\n    program: Readonly<ts.Program>\n): boolean =>\n    isTypeAnyType(type) ||\n    isTypeUnknownType(type) ||\n    isErrorLike(program, type);\n\nconst canBeAllowedThrowableType = (\n    type: Readonly<ts.Type>,\n    program: Readonly<ts.Program>\n): boolean =>\n    tsutils\n        .unionTypeParts(type)\n        .every((typeVariant) =>\n            isAllowedThrowableVariant(typeVariant, program)\n        );\n\nconst canBePromiseConstructorType = (\n    type: Readonly<ts.Type>,\n    program: Readonly<ts.Program>\n): boolean =>\n    tsutils\n        .unionTypeParts(type)\n        .some((typeVariant) =>\n            isBuiltinSymbolLike(program, typeVariant, \"PromiseConstructor\")\n        );\n\nconst isPromiseIdentifier = (node: Readonly<es.Expression>): boolean =>\n    node.type === AST_NODE_TYPES.Identifier && node.name === \"Promise\";\n\nconst createWrapLiteralInErrorSuggestionFix = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    node: Readonly<es.Node>\n): TSESLint.ReportFixFunction | undefined => {\n    if (node.type !== AST_NODE_TYPES.Literal) {\n        return undefined;\n    }\n\n    return (fixer) =>\n        fixer.replaceText(node, `new Error(${sourceCode.getText(node)})`);\n};\n\n/**\n * Disallow throwing or rejecting values that are not Error-like.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const sourceCode = context.sourceCode;\n        const { program } = parserServices;\n\n        const reportIfNonErrorLike = (\n            node: Readonly<es.Node>,\n            usage: \"Rejecting with\" | \"Throwing\"\n        ): void => {\n            const type = getConstrainedTypeAtLocation(parserServices, node);\n\n            if (canBeAllowedThrowableType(type, program)) {\n                return;\n            }\n\n            const suggestionFix = createWrapLiteralInErrorSuggestionFix(\n                sourceCode,\n                node\n            );\n\n            context.report({\n                data: { usage },\n                messageId: \"forbidden\",\n                node,\n                ...(suggestionFix !== undefined && {\n                    suggest: [\n                        {\n                            fix: suggestionFix,\n                            messageId: \"suggestWrapInError\",\n                        },\n                    ],\n                }),\n            });\n        };\n\n        const checkRejectionCall = (\n            callExpression: Readonly<es.CallExpression>\n        ): void => {\n            const rejectionValue = arrayFirst(callExpression.arguments);\n            if (rejectionValue === undefined) {\n                return;\n            }\n\n            reportIfNonErrorLike(rejectionValue, \"Rejecting with\");\n        };\n\n        return {\n            \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='reject']\":\n                (callExpression: Readonly<es.CallExpression>) => {\n                    const { callee } = callExpression;\n                    if (\n                        callee.type !== AST_NODE_TYPES.MemberExpression ||\n                        callee.object.type === AST_NODE_TYPES.Super\n                    ) {\n                        return;\n                    }\n\n                    const objectType = getConstrainedTypeAtLocation(\n                        parserServices,\n                        callee.object\n                    );\n                    if (\n                        !canBePromiseConstructorType(objectType, program) &&\n                        !isPromiseIdentifier(callee.object)\n                    ) {\n                        return;\n                    }\n\n                    checkRejectionCall(callExpression);\n                },\n            \"NewExpression[callee.type='Identifier'][callee.name='Promise'] > ArrowFunctionExpression, NewExpression[callee.type='Identifier'][callee.name='Promise'] > FunctionExpression\":\n                (\n                    callback:\n                        | Readonly<es.ArrowFunctionExpression>\n                        | Readonly<es.FunctionExpression>\n                ) => {\n                    const rejectParameter = callback.params[1];\n                    if (rejectParameter?.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    const rejectVariable = arrayFirst(\n                        context.sourceCode\n                            .getDeclaredVariables(callback)\n                            .filter(\n                                (declaredVariable) =>\n                                    declaredVariable.name ===\n                                    rejectParameter.name\n                            )\n                    );\n\n                    if (!isDefined(rejectVariable)) {\n                        return;\n                    }\n\n                    for (const reference of rejectVariable.references) {\n                        const { identifier } = reference;\n                        const parent = identifier.parent;\n                        if (\n                            parent.type === AST_NODE_TYPES.CallExpression &&\n                            isSameNode(parent.callee, identifier)\n                        ) {\n                            checkRejectionCall(parent);\n                        }\n                    }\n                },\n            ThrowStatement: (throwStatement: Readonly<es.ThrowStatement>) => {\n                const { argument } = throwStatement;\n\n                reportIfNonErrorLike(argument, \"Throwing\");\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow throwing or rejecting values that are not Error-like.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/throw-error\",\n        },\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"{{usage}} non-`Error` values is forbidden.\",\n            suggestWrapInError:\n                \"Wrap this value in an Error constructor before throwing or rejecting.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"throw-error\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of @typescript-eslint/only-throw-error and @typescript-eslint/prefer-promise-reject-errors.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"only-throw-error\",\n                url: \"https://typescript-eslint.io/rules/only-throw-error/\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-promise-reject-errors\",\n                url: \"https://typescript-eslint.io/rules/prefer-promise-reject-errors/\",\n            },\n        }),\n    ],\n    ruleId: \"throw-error\",\n});\n\nexport default deprecatedRule;\n", "import type ts from \"typescript\";\n\nimport {\n    containsAllTypesByName,\n    getConstrainedTypeAtLocation,\n    isTypeArrayTypeOrUnionOfArrayTypes,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, setHas } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst arrayCallbackMethodNames = new Set<string>([\n    \"every\",\n    \"find\",\n    \"findIndex\",\n    \"findLast\",\n    \"findLastIndex\",\n    \"flatMap\",\n    \"forEach\",\n    \"map\",\n    \"some\",\n]);\n\nconst readonlyArrayTypeNames = new Set([\"ReadonlyArray\"]);\n\nconst callbackSelector =\n    \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'] > :matches(FunctionExpression, ArrowFunctionExpression):not([returnType])\";\n\nconst isArrayLikeType = (\n    typeChecker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): boolean => {\n    const apparentType = typeChecker.getApparentType(type);\n\n    return (\n        typeChecker.isArrayType(apparentType) ||\n        typeChecker.isTupleType(apparentType) ||\n        isTypeArrayTypeOrUnionOfArrayTypes(type, typeChecker) ||\n        containsAllTypesByName(type, false, readonlyArrayTypeNames, true)\n    );\n};\n\nconst isFirstCallbackArgument = (\n    callExpression: Readonly<es.CallExpression>,\n    callback:\n        Readonly<es.ArrowFunctionExpression> | Readonly<es.FunctionExpression>\n): boolean => arrayFirst(callExpression.arguments) === callback;\n\n/**\n * Require explicit return types for array callback functions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const typeChecker = parserServices.program.getTypeChecker();\n\n        return {\n            [callbackSelector]: (\n                callback:\n                    | Readonly<es.ArrowFunctionExpression>\n                    | Readonly<es.FunctionExpression>\n            ) => {\n                const parentNode = callback.parent;\n                if (parentNode.type !== AST_NODE_TYPES.CallExpression) {\n                    return;\n                }\n\n                if (!isFirstCallbackArgument(parentNode, callback)) {\n                    return;\n                }\n\n                const { callee } = parentNode;\n                if (\n                    callee.type !== AST_NODE_TYPES.MemberExpression ||\n                    callee.object.type === AST_NODE_TYPES.Super ||\n                    callee.property.type !== AST_NODE_TYPES.Identifier ||\n                    !setHas(arrayCallbackMethodNames, callee.property.name)\n                ) {\n                    return;\n                }\n\n                const objectType = getConstrainedTypeAtLocation(\n                    parserServices,\n                    callee.object\n                );\n                if (!isArrayLikeType(typeChecker, objectType)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"forbidden\",\n                    node: callback,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require explicit return types for array callback functions.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-array-callback-return-type\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Specify the callback return type explicitly.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/array-callback-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt, objectEntries, objectHasOwn } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst isNode = (value: unknown): value is Readonly<es.Node> =>\n    typeof value === \"object\" && value !== null && objectHasOwn(value, \"type\");\n\nconst collectNodeChildren = (\n    node: Readonly<es.Node>\n): readonly Readonly<es.Node>[] => {\n    let children: readonly Readonly<es.Node>[] = [];\n\n    const addNode = (value: unknown): void => {\n        if (isNode(value)) {\n            children = [...children, value];\n        }\n    };\n\n    const addNodes = (value: unknown): void => {\n        if (Array.isArray(value)) {\n            for (const item of value) {\n                addNode(item);\n            }\n        } else {\n            addNode(value);\n        }\n    };\n\n    for (const [key, child] of objectEntries(node)) {\n        if (key !== \"loc\" && key !== \"parent\" && key !== \"range\") {\n            addNodes(child);\n        }\n    }\n\n    return children;\n};\n\nconst hasThisExpression = (root: Readonly<es.Node>): boolean => {\n    let stack: readonly es.Node[] = [root];\n\n    while (stack.length > 0) {\n        const node = arrayAt(stack, -1);\n        stack = stack.slice(0, -1);\n        if (node === undefined) {\n            continue;\n        }\n\n        if (node.type === AST_NODE_TYPES.ThisExpression) {\n            return true;\n        }\n\n        stack = [...stack, ...collectNodeChildren(node)];\n    }\n\n    return false;\n};\n\nconst hasThisParameter = (node: Readonly<es.MethodDefinition>): boolean => {\n    const [firstParameter] = node.value.params;\n\n    return (\n        firstParameter?.type === AST_NODE_TYPES.Identifier &&\n        firstParameter.name === \"this\"\n    );\n};\n\nconst hasThisExpressionUsage = (\n    node: Readonly<es.MethodDefinition>\n): boolean =>\n    node.value.body === null ? false : hasThisExpression(node.value.body);\n\nconst shouldSkipMethod = (node: Readonly<es.MethodDefinition>): boolean =>\n    node.kind !== \"method\" ||\n    node.static ||\n    node.value.body === null ||\n    hasThisParameter(node) ||\n    hasThisExpressionUsage(node);\n\n/**\n * Require non-static class methods to reference `this`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        MethodDefinition: (node: Readonly<es.MethodDefinition>): void => {\n            if (shouldSkipMethod(node)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"require non-static class methods to reference `this`.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-class-methods-use-this\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Class method should use `this` or declare a `this` parameter.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/class-methods-use-this\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message:\n        \"Deprecated in favor of @typescript-eslint/class-methods-use-this.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"class-methods-use-this\",\n                url: \"https://typescript-eslint.io/rules/class-methods-use-this\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/class-methods-use-this\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = String.raw`:matches(TSTypeAliasDeclaration[typeAnnotation.type='TSArrayType'], TSTypeAliasDeclaration[typeAnnotation.type='TSTupleType'], TSTypeAliasDeclaration[typeAnnotation.type='TSTypeReference']:has(TSTypeReference > Identifier[name='Array'])) > Identifier.id:not([name=/^(?:[A-Z][a-z\\d]*)+(?:Array|s)$/u])`;\n\n/**\n * Require array-like type aliases to end with `Array` or `s`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce consistent naming for array-like type aliases.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-consistent-array-type-name\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                'Use a name ending with \"Array\" or \"s\" for array-like type aliases.',\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/consistent-array-type-name\",\n});\n\nexport default rule;\n", "import {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    TSESLint,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport { withDeprecatedRuleLifecycle } from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"AssignmentExpression[operator='='] > MemberExpression.left > Identifier.object\";\n\nconst findVariable = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): Readonly<TSESLint.Scope.Variable> | undefined => {\n    let scope: null | TSESLint.Scope.Scope = sourceCode.getScope(identifier);\n\n    while (scope !== null) {\n        const variable = scope.set.get(identifier.name);\n\n        if (isDefined(variable)) {\n            return variable;\n        }\n\n        scope = scope.upper;\n    }\n\n    return undefined;\n};\n\nconst isLocallyDeclaredFunction = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    identifier: Readonly<es.Identifier>\n): boolean => {\n    const variable = findVariable(sourceCode, identifier);\n\n    if (variable?.defs.length !== 1) {\n        return false;\n    }\n\n    const definition = arrayFirst(variable.defs);\n\n    if (definition?.type === TSESLint.Scope.DefinitionType.FunctionName) {\n        return true;\n    }\n\n    if (\n        definition?.type !== TSESLint.Scope.DefinitionType.Variable ||\n        definition.node.id.type !== AST_NODE_TYPES.Identifier\n    ) {\n        return false;\n    }\n\n    return (\n        definition.node.init?.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        definition.node.init?.type === AST_NODE_TYPES.FunctionExpression\n    );\n};\n\n/**\n * Require defining function properties in a single statement.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (\n                node.type !== AST_NODE_TYPES.Identifier ||\n                !isLocallyDeclaredFunction(context.sourceCode, node)\n            ) {\n                return;\n            }\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"require defining function properties in a single statement.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-define-function-in-one-statement\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Use `Object.assign` to define function properties in one statement.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/define-function-in-one-statement\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated without replacement because this style policy is too narrow and error-prone.\",\n    ruleId: \"typescript/define-function-in-one-statement\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"SwitchStatement[cases.length>1]:not(:has(SwitchCase[test=null]))\";\n\n/**\n * Require a default case in non-trivial switch statements.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"require a default case in switch statements with multiple branches.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-exhaustive-switch\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Add a default case to make this switch exhaustive.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/exhaustive-switch\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message:\n        \"Deprecated in favor of @typescript-eslint/switch-exhaustiveness-check.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"switch-exhaustiveness-check\",\n                url: \"https://typescript-eslint.io/rules/switch-exhaustiveness-check\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/exhaustive-switch\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = arrayJoin(\n    [\n        \"TSPropertySignature[optional=true] > TSTypeAnnotation > TSLiteralType > Literal[value=true]\",\n        \"TSPropertySignature[optional=true] > TSTypeAnnotation > TSLiteralType > Literal[value=false]\",\n    ],\n    \", \"\n);\n\n/**\n * Disallow optional boolean literal property types.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (node.type !== AST_NODE_TYPES.Literal) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) => fixer.replaceText(node, \"boolean\"),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow optional boolean literal types in property signatures.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-boolean-literal-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: 'Use \"boolean\" type instead.',\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-boolean-literal-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"VariableDeclarator:not([id.typeAnnotation], [init.expression.properties.length=0]) > Identifier.id\";\n\n/**\n * Disallow complex inferred declarator types without annotation.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow complex inferred declarator types without explicit annotation.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-complex-declarator-type\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Add a type annotation (or `as const`) for this complex declarator.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-complex-declarator-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"ArrowFunctionExpression[returnType=undefined] > :matches(TSAsExpression, TSTypeAssertion) > :matches(FunctionExpression, ArrowFunctionExpression, ObjectExpression, ClassExpression)\";\n\n/**\n * Disallow inferred complex return types for arrow functions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow complex inferred arrow-function return types without explicit annotation.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-complex-return-type\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Add an explicit return type annotation for complex return expressions.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-complex-return-type\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of @typescript-eslint/explicit-function-return-type.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"explicit-function-return-type\",\n                url: \"https://typescript-eslint.io/rules/explicit-function-return-type/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/no-complex-return-type\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\n/**\n * Disallow empty interfaces without extends clauses.\n */\nconst selector =\n    \"TSInterfaceDeclaration[body.body.length=0][extends.length=0] > Identifier.id\";\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description: \"disallow empty interfaces without extends clauses.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-empty-interfaces\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Empty interface is not allowed.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"typescript/no-empty-interfaces\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of @typescript-eslint/no-empty-object-type.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"no-empty-object-type\",\n                url: \"https://typescript-eslint.io/rules/no-empty-object-type\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/no-empty-interfaces\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = arrayJoin(\n    [\n        \"PropertyDefinition[value.type='Literal'] > TSTypeAnnotation\",\n        \"VariableDeclarator[init.type='Literal'] > Identifier.id > TSTypeAnnotation\",\n    ],\n    \", \"\n);\n\n/**\n * Disallow explicit primitive type annotations when they are inferrable.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: true,\n        docs: {\n            deprecated: true,\n            description:\n                \"disallow explicit primitive type annotations when they are inferrable from literals.\",\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-inferrable-types\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Type annotation can be inferred from the assigned literal value.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-inferrable-types\",\n});\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    message: \"Deprecated in favor of @typescript-eslint/no-inferrable-types.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"no-inferrable-types\",\n                url: \"https://typescript-eslint.io/rules/no-inferrable-types\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/no-inferrable-types\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TSTupleType > TSUnionType:not([types.length=1])\";\n\n/**\n * Disallow union element types directly inside tuple elements.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow union element types directly inside tuple element positions.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-multi-type-tuples\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Avoid multi-type tuple elements; extract a named alias instead.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-multi-type-tuples\",\n});\n\nexport default rule;\n", "import {\n    getConstrainedTypeAtLocation,\n    isTypeNeverType,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n} from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst isTypeAliasNeverIdentifier = (node: Readonly<es.Identifier>): boolean =>\n    node.parent.type === AST_NODE_TYPES.TSTypeAliasDeclaration &&\n    node.parent.id === node &&\n    node.parent.typeAnnotation.type === AST_NODE_TYPES.TSNeverKeyword;\n\n/**\n * Disallow inferred `never` types on identifiers.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n\n        return {\n            Identifier: (node: Readonly<es.Identifier>): void => {\n                if (isTypeAliasNeverIdentifier(node)) {\n                    return;\n                }\n\n                const type = getConstrainedTypeAtLocation(parserServices, node);\n\n                if (!isTypeNeverType(type)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"disallow inferred identifiers with `never` type.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-never\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Unexpected `never` type on this identifier.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"typescript/no-never\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst getTypeAnnotationFromDeclarator = (\n    declarator: Readonly<es.VariableDeclarator>\n): Readonly<es.TSTypeAnnotation> | undefined => declarator.id.typeAnnotation;\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\n/**\n * Disallow redundant `undefined` unions on const declarations with\n * definitely-defined initializers.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            'VariableDeclaration[kind=\"const\"] > VariableDeclarator': (\n                node: Readonly<es.Node>\n            ): void => {\n                if (node.type !== AST_NODE_TYPES.VariableDeclarator) {\n                    return;\n                }\n\n                if (node.init === null) {\n                    return;\n                }\n\n                if (!isDefinitelyDefinedExpression(node.init)) {\n                    return;\n                }\n\n                const typeAnnotation = getTypeAnnotationFromDeclarator(node);\n\n                if (typeAnnotation === undefined) {\n                    return;\n                }\n\n                if (\n                    typeAnnotation.typeAnnotation.type !==\n                    AST_NODE_TYPES.TSUnionType\n                ) {\n                    return;\n                }\n\n                const fixedTypeText = buildFixedTypeText(\n                    sourceCode,\n                    typeAnnotation.typeAnnotation\n                );\n\n                if (!isDefined(fixedTypeText)) {\n                    return;\n                }\n\n                const fix = (\n                    fixer: Readonly<TSESLint.RuleFixer>\n                ): TSESLint.RuleFix =>\n                    fixer.replaceText(\n                        typeAnnotation.typeAnnotation,\n                        fixedTypeText\n                    );\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: typeAnnotation.typeAnnotation,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRemoveRedundantUndefined\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in const declaration union types when the initializer is definitely defined.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-const\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Const declarations with definitely-defined initializers should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this const declaration type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-const\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getParametersFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<readonly es.Parameter[]> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.params;\n    }\n\n    return undefined;\n};\n\nconst getAssignmentPatternFromPattern = (\n    pattern: Readonly<\n        | es.AssignmentPattern\n        | es.BindingName\n        | es.RestElement\n    >\n): Readonly<es.AssignmentPattern> | undefined => {\n    if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {\n        return pattern;\n    }\n\n    if (pattern.type === AST_NODE_TYPES.RestElement) {\n        return undefined;\n    }\n\n    return undefined;\n};\n\nconst getAssignmentPatternFromParameter = (\n    parameter: Readonly<es.Parameter>\n): Readonly<es.AssignmentPattern> | undefined => {\n    if (parameter.type === AST_NODE_TYPES.TSParameterProperty) {\n        return getAssignmentPatternFromPattern(parameter.parameter);\n    }\n\n    return getAssignmentPatternFromPattern(parameter);\n};\n\nconst getTypeAnnotationFromAssignmentPattern = (\n    assignmentPattern: Readonly<es.AssignmentPattern>\n): Readonly<es.TSTypeAnnotation> | undefined =>\n    assignmentPattern.left.typeAnnotation;\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst createReplaceTypeFix =\n    (\n        targetNode: Readonly<es.Node>,\n        replacementText: string\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix => {\n        const [start, end] = targetNode.range;\n\n        return fixer.replaceTextRange([start, end], replacementText);\n    };\n\ntype FixableDefaultParameter = Readonly<{\n    readonly fixedTypeText: string;\n    readonly unionType: es.TSUnionType;\n}>;\n\nconst getFixableDefaultParameter = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    parameter: Readonly<es.Parameter>\n): FixableDefaultParameter | undefined => {\n    const assignmentPattern = getAssignmentPatternFromParameter(parameter);\n    if (\n        assignmentPattern === undefined ||\n        !isDefinitelyDefinedExpression(assignmentPattern.right)\n    ) {\n        return undefined;\n    }\n\n    const typeAnnotation =\n        getTypeAnnotationFromAssignmentPattern(assignmentPattern);\n    if (typeAnnotation?.typeAnnotation.type !== AST_NODE_TYPES.TSUnionType) {\n        return undefined;\n    }\n\n    const fixedTypeText = buildFixedTypeText(\n        sourceCode,\n        typeAnnotation.typeAnnotation\n    );\n\n    return isDefined(fixedTypeText)\n        ? {\n              fixedTypeText,\n              unionType: typeAnnotation.typeAnnotation,\n          }\n        : undefined;\n};\n\n/**\n * Disallow redundant `undefined` unions on default parameters with\n * definitely-defined initializers.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n                const parameters = getParametersFromFunctionLikeNode(node);\n\n                if (parameters === undefined) {\n                    return;\n                }\n\n                for (const parameter of parameters) {\n                    const fixableParameter = getFixableDefaultParameter(\n                        sourceCode,\n                        parameter\n                    );\n\n                    if (isDefined(fixableParameter)) {\n                        const fix = createReplaceTypeFix(\n                            fixableParameter.unionType,\n                            fixableParameter.fixedTypeText\n                        );\n\n                        context.report({\n                            fix,\n                            messageId: \"forbidden\",\n                            node: fixableParameter.unionType,\n                            suggest: [\n                                {\n                                    fix,\n                                    messageId:\n                                        \"suggestRemoveRedundantUndefined\",\n                                },\n                            ],\n                        });\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in default parameter union types when the initializer is definitely defined.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-default-parameter\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Default parameters with definitely-defined initializers should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this default parameter type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-default-parameter\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\nconst isNeverReassigned = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    declarator: Readonly<es.VariableDeclarator>\n): boolean => {\n    const [declaredVariable] = sourceCode.getDeclaredVariables(declarator);\n\n    if (declaredVariable === undefined) {\n        return false;\n    }\n\n    return declaredVariable.references.every(\n        (reference) => !reference.isWrite() || reference.init === true\n    );\n};\n\n/**\n * Disallow redundant `undefined` unions on `let` declarations that are never\n * reassigned and initialized with definitely-defined values.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \"VariableDeclaration[kind='let'] > VariableDeclarator[id.type='Identifier']\":\n                (node: Readonly<es.VariableDeclarator>): void => {\n                    const initializer = node.init;\n\n                    if (initializer === null) {\n                        return;\n                    }\n\n                    if (!isDefinitelyDefinedExpression(initializer)) {\n                        return;\n                    }\n\n                    if (!isNeverReassigned(sourceCode, node)) {\n                        return;\n                    }\n\n                    const id = node.id;\n\n                    if (id.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    const typeAnnotation = id.typeAnnotation;\n\n                    if (typeAnnotation === undefined) {\n                        return;\n                    }\n\n                    if (\n                        typeAnnotation.typeAnnotation.type !==\n                        AST_NODE_TYPES.TSUnionType\n                    ) {\n                        return;\n                    }\n\n                    const fixedTypeText = buildFixedTypeText(\n                        sourceCode,\n                        typeAnnotation.typeAnnotation\n                    );\n\n                    if (!isDefined(fixedTypeText)) {\n                        return;\n                    }\n\n                    const fix = (\n                        fixer: Readonly<TSESLint.RuleFixer>\n                    ): TSESLint.RuleFix =>\n                        fixer.replaceText(\n                            typeAnnotation.typeAnnotation,\n                            fixedTypeText\n                        );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: typeAnnotation.typeAnnotation,\n                        suggest: [\n                            {\n                                fix,\n                                messageId: \"suggestRemoveRedundantUndefined\",\n                            },\n                        ],\n                    });\n                },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in `let` type unions when declarations are never reassigned and initialized with definitely-defined values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-let\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Never-reassigned `let` declarations with definitely-defined initializers should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this `let` declaration type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-let\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst selector = arrayJoin(\n    [\n        \"Identifier[optional=true] > TSTypeAnnotation > TSUnionType\",\n        \"TSNamedTupleMember[optional=true] > TSUnionType\",\n        \"TSOptionalType > TSUnionType\",\n    ],\n    \", \"\n);\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\n/**\n * Disallow redundant `undefined` unions on optional parameters and tuple\n * members.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [selector]: (node: Readonly<es.Node>): void => {\n                if (node.type !== AST_NODE_TYPES.TSUnionType) {\n                    return;\n                }\n\n                const fixedTypeText = buildFixedTypeText(sourceCode, node);\n\n                if (!isDefined(fixedTypeText)) {\n                    return;\n                }\n\n                const fix = (\n                    fixer: Readonly<TSESLint.RuleFixer>\n                ): TSESLint.RuleFix => fixer.replaceText(node, fixedTypeText);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRemoveRedundantUndefined\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in optional parameter and tuple member union types.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-optional\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Optional parameters and tuple members should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this optional union type.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-optional\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\ntype ReturnableFunctionNode =\n    | es.ArrowFunctionExpression\n    | es.FunctionDeclaration\n    | es.FunctionExpression;\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ConditionalExpression) {\n        return (\n            isDefinitelyDefinedExpression(unwrappedExpression.consequent) &&\n            isDefinitelyDefinedExpression(unwrappedExpression.alternate)\n        );\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (\n        unwrappedExpression.type === AST_NODE_TYPES.LogicalExpression &&\n        unwrappedExpression.operator === \"??\"\n    ) {\n        return isDefinitelyDefinedExpression(unwrappedExpression.right);\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.SequenceExpression) {\n        const lastExpression = arrayAt(unwrappedExpression.expressions, -1);\n\n        return (\n            lastExpression !== undefined &&\n            isDefinitelyDefinedExpression(lastExpression)\n        );\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\nconst hasDefinitelyDefinedReturnValue = (\n    node: Readonly<ReturnableFunctionNode>\n): boolean => {\n    const body = node.body;\n\n    if (body.type !== AST_NODE_TYPES.BlockStatement) {\n        return isDefinitelyDefinedExpression(body);\n    }\n\n    if (body.body.length !== 1) {\n        return false;\n    }\n\n    const statement = arrayFirst(body.body);\n\n    if (statement === undefined) {\n        return false;\n    }\n\n    if (statement.type !== AST_NODE_TYPES.ReturnStatement) {\n        return false;\n    }\n\n    if (statement.argument === null) {\n        return false;\n    }\n\n    return isDefinitelyDefinedExpression(statement.argument);\n};\n\nconst getPromiseValueUnionType = (\n    returnType: Readonly<es.TSTypeAnnotation>\n): Readonly<es.TSUnionType> | undefined => {\n    const annotation = returnType.typeAnnotation;\n\n    if (annotation.type !== AST_NODE_TYPES.TSTypeReference) {\n        return undefined;\n    }\n\n    if (annotation.typeName.type !== AST_NODE_TYPES.Identifier) {\n        return undefined;\n    }\n\n    if (annotation.typeName.name !== \"Promise\") {\n        return undefined;\n    }\n\n    const typeArguments = annotation.typeArguments;\n\n    if (typeArguments?.params.length !== 1) {\n        return undefined;\n    }\n\n    const [promiseValueType] = typeArguments.params;\n\n    if (promiseValueType === undefined) {\n        return undefined;\n    }\n\n    if (promiseValueType.type !== AST_NODE_TYPES.TSUnionType) {\n        return undefined;\n    }\n\n    return promiseValueType;\n};\n\n/**\n * Disallow redundant `undefined` inside Promise return type unions for async\n * functions that deterministically return definitely-defined values.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression)[async=true]\":\n                (node: Readonly<es.Node>): void => {\n                    if (\n                        node.type !== AST_NODE_TYPES.ArrowFunctionExpression &&\n                        node.type !== AST_NODE_TYPES.FunctionDeclaration &&\n                        node.type !== AST_NODE_TYPES.FunctionExpression\n                    ) {\n                        return;\n                    }\n\n                    const returnType = node.returnType;\n\n                    if (returnType === undefined) {\n                        return;\n                    }\n\n                    const promiseValueUnionType =\n                        getPromiseValueUnionType(returnType);\n\n                    if (promiseValueUnionType === undefined) {\n                        return;\n                    }\n\n                    if (!hasDefinitelyDefinedReturnValue(node)) {\n                        return;\n                    }\n\n                    const fixedPromiseValueTypeText = buildFixedTypeText(\n                        sourceCode,\n                        promiseValueUnionType\n                    );\n\n                    if (!isDefined(fixedPromiseValueTypeText)) {\n                        return;\n                    }\n\n                    const fix = (\n                        fixer: Readonly<TSESLint.RuleFixer>\n                    ): TSESLint.RuleFix =>\n                        fixer.replaceText(\n                            promiseValueUnionType,\n                            fixedPromiseValueTypeText\n                        );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: promiseValueUnionType,\n                        suggest: [\n                            {\n                                fix,\n                                messageId: \"suggestRemoveRedundantUndefined\",\n                            },\n                        ],\n                    });\n                },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in Promise return value unions for async functions that deterministically return definitely-defined values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-promise-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Async Promise return value unions should not redundantly include `undefined` when the function deterministically returns definitely-defined values.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this Promise return value union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-promise-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\n/**\n * Disallow redundant `undefined` unions on readonly class properties with\n * definitely-defined initializers.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \"PropertyDefinition[readonly=true][optional!=true]\": (\n                node: Readonly<es.Node>\n            ): void => {\n                if (node.type !== AST_NODE_TYPES.PropertyDefinition) {\n                    return;\n                }\n\n                if (node.declare) {\n                    return;\n                }\n\n                if (node.value === null) {\n                    return;\n                }\n\n                if (!isDefinitelyDefinedExpression(node.value)) {\n                    return;\n                }\n\n                const typeAnnotation = node.typeAnnotation;\n\n                if (typeAnnotation === undefined) {\n                    return;\n                }\n\n                if (\n                    typeAnnotation.typeAnnotation.type !==\n                    AST_NODE_TYPES.TSUnionType\n                ) {\n                    return;\n                }\n\n                const fixedTypeText = buildFixedTypeText(\n                    sourceCode,\n                    typeAnnotation.typeAnnotation\n                );\n\n                if (!isDefined(fixedTypeText)) {\n                    return;\n                }\n\n                const fix = (\n                    fixer: Readonly<TSESLint.RuleFixer>\n                ): TSESLint.RuleFix =>\n                    fixer.replaceText(\n                        typeAnnotation.typeAnnotation,\n                        fixedTypeText\n                    );\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: typeAnnotation.typeAnnotation,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRemoveRedundantUndefined\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in readonly property union types when the initializer is definitely defined.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-readonly-property\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Readonly properties with definitely-defined initializers should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this readonly property type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-readonly-property\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\ntype ReturnableFunctionNode =\n    | es.ArrowFunctionExpression\n    | es.FunctionDeclaration\n    | es.FunctionExpression;\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ConditionalExpression) {\n        return (\n            isDefinitelyDefinedExpression(unwrappedExpression.consequent) &&\n            isDefinitelyDefinedExpression(unwrappedExpression.alternate)\n        );\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (\n        unwrappedExpression.type === AST_NODE_TYPES.LogicalExpression &&\n        unwrappedExpression.operator === \"??\"\n    ) {\n        return isDefinitelyDefinedExpression(unwrappedExpression.right);\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.SequenceExpression) {\n        const lastExpression = arrayAt(unwrappedExpression.expressions, -1);\n\n        return (\n            lastExpression !== undefined &&\n            isDefinitelyDefinedExpression(lastExpression)\n        );\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\nconst hasDefinitelyDefinedReturnValue = (\n    node: Readonly<ReturnableFunctionNode>\n): boolean => {\n    const body = node.body;\n\n    if (body.type !== AST_NODE_TYPES.BlockStatement) {\n        return isDefinitelyDefinedExpression(body);\n    }\n\n    if (body.body.length !== 1) {\n        return false;\n    }\n\n    const statement = arrayFirst(body.body);\n\n    if (statement === undefined) {\n        return false;\n    }\n\n    if (statement.type !== AST_NODE_TYPES.ReturnStatement) {\n        return false;\n    }\n\n    if (statement.argument === null) {\n        return false;\n    }\n\n    return isDefinitelyDefinedExpression(statement.argument);\n};\n\n/**\n * Disallow redundant `undefined` in return type unions when the function body\n * deterministically returns a definitely-defined value.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression)\":\n                (node: Readonly<es.Node>): void => {\n                    if (\n                        node.type !== AST_NODE_TYPES.ArrowFunctionExpression &&\n                        node.type !== AST_NODE_TYPES.FunctionDeclaration &&\n                        node.type !== AST_NODE_TYPES.FunctionExpression\n                    ) {\n                        return;\n                    }\n\n                    const returnType = node.returnType;\n\n                    if (returnType === undefined) {\n                        return;\n                    }\n\n                    if (\n                        returnType.typeAnnotation.type !==\n                        AST_NODE_TYPES.TSUnionType\n                    ) {\n                        return;\n                    }\n\n                    if (!hasDefinitelyDefinedReturnValue(node)) {\n                        return;\n                    }\n\n                    const fixedTypeText = buildFixedTypeText(\n                        sourceCode,\n                        returnType.typeAnnotation\n                    );\n\n                    if (!isDefined(fixedTypeText)) {\n                        return;\n                    }\n\n                    const fix = (\n                        fixer: Readonly<TSESLint.RuleFixer>\n                    ): TSESLint.RuleFix =>\n                        fixer.replaceText(\n                            returnType.typeAnnotation,\n                            fixedTypeText\n                        );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: returnType.typeAnnotation,\n                        suggest: [\n                            {\n                                fix,\n                                messageId: \"suggestRemoveRedundantUndefined\",\n                            },\n                        ],\n                    });\n                },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in return type unions when the function deterministically returns a definitely-defined value.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Return types should not redundantly include `undefined` when the function deterministically returns a definitely-defined value.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this return type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isDefined, isEmpty } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRemoveRedundantUndefined\";\n\ntype Options = readonly [];\n\nconst buildFixedTypeText = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    unionType: Readonly<es.TSUnionType>\n): string | undefined => {\n    let nonUndefinedTypeTexts: readonly string[] = [];\n\n    for (const typeNode of unionType.types) {\n        if (typeNode.type === AST_NODE_TYPES.TSUndefinedKeyword) {\n            continue;\n        }\n\n        nonUndefinedTypeTexts = [\n            ...nonUndefinedTypeTexts,\n            sourceCode.getText(typeNode),\n        ];\n    }\n\n    if (\n        isEmpty(nonUndefinedTypeTexts) ||\n        nonUndefinedTypeTexts.length === unionType.types.length\n    ) {\n        return undefined;\n    }\n\n    return arrayJoin(nonUndefinedTypeTexts, \" | \");\n};\n\nconst unwrapExpression = (\n    expression: Readonly<es.Expression>\n): Readonly<es.Expression> => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n        expression.type === AST_NODE_TYPES.TSNonNullExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isDefinitelyDefinedExpression = (\n    expression: Readonly<es.Expression>\n): boolean => {\n    const unwrappedExpression = unwrapExpression(expression);\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrayExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ClassExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.FunctionExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.Literal) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.NewExpression) {\n        return true;\n    }\n\n    if (unwrappedExpression.type === AST_NODE_TYPES.ObjectExpression) {\n        return true;\n    }\n\n    return unwrappedExpression.type === AST_NODE_TYPES.TemplateLiteral;\n};\n\nconst isNeverReassigned = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    declarator: Readonly<es.VariableDeclarator>\n): boolean => {\n    const [declaredVariable] = sourceCode.getDeclaredVariables(declarator);\n\n    if (declaredVariable === undefined) {\n        return false;\n    }\n\n    return declaredVariable.references.every(\n        (reference) => !reference.isWrite() || reference.init === true\n    );\n};\n\n/**\n * Disallow redundant `undefined` unions on `var` declarations that are never\n * reassigned and initialized with definitely-defined values.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \"VariableDeclaration[kind='var'] > VariableDeclarator[id.type='Identifier']\":\n                (node: Readonly<es.VariableDeclarator>): void => {\n                    const initializer = node.init;\n\n                    if (initializer === null) {\n                        return;\n                    }\n\n                    if (!isDefinitelyDefinedExpression(initializer)) {\n                        return;\n                    }\n\n                    if (!isNeverReassigned(sourceCode, node)) {\n                        return;\n                    }\n\n                    const id = node.id;\n\n                    if (id.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    const typeAnnotation = id.typeAnnotation;\n\n                    if (typeAnnotation === undefined) {\n                        return;\n                    }\n\n                    if (\n                        typeAnnotation.typeAnnotation.type !==\n                        AST_NODE_TYPES.TSUnionType\n                    ) {\n                        return;\n                    }\n\n                    const fixedTypeText = buildFixedTypeText(\n                        sourceCode,\n                        typeAnnotation.typeAnnotation\n                    );\n\n                    if (!isDefined(fixedTypeText)) {\n                        return;\n                    }\n\n                    const fix = (\n                        fixer: Readonly<TSESLint.RuleFixer>\n                    ): TSESLint.RuleFix =>\n                        fixer.replaceText(\n                            typeAnnotation.typeAnnotation,\n                            fixedTypeText\n                        );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: typeAnnotation.typeAnnotation,\n                        suggest: [\n                            {\n                                fix,\n                                messageId: \"suggestRemoveRedundantUndefined\",\n                            },\n                        ],\n                    });\n                },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow redundant `undefined` in `var` type unions when declarations are never reassigned and initialized with definitely-defined values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-redundant-undefined-var\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Never-reassigned `var` declarations with definitely-defined initializers should not redundantly include `undefined` in their type union.\",\n            suggestRemoveRedundantUndefined:\n                \"Remove redundant `undefined` from this `var` declaration type union.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/no-redundant-undefined-var\",\n});\n\nexport default rule;\n", "import { assertDefined } from \"ts-extras\";\n\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport deprecatedRule from \"./no-restricted-syntax.js\";\n\nconst noRestrictedSyntaxRule: typeof deprecatedRule = deprecatedRule;\nconst baseDocs = noRestrictedSyntaxRule.meta.docs;\nassertDefined(baseDocs);\n\n/**\n * TypeScript-prefixed alias for selector-based restricted syntax checks.\n */\nconst typescriptNoRestrictedSyntaxRule: typeof noRestrictedSyntaxRule = {\n    ...noRestrictedSyntaxRule,\n    meta: {\n        deprecated: true,\n        ...noRestrictedSyntaxRule.meta,\n        docs: {\n            ...baseDocs,\n            deprecated: true,\n            frozen: true,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-restricted-syntax\",\n        },\n    },\n};\n\n/**\n * Wrapper rule with explicit lifecycle metadata and replacement mapping.\n */\nconst rule: typeof typescriptNoRestrictedSyntaxRule =\n    withDeprecatedRuleLifecycle(typescriptNoRestrictedSyntaxRule, {\n        message:\n            \"Deprecated in favor of @typescript-eslint/no-restricted-syntax.\",\n        replacedBy: [\n            createReplacementRuleInfo({\n                plugin: {\n                    name: \"@typescript-eslint\",\n                    url: \"https://typescript-eslint.io/\",\n                },\n                rule: {\n                    name: \"no-restricted-syntax\",\n                    url: \"https://typescript-eslint.io/rules/no-restricted-syntax\",\n                },\n            }),\n        ],\n        ruleId: \"typescript/no-restricted-syntax\",\n    });\n\nexport default rule;\n", "import {\n    getConstrainedTypeAtLocation,\n    isTypeFlagSet,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    type TSESTree as es,\n    ESLintUtils,\n    type ParserServicesWithTypeInformation,\n} from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\nimport * as tsutils from \"tsutils\";\nimport ts from \"typescript\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst getUnionPropertyNames = (\n    checker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): ReadonlySet<ts.__String> => {\n    const propertyNames = new Set<ts.__String>();\n\n    for (const typePart of tsutils.unionTypeParts(type)) {\n        for (const property of checker.getPropertiesOfType(typePart)) {\n            propertyNames.add(property.getEscapedName());\n        }\n    }\n\n    return propertyNames;\n};\n\nconst getUnionIndexInfos = (\n    checker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): readonly ts.IndexInfo[] =>\n    tsutils\n        .unionTypeParts(type)\n        .flatMap((typePart) => checker.getIndexInfosOfType(typePart));\n\nconst getPropertyKeyTypes = (\n    checker: Readonly<ts.TypeChecker>,\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- TypeScript escaped property names are branded primitive strings.\n    propertyName: ts.__String\n): readonly ts.Type[] => {\n    const propertyNameText = String(propertyName);\n\n    if (propertyNameText.startsWith(\"__@\")) {\n        return [checker.getESSymbolType()];\n    }\n\n    if (tsutils.isNumericPropertyName(propertyName)) {\n        return [\n            checker.getNumberLiteralType(Number(propertyNameText)),\n            checker.getStringLiteralType(propertyNameText),\n        ];\n    }\n\n    return [checker.getStringLiteralType(propertyNameText)];\n};\n\nconst indexInfoMayWriteProperty = (\n    checker: Readonly<ts.TypeChecker>,\n    indexInfo: Readonly<ts.IndexInfo>,\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- TypeScript escaped property names are branded primitive strings.\n    propertyName: ts.__String\n): boolean =>\n    getPropertyKeyTypes(checker, propertyName).some((propertyKeyType) =>\n        checker.isTypeAssignableTo(propertyKeyType, indexInfo.keyType)\n    );\n\nconst indexKeyTypesMayOverlap = (\n    checker: Readonly<ts.TypeChecker>,\n    leftKeyType: Readonly<ts.Type>,\n    rightKeyType: Readonly<ts.Type>\n): boolean => {\n    for (const leftPart of tsutils.unionTypeParts(leftKeyType)) {\n        for (const rightPart of tsutils.unionTypeParts(rightKeyType)) {\n            if (\n                checker.isTypeAssignableTo(leftPart, rightPart) ||\n                checker.isTypeAssignableTo(rightPart, leftPart)\n            ) {\n                return true;\n            }\n\n            const leftIsStringLike = isTypeFlagSet(\n                leftPart,\n                ts.TypeFlags.StringLike\n            );\n            const rightIsStringLike = isTypeFlagSet(\n                rightPart,\n                ts.TypeFlags.StringLike\n            );\n            const leftIsNumberLike = isTypeFlagSet(\n                leftPart,\n                ts.TypeFlags.NumberLike\n            );\n            const rightIsNumberLike = isTypeFlagSet(\n                rightPart,\n                ts.TypeFlags.NumberLike\n            );\n\n            if (\n                (leftIsStringLike && rightIsStringLike) ||\n                (leftIsNumberLike && rightIsNumberLike) ||\n                (isTypeFlagSet(leftPart, ts.TypeFlags.ESSymbolLike) &&\n                    isTypeFlagSet(rightPart, ts.TypeFlags.ESSymbolLike)) ||\n                (rightIsNumberLike &&\n                    isTypeFlagSet(leftPart, ts.TypeFlags.String)) ||\n                (leftIsNumberLike &&\n                    isTypeFlagSet(rightPart, ts.TypeFlags.String))\n            ) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n};\n\ntype ReadonlyTargetAnalysis = Readonly<{\n    checker: Readonly<ts.TypeChecker>;\n    propertyNames: readonly ts.__String[];\n    readonlyIndexInfos: readonly ts.IndexInfo[];\n    readonlyPropertyCache: Map<ts.__String, boolean>;\n    type: Readonly<ts.Type>;\n}>;\n\nconst createReadonlyTargetAnalysis = (\n    checker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): ReadonlyTargetAnalysis => {\n    const indexInfos = getUnionIndexInfos(checker, type);\n\n    return {\n        checker,\n        propertyNames: [...getUnionPropertyNames(checker, type)],\n        readonlyIndexInfos: indexInfos.filter(\n            (indexInfo) => indexInfo.isReadonly\n        ),\n        readonlyPropertyCache: new Map(),\n        type,\n    };\n};\n\nconst targetPartHasReadonlyProperty = (\n    analysis: Readonly<ReadonlyTargetAnalysis>,\n    targetPart: Readonly<ts.Type>,\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- TypeScript escaped property names are branded primitive strings.\n    propertyName: ts.__String\n): boolean => {\n    if (isDefined(tsutils.getPropertyOfType(targetPart, propertyName))) {\n        return tsutils.isPropertyReadonlyInType(\n            targetPart,\n            propertyName,\n            analysis.checker\n        );\n    }\n\n    return analysis.checker\n        .getIndexInfosOfType(targetPart)\n        .some(\n            (indexInfo) =>\n                indexInfo.isReadonly &&\n                indexInfoMayWriteProperty(\n                    analysis.checker,\n                    indexInfo,\n                    propertyName\n                )\n        );\n};\n\nconst isReadonlyTargetProperty = (\n    analysis: Readonly<ReadonlyTargetAnalysis>,\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- TypeScript escaped property names are branded primitive strings.\n    propertyName: ts.__String\n): boolean => {\n    const cachedResult = analysis.readonlyPropertyCache.get(propertyName);\n    if (isDefined(cachedResult)) {\n        return cachedResult;\n    }\n\n    const isReadonly = tsutils\n        .unionTypeParts(analysis.type)\n        .some((targetPart) =>\n            targetPartHasReadonlyProperty(analysis, targetPart, propertyName)\n        );\n\n    analysis.readonlyPropertyCache.set(propertyName, isReadonly);\n\n    return isReadonly;\n};\n\nconst targetHasReadonlyKey = (\n    analysis: Readonly<ReadonlyTargetAnalysis>\n): boolean =>\n    analysis.propertyNames.some((propertyName) =>\n        isReadonlyTargetProperty(analysis, propertyName)\n    ) || analysis.readonlyIndexInfos.length > 0;\n\nconst sourceIndexMayWriteReadonlyTargetKey = (\n    analysis: Readonly<ReadonlyTargetAnalysis>,\n    sourceIndexInfo: Readonly<ts.IndexInfo>\n): boolean => {\n    for (const propertyName of analysis.propertyNames) {\n        if (\n            isReadonlyTargetProperty(analysis, propertyName) &&\n            indexInfoMayWriteProperty(\n                analysis.checker,\n                sourceIndexInfo,\n                propertyName\n            )\n        ) {\n            return true;\n        }\n    }\n\n    return analysis.readonlyIndexInfos.some((targetIndexInfo) =>\n        indexKeyTypesMayOverlap(\n            analysis.checker,\n            sourceIndexInfo.keyType,\n            targetIndexInfo.keyType\n        )\n    );\n};\n\nconst sourcePartMayWriteReadonlyTargetKey = (\n    analysis: Readonly<ReadonlyTargetAnalysis>,\n    sourcePart: Readonly<ts.Type>\n): boolean => {\n    for (const sourceProperty of analysis.checker.getPropertiesOfType(\n        sourcePart\n    )) {\n        if (\n            isReadonlyTargetProperty(analysis, sourceProperty.getEscapedName())\n        ) {\n            return true;\n        }\n    }\n\n    return analysis.checker\n        .getIndexInfosOfType(sourcePart)\n        .some((sourceIndexInfo) =>\n            sourceIndexMayWriteReadonlyTargetKey(analysis, sourceIndexInfo)\n        );\n};\n\nconst sourceMayWriteReadonlyTargetKey = (\n    analysis: Readonly<ReadonlyTargetAnalysis>,\n    parserServices: Readonly<ParserServicesWithTypeInformation>,\n    source: Readonly<es.CallExpressionArgument>\n): boolean => {\n    const sourceType = getConstrainedTypeAtLocation(parserServices, source);\n\n    if (isTypeFlagSet(sourceType, ts.TypeFlags.Any)) {\n        return targetHasReadonlyKey(analysis);\n    }\n\n    return tsutils\n        .unionTypeParts(sourceType)\n        .some((sourcePart) =>\n            sourcePartMayWriteReadonlyTargetKey(analysis, sourcePart)\n        );\n};\n\n/**\n * Disallow Object.assign sources that may overwrite readonly target keys.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const checker = parserServices.program.getTypeChecker();\n\n        return {\n            \"CallExpression[callee.type='MemberExpression'][callee.object.type='Identifier'][callee.object.name='Object'][callee.property.type='Identifier'][callee.property.name='assign']\":\n                (node: Readonly<es.CallExpression>): void => {\n                    const [target, ...sources] = node.arguments;\n                    if (target === undefined || sources.length === 0) {\n                        return;\n                    }\n\n                    const targetType = getConstrainedTypeAtLocation(\n                        parserServices,\n                        target\n                    );\n                    const targetAnalysis = createReadonlyTargetAnalysis(\n                        checker,\n                        targetType\n                    );\n\n                    if (\n                        sources.every(\n                            (source) =>\n                                !sourceMayWriteReadonlyTargetKey(\n                                    targetAnalysis,\n                                    parserServices,\n                                    source\n                                )\n                        )\n                    ) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"forbidden\",\n                        node,\n                    });\n                },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"disallow Object.assign sources that may overwrite readonly target keys.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-unsafe-object-assign\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Object.assign source may overwrite a readonly target property.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"typescript/no-unsafe-object-assign\",\n});\n\nexport default rule;\n", "import { assertDefined } from \"ts-extras\";\n\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\nimport rule from \"./typescript-no-unsafe-object-assign.js\";\n\nconst coreNoUnsafeObjectAssignRule: typeof rule = rule;\nconst baseDocs = coreNoUnsafeObjectAssignRule.meta.docs;\nassertDefined(baseDocs);\n\n/**\n * TypeScript-prefixed alias for Object.assign readonly-target safety checks.\n */\nconst compatibilityAlias: typeof coreNoUnsafeObjectAssignRule = {\n    ...coreNoUnsafeObjectAssignRule,\n    meta: {\n        ...coreNoUnsafeObjectAssignRule.meta,\n        docs: {\n            ...baseDocs,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-unsafe-object-assignment\",\n        },\n    },\n};\n\n/**\n * Deprecated compatibility alias for the canonical Object.assign rule.\n */\nconst typescriptNoUnsafeObjectAssignmentRule: typeof compatibilityAlias =\n    withDeprecatedRuleLifecycle(compatibilityAlias, {\n        deprecatedSince: \"1.2.0\",\n        message:\n            \"Deprecated compatibility alias. Use typescript/no-unsafe-object-assign instead.\",\n        replacedBy: [\n            createReplacementRuleInfo({\n                rule: {\n                    name: \"typescript/no-unsafe-object-assign\",\n                    url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-no-unsafe-object-assign\",\n                },\n            }),\n        ],\n        ruleId: \"typescript/no-unsafe-object-assignment\",\n    });\n\nexport default typescriptNoUnsafeObjectAssignmentRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = String.raw`TSTypeAliasDeclaration > Identifier.id:matches([parent.typeAnnotation.type='TSArrayType'], [parent.typeAnnotation.type='TSTupleType']):not([name=/^(?:[A-Z][a-z\\d]*)+(?:Array|s)$/u])`;\n\n/**\n * Prefer reusable named aliases for array and tuple type aliases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require reusable alias names for array and tuple type aliases.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-array-type-alias\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                'Prefer a named alias ending in \"Array\" or \"s\" for array/tuple type aliases.',\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-array-type-alias\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated because typescript/consistent-array-type-name covers the same type-alias policy.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/consistent-array-type-name\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-consistent-array-type-name\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-array-type-alias\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"PropertyDefinition:not([typeAnnotation]) > ArrowFunctionExpression\";\n\n/**\n * Prefer class methods over untyped arrow-function class properties.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            context.report({\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require class methods over untyped arrow-function class properties.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-class-method\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Use a class method instead of an untyped function property.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-class-method\",\n});\n\nexport default rule;\n", "import {\n    getConstrainedTypeAtLocation,\n    isTypeFlagSet,\n} from \"@typescript-eslint/type-utils\";\nimport {\n    AST_NODE_TYPES,\n    type TSESTree as es,\n    ESLintUtils,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\nimport * as tsutils from \"tsutils\";\nimport ts from \"typescript\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport { withDeprecatedRuleLifecycle } from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds =\n    | \"preferEnumComparison\"\n    | \"preferEnumReturn\"\n    | \"preferEnumUnion\";\n\ntype Options = readonly [];\n\nconst isEnumLikeOrUndefinedType = (\n    checker: Readonly<ts.TypeChecker>,\n    type: Readonly<ts.Type>\n): boolean => {\n    let hasEnumLike = false;\n\n    for (const typeVariant of tsutils.unionTypeParts(type)) {\n        const apparentType = checker.getApparentType(typeVariant);\n\n        if (isTypeFlagSet(typeVariant, ts.TypeFlags.Undefined)) {\n            // Undefined is permitted alongside an otherwise enum-like type.\n        } else if (\n            isTypeFlagSet(typeVariant, ts.TypeFlags.EnumLike) ||\n            isTypeFlagSet(apparentType, ts.TypeFlags.EnumLike)\n        ) {\n            hasEnumLike = true;\n        } else {\n            return false;\n        }\n    }\n\n    return hasEnumLike;\n};\n\nconst isStringLiteral = (node: Readonly<es.Node>): node is es.Literal =>\n    node.type === AST_NODE_TYPES.Literal && typeof node.value === \"string\";\n\n/**\n * Prefer enums over string literal comparisons and unions.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const parserServices = ESLintUtils.getParserServices(context);\n        const checker = parserServices.program.getTypeChecker();\n\n        return {\n            BinaryExpression: (node: Readonly<es.BinaryExpression>): void => {\n                const isEqualityOperator =\n                    node.operator === \"==\" ||\n                    node.operator === \"===\" ||\n                    node.operator === \"!=\" ||\n                    node.operator === \"!==\";\n                if (!isEqualityOperator) {\n                    return;\n                }\n\n                const literalNode = isStringLiteral(node.left)\n                    ? node.left\n                    : isStringLiteral(node.right)\n                      ? node.right\n                      : null;\n                if (literalNode === null) {\n                    return;\n                }\n                const expressionNode =\n                    literalNode === node.left ? node.right : node.left;\n\n                const expressionType = getConstrainedTypeAtLocation(\n                    parserServices,\n                    expressionNode\n                );\n                if (!isEnumLikeOrUndefinedType(checker, expressionType)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"preferEnumComparison\",\n                    node: literalNode,\n                });\n            },\n            ReturnStatement: (node: Readonly<es.ReturnStatement>): void => {\n                if (node.argument === null || !isStringLiteral(node.argument)) {\n                    return;\n                }\n\n                let functionNode:\n                    | es.ArrowFunctionExpression\n                    | es.FunctionDeclaration\n                    | es.FunctionExpression\n                    | null = null;\n                for (const ancestor of context.sourceCode.getAncestors(node)) {\n                    if (\n                        ancestor.type ===\n                            AST_NODE_TYPES.ArrowFunctionExpression ||\n                        ancestor.type === AST_NODE_TYPES.FunctionDeclaration ||\n                        ancestor.type === AST_NODE_TYPES.FunctionExpression\n                    ) {\n                        functionNode = ancestor;\n                    }\n                }\n                if (functionNode === null) {\n                    return;\n                }\n\n                const signature = arrayFirst(\n                    getConstrainedTypeAtLocation(\n                        parserServices,\n                        functionNode\n                    ).getCallSignatures()\n                );\n                const returnType = isDefined(signature)\n                    ? checker.getReturnTypeOfSignature(signature)\n                    : undefined;\n                if (!isDefined(returnType)) {\n                    return;\n                }\n\n                if (!isEnumLikeOrUndefinedType(checker, returnType)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"preferEnumReturn\",\n                    node: node.argument,\n                });\n            },\n            TSTypeAliasDeclaration: (\n                node: Readonly<es.TSTypeAliasDeclaration>\n            ): void => {\n                if (node.typeAnnotation.type !== AST_NODE_TYPES.TSUnionType) {\n                    return;\n                }\n\n                let literalCount = 0;\n                for (const typeNode of node.typeAnnotation.types) {\n                    if (\n                        typeNode.type === AST_NODE_TYPES.TSLiteralType &&\n                        typeNode.literal.type === AST_NODE_TYPES.Literal &&\n                        typeof typeNode.literal.value === \"string\"\n                    ) {\n                        literalCount += 1;\n                    }\n                }\n                if (\n                    literalCount > 1 &&\n                    literalCount === node.typeAnnotation.types.length\n                ) {\n                    context.report({\n                        messageId: \"preferEnumUnion\",\n                        node,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"enforce enums over string literal comparisons and pure string unions.\",\n            frozen: false,\n            recommended: false,\n            requiresTypeChecking: true,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-enum\",\n        },\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            preferEnumComparison:\n                \"Use enum members instead of string literals in enum comparisons.\",\n            preferEnumReturn:\n                \"Return enum members instead of string literals from enum-returning functions.\",\n            preferEnumUnion:\n                \"Prefer an enum declaration instead of a pure string-literal union type.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-enum\",\n});\n\n/** Deprecated rule with explicit lifecycle metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated without replacement because requiring enums conflicts with this plugin's no-enum policy.\",\n    ruleId: \"typescript/prefer-enum\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestPreferNamedTupleMembers\";\n\ntype Options = readonly [];\n\nconst isUnnamedTupleElement = (\n    tupleElement: Readonly<es.TypeNode>\n): boolean => {\n    if (tupleElement.type === AST_NODE_TYPES.TSNamedTupleMember) {\n        return false;\n    }\n\n    return (\n        tupleElement.type !== AST_NODE_TYPES.TSRestType ||\n        tupleElement.typeAnnotation.type !== AST_NODE_TYPES.TSNamedTupleMember\n    );\n};\n\nconst generateUniqueTupleMemberName = (\n    preferredName: string,\n    usedNames: Readonly<{\n        readonly add: (value: string) => unknown;\n        readonly has: (value: string) => boolean;\n    }>\n): string => {\n    if (!usedNames.has(preferredName)) {\n        usedNames.add(preferredName);\n\n        return preferredName;\n    }\n\n    let suffix = 2;\n\n    while (usedNames.has(`${preferredName}_${suffix}`)) {\n        suffix += 1;\n    }\n\n    const generatedName = `${preferredName}_${suffix}`;\n\n    usedNames.add(generatedName);\n\n    return generatedName;\n};\n\nconst getTupleMemberReplacementText = (\n    tupleElement: Readonly<es.TypeNode>,\n    memberName: string,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): string => {\n    if (tupleElement.type === AST_NODE_TYPES.TSOptionalType) {\n        return `${memberName}?: ${sourceCode.getText(tupleElement.typeAnnotation)}`;\n    }\n\n    if (tupleElement.type === AST_NODE_TYPES.TSRestType) {\n        if (\n            tupleElement.typeAnnotation.type ===\n            AST_NODE_TYPES.TSNamedTupleMember\n        ) {\n            return sourceCode.getText(tupleElement);\n        }\n\n        return `...${memberName}: ${sourceCode.getText(tupleElement.typeAnnotation)}`;\n    }\n\n    return `${memberName}: ${sourceCode.getText(tupleElement)}`;\n};\n\n/**\n * Prefer named tuple members for readability.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            TSTupleType: (node: Readonly<es.TSTupleType>): void => {\n                const hasUnnamedTupleElements = node.elementTypes.some(\n                    (tupleElement) => isUnnamedTupleElement(tupleElement)\n                );\n\n                if (!hasUnnamedTupleElements) {\n                    return;\n                }\n\n                const usedNames = new Set<string>(\n                    node.elementTypes.flatMap((tupleElement) => {\n                        if (\n                            tupleElement.type !==\n                            AST_NODE_TYPES.TSNamedTupleMember\n                        ) {\n                            return [];\n                        }\n\n                        return [tupleElement.label.name];\n                    })\n                );\n\n                let fixesByElement: readonly Readonly<{\n                    readonly replacementText: string;\n                    readonly tupleElement: es.TypeNode;\n                }>[] = [];\n\n                for (const [\n                    index,\n                    tupleElement,\n                ] of node.elementTypes.entries()) {\n                    if (!isUnnamedTupleElement(tupleElement)) {\n                        continue;\n                    }\n\n                    const preferredName = `item${index + 1}`;\n                    const memberName = generateUniqueTupleMemberName(\n                        preferredName,\n                        usedNames\n                    );\n                    const replacementText = getTupleMemberReplacementText(\n                        tupleElement,\n                        memberName,\n                        sourceCode\n                    );\n\n                    fixesByElement = [\n                        ...fixesByElement,\n                        { replacementText, tupleElement },\n                    ];\n                }\n\n                const fix = (\n                    fixer: Readonly<TSESLint.RuleFixer>\n                ): readonly TSESLint.RuleFix[] =>\n                    fixesByElement.map(({ replacementText, tupleElement }) =>\n                        fixer.replaceText(tupleElement, replacementText)\n                    );\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestPreferNamedTupleMembers\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require explicit names for tuple members in TypeScript tuple types.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-named-tuple-members\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden:\n                \"Prefer named tuple members for readability and API clarity.\",\n            suggestPreferNamedTupleMembers:\n                \"Add generated names to unnamed tuple members.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-named-tuple-members\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestPreferReadonlyArrayParameter\";\n\ntype MutableArrayLikeTypeNode =\n    | es.Identifier\n    | es.TSArrayType\n    | es.TSTupleType;\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getParametersFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<readonly es.Parameter[]> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.params;\n    }\n\n    return undefined;\n};\n\nconst getTypeAnnotationFromPattern = (\n    pattern: Readonly<\n        | es.AssignmentPattern\n        | es.BindingName\n        | es.RestElement\n    >\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {\n        return getTypeAnnotationFromPattern(pattern.left);\n    }\n\n    if (pattern.type === AST_NODE_TYPES.RestElement) {\n        if (pattern.typeAnnotation !== undefined) {\n            return pattern.typeAnnotation;\n        }\n\n        const argument = pattern.argument;\n\n        if (\n            argument.type !== AST_NODE_TYPES.ArrayPattern &&\n            argument.type !== AST_NODE_TYPES.Identifier &&\n            argument.type !== AST_NODE_TYPES.ObjectPattern\n        ) {\n            return undefined;\n        }\n\n        return argument.typeAnnotation;\n    }\n\n    return pattern.typeAnnotation;\n};\n\nconst getTypeAnnotationFromParameter = (\n    parameter: Readonly<es.Parameter>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (parameter.type === AST_NODE_TYPES.TSParameterProperty) {\n        return getTypeAnnotationFromPattern(parameter.parameter);\n    }\n\n    return getTypeAnnotationFromPattern(parameter);\n};\n\nconst isArrayTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Array\";\n\nconst collectMutableArrayLikeTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableArrayLikeTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSArrayType ||\n        typeNode.type === AST_NODE_TYPES.TSTupleType\n    ) {\n        return [typeNode];\n    }\n\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableArrayLikeTypeNodes(subTypeNode)\n        );\n    }\n\n    if (typeNode.type === AST_NODE_TYPES.TSTypeReference) {\n        if (!isArrayTypeReference(typeNode)) {\n            return [];\n        }\n\n        return [typeNode.typeName];\n    }\n\n    return [];\n};\n\nconst buildReadonlyArrayLikeFix = (\n    node: Readonly<MutableArrayLikeTypeNode>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) => {\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n            fixer.replaceText(node, \"ReadonlyArray\");\n    }\n\n    return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, `readonly ${sourceCode.getText(node)}`);\n};\n\n/**\n * Prefer readonly array-like parameter type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n                const parameters = getParametersFromFunctionLikeNode(node);\n\n                if (parameters === undefined) {\n                    return;\n                }\n\n                for (const parameter of parameters) {\n                    const typeAnnotation =\n                        getTypeAnnotationFromParameter(parameter);\n\n                    if (typeAnnotation === undefined) {\n                        continue;\n                    }\n\n                    const mutableArrayLikeTypeNodes =\n                        collectMutableArrayLikeTypeNodes(\n                            typeAnnotation.typeAnnotation\n                        );\n\n                    for (const mutableArrayLikeTypeNode of mutableArrayLikeTypeNodes) {\n                        const fix = buildReadonlyArrayLikeFix(\n                            mutableArrayLikeTypeNode,\n                            sourceCode\n                        );\n\n                        context.report({\n                            fix,\n                            messageId: \"forbidden\",\n                            node: mutableArrayLikeTypeNode,\n                            suggest: [\n                                {\n                                    fix,\n                                    messageId:\n                                        \"suggestPreferReadonlyArrayParameter\",\n                                },\n                            ],\n                        });\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require readonly array and tuple parameter type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-array-parameter\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly array-like parameter types.\",\n            suggestPreferReadonlyArrayParameter:\n                \"Convert this parameter type to a readonly array-like form.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-array-parameter\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/prefer-readonly-parameter-types rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-array-parameter\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = arrayJoin(\n    [\n        \":not(TSTypeOperator[operator='readonly']) > :matches(TSArrayType, TSTupleType)\",\n        \"TSTypeReference > Identifier[name='Array']\",\n    ],\n    \", \"\n);\n\n/**\n * Require readonly array and tuple type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [selector]: (node: Readonly<es.Node>): void => {\n                if (\n                    node.type !== AST_NODE_TYPES.Identifier &&\n                    node.type !== AST_NODE_TYPES.TSArrayType &&\n                    node.type !== AST_NODE_TYPES.TSTupleType\n                ) {\n                    return;\n                }\n\n                const fix =\n                    node.type === AST_NODE_TYPES.Identifier\n                        ? (\n                              fixer: Readonly<TSESLint.RuleFixer>\n                          ): TSESLint.RuleFix =>\n                              fixer.replaceText(node, \"ReadonlyArray\")\n                        : (\n                              fixer: Readonly<TSESLint.RuleFixer>\n                          ): TSESLint.RuleFix =>\n                              fixer.replaceText(\n                                  node,\n                                  `readonly ${sourceCode.getText(node)}`\n                              );\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require readonly array and tuple type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-array\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly array or tuple types.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-array\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the scoped readonly-array rules and @typescript-eslint/prefer-readonly-parameter-types.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-array-property-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-property-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-array-return-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-return-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-array-type-alias\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-type-alias\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-array\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TSIndexSignature[readonly!=true]\";\n\n/**\n * Require readonly index signatures.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (\n                node.type !== AST_NODE_TYPES.TSIndexSignature ||\n                node.readonly\n            ) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) => fixer.insertTextBefore(node, \"readonly \"),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require readonly index signatures.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-index-signature\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly index signatures.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-index-signature\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TSTypeReference > Identifier[name='Map']\";\n\n/**\n * Require ReadonlyMap in place of Map type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (node.type !== AST_NODE_TYPES.Identifier) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) => fixer.replaceText(node, \"ReadonlyMap\"),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require ReadonlyMap instead of Map in type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-map\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly map types.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-map\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the scoped readonly-map rules and @typescript-eslint/prefer-readonly-parameter-types.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-map-property-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-property-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-map-return-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-return-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-map-type-alias\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-type-alias\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-map\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestAddReadonly\";\n\ntype Options = readonly [];\n\nconst selector =\n    \":matches(PropertyDefinition, TSPropertySignature)[readonly!=true]\";\n\n/**\n * Require readonly modifiers on class and interface properties.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (\n                node.type !== AST_NODE_TYPES.PropertyDefinition &&\n                node.type !== AST_NODE_TYPES.TSPropertySignature\n            ) {\n                return;\n            }\n\n            const keyNode = node.key;\n\n            const fix =\n                keyNode.type === AST_NODE_TYPES.Identifier ||\n                keyNode.type === AST_NODE_TYPES.PrivateIdentifier ||\n                keyNode.type === AST_NODE_TYPES.Literal\n                    ? (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n                          fixer.insertTextBefore(keyNode, \"readonly \")\n                    : undefined;\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n                ...(isDefined(fix) && {\n                    fix,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestAddReadonly\",\n                        },\n                    ],\n                }),\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require readonly for class and interface properties.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-property\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly property declarations.\",\n            suggestAddReadonly:\n                \"Insert readonly modifier for this property declaration.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-property\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/prefer-readonly rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-property\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TSTypeReference > Identifier[name='Record']\";\n\nconst isReadonlyWrappedRecord = (\n    typeReference: Readonly<es.TSTypeReference>\n): boolean => {\n    const parent = typeReference.parent;\n\n    if (parent.type !== AST_NODE_TYPES.TSTypeParameterInstantiation) {\n        return false;\n    }\n\n    const maybeReadonlyTypeReference = parent.parent;\n\n    return (\n        maybeReadonlyTypeReference.type === AST_NODE_TYPES.TSTypeReference &&\n        maybeReadonlyTypeReference.typeName.type ===\n            AST_NODE_TYPES.Identifier &&\n        maybeReadonlyTypeReference.typeName.name === \"Readonly\"\n    );\n};\n\n/**\n * Require readonly wrappers around bare Record type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (node.type !== AST_NODE_TYPES.Identifier) {\n                return;\n            }\n\n            const typeReference = node.parent;\n\n            if (\n                typeReference.type !== AST_NODE_TYPES.TSTypeReference ||\n                typeReference.typeName.type !== AST_NODE_TYPES.Identifier ||\n                typeReference.typeName.name !== \"Record\" ||\n                isReadonlyWrappedRecord(typeReference)\n            ) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) => [\n                    fixer.replaceText(node, \"Readonly<Record\"),\n                    fixer.insertTextAfter(typeReference, \">\"),\n                ],\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require Readonly<Record<...>> instead of Record<...> in type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-record\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly record types.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-record\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the scoped readonly-record rules and @typescript-eslint/prefer-readonly-parameter-types.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-record-property-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-property-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-record-return-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-return-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-record-type-alias\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-type-alias\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-record\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\";\n\ntype Options = readonly [];\n\nconst selector = \"TSTypeReference > Identifier[name='Set']\";\n\n/**\n * Require ReadonlySet in place of Set type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (node.type !== AST_NODE_TYPES.Identifier) {\n                return;\n            }\n\n            context.report({\n                fix: (fixer) => fixer.replaceText(node, \"ReadonlySet\"),\n                messageId: \"forbidden\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require ReadonlySet instead of Set in type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-prefer-readonly-set\",\n        },\n        fixable: \"code\",\n        hasSuggestions: false,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly set types.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/prefer-readonly-set\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the scoped readonly-set rules and @typescript-eslint/prefer-readonly-parameter-types.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-set-property-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-property-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-set-return-type\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-return-type\",\n            },\n        }),\n        createReplacementRuleInfo({\n            rule: {\n                name: \"typescript/require-readonly-set-type-alias\",\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-type-alias\",\n            },\n        }),\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/prefer-readonly-set\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestAnnotateUnknown\";\n\ntype Options = readonly [];\n\nconst selector = \"PropertyDefinition[typeAnnotation=undefined][value=null]\";\n\n/**\n * Require explicit type annotations for uninitialized class properties.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [selector]: (node: Readonly<es.Node>): void => {\n            if (node.type !== AST_NODE_TYPES.PropertyDefinition) {\n                return;\n            }\n\n            const canProvideSafeSuggestion =\n                !node.computed &&\n                node.key.type === AST_NODE_TYPES.Identifier &&\n                !node.optional &&\n                !node.definite;\n\n            const fix = canProvideSafeSuggestion\n                ? (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n                      fixer.insertTextAfter(node.key, \": unknown\")\n                : undefined;\n\n            context.report({\n                messageId: \"forbidden\",\n                node,\n                ...(isDefined(fix) && {\n                    fix,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestAnnotateUnknown\",\n                        },\n                    ],\n                }),\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require explicit type annotations for class properties without initializers.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-prop-type-annotation\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Expecting a type annotation for this property.\",\n            suggestAnnotateUnknown:\n                \"Add an explicit ': unknown' type annotation.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"typescript/require-prop-type-annotation\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyArrayPropertyType\";\n\ntype MutableArrayLikeTypeNode =\n    | es.Identifier\n    | es.TSArrayType\n    | es.TSTupleType;\n\ntype Options = readonly [];\n\nconst isArrayTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Array\";\n\nconst collectMutableArrayLikeTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableArrayLikeTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSArrayType ||\n        typeNode.type === AST_NODE_TYPES.TSTupleType\n    ) {\n        return [typeNode];\n    }\n\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableArrayLikeTypeNodes(subTypeNode)\n        );\n    }\n\n    if (typeNode.type === AST_NODE_TYPES.TSTypeReference) {\n        if (!isArrayTypeReference(typeNode)) {\n            return [];\n        }\n\n        return [typeNode.typeName];\n    }\n\n    return [];\n};\n\nconst buildReadonlyArrayLikeFix = (\n    node: Readonly<MutableArrayLikeTypeNode>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) => {\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n            fixer.replaceText(node, \"ReadonlyArray\");\n    }\n\n    return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, `readonly ${sourceCode.getText(node)}`);\n};\n\nconst isTopLevelPropertySignature = (\n    node: Readonly<es.TSPropertySignature>\n): boolean => {\n    const parent = node.parent;\n\n    if (parent.type === AST_NODE_TYPES.TSInterfaceBody) {\n        return true;\n    }\n    const maybeTypeAliasDeclaration = parent.parent;\n\n    return (\n        maybeTypeAliasDeclaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n    );\n};\n\n/**\n * Require readonly array-like property type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            \"TSPropertySignature[typeAnnotation!=null]\": (\n                node: Readonly<es.TSPropertySignature>\n            ): void => {\n                if (!isTopLevelPropertySignature(node)) {\n                    return;\n                }\n\n                const typeAnnotation = node.typeAnnotation;\n\n                if (typeAnnotation === undefined) {\n                    return;\n                }\n\n                const mutableArrayLikeTypeNodes =\n                    collectMutableArrayLikeTypeNodes(\n                        typeAnnotation.typeAnnotation\n                    );\n\n                for (const mutableArrayLikeTypeNode of mutableArrayLikeTypeNodes) {\n                    const fix = buildReadonlyArrayLikeFix(\n                        mutableArrayLikeTypeNode,\n                        sourceCode\n                    );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableArrayLikeTypeNode,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlyArrayPropertyType\",\n                            },\n                        ],\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require readonly array and tuple property type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-property-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly array-like property types.\",\n            suggestRequireReadonlyArrayPropertyType:\n                \"Convert this property type to a readonly array-like form.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-array-property-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyArrayReturnType\";\n\ntype MutableArrayLikeTypeNode =\n    | es.Identifier\n    | es.TSArrayType\n    | es.TSTupleType;\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getReturnTypeAnnotationFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.returnType;\n    }\n\n    return undefined;\n};\n\nconst isArrayTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Array\";\n\nconst collectMutableArrayLikeTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableArrayLikeTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSArrayType ||\n        typeNode.type === AST_NODE_TYPES.TSTupleType\n    ) {\n        return [typeNode];\n    }\n\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableArrayLikeTypeNodes(subTypeNode)\n        );\n    }\n\n    if (typeNode.type === AST_NODE_TYPES.TSTypeReference) {\n        if (!isArrayTypeReference(typeNode)) {\n            return [];\n        }\n\n        return [typeNode.typeName];\n    }\n\n    return [];\n};\n\nconst buildReadonlyArrayLikeFix = (\n    node: Readonly<MutableArrayLikeTypeNode>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) => {\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n            fixer.replaceText(node, \"ReadonlyArray\");\n    }\n\n    return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, `readonly ${sourceCode.getText(node)}`);\n};\n\n/**\n * Require readonly array-like return type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n                const returnTypeAnnotation =\n                    getReturnTypeAnnotationFromFunctionLikeNode(node);\n\n                if (returnTypeAnnotation === undefined) {\n                    return;\n                }\n\n                const mutableArrayLikeTypeNodes =\n                    collectMutableArrayLikeTypeNodes(\n                        returnTypeAnnotation.typeAnnotation\n                    );\n\n                for (const mutableArrayLikeTypeNode of mutableArrayLikeTypeNodes) {\n                    const fix = buildReadonlyArrayLikeFix(\n                        mutableArrayLikeTypeNode,\n                        sourceCode\n                    );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableArrayLikeTypeNode,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlyArrayReturnType\",\n                            },\n                        ],\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require readonly array and tuple return type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly array-like return types.\",\n            suggestRequireReadonlyArrayReturnType:\n                \"Convert this return type to a readonly array-like form.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-array-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyArrayTypeAlias\";\n\ntype MutableArrayLikeTypeNode =\n    | es.Identifier\n    | es.TSArrayType\n    | es.TSTupleType;\n\ntype Options = readonly [];\n\nconst isArrayTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Array\";\n\nconst collectMutableArrayLikeTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableArrayLikeTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSArrayType ||\n        typeNode.type === AST_NODE_TYPES.TSTupleType\n    ) {\n        return [typeNode];\n    }\n\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableArrayLikeTypeNodes(subTypeNode)\n        );\n    }\n\n    if (typeNode.type === AST_NODE_TYPES.TSTypeReference) {\n        if (!isArrayTypeReference(typeNode)) {\n            return [];\n        }\n\n        return [typeNode.typeName];\n    }\n\n    return [];\n};\n\nconst buildReadonlyArrayLikeFix = (\n    node: Readonly<MutableArrayLikeTypeNode>,\n    sourceCode: Readonly<TSESLint.SourceCode>\n): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) => {\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n            fixer.replaceText(node, \"ReadonlyArray\");\n    }\n\n    return (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, `readonly ${sourceCode.getText(node)}`);\n};\n\n/**\n * Require readonly array-like type aliases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            TSTypeAliasDeclaration: (\n                node: Readonly<es.TSTypeAliasDeclaration>\n            ): void => {\n                const mutableArrayLikeTypeNodes =\n                    collectMutableArrayLikeTypeNodes(node.typeAnnotation);\n\n                for (const mutableArrayLikeTypeNode of mutableArrayLikeTypeNodes) {\n                    const fix = buildReadonlyArrayLikeFix(\n                        mutableArrayLikeTypeNode,\n                        sourceCode\n                    );\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableArrayLikeTypeNode,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlyArrayTypeAlias\",\n                            },\n                        ],\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require readonly array and tuple type alias annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-array-type-alias\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly array-like type aliases.\",\n            suggestRequireReadonlyArrayTypeAlias:\n                \"Convert this type alias annotation to a readonly array-like form.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-array-type-alias\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyMapParameterType\";\n\ntype MutableMapTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getParametersFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<readonly es.Parameter[]> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.params;\n    }\n\n    return undefined;\n};\n\nconst getTypeAnnotationFromPattern = (\n    pattern: Readonly<\n        | es.AssignmentPattern\n        | es.BindingName\n        | es.RestElement\n    >\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {\n        return getTypeAnnotationFromPattern(pattern.left);\n    }\n\n    if (pattern.type === AST_NODE_TYPES.RestElement) {\n        if (pattern.typeAnnotation !== undefined) {\n            return pattern.typeAnnotation;\n        }\n\n        const argument = pattern.argument;\n\n        if (\n            argument.type !== AST_NODE_TYPES.ArrayPattern &&\n            argument.type !== AST_NODE_TYPES.Identifier &&\n            argument.type !== AST_NODE_TYPES.ObjectPattern\n        ) {\n            return undefined;\n        }\n\n        return argument.typeAnnotation;\n    }\n\n    return pattern.typeAnnotation;\n};\n\nconst getTypeAnnotationFromParameter = (\n    parameter: Readonly<es.Parameter>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (parameter.type === AST_NODE_TYPES.TSParameterProperty) {\n        return getTypeAnnotationFromPattern(parameter.parameter);\n    }\n\n    return getTypeAnnotationFromPattern(parameter);\n};\n\nconst isMapTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Map\";\n\nconst collectMutableMapTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableMapTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableMapTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isMapTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlyMapFix =\n    (\n        node: Readonly<MutableMapTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlyMap\");\n\n/**\n * Require readonly map parameter type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const parameters = getParametersFromFunctionLikeNode(node);\n\n            if (parameters === undefined) {\n                return;\n            }\n\n            for (const parameter of parameters) {\n                const typeAnnotation =\n                    getTypeAnnotationFromParameter(parameter);\n\n                if (typeAnnotation === undefined) {\n                    continue;\n                }\n\n                const mutableMapTypeNodes = collectMutableMapTypeNodes(\n                    typeAnnotation.typeAnnotation\n                );\n\n                for (const mutableMapTypeNode of mutableMapTypeNodes) {\n                    const fix = buildReadonlyMapFix(mutableMapTypeNode);\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableMapTypeNode,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlyMapParameterType\",\n                            },\n                        ],\n                    });\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlyMap parameter type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-parameter-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly map parameter types.\",\n            suggestRequireReadonlyMapParameterType:\n                \"Convert this parameter type to ReadonlyMap.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-map-parameter-type\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/prefer-readonly-parameter-types rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/require-readonly-map-parameter-type\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyMapPropertyType\";\n\ntype MutableMapTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst isMapTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Map\";\n\nconst collectMutableMapTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableMapTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableMapTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isMapTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlyMapFix =\n    (\n        node: Readonly<MutableMapTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlyMap\");\n\nconst isTopLevelPropertySignature = (\n    node: Readonly<es.TSPropertySignature>\n): boolean => {\n    const parent = node.parent;\n\n    if (parent.type === AST_NODE_TYPES.TSInterfaceBody) {\n        return true;\n    }\n    const maybeTypeAliasDeclaration = parent.parent;\n\n    return (\n        maybeTypeAliasDeclaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n    );\n};\n\n/**\n * Require readonly map property type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"TSPropertySignature[typeAnnotation!=null]\": (\n            node: Readonly<es.TSPropertySignature>\n        ): void => {\n            if (!isTopLevelPropertySignature(node)) {\n                return;\n            }\n\n            const typeAnnotation = node.typeAnnotation;\n\n            if (typeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableMapTypeNodes = collectMutableMapTypeNodes(\n                typeAnnotation.typeAnnotation\n            );\n\n            for (const mutableMapTypeNode of mutableMapTypeNodes) {\n                const fix = buildReadonlyMapFix(mutableMapTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableMapTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlyMapPropertyType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlyMap property type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-property-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly map property types.\",\n            suggestRequireReadonlyMapPropertyType:\n                \"Convert this property type to ReadonlyMap.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-map-property-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyMapReturnType\";\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getReturnTypeAnnotationFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.returnType;\n    }\n\n    return undefined;\n};\n\nconst isMapTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Map\";\n\nconst collectMutableMapTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly es.Identifier[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableMapTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isMapTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlyMapFix =\n    (\n        node: Readonly<es.Identifier>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlyMap\");\n\n/**\n * Require readonly map return type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const returnTypeAnnotation =\n                getReturnTypeAnnotationFromFunctionLikeNode(node);\n\n            if (returnTypeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableMapTypeNodes = collectMutableMapTypeNodes(\n                returnTypeAnnotation.typeAnnotation\n            );\n\n            for (const mutableMapTypeNode of mutableMapTypeNodes) {\n                const fix = buildReadonlyMapFix(mutableMapTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableMapTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlyMapReturnType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlyMap return type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly map return types.\",\n            suggestRequireReadonlyMapReturnType:\n                \"Convert this return type to ReadonlyMap.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-map-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyMapTypeAlias\";\n\ntype MutableMapTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst isMapTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Map\";\n\nconst collectMutableMapTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableMapTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableMapTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isMapTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlyMapFix =\n    (\n        node: Readonly<MutableMapTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlyMap\");\n\n/**\n * Require readonly map type aliases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        TSTypeAliasDeclaration: (\n            node: Readonly<es.TSTypeAliasDeclaration>\n        ): void => {\n            const mutableMapTypeNodes = collectMutableMapTypeNodes(\n                node.typeAnnotation\n            );\n\n            for (const mutableMapTypeNode of mutableMapTypeNodes) {\n                const fix = buildReadonlyMapFix(mutableMapTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableMapTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlyMapTypeAlias\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlyMap type alias annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-map-type-alias\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly map type aliases.\",\n            suggestRequireReadonlyMapTypeAlias:\n                \"Convert this type alias annotation to ReadonlyMap.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-map-type-alias\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyRecordParameterType\";\n\ntype MutableRecordTypeReference = es.TSTypeReference & {\n    readonly typeName: es.Identifier;\n};\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getParametersFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<readonly es.Parameter[]> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.params;\n    }\n\n    return undefined;\n};\n\nconst getTypeAnnotationFromPattern = (\n    pattern: Readonly<\n        | es.AssignmentPattern\n        | es.BindingName\n        | es.RestElement\n    >\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {\n        return getTypeAnnotationFromPattern(pattern.left);\n    }\n\n    if (pattern.type === AST_NODE_TYPES.RestElement) {\n        if (pattern.typeAnnotation !== undefined) {\n            return pattern.typeAnnotation;\n        }\n\n        const argument = pattern.argument;\n\n        if (\n            argument.type !== AST_NODE_TYPES.ArrayPattern &&\n            argument.type !== AST_NODE_TYPES.Identifier &&\n            argument.type !== AST_NODE_TYPES.ObjectPattern\n        ) {\n            return undefined;\n        }\n\n        return argument.typeAnnotation;\n    }\n\n    return pattern.typeAnnotation;\n};\n\nconst getTypeAnnotationFromParameter = (\n    parameter: Readonly<es.Parameter>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (parameter.type === AST_NODE_TYPES.TSParameterProperty) {\n        return getTypeAnnotationFromPattern(parameter.parameter);\n    }\n\n    return getTypeAnnotationFromPattern(parameter);\n};\n\nconst isRecordTypeReference = (\n    typeNode: Readonly<es.TypeNode>\n): typeNode is Readonly<MutableRecordTypeReference> =>\n    typeNode.type === AST_NODE_TYPES.TSTypeReference &&\n    typeNode.typeName.type === AST_NODE_TYPES.Identifier &&\n    typeNode.typeName.name === \"Record\";\n\nconst isReadonlyWrappedRecord = (\n    typeReference: Readonly<es.TSTypeReference>\n): boolean => {\n    const maybeTypeParameterInstantiation = typeReference.parent;\n\n    if (\n        maybeTypeParameterInstantiation.type !==\n        AST_NODE_TYPES.TSTypeParameterInstantiation\n    ) {\n        return false;\n    }\n\n    const maybeReadonlyTypeReference = maybeTypeParameterInstantiation.parent;\n\n    return (\n        maybeReadonlyTypeReference.type === AST_NODE_TYPES.TSTypeReference &&\n        maybeReadonlyTypeReference.typeName.type ===\n            AST_NODE_TYPES.Identifier &&\n        maybeReadonlyTypeReference.typeName.name === \"Readonly\"\n    );\n};\n\nconst collectMutableRecordTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableRecordTypeReference[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableRecordTypeNodes(subTypeNode)\n        );\n    }\n\n    if (!isRecordTypeReference(typeNode) || isReadonlyWrappedRecord(typeNode)) {\n        return [];\n    }\n\n    return [typeNode];\n};\n\nconst buildReadonlyRecordFix =\n    (\n        node: Readonly<MutableRecordTypeReference>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => readonly TSESLint.RuleFix[]) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): readonly TSESLint.RuleFix[] => [\n        fixer.replaceText(node.typeName, \"Readonly<Record\"),\n        fixer.insertTextAfter(node, \">\"),\n    ];\n\n/**\n * Require readonly record parameter type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const parameters = getParametersFromFunctionLikeNode(node);\n\n            if (parameters === undefined) {\n                return;\n            }\n\n            for (const parameter of parameters) {\n                const typeAnnotation =\n                    getTypeAnnotationFromParameter(parameter);\n\n                if (typeAnnotation === undefined) {\n                    continue;\n                }\n\n                const mutableRecordTypeNodes = collectMutableRecordTypeNodes(\n                    typeAnnotation.typeAnnotation\n                );\n\n                for (const mutableRecordTypeNode of mutableRecordTypeNodes) {\n                    const fix = buildReadonlyRecordFix(mutableRecordTypeNode);\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableRecordTypeNode.typeName,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlyRecordParameterType\",\n                            },\n                        ],\n                    });\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require Readonly<Record<...>> parameter type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-parameter-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly record parameter types.\",\n            suggestRequireReadonlyRecordParameterType:\n                \"Convert this parameter type to Readonly<Record<...>>.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-record-parameter-type\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/prefer-readonly-parameter-types rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/require-readonly-record-parameter-type\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyRecordPropertyType\";\n\ntype MutableRecordTypeReference = es.TSTypeReference & {\n    readonly typeName: es.Identifier;\n};\n\ntype Options = readonly [];\n\nconst isRecordTypeReference = (\n    typeNode: Readonly<es.TypeNode>\n): typeNode is Readonly<MutableRecordTypeReference> =>\n    typeNode.type === AST_NODE_TYPES.TSTypeReference &&\n    typeNode.typeName.type === AST_NODE_TYPES.Identifier &&\n    typeNode.typeName.name === \"Record\";\n\nconst isReadonlyWrappedRecord = (\n    typeReference: Readonly<es.TSTypeReference>\n): boolean => {\n    const maybeTypeParameterInstantiation = typeReference.parent;\n\n    if (\n        maybeTypeParameterInstantiation.type !==\n        AST_NODE_TYPES.TSTypeParameterInstantiation\n    ) {\n        return false;\n    }\n\n    const maybeReadonlyTypeReference = maybeTypeParameterInstantiation.parent;\n\n    return (\n        maybeReadonlyTypeReference.type === AST_NODE_TYPES.TSTypeReference &&\n        maybeReadonlyTypeReference.typeName.type ===\n            AST_NODE_TYPES.Identifier &&\n        maybeReadonlyTypeReference.typeName.name === \"Readonly\"\n    );\n};\n\nconst collectMutableRecordTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableRecordTypeReference[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableRecordTypeNodes(subTypeNode)\n        );\n    }\n\n    if (!isRecordTypeReference(typeNode) || isReadonlyWrappedRecord(typeNode)) {\n        return [];\n    }\n\n    return [typeNode];\n};\n\nconst buildReadonlyRecordFix =\n    (\n        node: Readonly<MutableRecordTypeReference>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => readonly TSESLint.RuleFix[]) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): readonly TSESLint.RuleFix[] => [\n        fixer.replaceText(node.typeName, \"Readonly<Record\"),\n        fixer.insertTextAfter(node, \">\"),\n    ];\n\nconst isTopLevelPropertySignature = (\n    node: Readonly<es.TSPropertySignature>\n): boolean => {\n    const parent = node.parent;\n\n    if (parent.type === AST_NODE_TYPES.TSInterfaceBody) {\n        return true;\n    }\n    const maybeTypeAliasDeclaration = parent.parent;\n\n    return (\n        maybeTypeAliasDeclaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n    );\n};\n\n/**\n * Require readonly record property type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"TSPropertySignature[typeAnnotation!=null]\": (\n            node: Readonly<es.TSPropertySignature>\n        ): void => {\n            if (!isTopLevelPropertySignature(node)) {\n                return;\n            }\n\n            const typeAnnotation = node.typeAnnotation;\n\n            if (typeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableRecordTypeNodes = collectMutableRecordTypeNodes(\n                typeAnnotation.typeAnnotation\n            );\n\n            for (const mutableRecordTypeNode of mutableRecordTypeNodes) {\n                const fix = buildReadonlyRecordFix(mutableRecordTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableRecordTypeNode.typeName,\n                    suggest: [\n                        {\n                            fix,\n                            messageId:\n                                \"suggestRequireReadonlyRecordPropertyType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require Readonly<Record<...>> property type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-property-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly record property types.\",\n            suggestRequireReadonlyRecordPropertyType:\n                \"Convert this property type to Readonly<Record<...>>.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-record-property-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyRecordReturnType\";\n\ntype MutableRecordTypeReference = es.TSTypeReference & {\n    readonly typeName: es.Identifier;\n};\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getReturnTypeAnnotationFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.returnType;\n    }\n\n    return undefined;\n};\n\nconst isRecordTypeReference = (\n    typeNode: Readonly<es.TypeNode>\n): typeNode is Readonly<MutableRecordTypeReference> =>\n    typeNode.type === AST_NODE_TYPES.TSTypeReference &&\n    typeNode.typeName.type === AST_NODE_TYPES.Identifier &&\n    typeNode.typeName.name === \"Record\";\n\nconst isReadonlyWrappedRecord = (\n    typeReference: Readonly<es.TSTypeReference>\n): boolean => {\n    const maybeTypeParameterInstantiation = typeReference.parent;\n\n    if (\n        maybeTypeParameterInstantiation.type !==\n        AST_NODE_TYPES.TSTypeParameterInstantiation\n    ) {\n        return false;\n    }\n\n    const maybeReadonlyTypeReference = maybeTypeParameterInstantiation.parent;\n\n    return (\n        maybeReadonlyTypeReference.type === AST_NODE_TYPES.TSTypeReference &&\n        maybeReadonlyTypeReference.typeName.type ===\n            AST_NODE_TYPES.Identifier &&\n        maybeReadonlyTypeReference.typeName.name === \"Readonly\"\n    );\n};\n\nconst collectMutableRecordTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableRecordTypeReference[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableRecordTypeNodes(subTypeNode)\n        );\n    }\n\n    if (!isRecordTypeReference(typeNode) || isReadonlyWrappedRecord(typeNode)) {\n        return [];\n    }\n\n    return [typeNode];\n};\n\nconst buildReadonlyRecordFix =\n    (\n        node: Readonly<MutableRecordTypeReference>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => readonly TSESLint.RuleFix[]) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): readonly TSESLint.RuleFix[] => [\n        fixer.replaceText(node.typeName, \"Readonly<Record\"),\n        fixer.insertTextAfter(node, \">\"),\n    ];\n\n/**\n * Require readonly record return type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const returnTypeAnnotation =\n                getReturnTypeAnnotationFromFunctionLikeNode(node);\n\n            if (returnTypeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableRecordTypeNodes = collectMutableRecordTypeNodes(\n                returnTypeAnnotation.typeAnnotation\n            );\n\n            for (const mutableRecordTypeNode of mutableRecordTypeNodes) {\n                const fix = buildReadonlyRecordFix(mutableRecordTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableRecordTypeNode.typeName,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlyRecordReturnType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require Readonly<Record<...>> return type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly record return types.\",\n            suggestRequireReadonlyRecordReturnType:\n                \"Convert this return type to Readonly<Record<...>>.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-record-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlyRecordTypeAlias\";\n\ntype MutableRecordTypeReference = es.TSTypeReference & {\n    readonly typeName: es.Identifier;\n};\n\ntype Options = readonly [];\n\nconst isRecordTypeReference = (\n    typeNode: Readonly<es.TypeNode>\n): typeNode is Readonly<MutableRecordTypeReference> =>\n    typeNode.type === AST_NODE_TYPES.TSTypeReference &&\n    typeNode.typeName.type === AST_NODE_TYPES.Identifier &&\n    typeNode.typeName.name === \"Record\";\n\nconst isReadonlyWrappedRecord = (\n    typeReference: Readonly<es.TSTypeReference>\n): boolean => {\n    const maybeTypeParameterInstantiation = typeReference.parent;\n\n    if (\n        maybeTypeParameterInstantiation.type !==\n        AST_NODE_TYPES.TSTypeParameterInstantiation\n    ) {\n        return false;\n    }\n\n    const maybeReadonlyTypeReference = maybeTypeParameterInstantiation.parent;\n\n    return (\n        maybeReadonlyTypeReference.type === AST_NODE_TYPES.TSTypeReference &&\n        maybeReadonlyTypeReference.typeName.type ===\n            AST_NODE_TYPES.Identifier &&\n        maybeReadonlyTypeReference.typeName.name === \"Readonly\"\n    );\n};\n\nconst collectMutableRecordTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableRecordTypeReference[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableRecordTypeNodes(subTypeNode)\n        );\n    }\n\n    if (!isRecordTypeReference(typeNode) || isReadonlyWrappedRecord(typeNode)) {\n        return [];\n    }\n\n    return [typeNode];\n};\n\nconst buildReadonlyRecordFix =\n    (\n        node: Readonly<MutableRecordTypeReference>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => readonly TSESLint.RuleFix[]) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): readonly TSESLint.RuleFix[] => [\n        fixer.replaceText(node.typeName, \"Readonly<Record\"),\n        fixer.insertTextAfter(node, \">\"),\n    ];\n\n/**\n * Require readonly record type aliases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        TSTypeAliasDeclaration: (\n            node: Readonly<es.TSTypeAliasDeclaration>\n        ): void => {\n            const mutableRecordTypeNodes = collectMutableRecordTypeNodes(\n                node.typeAnnotation\n            );\n\n            for (const mutableRecordTypeNode of mutableRecordTypeNodes) {\n                const fix = buildReadonlyRecordFix(mutableRecordTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableRecordTypeNode.typeName,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlyRecordTypeAlias\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require Readonly<Record<...>> type alias annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-record-type-alias\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly record type aliases.\",\n            suggestRequireReadonlyRecordTypeAlias:\n                \"Convert this type alias annotation to Readonly<Record<...>>.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-record-type-alias\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\nimport {\n    createReplacementRuleInfo,\n    withDeprecatedRuleLifecycle,\n} from \"../_internal/rule-deprecation.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlySetParameterType\";\n\ntype MutableSetTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getParametersFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<readonly es.Parameter[]> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.params;\n    }\n\n    return undefined;\n};\n\nconst getTypeAnnotationFromPattern = (\n    pattern: Readonly<\n        | es.AssignmentPattern\n        | es.BindingName\n        | es.RestElement\n    >\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {\n        return getTypeAnnotationFromPattern(pattern.left);\n    }\n\n    if (pattern.type === AST_NODE_TYPES.RestElement) {\n        if (pattern.typeAnnotation !== undefined) {\n            return pattern.typeAnnotation;\n        }\n\n        const argument = pattern.argument;\n\n        if (\n            argument.type !== AST_NODE_TYPES.ArrayPattern &&\n            argument.type !== AST_NODE_TYPES.Identifier &&\n            argument.type !== AST_NODE_TYPES.ObjectPattern\n        ) {\n            return undefined;\n        }\n\n        return argument.typeAnnotation;\n    }\n\n    return pattern.typeAnnotation;\n};\n\nconst getTypeAnnotationFromParameter = (\n    parameter: Readonly<es.Parameter>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (parameter.type === AST_NODE_TYPES.TSParameterProperty) {\n        return getTypeAnnotationFromPattern(parameter.parameter);\n    }\n\n    return getTypeAnnotationFromPattern(parameter);\n};\n\nconst isSetTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Set\";\n\nconst collectMutableSetTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableSetTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableSetTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isSetTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlySetFix =\n    (\n        node: Readonly<MutableSetTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlySet\");\n\n/**\n * Require readonly set parameter type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const parameters = getParametersFromFunctionLikeNode(node);\n\n            if (parameters === undefined) {\n                return;\n            }\n\n            for (const parameter of parameters) {\n                const typeAnnotation =\n                    getTypeAnnotationFromParameter(parameter);\n\n                if (typeAnnotation === undefined) {\n                    continue;\n                }\n\n                const mutableSetTypeNodes = collectMutableSetTypeNodes(\n                    typeAnnotation.typeAnnotation\n                );\n\n                for (const mutableSetTypeNode of mutableSetTypeNodes) {\n                    const fix = buildReadonlySetFix(mutableSetTypeNode);\n\n                    context.report({\n                        fix,\n                        messageId: \"forbidden\",\n                        node: mutableSetTypeNode,\n                        suggest: [\n                            {\n                                fix,\n                                messageId:\n                                    \"suggestRequireReadonlySetParameterType\",\n                            },\n                        ],\n                    });\n                }\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlySet parameter type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-parameter-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly set parameter types.\",\n            suggestRequireReadonlySetParameterType:\n                \"Convert this parameter type to ReadonlySet.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-set-parameter-type\",\n});\n\n/** Deprecated rule with explicit lifecycle and replacement metadata. */\nconst deprecatedRule: typeof rule = withDeprecatedRuleLifecycle(rule, {\n    availableUntil: \"4.0.0\",\n    deprecatedSince: \"3.0.0\",\n    message:\n        \"Deprecated in favor of the type-aware @typescript-eslint/prefer-readonly-parameter-types rule.\",\n    replacedBy: [\n        createReplacementRuleInfo({\n            plugin: {\n                name: \"@typescript-eslint\",\n                url: \"https://typescript-eslint.io/\",\n            },\n            rule: {\n                name: \"prefer-readonly-parameter-types\",\n                url: \"https://typescript-eslint.io/rules/prefer-readonly-parameter-types/\",\n            },\n        }),\n    ],\n    ruleId: \"typescript/require-readonly-set-parameter-type\",\n});\n\nexport default deprecatedRule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlySetPropertyType\";\n\ntype MutableSetTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst isSetTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Set\";\n\nconst collectMutableSetTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableSetTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableSetTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isSetTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlySetFix =\n    (\n        node: Readonly<MutableSetTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlySet\");\n\nconst isTopLevelPropertySignature = (\n    node: Readonly<es.TSPropertySignature>\n): boolean => {\n    const parent = node.parent;\n\n    if (parent.type === AST_NODE_TYPES.TSInterfaceBody) {\n        return true;\n    }\n    const maybeTypeAliasDeclaration = parent.parent;\n\n    return (\n        maybeTypeAliasDeclaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration\n    );\n};\n\n/**\n * Require readonly set property type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        \"TSPropertySignature[typeAnnotation!=null]\": (\n            node: Readonly<es.TSPropertySignature>\n        ): void => {\n            if (!isTopLevelPropertySignature(node)) {\n                return;\n            }\n\n            const typeAnnotation = node.typeAnnotation;\n\n            if (typeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableSetTypeNodes = collectMutableSetTypeNodes(\n                typeAnnotation.typeAnnotation\n            );\n\n            for (const mutableSetTypeNode of mutableSetTypeNodes) {\n                const fix = buildReadonlySetFix(mutableSetTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableSetTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlySetPropertyType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlySet property type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-property-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly set property types.\",\n            suggestRequireReadonlySetPropertyType:\n                \"Convert this property type to ReadonlySet.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-set-property-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlySetReturnType\";\n\ntype Options = readonly [];\n\nconst functionLikeNodeSelector =\n    \":matches(ArrowFunctionExpression, FunctionDeclaration, FunctionExpression, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSConstructorType, TSDeclareFunction, TSEmptyBodyFunctionExpression, TSFunctionType, TSMethodSignature)\";\n\nconst getReturnTypeAnnotationFromFunctionLikeNode = (\n    node: Readonly<es.Node>\n): Readonly<es.TSTypeAnnotation> | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n        node.type === AST_NODE_TYPES.FunctionDeclaration ||\n        node.type === AST_NODE_TYPES.FunctionExpression ||\n        node.type === AST_NODE_TYPES.TSCallSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructSignatureDeclaration ||\n        node.type === AST_NODE_TYPES.TSConstructorType ||\n        node.type === AST_NODE_TYPES.TSDeclareFunction ||\n        node.type === AST_NODE_TYPES.TSEmptyBodyFunctionExpression ||\n        node.type === AST_NODE_TYPES.TSFunctionType ||\n        node.type === AST_NODE_TYPES.TSMethodSignature\n    ) {\n        return node.returnType;\n    }\n\n    return undefined;\n};\n\nconst isSetTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Set\";\n\nconst collectMutableSetTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly es.Identifier[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableSetTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isSetTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlySetFix =\n    (\n        node: Readonly<es.Identifier>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlySet\");\n\n/**\n * Require readonly set return type annotations.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        [functionLikeNodeSelector]: (node: Readonly<es.Node>): void => {\n            const returnTypeAnnotation =\n                getReturnTypeAnnotationFromFunctionLikeNode(node);\n\n            if (returnTypeAnnotation === undefined) {\n                return;\n            }\n\n            const mutableSetTypeNodes = collectMutableSetTypeNodes(\n                returnTypeAnnotation.typeAnnotation\n            );\n\n            for (const mutableSetTypeNode of mutableSetTypeNodes) {\n                const fix = buildReadonlySetFix(mutableSetTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableSetTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlySetReturnType\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlySet return type annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-return-type\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly set return types.\",\n            suggestRequireReadonlySetReturnType:\n                \"Convert this return type to ReadonlySet.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-set-return-type\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestRequireReadonlySetTypeAlias\";\n\ntype MutableSetTypeNode = es.Identifier;\n\ntype Options = readonly [];\n\nconst isSetTypeReference = (\n    node: Readonly<es.TSTypeReference>\n): node is Readonly<\n    es.TSTypeReference & { readonly typeName: es.Identifier }\n> =>\n    node.typeName.type === AST_NODE_TYPES.Identifier &&\n    node.typeName.name === \"Set\";\n\nconst collectMutableSetTypeNodes = (\n    typeNode: Readonly<es.TypeNode>\n): readonly MutableSetTypeNode[] => {\n    if (\n        typeNode.type === AST_NODE_TYPES.TSIntersectionType ||\n        typeNode.type === AST_NODE_TYPES.TSUnionType\n    ) {\n        return typeNode.types.flatMap((subTypeNode) =>\n            collectMutableSetTypeNodes(subTypeNode)\n        );\n    }\n\n    if (\n        typeNode.type !== AST_NODE_TYPES.TSTypeReference ||\n        !isSetTypeReference(typeNode)\n    ) {\n        return [];\n    }\n\n    return [typeNode.typeName];\n};\n\nconst buildReadonlySetFix =\n    (\n        node: Readonly<MutableSetTypeNode>\n    ): ((fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix) =>\n    (fixer: Readonly<TSESLint.RuleFixer>): TSESLint.RuleFix =>\n        fixer.replaceText(node, \"ReadonlySet\");\n\n/**\n * Require readonly set type aliases.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => ({\n        TSTypeAliasDeclaration: (\n            node: Readonly<es.TSTypeAliasDeclaration>\n        ): void => {\n            const mutableSetTypeNodes = collectMutableSetTypeNodes(\n                node.typeAnnotation\n            );\n\n            for (const mutableSetTypeNode of mutableSetTypeNodes) {\n                const fix = buildReadonlySetFix(mutableSetTypeNode);\n\n                context.report({\n                    fix,\n                    messageId: \"forbidden\",\n                    node: mutableSetTypeNode,\n                    suggest: [\n                        {\n                            fix,\n                            messageId: \"suggestRequireReadonlySetTypeAlias\",\n                        },\n                    ],\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description: \"require ReadonlySet type alias annotations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-readonly-set-type-alias\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: \"Prefer readonly set type aliases.\",\n            suggestRequireReadonlySetTypeAlias:\n                \"Convert this type alias annotation to ReadonlySet.\",\n        },\n        schema: [],\n        type: \"suggestion\",\n    },\n    name: \"typescript/require-readonly-set-type-alias\",\n});\n\nexport default rule;\n", "import type { TSESTree as es, TSESLint } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\" | \"suggestAddThisVoid\";\n\ntype Options = readonly [];\n\nconst selector =\n    \"MethodDefinition[static=true] > FunctionExpression:not([params.0.name='this'][params.0.typeAnnotation.typeAnnotation.type='TSVoidKeyword'])\";\n\nconst createThisVoidSuggestionFix = (\n    sourceCode: Readonly<TSESLint.SourceCode>,\n    functionExpression: Readonly<es.FunctionExpression>\n): TSESLint.ReportFixFunction | undefined => {\n    const firstParameter = arrayFirst(functionExpression.params);\n\n    if (\n        firstParameter?.type === AST_NODE_TYPES.Identifier &&\n        firstParameter.name === \"this\"\n    ) {\n        const existingTypeAnnotation = firstParameter.typeAnnotation;\n\n        if (existingTypeAnnotation === undefined) {\n            return (fixer) => fixer.insertTextAfter(firstParameter, \": void\");\n        }\n\n        return (fixer) => fixer.replaceText(existingTypeAnnotation, \": void\");\n    }\n\n    const openingParenthesisToken =\n        sourceCode.getFirstToken(functionExpression);\n    if (openingParenthesisToken?.value !== \"(\") {\n        return undefined;\n    }\n\n    return (fixer) =>\n        fixer.insertTextAfter(\n            openingParenthesisToken,\n            firstParameter === undefined ? \"this: void\" : \"this: void, \"\n        );\n};\n\n/**\n * Require static class methods to declare `this: void`.\n */\nconst rule: ReturnType<typeof ruleCreator<Options, MessageIds>> = ruleCreator<\n    Options,\n    MessageIds\n>({\n    create: (context) => {\n        const sourceCode = context.sourceCode;\n\n        return {\n            [selector]: (node: Readonly<es.Node>): void => {\n                if (node.type !== AST_NODE_TYPES.FunctionExpression) {\n                    return;\n                }\n\n                const suggestionFix = createThisVoidSuggestionFix(\n                    sourceCode,\n                    node\n                );\n\n                context.report({\n                    messageId: \"forbidden\",\n                    node,\n                    ...(suggestionFix !== undefined && {\n                        fix: suggestionFix,\n                        suggest: [\n                            {\n                                fix: suggestionFix,\n                                messageId: \"suggestAddThisVoid\",\n                            },\n                        ],\n                    }),\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            deprecated: false,\n            description:\n                \"require static class methods to declare `this: void`.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/typescript-require-this-void\",\n        },\n        fixable: \"code\",\n        hasSuggestions: true,\n        languages: [\"js/js\"],\n        messages: {\n            forbidden: 'Add \"this: void\" to static method signatures.',\n            suggestAddThisVoid: 'Insert \"this: void\" parameter in signature.',\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"typescript/require-this-void\",\n});\n\nexport default rule;\n", "import type { TSESTree as es } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { ruleCreator } from \"../_internal/rule-creator.js\";\n\ntype MessageIds = \"forbidden\";\n\nconst internalTagPattern = /@internal\\b/v;\n\nconst isNonUnderscoreIdentifier = (\n    identifier: Readonly<es.Identifier>\n): boolean => !identifier.name.startsWith(\"_\");\n\nconst isExportDeclaration = (\n    node:\n        | null\n        | Readonly<es.Node>\n        | undefined\n): node is es.ExportDefaultDeclaration | es.ExportNamedDeclaration =>\n    node?.type === AST_NODE_TYPES.ExportDefaultDeclaration ||\n    node?.type === AST_NODE_TYPES.ExportNamedDeclaration;\n\n/**\n * Enforce underscore prefixes for declarations marked with `@internal`.\n */\nconst rule: ReturnType<typeof ruleCreator<readonly [], MessageIds>> =\n    ruleCreator<readonly [], MessageIds>({\n        create: (context) => {\n            const hasInternalTag = (node: Readonly<es.Node>): boolean => {\n                let commentTargets: readonly es.Node[] = [node];\n                if (isExportDeclaration(node.parent)) {\n                    commentTargets = [...commentTargets, node.parent];\n                }\n\n                return commentTargets.some((commentTarget) =>\n                    context.sourceCode\n                        .getCommentsBefore(commentTarget)\n                        .some((comment) =>\n                            internalTagPattern.test(comment.value)\n                        )\n                );\n            };\n\n            const reportIfInternal = (\n                nameIdentifier: Readonly<es.Identifier>,\n                commentTarget: Readonly<es.Node>\n            ): void => {\n                if (!isNonUnderscoreIdentifier(nameIdentifier)) {\n                    return;\n                }\n\n                if (!hasInternalTag(commentTarget)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"forbidden\",\n                    node: nameIdentifier,\n                });\n            };\n\n            return {\n                \"ClassDeclaration[id.type='Identifier']\": (\n                    node: Readonly<es.ClassDeclaration>\n                ) => {\n                    if (node.id === null) {\n                        return;\n                    }\n\n                    reportIfInternal(node.id, node);\n                },\n                \"FunctionDeclaration[id.type='Identifier']\": (\n                    node: Readonly<es.FunctionDeclaration>\n                ) => {\n                    if (node.id === null) {\n                        return;\n                    }\n\n                    reportIfInternal(node.id, node);\n                },\n                \"MethodDefinition[key.type='Identifier']\": (\n                    node: Readonly<es.MethodDefinition>\n                ) => {\n                    if (node.key.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    reportIfInternal(node.key, node);\n                },\n                \"PropertyDefinition[key.type='Identifier']\": (\n                    node: Readonly<es.PropertyDefinition>\n                ) => {\n                    if (node.key.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    reportIfInternal(node.key, node);\n                },\n                \"TSEnumDeclaration[id.type='Identifier']\": (\n                    node: Readonly<es.TSEnumDeclaration>\n                ) => {\n                    reportIfInternal(node.id, node);\n                },\n                \"TSEnumMember[id.type='Identifier']\": (\n                    node: Readonly<es.TSEnumMember>\n                ) => {\n                    if (node.id.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    reportIfInternal(node.id, node);\n                },\n                \"TSInterfaceDeclaration[id.type='Identifier']\": (\n                    node: Readonly<es.TSInterfaceDeclaration>\n                ) => {\n                    reportIfInternal(node.id, node);\n                },\n                \"TSMethodSignature[key.type='Identifier']\": (\n                    node: Readonly<es.TSMethodSignature>\n                ) => {\n                    if (node.key.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    reportIfInternal(node.key, node);\n                },\n                \"TSPropertySignature[key.type='Identifier']\": (\n                    node: Readonly<es.TSPropertySignature>\n                ) => {\n                    if (node.key.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    reportIfInternal(node.key, node);\n                },\n                \"TSTypeAliasDeclaration[id.type='Identifier']\": (\n                    node: Readonly<es.TSTypeAliasDeclaration>\n                ) => {\n                    reportIfInternal(node.id, node);\n                },\n                \"VariableDeclarator[id.type='Identifier']\": (\n                    node: Readonly<es.VariableDeclarator>\n                ) => {\n                    if (node.id.type !== AST_NODE_TYPES.Identifier) {\n                        return;\n                    }\n\n                    const declaration = node.parent;\n                    reportIfInternal(node.id, declaration);\n                },\n            };\n        },\n        meta: {\n            deprecated: false,\n            docs: {\n                deprecated: false,\n                description:\n                    \"disallow internal APIs that are not prefixed with underscores.\",\n                frozen: false,\n                recommended: false,\n                url: \"https://nick2bad4u.github.io/eslint-plugin-etc-misc/docs/rules/underscore-internal\",\n            },\n            hasSuggestions: false,\n            languages: [\"js/js\"],\n            messages: {\n                forbidden:\n                    \"Internal APIs not prefixed with underscores are forbidden.\",\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name: \"underscore-internal\",\n    });\n\nexport default rule;\n", "import { createAllRuleLevels } from \"./all-rule-levels.js\";\n\ninterface AllStrictWithDeprecatedConfig {\n    readonly name: \"etc-misc/all-strict-with-deprecated\";\n    readonly rules: Readonly<Record<string, RuleSeverity>>;\n}\n\ntype RuleSeverity = \"error\" | \"warn\";\n\nconst allStrictWithDeprecatedRules: Readonly<Record<string, RuleSeverity>> =\n    createAllRuleLevels({\n        includeDeprecated: true,\n        strict: true,\n    });\n\n/**\n * Flat config preset enabling every non-deprecated plugin rule at `error` and\n * every deprecated rule without a same-plugin replacement at `warn`.\n */\nexport const allStrictWithDeprecated: AllStrictWithDeprecatedConfig = {\n    name: \"etc-misc/all-strict-with-deprecated\",\n    rules: allStrictWithDeprecatedRules,\n};\n", "import { createAllRuleLevels } from \"./all-rule-levels.js\";\n\ninterface AllStrictConfig {\n    readonly name: \"etc-misc/all-strict\";\n    readonly rules: Readonly<Record<string, RuleSeverity>>;\n}\n\ntype RuleSeverity = \"error\" | \"warn\";\n\nconst allStrictRules: Readonly<Record<string, RuleSeverity>> =\n    createAllRuleLevels({\n        includeDeprecated: false,\n        strict: true,\n    });\n\n/**\n * Flat config preset enabling every non-deprecated plugin rule at `error`.\n */\nexport const allStrict: AllStrictConfig = {\n    name: \"etc-misc/all-strict\",\n    rules: allStrictRules,\n};\n", "import { createAllRuleLevels } from \"./all-rule-levels.js\";\n\ninterface AllWithDeprecatedConfig {\n    readonly name: \"etc-misc/all-with-deprecated\";\n    readonly rules: Readonly<Record<string, RuleSeverity>>;\n}\n\ntype RuleSeverity = \"error\" | \"warn\";\n\nconst allWithDeprecatedRules: Readonly<Record<string, RuleSeverity>> =\n    createAllRuleLevels({\n        includeDeprecated: true,\n        strict: false,\n    });\n\n/**\n * Flat config preset enabling every preset-eligible plugin rule with\n * metadata-derived severities. Deprecated rules remain at `warn`, while\n * deprecated same-plugin replacements stay excluded to prevent duplicate\n * execution.\n */\nexport const allWithDeprecated: AllWithDeprecatedConfig = {\n    name: \"etc-misc/all-with-deprecated\",\n    rules: allWithDeprecatedRules,\n};\n", "import { createAllRuleLevels } from \"./all-rule-levels.js\";\n\ninterface AllConfig {\n    readonly name: \"etc-misc/all\";\n    readonly rules: Readonly<Record<string, RuleSeverity>>;\n}\n\ntype RuleSeverity = \"error\" | \"warn\";\n\nconst allRules: Readonly<Record<string, RuleSeverity>> = createAllRuleLevels({\n    includeDeprecated: false,\n    strict: false,\n});\n\n/**\n * Flat config preset enabling every non-deprecated plugin rule with\n * metadata-derived severities.\n */\nexport const all: AllConfig = {\n    name: \"etc-misc/all\",\n    rules: allRules,\n};\n", "/**\n * Minimal starter preset: `recommended` without the `prefer-readonly*` rules.\n */\nexport const minimal = {\n    name: \"etc-misc/minimal\",\n    rules: {\n        \"etc-misc/consistent-optional-props\": \"warn\",\n        \"etc-misc/no-assign-mutated-array\": \"error\",\n        \"etc-misc/no-const-enum\": \"warn\",\n        \"etc-misc/no-function-declare-after-return\": \"warn\",\n        \"etc-misc/no-internal\": \"error\",\n        \"etc-misc/no-t\": \"error\",\n        \"etc-misc/no-unnecessary-as-const\": \"warn\",\n        \"etc-misc/no-unnecessary-break\": \"warn\",\n        \"etc-misc/no-unnecessary-initialization\": \"warn\",\n        \"etc-misc/no-vulnerable\": \"error\",\n        \"etc-misc/typescript/no-boolean-literal-type\": \"error\",\n        \"etc-misc/typescript/require-readonly-array-return-type\": \"warn\",\n        \"etc-misc/typescript/require-this-void\": \"warn\",\n    },\n} as const;\n", "/**\n * Opinionated starter preset for the plugin.\n */\nexport const recommended = {\n    name: \"etc-misc/recommended\",\n    rules: {\n        \"etc-misc/consistent-optional-props\": \"warn\",\n        \"etc-misc/no-assign-mutated-array\": \"error\",\n        \"etc-misc/no-const-enum\": \"warn\",\n        \"etc-misc/no-function-declare-after-return\": \"warn\",\n        \"etc-misc/no-internal\": \"error\",\n        \"etc-misc/no-t\": \"error\",\n        \"etc-misc/no-unnecessary-as-const\": \"warn\",\n        \"etc-misc/no-unnecessary-break\": \"warn\",\n        \"etc-misc/no-unnecessary-initialization\": \"warn\",\n        \"etc-misc/no-vulnerable\": \"error\",\n        \"etc-misc/typescript/no-boolean-literal-type\": \"error\",\n        \"etc-misc/typescript/prefer-readonly-index-signature\": \"warn\",\n        \"etc-misc/typescript/require-readonly-array-return-type\": \"warn\",\n        \"etc-misc/typescript/require-this-void\": \"warn\",\n    },\n} as const;\n", "/* eslint-disable canonical/no-reassign-imports -- Flat-config strict type-checked preset intentionally inspects imported plugin rule metadata. */\n\nimport {\n    objectEntries,\n    objectFromEntries,\n    objectHasOwn,\n    safeCastTo,\n} from \"ts-extras\";\n\nimport type { RuleDocsMetadata } from \"../_internal/rule-creator.js\";\n\nimport { rules as pluginRules } from \"../rules.js\";\nimport { strict } from \"./strict.js\";\n\ninterface StrictTypeCheckedConfig {\n    readonly languageOptions: Readonly<{\n        readonly parserOptions: Readonly<{\n            readonly projectService: true;\n        }>;\n    }>;\n    readonly name: \"etc-misc/strict-type-checked\";\n    readonly rules: Readonly<Record<string, \"error\">>;\n}\n\nconst additionalTypeCheckedRuleEntries: readonly (readonly [\n    string,\n    \"error\",\n])[] = objectEntries(pluginRules).flatMap(([ruleName, ruleModule]) => {\n    if (ruleModule.meta.deprecated !== false) {\n        return [];\n    }\n\n    const docsMetadata = safeCastTo<RuleDocsMetadata | undefined>(\n        ruleModule.meta.docs\n    );\n\n    if (docsMetadata?.requiresTypeChecking !== true) {\n        return [];\n    }\n\n    const qualifiedRuleName = `etc-misc/${ruleName}`;\n\n    if (objectHasOwn(strict.rules, qualifiedRuleName)) {\n        return [];\n    }\n\n    const severity = \"error\" as const;\n\n    return [[qualifiedRuleName, severity] as const];\n});\n\nconst strictTypeCheckedRules = {\n    ...strict.rules,\n    ...objectFromEntries(additionalTypeCheckedRuleEntries),\n} satisfies Readonly<Record<string, \"error\">>;\n\n/**\n * Strict preset augmented with every non-deprecated rule that requires type\n * information.\n */\nexport const strictTypeChecked: StrictTypeCheckedConfig = {\n    languageOptions: {\n        parserOptions: {\n            projectService: true,\n        },\n    },\n    name: \"etc-misc/strict-type-checked\",\n    rules: strictTypeCheckedRules,\n};\n\n/* eslint-enable canonical/no-reassign-imports -- Re-enable canonical import reassignment restrictions for the remainder of the file. */\n", "import { assert, objectFromEntries, objectKeys, safeCastTo } from \"ts-extras\";\n\nimport { recommended } from \"./recommended.js\";\n\ninterface StrictConfig {\n    readonly name: \"etc-misc/strict\";\n    readonly rules: StrictRules;\n}\n\ntype StrictRules = Readonly<{\n    readonly [TRuleName in keyof typeof recommended.rules]: \"error\";\n}>;\n\nconst recommendedRuleNames = safeCastTo<\n    readonly (keyof typeof recommended.rules)[]\n>(objectKeys(recommended.rules));\n\nconst strictRulesCandidate = objectFromEntries(\n    recommendedRuleNames.map((ruleName) => [ruleName, \"error\" as const])\n);\n\nconst hasStrictRuleCoverage = (\n    candidateRules: Readonly<Partial<StrictRules>>\n): candidateRules is StrictRules =>\n    recommendedRuleNames.every(\n        (ruleName) => candidateRules[ruleName] === \"error\"\n    );\n\nassert(\n    hasStrictRuleCoverage(strictRulesCandidate),\n    \"Strict preset synthesis failed to include every recommended rule.\"\n);\n\nconst strictRules: StrictRules = strictRulesCandidate;\n\n/**\n * Strict preset that promotes every recommended rule to `error`.\n */\nexport const strict: StrictConfig = {\n    name: \"etc-misc/strict\",\n    rules: strictRules,\n};\n", "/* eslint-disable canonical/no-reassign-imports -- Flat-config preset object intentionally references imported preset modules. */\n\nimport type { Arrayable, UnknownRecord } from \"type-fest\";\n\nimport {\n    pluginMeta,\n    type PluginMeta,\n    type PluginNamespace,\n} from \"./_internal/plugin-meta.js\";\nimport { allStrictWithDeprecated as allStrictWithDeprecatedConfig } from \"./configs/all-strict-with-deprecated.js\";\nimport { allStrict as allStrictConfig } from \"./configs/all-strict.js\";\nimport { allWithDeprecated as allWithDeprecatedConfig } from \"./configs/all-with-deprecated.js\";\nimport { all as allConfig } from \"./configs/all.js\";\nimport { minimal as minimalConfig } from \"./configs/minimal.js\";\nimport { recommended as recommendedConfig } from \"./configs/recommended.js\";\nimport { strictTypeChecked as strictTypeCheckedConfig } from \"./configs/strict-type-checked.js\";\nimport { strict as strictConfig } from \"./configs/strict.js\";\nimport { rules } from \"./rules.js\";\n\ntype FlatConfigFiles = Arrayable<string>[];\n\ninterface PluginReference {\n    readonly meta: PluginMeta;\n    readonly rules: typeof rules;\n}\n\ninterface PresetWithPlugin<\n    TName extends string,\n    TRules extends Readonly<Record<string, RuleSeverity>>,\n> {\n    readonly files: FlatConfigFiles;\n    readonly name: TName;\n    readonly plugins: Readonly<Record<PluginNamespace, PluginReference>>;\n    readonly rules: TRules;\n}\n\ntype RuleSeverity = \"error\" | \"warn\";\n\nconst javascriptFilePattern = \"**/*.{js,mjs,cjs,ts,mts,cts,tsx,jsx}\";\n\nconst pluginReference: PluginReference = {\n    meta: pluginMeta,\n    rules,\n};\n\nconst withPluginReference = <\n    TName extends string,\n    TRules extends Readonly<Record<string, RuleSeverity>>,\n>(\n    config: Readonly<{ readonly name: TName; readonly rules: TRules }>\n): PresetWithPlugin<TName, TRules> => ({\n    files: [javascriptFilePattern],\n    name: config.name,\n    plugins: {\n        [pluginMeta.namespace]: pluginReference,\n    },\n    rules: config.rules,\n});\n\n/**\n * Available flat-config presets exported by the plugin.\n */\nexport interface PluginConfigs extends Readonly<UnknownRecord> {\n    readonly all: PresetWithPlugin<\n        typeof allConfig.name,\n        typeof allConfig.rules\n    >;\n    readonly allStrict: PresetWithPlugin<\n        typeof allStrictConfig.name,\n        typeof allStrictConfig.rules\n    >;\n    readonly allStrictWithDeprecated: PresetWithPlugin<\n        typeof allStrictWithDeprecatedConfig.name,\n        typeof allStrictWithDeprecatedConfig.rules\n    >;\n    readonly allWithDeprecated: PresetWithPlugin<\n        typeof allWithDeprecatedConfig.name,\n        typeof allWithDeprecatedConfig.rules\n    >;\n    readonly minimal: PresetWithPlugin<\n        typeof minimalConfig.name,\n        typeof minimalConfig.rules\n    >;\n    readonly recommended: PresetWithPlugin<\n        typeof recommendedConfig.name,\n        typeof recommendedConfig.rules\n    >;\n    readonly strict: PresetWithPlugin<\n        typeof strictConfig.name,\n        typeof strictConfig.rules\n    >;\n    readonly strictTypeChecked: PresetWithPlugin<\n        typeof strictTypeCheckedConfig.name,\n        typeof strictTypeCheckedConfig.rules\n    > & {\n        readonly languageOptions: typeof strictTypeCheckedConfig.languageOptions;\n    };\n}\n\n/**\n * Plugin configuration presets.\n */\nexport const configs: PluginConfigs = {\n    all: withPluginReference(allConfig),\n    allStrict: withPluginReference(allStrictConfig),\n    allStrictWithDeprecated: withPluginReference(allStrictWithDeprecatedConfig),\n    allWithDeprecated: withPluginReference(allWithDeprecatedConfig),\n    minimal: withPluginReference(minimalConfig),\n    recommended: withPluginReference(recommendedConfig),\n    strict: withPluginReference(strictConfig),\n    strictTypeChecked: {\n        ...withPluginReference(strictTypeCheckedConfig),\n        languageOptions: strictTypeCheckedConfig.languageOptions,\n    },\n};\n\n/* eslint-enable canonical/no-reassign-imports -- Re-enable canonical import reassignment restrictions outside this intentional assembly block. */\n"],
  "mappings": "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AI,IAAI;IACX;IACA;IACA;GACH;EACD,OAAO,oBAAI,IAAI;IACX;IACA;IACA;GACH;EACD,IAAI,oBAAI,IAAI;IACR;IACA;IACA;IACA;GACH;;AAGL,IAAM,qBAA0C,oBAAI,IAAI;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAED,IAAM,uBAA4C,oBAAI,IAAI;EACtD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAED,IAAM,6BAAkD,oBAAI,IAAI;EAC5D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAED,IAAM,2BAAgD,oBAAI,IAAI;EAC1D,GAAG;EACH;CACH;AACD,IAAM,yBAA8C,oBAAI,IAAI,CAAC,GAAG,CAAC;AACjE,IAAM,oBAAyC,oBAAI,IAAI,CAAC,MAAM,CAAC;AAC/D,IAAM,wBAA6C,oBAAI,IAAI,CAAC,IAAI,CAAC;AACjE,IAAM,mCAAwD,oBAAI,IAAI;EAClE;EACA;CACH;AACD,IAAM,yBAAwE;EAC1E,GAAG,oBAAI,IAAI,CAAC,GAAG,CAAC;EAChB,QAAQ,oBAAI,IAAI,CAAC,QAAQ,CAAC;EAC1B,MAAM,oBAAI,IAAI,CAAC,MAAM,CAAC;;AAG1B,IAAM,eAAe,CAAC,OAA4B,aAC9C,2BAAO,OAAO,IAAI;AAEtB,IAAM,eAAe,CACjB,eACA,eAEA,cAAc,KAAK,CAAC,iBAChB,aAAa,YAAY,YAAY,CAAC;AAG9C,IAAM,qBAA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",
  "names": ["import_ts_extras", "rule", "import_ts_extras", "import_ts_extras", "path", "import_utils", "import_ts_extras", "rule", "import_ts_extras", "isEmpty", "rule", "rule", "import_ts_extras", "import_ts_extras", "import_ts_extras", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "selector", "rule", "rule", "deprecatedRule", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "defaultOptions", "rule", "import_ts_extras", "import_ts_extras", "externalRule", "import_ts_extras", "rule", "deprecatedRule", "import_ts_extras", "import_utils", "rule", "import_utils", "import_node_path", "import_ts_extras", "rule", "path", "import_utils", "import_utils", "import_ts_extras", "import_utils", "import_minimatch", "import_ts_extras", "minimatch", "defaultOptions", "rule", "deprecatedRule", "import_utils", "defaultOption", "defaultOptions", "rule", "deprecatedRule", "import_utils", "defaultOption", "defaultOptions", "rule", "deprecatedRule", "import_utils", "defaultOption", "defaultOptions", "rule", "deprecatedRule", "import_utils", "import_node_path", "import_ts_extras", "selector", "rule", "path", "import_ts_extras", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "rule", "rule", "rule", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "parser", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "defaultOptions", "rule", "import_utils", "import_ts_extras", "import_utils", "rule", "import_utils", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "import_ts_extras", "import_type_utils", "import_utils", "import_ts_extras", "normalized", "isUnknownRecord", "hasAnyPatternMatch", "defaultOptions", "rule", "hasAnyPatternMatch", "deprecatedRule", "import_utils", "import_ts_extras", "globals", "functionNodeTypes", "isNode", "isFunctionNode", "containsExpression", "availability", "getEnclosingFunction", "getCallName", "getChildNodes", "functionContainsJsx", "isComponentName", "rule", "rule", "rule", "rule", "rule", "import_ts_extras", "splitLines", "rule", "import_type_utils", "import_utils", "import_ts_extras", "defaultOptions", "rule", "import_utils", "import_ts_extras", "rule", "import_type_utils", "import_utils", "import_ts_extras", "defaultOptions", "rule", "deprecatedRule", "rule", "rule", "import_utils", "import_ts_extras", "defaultOptions", "rule", "hasAnyPatternMatch", "import_utils", "import_ts_extras", "import_ts_extras", "defaultOptions", "rule", "import_ts_extras", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "rule", "deprecatedRule", "import_ts_extras", "rule", "rule", "import_utils", "import_ts_extras", "defaultOptions", "unwrapExpression", "getStaticMemberName", "rule", "import_utils", "import_ts_extras", "rule", "rule", "deprecatedRule", "import_ts_extras", "import_ts_extras", "selector", "rule", "selector", "deprecatedRule", "import_node_path", "import_ts_extras", "path", "rule", "deprecatedRule", "import_utils", "rule", "deprecatedRule", "rule", "import_utils", "commentText", "rule", "defaultOptions", "rule", "import_ts_extras", "disallowedSelector", "rule", "deprecatedRule", "import_utils", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "disallowedSelector", "rule", "import_utils", "import_ts_extras", "selector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "import_utils", "import_ts_extras", "getImportedName", "getImportBinding", "getStaticMemberName", "memberName", "containsExpression", "defaultOptions", "rule", "strict", "import_utils", "import_ts_extras", "defaultOptions", "rule", "import_utils", "import_ts_extras", "unwrapExpression", "getStaticPropertyName", "rule", "import_utils", "import_node_path", "import_ts_extras", "path", "isUnknownRecord", "runSynchronousRecheck", "rule", "import_ts_extras", "externalRule", "adaptedRule", "baseDocs", "rule", "deprecatedRule", "rule", "import_utils", "import_ts_extras", "rule", "disallowedSelector", "rule", "disallowedSelector", "rule", "import_type_utils", "import_utils", "import_ts_extras", "tsutils", "defaultOptions", "rule", "deprecatedRule", "rule", "externalRule", "rule", "deprecatedRule", "selector", "rule", "import_utils", "import_ts_extras", "defaultOptions", "getImportedName", "rule", "memberName", "import_utils", "import_ts_extras", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "defaultOptions", "memberName", "rule", "import_ts_extras", "rule", "selector", "rule", "compatibilityAlias", "rule", "disallowedSelector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "buildFix", "rule", "deprecatedRule", "disallowedSelector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "rule", "deprecatedRule", "disallowedSelector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "buildFix", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "buildFix", "rule", "deprecatedRule", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "rule", "deprecatedRule", "import_ts_extras", "buildFix", "rule", "import_type_utils", "import_utils", "import_ts_extras", "tsutils", "rule", "deprecatedRule", "import_type_utils", "import_utils", "import_ts_extras", "readonlyArrayTypeNames", "isArrayLikeType", "rule", "import_utils", "import_ts_extras", "isNode", "rule", "deprecatedRule", "selector", "rule", "import_utils", "import_ts_extras", "selector", "findVariable", "rule", "deprecatedRule", "selector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "selector", "rule", "selector", "rule", "selector", "rule", "deprecatedRule", "selector", "rule", "deprecatedRule", "import_ts_extras", "selector", "rule", "deprecatedRule", "selector", "rule", "import_type_utils", "import_utils", "rule", "import_utils", "import_ts_extras", "unwrapExpression", "rule", "import_utils", "import_ts_extras", "unwrapExpression", "isDefinitelyDefinedExpression", "buildFixedTypeText", "rule", "import_utils", "import_ts_extras", "buildFixedTypeText", "unwrapExpression", "isDefinitelyDefinedExpression", "rule", "import_utils", "import_ts_extras", "selector", "buildFixedTypeText", "rule", "import_utils", "import_ts_extras", "buildFixedTypeText", "unwrapExpression", "isDefinitelyDefinedExpression", "rule", "import_utils", "import_ts_extras", "buildFixedTypeText", "unwrapExpression", "isDefinitelyDefinedExpression", "rule", "import_utils", "import_ts_extras", "buildFixedTypeText", "unwrapExpression", "isDefinitelyDefinedExpression", "hasDefinitelyDefinedReturnValue", "rule", "import_utils", "import_ts_extras", "buildFixedTypeText", "unwrapExpression", "isDefinitelyDefinedExpression", "isNeverReassigned", "rule", "import_ts_extras", "baseDocs", "rule", "import_type_utils", "import_utils", "import_ts_extras", "tsutils", "ts", "rule", "import_ts_extras", "baseDocs", "compatibilityAlias", "selector", "rule", "deprecatedRule", "selector", "rule", "import_type_utils", "import_utils", "import_ts_extras", "tsutils", "import_typescript", "ts", "rule", "isEqualityOperator", "deprecatedRule", "import_utils", "memberName", "rule", "import_utils", "functionLikeNodeSelector", "getParametersFromFunctionLikeNode", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "selector", "rule", "deprecatedRule", "import_utils", "selector", "rule", "import_utils", "selector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "selector", "rule", "deprecatedRule", "import_utils", "selector", "rule", "deprecatedRule", "import_utils", "selector", "rule", "deprecatedRule", "import_utils", "import_ts_extras", "selector", "rule", "import_utils", "isArrayTypeReference", "collectMutableArrayLikeTypeNodes", "buildReadonlyArrayLikeFix", "rule", "import_utils", "functionLikeNodeSelector", "isArrayTypeReference", "collectMutableArrayLikeTypeNodes", "buildReadonlyArrayLikeFix", "rule", "import_utils", "isArrayTypeReference", "collectMutableArrayLikeTypeNodes", "buildReadonlyArrayLikeFix", "rule", "import_utils", "functionLikeNodeSelector", "getParametersFromFunctionLikeNode", "getTypeAnnotationFromPattern", "getTypeAnnotationFromParameter", "rule", "deprecatedRule", "import_utils", "isMapTypeReference", "collectMutableMapTypeNodes", "buildReadonlyMapFix", "isTopLevelPropertySignature", "rule", "import_utils", "functionLikeNodeSelector", "getReturnTypeAnnotationFromFunctionLikeNode", "isMapTypeReference", "collectMutableMapTypeNodes", "buildReadonlyMapFix", "rule", "import_utils", "isMapTypeReference", "collectMutableMapTypeNodes", "buildReadonlyMapFix", "rule", "import_utils", "functionLikeNodeSelector", "getParametersFromFunctionLikeNode", "getTypeAnnotationFromPattern", "getTypeAnnotationFromParameter", "isReadonlyWrappedRecord", "rule", "deprecatedRule", "import_utils", "isRecordTypeReference", "isReadonlyWrappedRecord", "collectMutableRecordTypeNodes", "buildReadonlyRecordFix", "isTopLevelPropertySignature", "rule", "import_utils", "functionLikeNodeSelector", "getReturnTypeAnnotationFromFunctionLikeNode", "isRecordTypeReference", "isReadonlyWrappedRecord", "collectMutableRecordTypeNodes", "buildReadonlyRecordFix", "rule", "import_utils", "isRecordTypeReference", "isReadonlyWrappedRecord", "collectMutableRecordTypeNodes", "buildReadonlyRecordFix", "rule", "import_utils", "functionLikeNodeSelector", "getParametersFromFunctionLikeNode", "getTypeAnnotationFromPattern", "getTypeAnnotationFromParameter", "rule", "deprecatedRule", "import_utils", "isSetTypeReference", "collectMutableSetTypeNodes", "buildReadonlySetFix", "isTopLevelPropertySignature", "rule", "import_utils", "functionLikeNodeSelector", "getReturnTypeAnnotationFromFunctionLikeNode", "isSetTypeReference", "collectMutableSetTypeNodes", "buildReadonlySetFix", "rule", "import_utils", "isSetTypeReference", "collectMutableSetTypeNodes", "buildReadonlySetFix", "rule", "import_utils", "import_ts_extras", "selector", "rule", "import_utils", "rule", "strict", "import_ts_extras", "import_ts_extras", "recommendedRuleNames"]
}
