{
  "version": 3,
  "sources": ["../src/plugin.ts", "../package.json", "../src/_internal/create-rule.ts", "../src/rules/no-angular-bypass-sanitizer.ts", "../src/rules/no-angular-bypass-security-trust-html.ts", "../src/rules/no-angular-innerhtml-binding.ts", "../src/rules/no-angular-sanitization-trusted-urls.ts", "../src/rules/no-angularjs-bypass-sce.ts", "../src/rules/no-angularjs-enable-svg.ts", "../src/rules/no-angularjs-ng-bind-html-without-sanitize.ts", "../src/rules/no-angularjs-sanitization-whitelist.ts", "../src/rules/no-angularjs-sce-resource-url-wildcard.ts", "../src/rules/no-child-process-exec.ts", "../src/_internal/estree-utils.ts", "../src/rules/no-child-process-shell-true.ts", "../src/_internal/ast-utils.ts", "../src/rules/no-cookies.ts", "../src/rules/no-document-domain.ts", "../src/rules/no-document-execcommand-insert-html.ts", "../src/rules/no-document-parse-html-unsafe.ts", "../src/rules/no-document-write.ts", "../src/rules/no-domparser-html-without-sanitization.ts", "../src/_internal/domparser.ts", "../src/rules/no-domparser-svg-without-sanitization.ts", "../src/_internal/worker-code-loading.ts", "../src/rules/no-dynamic-import-unsafe-url.ts", "../src/_internal/electron-web-preferences.ts", "../src/rules/no-electron-allow-running-insecure-content.ts", "../src/rules/no-electron-dangerous-blink-features.ts", "../src/rules/no-electron-disable-context-isolation.ts", "../src/rules/no-electron-disable-sandbox.ts", "../src/rules/no-electron-disable-web-security.ts", "../src/rules/no-electron-enable-remote-module.ts", "../src/rules/no-electron-enable-webview-tag.ts", "../src/rules/no-electron-experimental-features.ts", "../src/rules/no-electron-expose-raw-ipc-renderer.ts", "../src/rules/no-electron-insecure-certificate-error-handler.ts", "../src/rules/no-electron-insecure-certificate-verify-proc.ts", "../src/rules/no-electron-insecure-permission-request-handler.ts", "../src/rules/no-electron-node-integration.ts", "../src/rules/no-electron-permission-check-handler-allow-all.ts", "../src/rules/no-electron-unchecked-ipc-sender.ts", "../src/rules/no-electron-unrestricted-navigation.ts", "../src/rules/no-electron-untrusted-open-external.ts", "../src/rules/no-electron-webview-allowpopups.ts", "../src/rules/no-electron-webview-insecure-webpreferences.ts", "../src/rules/no-electron-webview-node-integration.ts", "../src/rules/no-html-method.ts", "../src/rules/no-http-request-to-insecure-protocol.ts", "../src/rules/no-iframe-srcdoc.ts", "../src/rules/no-inner-html.ts", "../src/rules/no-insecure-random.ts", "../src/rules/no-insecure-tls-agent-options.ts", "../src/rules/no-insecure-url.ts", "../src/rules/no-location-javascript-url.ts", "../src/rules/no-message-event-without-origin-check.ts", "../src/rules/no-msapp-exec-unsafe.ts", "../src/rules/no-node-tls-check-server-identity-bypass.ts", "../src/_internal/node-tls-config.ts", "../src/rules/no-node-tls-legacy-protocol.ts", "../src/rules/no-node-tls-reject-unauthorized-zero.ts", "../src/rules/no-node-tls-security-level-zero.ts", "../src/rules/no-node-vm-run-in-context.ts", "../src/rules/no-node-vm-source-text-module.ts", "../src/rules/no-node-worker-threads-eval.ts", "../src/rules/no-nonnull-assertion-on-security-input.ts", "../src/rules/no-postmessage-star-origin.ts", "../src/rules/no-postmessage-without-origin-allowlist.ts", "../src/rules/no-range-create-contextual-fragment.ts", "../src/rules/no-script-src-data-url.ts", "../src/_internal/script-element.ts", "../src/rules/no-script-text.ts", "../src/rules/no-service-worker-unsafe-script-url.ts", "../src/rules/no-set-html-unsafe.ts", "../src/rules/no-trusted-types-policy-pass-through.ts", "../src/rules/no-unsafe-alloc.ts", "../src/rules/no-unsafe-cast-to-trusted-types.ts", "../src/rules/no-window-open-without-noopener.ts", "../src/rules/no-winjs-html-unsafe.ts", "../src/rules/no-worker-blob-url.ts", "../src/rules/no-worker-data-url.ts", "../src/_internal/rules-registry.ts"],
  "sourcesContent": ["import type { ESLint, Linter } from \"eslint\";\nimport type { UnknownRecord } from \"type-fest\";\n\nimport * as typeScriptPluginModule from \"@typescript-eslint/eslint-plugin\";\nimport typeScriptParser from \"@typescript-eslint/parser\";\nimport * as nodePluginModule from \"eslint-plugin-n\";\nimport * as securityPluginModule from \"eslint-plugin-security\";\n\nimport type { SdlConfigName } from \"./_internal/config-references.js\";\n\n// eslint-disable-next-line import-x/extensions -- JSON ESM import requires explicit file extension with import attributes.\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport sdlRules from \"./_internal/rules-registry.js\";\n\ntype SdlConfig = Readonly<Linter.Config>;\ntype SdlConfigArray = readonly SdlConfig[];\ntype SdlConfigMap = Record<SdlConfigName, SdlConfigArray>;\ntype SdlPlugin = Readonly<ESLint.Plugin>;\ntype SdlPluginWithConfigs = ESLint.Plugin & {\n    readonly configs: Readonly<Record<SdlConfigName, SdlConfigArray>>;\n};\n\nconst isUnknownRecord = (value: unknown): value is Readonly<UnknownRecord> =>\n    typeof value === \"object\" && value !== null;\n\nconst isEslintPlugin = (value: unknown): value is ESLint.Plugin =>\n    isUnknownRecord(value);\n\nconst resolvePlugin = (pluginModule: unknown): ESLint.Plugin => {\n    if (isUnknownRecord(pluginModule)) {\n        const moduleDefault = pluginModule[\"default\"];\n\n        if (isEslintPlugin(moduleDefault)) {\n            return moduleDefault;\n        }\n    }\n\n    if (isEslintPlugin(pluginModule)) {\n        return pluginModule;\n    }\n\n    throw new TypeError(\"Expected an ESLint plugin module.\");\n};\n\nconst typeScriptEslintPlugin = resolvePlugin(typeScriptPluginModule);\nconst nodeEslintPlugin = resolvePlugin(nodePluginModule);\nconst securityEslintPlugin = resolvePlugin(securityPluginModule);\n\nconst typeScriptFiles = [\"**/*.{ts,tsx,mts,cts}\"];\n\nconst createNamedConfig = (\n    name: string,\n    config: Linter.Config = {}\n): SdlConfig => ({\n    ...config,\n    name,\n});\n\nconst createAngularConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Angular Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n        rules: {\n            \"sdl/no-angular-bypass-sanitizer\": \"error\",\n            \"sdl/no-angular-bypass-security-trust-html\": \"error\",\n            \"sdl/no-angular-innerhtml-binding\": \"error\",\n            \"sdl/no-angular-sanitization-trusted-urls\": \"error\",\n        },\n    }),\n];\n\nconst createAngularJsConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: AngularJS Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n        rules: {\n            \"sdl/no-angularjs-bypass-sce\": \"error\",\n            \"sdl/no-angularjs-enable-svg\": \"error\",\n            \"sdl/no-angularjs-ng-bind-html-without-sanitize\": \"error\",\n            \"sdl/no-angularjs-sanitization-whitelist\": \"error\",\n            \"sdl/no-angularjs-sce-resource-url-wildcard\": \"error\",\n        },\n    }),\n];\n\nconst createCommonConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Common Web Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n        rules: {\n            \"no-caller\": \"error\",\n            \"no-delete-var\": \"error\",\n            \"no-eval\": \"error\",\n            \"no-implied-eval\": \"error\",\n            \"no-new-func\": \"error\",\n            \"sdl/no-cookies\": \"error\",\n            \"sdl/no-document-domain\": \"error\",\n            \"sdl/no-document-execcommand-insert-html\": \"error\",\n            \"sdl/no-document-parse-html-unsafe\": \"error\",\n            \"sdl/no-document-write\": \"error\",\n            \"sdl/no-domparser-html-without-sanitization\": \"error\",\n            \"sdl/no-domparser-svg-without-sanitization\": \"error\",\n            \"sdl/no-dynamic-import-unsafe-url\": \"error\",\n            \"sdl/no-html-method\": \"error\",\n            \"sdl/no-iframe-srcdoc\": \"error\",\n            \"sdl/no-inner-html\": \"error\",\n            \"sdl/no-insecure-random\": \"error\",\n            \"sdl/no-insecure-url\": \"error\",\n            \"sdl/no-location-javascript-url\": \"error\",\n            \"sdl/no-message-event-without-origin-check\": \"error\",\n            \"sdl/no-msapp-exec-unsafe\": \"error\",\n            \"sdl/no-postmessage-star-origin\": \"error\",\n            \"sdl/no-postmessage-without-origin-allowlist\": \"error\",\n            \"sdl/no-range-create-contextual-fragment\": \"error\",\n            \"sdl/no-script-src-data-url\": \"error\",\n            \"sdl/no-script-text\": \"error\",\n            \"sdl/no-service-worker-unsafe-script-url\": \"error\",\n            \"sdl/no-set-html-unsafe\": \"error\",\n            \"sdl/no-window-open-without-noopener\": \"error\",\n            \"sdl/no-winjs-html-unsafe\": \"error\",\n            \"sdl/no-worker-blob-url\": \"error\",\n            \"sdl/no-worker-data-url\": \"error\",\n        },\n    }),\n];\n\nconst createElectronConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Electron Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n        rules: {\n            \"sdl/no-electron-allow-running-insecure-content\": \"error\",\n            \"sdl/no-electron-dangerous-blink-features\": \"error\",\n            \"sdl/no-electron-disable-context-isolation\": \"error\",\n            \"sdl/no-electron-disable-sandbox\": \"error\",\n            \"sdl/no-electron-disable-web-security\": \"error\",\n            \"sdl/no-electron-enable-remote-module\": \"error\",\n            \"sdl/no-electron-enable-webview-tag\": \"error\",\n            \"sdl/no-electron-experimental-features\": \"error\",\n            \"sdl/no-electron-expose-raw-ipc-renderer\": \"error\",\n            \"sdl/no-electron-insecure-certificate-error-handler\": \"error\",\n            \"sdl/no-electron-insecure-certificate-verify-proc\": \"error\",\n            \"sdl/no-electron-insecure-permission-request-handler\": \"error\",\n            \"sdl/no-electron-node-integration\": \"error\",\n            \"sdl/no-electron-permission-check-handler-allow-all\": \"error\",\n            \"sdl/no-electron-unchecked-ipc-sender\": \"error\",\n            \"sdl/no-electron-unrestricted-navigation\": \"error\",\n            \"sdl/no-electron-untrusted-open-external\": \"error\",\n            \"sdl/no-electron-webview-allowpopups\": \"error\",\n            \"sdl/no-electron-webview-insecure-webpreferences\": \"error\",\n            \"sdl/no-electron-webview-node-integration\": \"error\",\n        },\n    }),\n];\n\nconst createNodeConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Node.js Runtime Safety\", {\n        plugins: {\n            n: nodeEslintPlugin,\n        },\n        rules: {\n            \"n/no-deprecated-api\": \"error\",\n        },\n    }),\n    createNamedConfig(\"\uD83D\uDD10 SDL: Node.js Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n        rules: {\n            \"sdl/no-child-process-exec\": \"error\",\n            \"sdl/no-child-process-shell-true\": \"error\",\n            \"sdl/no-http-request-to-insecure-protocol\": \"error\",\n            \"sdl/no-insecure-tls-agent-options\": \"error\",\n            \"sdl/no-node-tls-check-server-identity-bypass\": \"error\",\n            \"sdl/no-node-tls-legacy-protocol\": \"error\",\n            \"sdl/no-node-tls-reject-unauthorized-zero\": \"error\",\n            \"sdl/no-node-tls-security-level-zero\": \"error\",\n            \"sdl/no-node-vm-run-in-context\": \"error\",\n            \"sdl/no-node-vm-source-text-module\": \"error\",\n            \"sdl/no-node-worker-threads-eval\": \"error\",\n            \"sdl/no-unsafe-alloc\": \"error\",\n        },\n    }),\n];\n\nconst createReactConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: React JSX Support\", {\n        languageOptions: {\n            parserOptions: {\n                ecmaFeatures: {\n                    jsx: true,\n                },\n            },\n        },\n    }),\n    createNamedConfig(\"\uD83D\uDD10 SDL: React Security\", {\n        plugins: {\n            sdl: plugin,\n        },\n    }),\n];\n\nconst createTypeScriptConfig = (plugin: SdlPlugin): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: TypeScript Parser Support\", {\n        languageOptions: {\n            parserOptions: {\n                ecmaVersion: \"latest\",\n                sourceType: \"module\",\n            },\n        },\n    }),\n    createNamedConfig(\"\uD83D\uDD10 SDL: TypeScript Security\", {\n        files: [...typeScriptFiles],\n        languageOptions: {\n            parser: typeScriptParser,\n            parserOptions: {\n                ecmaFeatures: {\n                    jsx: true,\n                },\n                ecmaVersion: \"latest\",\n                sourceType: \"module\",\n            },\n        },\n        plugins: {\n            \"@typescript-eslint\": typeScriptEslintPlugin,\n            sdl: plugin,\n        },\n        rules: {\n            \"@typescript-eslint/no-implied-eval\": \"error\",\n            \"no-implied-eval\": \"off\",\n            \"sdl/no-nonnull-assertion-on-security-input\": \"error\",\n            \"sdl/no-trusted-types-policy-pass-through\": \"error\",\n            \"sdl/no-unsafe-cast-to-trusted-types\": \"error\",\n        },\n    }),\n];\n\nconst createRequiredConfig = (\n    configs: Readonly<SdlConfigMap>\n): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Required Security Baseline\"),\n    ...configs.angular,\n    ...configs.angularjs,\n    ...configs.common,\n    ...configs.electron,\n    ...configs.node,\n    ...configs.react,\n];\n\nconst createRecommendedConfig = (\n    configs: Readonly<SdlConfigMap>\n): SdlConfigArray => [\n    createNamedConfig(\"\uD83D\uDD10 SDL: Recommended Security Baseline\"),\n    ...configs.required,\n    ...configs.typescript,\n    createNamedConfig(\"\uD83D\uDD10 SDL: Recommended Security Plugins\", {\n        plugins: {\n            security: securityEslintPlugin,\n        },\n    }),\n];\n\nconst packageJsonVersion =\n    typeof packageJson.version === \"string\" && packageJson.version.length > 0\n        ? packageJson.version\n        : \"0.0.0\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Type bridge between @typescript-eslint RuleModule readonly options and ESLint plugin rule map.\nconst pluginRules = sdlRules as unknown as NonNullable<ESLint.Plugin[\"rules\"]>;\n\nconst pluginCore: SdlPlugin = {\n    meta: {\n        name: \"eslint-plugin-sdl-2\",\n        namespace: \"sdl\",\n        version: packageJsonVersion,\n    },\n    rules: pluginRules,\n};\n\nconst configs: SdlConfigMap = {\n    angular: createAngularConfig(pluginCore),\n    angularjs: createAngularJsConfig(pluginCore),\n    common: createCommonConfig(pluginCore),\n    electron: createElectronConfig(pluginCore),\n    node: createNodeConfig(pluginCore),\n    react: createReactConfig(pluginCore),\n    recommended: [],\n    required: [],\n    typescript: createTypeScriptConfig(pluginCore),\n};\n\nconfigs.required = createRequiredConfig(configs);\nconfigs.recommended = createRecommendedConfig(configs);\n\n/** ESLint plugin entrypoint with SDL rule set and flat-config presets. */\nconst sdlPlugin: SdlPluginWithConfigs = {\n    ...pluginCore,\n    configs,\n    rules: pluginRules,\n};\n\nexport default sdlPlugin;\n", "{\n    \"$schema\": \"https://www.schemastore.org/package.json\",\n    \"name\": \"eslint-plugin-sdl-2\",\n    \"version\": \"1.2.7\",\n    \"private\": false,\n    \"description\": \"ESLint plugin providing SDL-focused security and platform hardening rules.\",\n    \"keywords\": [\n        \"eslint\",\n        \"eslint-plugin\",\n        \"eslintplugin\",\n        \"sdl\",\n        \"security\",\n        \"angular\",\n        \"angularjs\",\n        \"electron\",\n        \"node\",\n        \"typescript\"\n    ],\n    \"homepage\": \"https://github.com/Nick2bad4u/eslint-plugin-SDL-2\",\n    \"bugs\": {\n        \"url\": \"https://github.com/Nick2bad4u/eslint-plugin-SDL-2/issues\",\n        \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/Nick2bad4u/eslint-plugin-SDL-2.git\"\n    },\n    \"license\": \"MIT\",\n    \"author\": \"Nick2bad4u <20943337+Nick2bad4u@users.noreply.github.com> (https://github.com/Nick2bad4u)\",\n    \"contributors\": [\n        {\n            \"name\": \"Nick2bad4u\",\n            \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\",\n            \"url\": \"https://nick2bad4u.github.io/eslint-plugin-SDL-2\"\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    \"types\": \"./dist/plugin.d.ts\",\n    \"files\": [\n        \"dist\",\n        \"docs/rules/**\",\n        \"CHANGELOG.md\"\n    ],\n    \"workspaces\": [\n        \"docs/docusaurus\"\n    ],\n    \"scripts\": {\n        \"prebench\": \"npm run build\",\n        \"bench\": \"node benchmarks/run-eslint-stats.mjs\",\n        \"prebench:compare\": \"npm run build\",\n        \"bench:compare\": \"node benchmarks/run-eslint-stats.mjs --iterations=6 --warmup=2 --compare=coverage/benchmarks/eslint-stats.json\",\n        \"prebench:eslint:stats\": \"npm run build\",\n        \"bench:eslint:stats\": \"node benchmarks/run-eslint-stats.mjs\",\n        \"prebench:eslint:timing\": \"npm run build\",\n        \"bench:eslint:timing\": \"cross-env TIMING=all eslint --config benchmarks/eslint-timing.config.mjs --stats \\\"test/fixtures/ts/compat-no-insecure-*.invalid.ts\\\"\",\n        \"prebench:rule-benchmark\": \"npm run build\",\n        \"bench:rule-benchmark\": \"eslint-rule-benchmark run\",\n        \"prebench:ui\": \"npm run build\",\n        \"bench:ui\": \"vitest bench --ui\",\n        \"prebench:watch\": \"npm run build\",\n        \"bench:watch\": \"vitest bench\",\n        \"build\": \"tsc -p tsconfig.build.json && npm run build:types:cjs && npm run build:cjs\",\n        \"build:cjs\": \"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 -y @eslint/config-inspector@latest build --outDir \\\"docs/docusaurus/static/eslint-inspector\\\" --base \\\"/eslint-plugin-SDL-2/eslint-inspector/\\\"\",\n        \"build:eslint-inspector:local\": \"npx @eslint/config-inspector\",\n        \"build:stylelint-inspector\": \"npx -y stylelint-config-inspector@latest build --outDir \\\"docs/docusaurus/static/stylelint-inspector\\\" --base \\\"/eslint-plugin-SDL-2/stylelint-inspector/\\\"\",\n        \"build:stylelint-inspector:local\": \"npx stylelint-config-inspector@latest\",\n        \"build:types:cjs\": \"node -e \\\"require('node:fs').copyFileSync('dist/plugin.d.ts','dist/plugin.d.cts')\\\"\",\n        \"changelog:generate\": \"git-cliff --config cliff.toml --output CHANGELOG.md\",\n        \"changelog:preview\": \"git-cliff --config cliff.toml --unreleased\",\n        \"changelog:release-notes\": \"git-cliff --config cliff.toml --current --strip all\",\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        \"cognitive-complexity\": \"cognitive-complexity-ts --threshold 10\",\n        \"commit\": \"git-cz\",\n        \"contrib\": \"all-contributors\",\n        \"contrib:add\": \"all-contributors add\",\n        \"contrib:check\": \"all-contributors check\",\n        \"contrib:compare\": \"npm run contrib:check\",\n        \"contrib:generate\": \"all-contributors generate\",\n        \"coverage\": \"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\": \"npm run docs:api && 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\": \"remark docs --use remark-toc --output\",\n        \"docs:typecheck\": \"npm run --workspace docs/docusaurus typecheck\",\n        \"docs:typedoc\": \"npm run --workspace docs/docusaurus docs:api\",\n        \"docs:validate-links\": \"remark docs --use remark-validate-links --frail\",\n        \"knip\": \"cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_NO_WARNINGS=1 npx knip -c knip.config.ts --include-libs --cache --cache-location .cache/knip --tsConfig tsconfig.json\",\n        \"lint\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache\",\n        \"lint:action\": \"npm run lint:actions\",\n        \"lint:actions\": \"node scripts/lint-actionlint.mjs\",\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:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:gitleaks && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:yamllint && 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:gitleaks && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:yamllint && npm run lint:actions && npm run lint:circular\",\n        \"lint:circular\": \"npm run madge:circular\",\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\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache --ignore-pattern \\\"docs/docusaurus/static/stylelint-inspector/**\\\" --ignore-pattern \\\"docs/docusaurus/static/eslint-inspector/**\\\" src/ docs/ --custom-formatter stylelint-formatter-pretty && echo \\\"Stylelint done!\\\"\",\n        \"lint:css:fix\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache --ignore-pattern \\\"docs/docusaurus/static/stylelint-inspector/**\\\" --ignore-pattern \\\"docs/docusaurus/static/eslint-inspector/**\\\" src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n        \"lint:depcheck\": \"npm run knip\",\n        \"lint:deps\": \"npm run knip\",\n        \"lint:dupes\": \"jscpd src/ --config jscpd.json\",\n        \"lint:dupes:all\": \"jscpd src/ --config jscpd.json --min-lines 3\",\n        \"lint:dupes:skiplocal\": \"jscpd src/ --skipLocal --config jscpd.json\",\n        \"lint:dupes:skiplocal:all\": \"jscpd src/ --skipLocal --config jscpd.json --min-lines 3\",\n        \"lint:duplicates\": \"npm run lint:dupes\",\n        \"lint:exports\": \"ts-unused-exports tsconfig.json src/plugin.ts --excludePathsFromReport=plugin.ts\",\n        \"lint:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix\",\n        \"lint:fix:quiet\": \"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-sdl-2\",\n        \"lint:knip\": \"npm run knip\",\n        \"lint:knip:exports\": \"npm run knip -- --include exports,nsExports,classMembers,types,nsTypes,enumMembers,duplicates\",\n        \"lint:knip:unused:exports\": \"npm run knip -- --dependencies --exports\",\n        \"lint:leaves\": \"npm run madge:leaves\",\n        \"lint:metrics\": \"npm run sloc\",\n        \"lint:node-version-files\": \"node scripts/sync-node-version-files.mjs --check\",\n        \"lint:orphans\": \"npm run madge:orphans\",\n        \"lint:package\": \"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:node-version-files && npm run lint:package-sort && npm run lint:package-check && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n        \"lint:package-check\": \"publint && attw --pack .\",\n        \"lint:package-check:strict\": \"publint && attw --pack . --profile strict\",\n        \"lint:package-sort\": \"sort-package-json \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:package-sort-check\": \"sort-package-json --check \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:packagelintrc\": \"npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n        \"lint:prettier\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --check\",\n        \"lint:prettier:fix\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --write\",\n        \"lint:publint\": \"publint\",\n        \"lint:quiet\": \"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\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" --quiet\",\n        \"lint:remark:fix\": \"prettier --log-level warn --ignore-path prettierignore.remark --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --no-error-on-unmatched-pattern --write \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" && npm run remark:fix\",\n        \"lint:secretlint\": \"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\": \"npm run knip -- --include unlisted,unresolved,duplicates\",\n        \"lint:unused-deps\": \"npm run knip -- --include dependencies\",\n        \"lint:yaml\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint done!\\\"\",\n        \"lint:yaml:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint (fix) done!\\\"\",\n        \"lint:yamllint\": \"yamllint .\",\n        \"madge:circular\": \"madge --circular --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n        \"madge:leaves\": \"madge --leaves --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n        \"madge:orphans\": \"madge --orphans --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n        \"open:coverage\": \"open-cli coverage/index.html\",\n        \"prepublishOnly\": \"npm run release:check\",\n        \"release:check\": \"npm run release:verify\",\n        \"release:verify\": \"npm run build && npm run docs:api && npm run lint && npm run typecheck && npm run test && npm run sync:readme-rules-table && npm run sync:presets-rules-matrix && npm run docs:check-links && npm pack --dry-run\",\n        \"remark:fix\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail --quiet --output -- \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\"\",\n        \"remark:test-config\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"README.md\\\"\",\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:presets-rules-matrix\": \"node scripts/sync-presets-rules-matrix.mjs\",\n        \"sync:readme-rules-table\": \"node scripts/sync-readme-rules-table.mjs\",\n        \"sync:readme-rules-table:update\": \"npm run build && npm run sync:readme-rules-table:write\",\n        \"sync:readme-rules-table:write\": \"node scripts/sync-readme-rules-table.mjs --write\",\n        \"sync:rules:check\": \"npm run sync:readme-rules-table && npm run sync:presets-rules-matrix\",\n        \"sync:rules:write\": \"npm run sync:readme-rules-table:write && npm run sync:presets-rules-matrix\",\n        \"pretest\": \"npm run build\",\n        \"test\": \"vitest run\",\n        \"test:autofix:fixtures\": \"cross-env SDL_AUTOFIX_SMOKE=1 vitest run test/rules-sdl.test.ts\",\n        \"test:autofix:fixtures:typed\": \"cross-env SDL_AUTOFIX_SMOKE=1 SDL_AUTOFIX_FIXTURE_DIR=test/fixtures/ts vitest run test/rules-sdl.test.ts\",\n        \"test:ci\": \"cross-env CI=true vitest run --reporter=default\",\n        \"test:coverage\": \"vitest run --coverage --reporter=default\",\n        \"test:coverage:detailed\": \"vitest run --coverage --reporter=verbose\",\n        \"test:coverage:minimal\": \"vitest run --coverage --reporter=dot\",\n        \"test:coverage:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:coverage:quiet\": \"vitest run --coverage --reporter=default --silent\",\n        \"test:coverage:verbose\": \"vitest run --coverage --reporter=verbose\",\n        \"test:detailed\": \"vitest run --reporter=verbose\",\n        \"test:minimal\": \"vitest run --reporter=dot\",\n        \"test:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:quiet\": \"vitest run --reporter=default --silent\",\n        \"test:serial\": \"cross-env MAX_THREADS=1 vitest run\",\n        \"test:stryker\": \"stryker run --ignoreStatic --concurrency 12 --incrementalFile .cache/stryker/incremental-fast.json\",\n        \"test:stryker:ci\": \"cross-env CI=true stryker run --ignoreStatic --concurrency 2 --incrementalFile .cache/stryker/incremental-fast-ci.json\",\n        \"test:stryker:full\": \"stryker run --concurrency 12 --incrementalFile .cache/stryker/incremental-full.json\",\n        \"test:stryker:full:ci\": \"cross-env CI=true stryker run --concurrency 2 --incrementalFile .cache/stryker/incremental-full-ci.json\",\n        \"test:verbose\": \"vitest run --reporter=verbose\",\n        \"test:watch\": \"vitest\",\n        \"typecheck\": \"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.build.json --noEmit && tsc -p tsconfig.eslint.json --noEmit && tsc -p tsconfig.js.json --noEmit && npm run --workspace docs/docusaurus typecheck\",\n        \"typecheck:all\": \"npm run typecheck\",\n        \"types:update\": \"typesync\",\n        \"update-actions\": \"npx actions-up --yes --style sha\",\n        \"update-deps\": \"npx ncu -i --install never && npm update --workspaces --force && npm install --force && npm run sync:peer-eslint-range && npm run sync:node-version-files && npm run sync:rules:write\",\n        \"verify:readme-rules-table\": \"npm run build && npm run sync:readme-rules-table\"\n    },\n    \"overrides\": {\n        \"jsonc-eslint-parser\": \"$jsonc-eslint-parser\"\n    },\n    \"dependencies\": {\n        \"@types/eslint-plugin-security\": \"^3.0.1\",\n        \"@typescript-eslint/eslint-plugin\": \"^8.61.1\",\n        \"@typescript-eslint/parser\": \"^8.61.1\",\n        \"@typescript-eslint/type-utils\": \"^8.61.1\",\n        \"@typescript-eslint/utils\": \"^8.61.1\",\n        \"eslint-plugin-n\": \"^18.1.0\",\n        \"eslint-plugin-security\": \"^4.0.1\",\n        \"ts-extras\": \"^1.0.0\",\n        \"type-fest\": \"^5.7.0\"\n    },\n    \"devDependencies\": {\n        \"@arethetypeswrong/cli\": \"^0.18.3\",\n        \"@csstools/stylelint-formatter-github\": \"^2.0.0\",\n        \"@double-great/remark-lint-alt-text\": \"^1.1.1\",\n        \"@eslint/compat\": \"^2.1.0\",\n        \"@eslint/config-inspector\": \"^3.0.4\",\n        \"@microsoft/tsdoc-config\": \"^0.18.1\",\n        \"@stryker-ignorer/console-all\": \"^0.3.2\",\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/htmlhint\": \"^1.1.5\",\n        \"@types/madge\": \"^5.0.3\",\n        \"@types/node\": \"^25.9.3\",\n        \"@types/sloc\": \"^0.2.3\",\n        \"@typescript-eslint/rule-tester\": \"^8.61.1\",\n        \"@vitest/coverage-v8\": \"^4.1.9\",\n        \"@vitest/ui\": \"^4.1.9\",\n        \"actionlint\": \"^2.0.6\",\n        \"all-contributors-cli\": \"^6.26.1\",\n        \"cognitive-complexity-ts\": \"^0.8.2\",\n        \"commitlint\": \"^21.0.2\",\n        \"commitlint-config-gitmoji\": \"^2.3.1\",\n        \"cross-env\": \"^10.1.0\",\n        \"detect-secrets\": \"^1.0.6\",\n        \"eslint\": \"^10.5.0\",\n        \"eslint-config-nick2bad4u\": \"^2.0.4\",\n        \"eslint-formatter-unix\": \"^9.0.1\",\n        \"eslint-rule-benchmark\": \"^0.8.0\",\n        \"fast-check\": \"^4.8.0\",\n        \"git-cliff\": \"^2.13.1\",\n        \"gitleaks-config-nick2bad4u\": \"^1.0.2\",\n        \"gitleaks-secret-scanner\": \"^2.1.1\",\n        \"htmlhint\": \"^1.9.2\",\n        \"jscpd\": \"^5.0.10\",\n        \"knip\": \"^6.17.1\",\n        \"leasot\": \"^14.4.0\",\n        \"madge\": \"^8.0.0\",\n        \"markdown-link-check\": \"^3.14.2\",\n        \"npm-check-updates\": \"^22.2.3\",\n        \"npm-package-json-lint\": \"^10.4.1\",\n        \"npm-package-json-lint-config-nick2bad4u\": \"^1.0.3\",\n        \"picocolors\": \"^1.1.1\",\n        \"prettier\": \"^3.8.4\",\n        \"prettier-config-nick2bad4u\": \"^1.0.17\",\n        \"publint\": \"^0.3.21\",\n        \"rehype-katex\": \"^7.0.1\",\n        \"remark\": \"^15.0.1\",\n        \"remark-cli\": \"^12.0.1\",\n        \"remark-config-nick2bad4u\": \"^1.0.8\",\n        \"secretlint\": \"^13.0.2\",\n        \"secretlint-config-nick2bad4u\": \"^1.1.0\",\n        \"sloc\": \"^0.3.2\",\n        \"sort-package-json\": \"^4.0.0\",\n        \"storybook\": \"^10.4.6\",\n        \"stylelint\": \"^17.13.0\",\n        \"stylelint-config-nick2bad4u\": \"^1.0.19\",\n        \"ts-unused-exports\": \"^11.0.1\",\n        \"tsdoc-config-nick2bad4u\": \"^1.0.5\",\n        \"typedoc\": \"^0.28.19\",\n        \"typedoc-config-nick2bad4u\": \"^2.0.0\",\n        \"typescript\": \"^6.0.3\",\n        \"typescript-eslint\": \"^8.61.1\",\n        \"typesync\": \"^0.14.3\",\n        \"vfile\": \"^6.0.3\",\n        \"vite\": \"^8.0.16\",\n        \"vite-tsconfig-paths\": \"^6.1.1\",\n        \"vitest\": \"^4.1.9\",\n        \"yamllint-config-nick2bad4u\": \"^1.0.2\",\n        \"yamllint-js\": \"^0.2.4\"\n    },\n    \"peerDependencies\": {\n        \"eslint\": \"^9.0.0 || ^10.5.0\",\n        \"typescript\": \">=5.0.0\"\n    },\n    \"packageManager\": \"npm@11.18.0\",\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\": \">=11.0.0\",\n            \"onFail\": \"error\"\n        }\n    },\n    \"publishConfig\": {\n        \"provenance\": true,\n        \"registry\": \"https://registry.npmjs.org/\"\n    },\n    \"readme\": \"README.md\"\n}\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\ntype SdlRuleDocs = TSESLint.RuleMetaDataDocs & {\n    recommended: boolean;\n};\n\nconst docsBaseUrl =\n    \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules\";\n\n/** Shared SDL rule helper that injects canonical docs URLs. */\nconst ruleCreatorFactory: ReturnType<\n    typeof ESLintUtils.RuleCreator<SdlRuleDocs>\n> =\n    // eslint-disable-next-line new-cap -- RuleCreator is intentionally a callable factory.\n    ESLintUtils.RuleCreator<SdlRuleDocs>((name) => `${docsBaseUrl}/${name}`);\n\n/** Shared SDL rule helper that injects canonical docs URLs. */\nexport const createRule: typeof ruleCreatorFactory = ruleCreatorFactory;\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"noBypass\">({\n    create: (context) => ({\n        \"CallExpression[arguments.length>0][callee.property.name=/^bypassSecurityTrust(?:html|resourceurl|script|style|url)$/i]\"(\n            node\n        ) {\n            context.report({\n                messageId: \"noBypass\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow bypassing Angular DomSanitizer trust APIs such as bypassSecurityTrustHtml.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angular-bypass-sanitizer\",\n        },\n        messages: {\n            noBypass: \"Do not bypass Angular's built-in sanitizer.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angular-bypass-sanitizer\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        CallExpression(node: TSESTree.CallExpression) {\n            if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                return;\n            }\n\n            if (\n                getMemberPropertyName(node.callee) !== \"bypassSecurityTrustHtml\"\n            ) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Angular bypassSecurityTrustHtml usage in application code.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angular-bypass-security-trust-html\",\n        },\n        messages: {\n            default:\n                \"Avoid bypassSecurityTrustHtml; use validated/sanitized HTML flows instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angular-bypass-security-trust-html\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst hasInnerHtmlBindingPattern = (text: string): boolean =>\n    /\\[\\s*innerhtml\\s*\\]\\s*=/iv.test(text);\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        Literal(node: TSESTree.Literal) {\n            if (typeof node.value !== \"string\") {\n                return;\n            }\n\n            if (!hasInnerHtmlBindingPattern(node.value)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n        TemplateLiteral(node: TSESTree.TemplateLiteral) {\n            if (node.expressions.length > 0) {\n                return;\n            }\n\n            const templateValue = arrayFirst(node.quasis)?.value.cooked;\n\n            if (typeof templateValue !== \"string\") {\n                return;\n            }\n\n            if (!hasInnerHtmlBindingPattern(templateValue)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Angular [innerHTML] template bindings without a reviewed sanitization/trusted-types strategy.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angular-innerhtml-binding\",\n        },\n        messages: {\n            default:\n                \"Avoid raw [innerHTML] bindings unless input is strictly sanitized by a reviewed policy.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angular-innerhtml-binding\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<\n    [],\n    \"noSanitizationTrustedUrls\"\n>({\n    create: (context) => ({\n        \"CallExpression[arguments.length>0][callee.object.name='$compileProvider'][callee.property.name=/^(?:aHref|imgSrc)SanitizationTrustedUrlList$/]\"(\n            node\n        ) {\n            context.report({\n                messageId: \"noSanitizationTrustedUrls\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow AngularJS trusted URL list mutations via $compileProvider.*SanitizationTrustedUrlList.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angular-sanitization-trusted-urls\",\n        },\n        messages: {\n            noSanitizationTrustedUrls:\n                \"Do not modify AngularJS sanitization trusted URL lists.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angular-sanitization-trusted-urls\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, arrayIncludes } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\nconst isEmptyLiteral = (argument: TSESTree.Node | undefined): boolean =>\n    argument?.type === AST_NODE_TYPES.Literal && argument.value === \"\";\n\nconst isSceProviderEnabledSafeLiteral = (\n    argument: TSESTree.Node | undefined\n): boolean =>\n    argument?.type === AST_NODE_TYPES.Literal &&\n    arrayIncludes(\n        [\n            1,\n            \"1\",\n            true,\n            \"true\",\n        ],\n        argument.value\n    );\n\nconst isBypassSceMethod = (methodName: string): boolean =>\n    arrayIncludes(\n        [\n            \"trustAs\",\n            \"trustAsCss\",\n            \"trustAsHtml\",\n            \"trustAsJs\",\n            \"trustAsResourceUrl\",\n            \"trustAsUrl\",\n        ],\n        methodName\n    );\n\n/** Rule implementation for no-angularjs-bypass-sce. */\nexport const noAngularjsBypassSceRule: ReturnType<typeof createRule> =\n    createRule<[], \"doNotBypass\">({\n        create(context): TSESLint.RuleListener {\n            const report = (node: TSESTree.CallExpression): void => {\n                context.report({\n                    messageId: \"doNotBypass\",\n                    node,\n                });\n            };\n\n            return {\n                \"CallExpression[callee.type='MemberExpression'][callee.object.type='Identifier'][callee.object.name='$sce'][callee.property.type='Identifier']\"(\n                    node: TSESTree.CallExpression\n                ) {\n                    if (\n                        node.callee.type !== AST_NODE_TYPES.MemberExpression ||\n                        node.callee.property.type !== AST_NODE_TYPES.Identifier\n                    ) {\n                        return;\n                    }\n\n                    if (!isBypassSceMethod(node.callee.property.name)) {\n                        return;\n                    }\n\n                    const firstArgument = arrayFirst(node.arguments);\n\n                    if (\n                        node.arguments.length === 1 &&\n                        isEmptyLiteral(firstArgument)\n                    ) {\n                        return;\n                    }\n\n                    report(node);\n                },\n                \"CallExpression[callee.type='MemberExpression'][callee.object.type='Identifier'][callee.object.name='$sceProvider'][callee.property.type='Identifier'][callee.property.name='enabled']\"(\n                    node: TSESTree.CallExpression\n                ) {\n                    const firstArgument = arrayFirst(node.arguments);\n\n                    if (isSceProviderEnabledSafeLiteral(firstArgument)) {\n                        return;\n                    }\n\n                    report(node);\n                },\n                \"CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='trustAs']\"(\n                    node: TSESTree.CallExpression\n                ) {\n                    const firstArgument = arrayFirst(node.arguments);\n\n                    if (\n                        node.arguments.length === 1 &&\n                        isEmptyLiteral(firstArgument)\n                    ) {\n                        return;\n                    }\n\n                    report(node);\n                },\n            };\n        },\n        meta: {\n            deprecated: false,\n            docs: {\n                description:\n                    \"disallow AngularJS SCE bypass APIs that trust unvalidated values.\",\n                frozen: false,\n                recommended: false,\n                url: \"https://github.com/Nick2bad4u/eslint-plugin-SDL-2/blob/main/docs/rules/no-angularjs-bypass-sce.md\",\n            },\n            messages: {\n                doNotBypass:\n                    \"Do not bypass AngularJS SCE with untrusted values. Validate and sanitize content before marking it trusted.\",\n            },\n            schema: [],\n            type: \"problem\",\n        },\n        name: \"no-angularjs-bypass-sce\",\n    });\n\nexport default noAngularjsBypassSceRule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayIncludes } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\nconst isExplicitlyDisabledSvgLiteral = (\n    argument: TSESTree.Node | undefined\n): boolean =>\n    argument?.type === AST_NODE_TYPES.Literal &&\n    arrayIncludes(\n        [\n            0,\n            \"0\",\n            false,\n            \"false\",\n        ],\n        argument.value\n    );\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"doNotEnableSVG\">({\n    create(context) {\n        return {\n            \"CallExpression[callee.object.name='$sanitizeProvider'][callee.property.name='enableSvg']\"(\n                node: TSESTree.CallExpression\n            ) {\n                if (node.arguments.length !== 1) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (isExplicitlyDisabledSvgLiteral(firstArgument)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"doNotEnableSVG\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling AngularJS sanitizer SVG support via $sanitizeProvider.enableSvg(true).\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angularjs-enable-svg\",\n        },\n        messages: {\n            doNotEnableSVG: \"Do not enable SVG support in AngularJS sanitizer.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angularjs-enable-svg\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst hasNgBindHtmlPattern = (text: string): boolean =>\n    /\\bng-bind-html\\b/iv.test(text);\n\nconst hasKnownSanitizePattern = (text: string): boolean =>\n    /\\b(?:ngsanitize|\\$sanitize|sanitize)\\b/iv.test(text);\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        Literal(node: TSESTree.Literal) {\n            if (typeof node.value !== \"string\") {\n                return;\n            }\n\n            if (!hasNgBindHtmlPattern(node.value)) {\n                return;\n            }\n\n            if (hasKnownSanitizePattern(node.value)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n        TemplateLiteral(node: TSESTree.TemplateLiteral) {\n            if (node.expressions.length > 0) {\n                return;\n            }\n\n            const templateValue = arrayFirst(node.quasis)?.value.cooked;\n\n            if (typeof templateValue !== \"string\") {\n                return;\n            }\n\n            if (!hasNgBindHtmlPattern(templateValue)) {\n                return;\n            }\n\n            if (hasKnownSanitizePattern(templateValue)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow AngularJS ng-bind-html usage without explicit sanitization context.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angularjs-ng-bind-html-without-sanitize\",\n        },\n        messages: {\n            default:\n                \"Avoid ng-bind-html unless sanitization is explicitly configured and enforced.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angularjs-ng-bind-html-without-sanitize\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<\n    [],\n    \"noSanitizationWhitelist\"\n>({\n    create: (context) => ({\n        \"CallExpression[arguments.length>0][callee.object.name='$compileProvider'][callee.property.name=/^(?:aHref|imgSrc)SanitizationWhitelist$/]\"(\n            node\n        ) {\n            context.report({\n                messageId: \"noSanitizationWhitelist\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow AngularJS sanitizer whitelist mutations via $compileProvider.*SanitizationWhitelist.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angularjs-sanitization-whitelist\",\n        },\n        messages: {\n            noSanitizationWhitelist:\n                \"Do not modify AngularJS sanitization whitelists.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angularjs-sanitization-whitelist\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isWildcardValue = (value: string): boolean => value.includes(\"*\");\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    getMemberPropertyName(node.callee) !==\n                    \"resourceUrlWhitelist\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    firstArgument.type !== AST_NODE_TYPES.ArrayExpression\n                ) {\n                    return;\n                }\n\n                for (const elementNode of firstArgument.elements) {\n                    if (\n                        elementNode === null ||\n                        elementNode.type === AST_NODE_TYPES.SpreadElement ||\n                        elementNode.type !== AST_NODE_TYPES.Literal ||\n                        typeof elementNode.value !== \"string\"\n                    ) {\n                        continue;\n                    }\n\n                    if (!isWildcardValue(elementNode.value)) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: elementNode,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow wildcard entries in AngularJS SCE resource URL whitelists.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-angularjs-sce-resource-url-wildcard\",\n        },\n        messages: {\n            default:\n                \"Do not use wildcard resourceUrlWhitelist entries for AngularJS SCE configuration.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-angularjs-sce-resource-url-wildcard\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst CHILD_PROCESS_MODULE_NAMES = new Set([\n    \"child_process\",\n    \"node:child_process\",\n]);\nconst DISALLOWED_CHILD_PROCESS_METHOD_NAMES = new Set([\"exec\", \"execSync\"]);\n\nconst isDisallowedChildProcessMethodName = (\n    value: string | undefined\n): value is \"exec\" | \"execSync\" =>\n    isDefined(value) && setHas(DISALLOWED_CHILD_PROCESS_METHOD_NAMES, value);\n\nconst isChildProcessModuleSource = (value: string): boolean =>\n    setHas(CHILD_PROCESS_MODULE_NAMES, value);\n\nconst isRequireCallFromChildProcess = (\n    expression: null | TSESTree.Expression\n): expression is TSESTree.CallExpression => {\n    if (\n        expression?.type !== AST_NODE_TYPES.CallExpression ||\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        expression.callee.name !== \"require\"\n    ) {\n        return false;\n    }\n\n    const [firstArgument] = expression.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        firstArgument.type === AST_NODE_TYPES.Literal &&\n        typeof firstArgument.value === \"string\" &&\n        isChildProcessModuleSource(firstArgument.value)\n    );\n};\n\nconst getPatternIdentifier = (\n    pattern: TSESTree.Property[\"value\"]\n): TSESTree.Identifier | undefined => {\n    if (pattern.type === AST_NODE_TYPES.Identifier) {\n        return pattern;\n    }\n\n    if (\n        pattern.type === AST_NODE_TYPES.AssignmentPattern &&\n        pattern.left.type === AST_NODE_TYPES.Identifier\n    ) {\n        return pattern.left;\n    }\n\n    return undefined;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const childProcessExecBindingNames = new Set<string>();\n        const childProcessNamespaceBindingNames = new Set<string>();\n\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type === AST_NODE_TYPES.Identifier) {\n                    if (\n                        !setHas(childProcessExecBindingNames, node.callee.name)\n                    ) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (!isDisallowedChildProcessMethodName(methodName)) {\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.Identifier &&\n                    setHas(\n                        childProcessNamespaceBindingNames,\n                        node.callee.object.name\n                    )\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.CallExpression &&\n                    isRequireCallFromChildProcess(node.callee.object)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n                }\n            },\n            ImportDeclaration(node: TSESTree.ImportDeclaration) {\n                if (!isChildProcessModuleSource(node.source.value)) {\n                    return;\n                }\n\n                for (const specifierNode of node.specifiers) {\n                    if (\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportDefaultSpecifier ||\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportNamespaceSpecifier\n                    ) {\n                        childProcessNamespaceBindingNames.add(\n                            specifierNode.local.name\n                        );\n                        continue;\n                    }\n\n                    const importedName =\n                        specifierNode.imported.type ===\n                        AST_NODE_TYPES.Identifier\n                            ? specifierNode.imported.name\n                            : specifierNode.imported.value;\n\n                    if (!isDisallowedChildProcessMethodName(importedName)) {\n                        continue;\n                    }\n\n                    childProcessExecBindingNames.add(specifierNode.local.name);\n                }\n            },\n            VariableDeclarator(node: TSESTree.VariableDeclarator) {\n                if (!isRequireCallFromChildProcess(node.init)) {\n                    return;\n                }\n\n                if (node.id.type === AST_NODE_TYPES.Identifier) {\n                    childProcessNamespaceBindingNames.add(node.id.name);\n                    return;\n                }\n\n                if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n                    return;\n                }\n\n                for (const propertyNode of node.id.properties) {\n                    if (\n                        propertyNode.type !== AST_NODE_TYPES.Property ||\n                        propertyNode.computed\n                    ) {\n                        continue;\n                    }\n\n                    const importedName = getPropertyName(propertyNode);\n\n                    if (!isDisallowedChildProcessMethodName(importedName)) {\n                        continue;\n                    }\n\n                    const localIdentifier = getPatternIdentifier(\n                        propertyNode.value\n                    );\n\n                    if (localIdentifier === undefined) {\n                        continue;\n                    }\n\n                    childProcessExecBindingNames.add(localIdentifier.name);\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow child_process.exec() and execSync() shell-backed execution APIs.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-child-process-exec\",\n        },\n        messages: {\n            default:\n                \"Do not use child_process.exec() or execSync(); prefer execFile(), spawn(), or other argv-separated process launches.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-child-process-exec\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\n/**\n * Get the static property name accessed by a member expression.\n *\n * Returns `undefined` for computed members whose property key cannot be\n * resolved to a static string.\n *\n * @param memberExpression - Member expression to inspect.\n *\n * @returns Static property name when available.\n */\nexport const getMemberPropertyName = (\n    memberExpression: Readonly<TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\n/**\n * Get the static key name for an object literal property.\n *\n * @param property - Object property node to inspect.\n *\n * @returns Static property key when available.\n */\nexport const getPropertyName = (\n    property: Readonly<TSESTree.Property>\n): string | undefined => {\n    if (property.computed) {\n        return undefined;\n    }\n\n    if (property.key.type === AST_NODE_TYPES.Identifier) {\n        return property.key.name;\n    }\n\n    return typeof property.key.value === \"string\"\n        ? property.key.value\n        : undefined;\n};\n\n/**\n * Find an initialized object literal property by its static key name.\n *\n * @param objectExpression - Object expression to search.\n * @param propertyName - Property name to match.\n *\n * @returns Matching property node when present.\n */\nexport const getPropertyByName = (\n    objectExpression: Readonly<TSESTree.ObjectExpression>,\n    propertyName: string\n): TSESTree.Property | undefined => {\n    for (const propertyNode of objectExpression.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        if (getPropertyName(propertyNode) === propertyName) {\n            return propertyNode;\n        }\n    }\n\n    return undefined;\n};\n\n/**\n * Resolve a string value from a static expression.\n *\n * Supports plain string literals and template literals without expressions.\n *\n * @param node - Expression node to inspect.\n *\n * @returns Static string value when available.\n */\nexport const getStaticStringValue = (\n    node: Readonly<TSESTree.Expression>\n): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\n/**\n * Resolve a string value from a JSX attribute value.\n *\n * Supports plain string literals and JSX expression containers that wrap a\n * static string literal or expression-free template literal.\n *\n * @param attributeValue - JSX attribute value node to inspect.\n *\n * @returns Static string value when available.\n */\nexport const getStaticJsxAttributeStringValue = (\n    attributeValue: Readonly<TSESTree.JSXAttribute[\"value\"]>\n): string | undefined => {\n    if (attributeValue === null) {\n        return undefined;\n    }\n\n    if (\n        attributeValue.type === AST_NODE_TYPES.Literal &&\n        typeof attributeValue.value === \"string\"\n    ) {\n        return attributeValue.value;\n    }\n\n    if (attributeValue.type !== AST_NODE_TYPES.JSXExpressionContainer) {\n        return undefined;\n    }\n\n    if (\n        attributeValue.expression.type === AST_NODE_TYPES.Literal &&\n        typeof attributeValue.expression.value === \"string\"\n    ) {\n        return attributeValue.expression.value;\n    }\n\n    if (\n        attributeValue.expression.type === AST_NODE_TYPES.TemplateLiteral &&\n        attributeValue.expression.expressions.length === 0\n    ) {\n        return (\n            arrayFirst(attributeValue.expression.quasis)?.value.cooked ??\n            undefined\n        );\n    }\n\n    return undefined;\n};\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isTruthyLiteral = (node: TSESTree.Property[\"value\"]): boolean =>\n    node.type === AST_NODE_TYPES.Literal && node.value === true;\n\nconst hasShellTrueOption = (optionsNode: TSESTree.Expression): boolean => {\n    if (optionsNode.type !== AST_NODE_TYPES.ObjectExpression) {\n        return false;\n    }\n\n    for (const propertyNode of optionsNode.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        const keyName =\n            propertyNode.key.type === AST_NODE_TYPES.Identifier\n                ? propertyNode.key.name\n                : propertyNode.key.type === AST_NODE_TYPES.Literal &&\n                    typeof propertyNode.key.value === \"string\"\n                  ? propertyNode.key.value\n                  : undefined;\n\n        if (keyName !== \"shell\") {\n            continue;\n        }\n\n        if (isTruthyLiteral(propertyNode.value)) {\n            return true;\n        }\n    }\n\n    return false;\n};\n\nconst isTargetChildProcessMethod = (node: TSESTree.CallExpression): boolean => {\n    if (node.callee.type === AST_NODE_TYPES.Identifier) {\n        return node.callee.name === \"spawn\" || node.callee.name === \"execFile\";\n    }\n\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const methodName = getMemberPropertyName(node.callee);\n\n    return methodName === \"spawn\" || methodName === \"execFile\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isTargetChildProcessMethod(node)) {\n                    return;\n                }\n\n                for (const argumentNode of node.arguments) {\n                    if (argumentNode.type === AST_NODE_TYPES.SpreadElement) {\n                        continue;\n                    }\n\n                    if (!hasShellTrueOption(argumentNode)) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: argumentNode,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow child_process spawn/execFile options that enable shell: true.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-child-process-shell-true\",\n        },\n        messages: {\n            default:\n                \"Do not enable shell: true for child_process execution paths.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-child-process-shell-true\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\nimport type {\n    UnknownRecord as TypeFestUnknownRecord,\n    UnknownMap,\n} from \"type-fest\";\nimport type ts from \"typescript\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\ntype RuleSourceCodeLike = Readonly<{\n    parserServices?: unknown;\n}>;\n\ntype TypeScriptParserServices = Readonly<{\n    esTreeNodeToTSNodeMap: ReadonlyMap<TSESTree.Node, ts.Node>;\n    program: ts.Program;\n    tsNodeToESTreeNodeMap: ReadonlyMap<ts.Node, TSESTree.Node>;\n}>;\n\ntype UnknownObjectRecord = Readonly<TypeFestUnknownRecord>;\n\nconst isUnknownRecord = (value: unknown): value is UnknownObjectRecord =>\n    typeof value === \"object\" && value !== null;\n\nconst isMapLike = (value: unknown): value is Readonly<UnknownMap> =>\n    isUnknownRecord(value) && typeof value[\"get\"] === \"function\";\n\nconst isProgramLike = (value: unknown): value is ts.Program =>\n    isUnknownRecord(value) && typeof value[\"getTypeChecker\"] === \"function\";\n\nconst isTypeScriptParserServices = (\n    parserServices: unknown\n): parserServices is TypeScriptParserServices => {\n    if (!isUnknownRecord(parserServices)) {\n        return false;\n    }\n\n    const candidate = parserServices;\n\n    return (\n        isProgramLike(candidate[\"program\"]) &&\n        isMapLike(candidate[\"esTreeNodeToTSNodeMap\"]) &&\n        isMapLike(candidate[\"tsNodeToESTreeNodeMap\"])\n    );\n};\n\nconst isRuleSourceCodeLike = (value: unknown): value is RuleSourceCodeLike =>\n    isUnknownRecord(value);\n\nconst getParserServices = (\n    context: unknown\n): TypeScriptParserServices | undefined => {\n    if (!isUnknownRecord(context)) {\n        return undefined;\n    }\n\n    const sourceCode = context[\"sourceCode\"];\n\n    if (!isRuleSourceCodeLike(sourceCode)) {\n        return undefined;\n    }\n\n    const parserServices = sourceCode.parserServices;\n\n    return isTypeScriptParserServices(parserServices)\n        ? parserServices\n        : undefined;\n};\n\n/** Returns `true` when parser services expose complete TypeScript program data. */\nexport const hasFullTypeInformation = (context: unknown): boolean =>\n    isDefined(getParserServices(context));\n\n/** Returns the TypeScript type checker when parser services are available. */\nexport const getFullTypeChecker = (\n    context: unknown\n): ts.TypeChecker | undefined =>\n    getParserServices(context)?.program.getTypeChecker();\n\n/** Resolve the textual type for an ESTree node via parser services. */\nexport const getNodeTypeAsString = (\n    fullTypeChecker: Readonly<ts.TypeChecker> | undefined,\n    node: null | Readonly<TSESTree.Node> | undefined,\n    context: unknown\n): string => {\n    if (!isDefined(fullTypeChecker) || node === null || node === undefined) {\n        return \"any\";\n    }\n\n    const parserServices = getParserServices(context);\n\n    if (!isDefined(parserServices)) {\n        return \"any\";\n    }\n\n    const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);\n\n    if (!isDefined(tsNode)) {\n        return \"any\";\n    }\n\n    const tsType = fullTypeChecker.getTypeAtLocation(tsNode);\n\n    return fullTypeChecker.typeToString(tsType);\n};\n\nconst isWindowIdentifierName = (name: string): boolean =>\n    name.toLowerCase().endsWith(\"window\");\n\nconst getMemberPropertyName = (\n    node: Readonly<TSESTree.MemberExpression>\n): string | undefined => {\n    if (node.property.type === AST_NODE_TYPES.Identifier) {\n        return node.property.name;\n    }\n\n    if (\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 isDocumentMemberReference = (\n    node: Readonly<TSESTree.MemberExpression>\n): boolean => {\n    const propertyName = getMemberPropertyName(node);\n\n    if (propertyName !== \"document\") {\n        return false;\n    }\n\n    if (node.object.type === AST_NODE_TYPES.Identifier) {\n        return isWindowIdentifierName(node.object.name);\n    }\n\n    if (node.object.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const nestedPropertyName = getMemberPropertyName(node.object);\n\n    if (nestedPropertyName !== \"window\") {\n        return false;\n    }\n\n    if (node.object.object.type === AST_NODE_TYPES.ThisExpression) {\n        return true;\n    }\n\n    return (\n        node.object.object.type === AST_NODE_TYPES.Identifier &&\n        node.object.object.name === \"globalThis\"\n    );\n};\n\n/**\n * Best-effort check for the browser `Document` object.\n *\n * Falls back to syntactic checks when parser services are unavailable.\n */\nexport const isDocumentObject = (\n    node: Readonly<TSESTree.Node>,\n    context: unknown,\n    fullTypeChecker: Readonly<ts.TypeChecker> | undefined\n): boolean => {\n    if (fullTypeChecker !== undefined) {\n        return (\n            getNodeTypeAsString(fullTypeChecker, node, context) === \"Document\"\n        );\n    }\n\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return node.name === \"document\";\n    }\n\n    if (node.type === AST_NODE_TYPES.MemberExpression) {\n        return isDocumentMemberReference(node);\n    }\n\n    return false;\n};\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    isDocumentObject,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"doNotUseCookies\">({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            \"MemberExpression[property.name='cookie']\"(\n                node: TSESTree.MemberExpression\n            ) {\n                if (!isDocumentObject(node.object, context, fullTypeChecker)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"doNotUseCookies\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow document.cookie usage to avoid insecure legacy client-side storage patterns.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-cookies\",\n        },\n        messages: {\n            doNotUseCookies: \"Do not use HTTP cookies in modern applications.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-cookies\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    isDocumentObject,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            \"AssignmentExpression[operator='='][left.property.name='domain']\"(\n                node: TSESTree.AssignmentExpression\n            ) {\n                if (node.left.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    !isDocumentObject(\n                        node.left.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow writes to document.domain that can weaken same-origin policy guarantees.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-document-domain\",\n        },\n        messages: {\n            default: \"Do not write to document.domain.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-document-domain\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    isDocumentObject,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isInsertHtmlCommand = (expression: TSESTree.Expression): boolean =>\n    getStaticStringValue(expression)?.toLowerCase() === \"inserthtml\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (getMemberPropertyName(node.callee) !== \"execCommand\") {\n                    return;\n                }\n\n                if (\n                    !isDocumentObject(\n                        node.callee.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                const [\n                    firstArgument,\n                    ,\n                    thirdArgument,\n                ] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isInsertHtmlCommand(firstArgument)\n                ) {\n                    return;\n                }\n\n                if (\n                    thirdArgument === undefined ||\n                    thirdArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    getStaticStringValue(thirdArgument) === \"\"\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: thirdArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow document.execCommand('insertHTML', ...) HTML insertion sinks.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-document-execcommand-insert-html\",\n        },\n        messages: {\n            default:\n                \"Do not inject HTML with document.execCommand('insertHTML', ...); build DOM nodes safely or use text-only insertion APIs instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-document-execcommand-insert-html\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayIncludes } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isDocumentConstructorReference = (\n    expression: TSESTree.Expression\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name === \"Document\";\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(expression) !== \"Document\") {\n        return false;\n    }\n\n    return (\n        expression.object.type === AST_NODE_TYPES.Identifier &&\n        arrayIncludes(\n            [\n                \"globalThis\",\n                \"self\",\n                \"window\",\n            ],\n            expression.object.name\n        )\n    );\n};\n\nconst isDocumentParseHtmlUnsafeCall = (\n    node: TSESTree.CallExpression\n): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"parseHTMLUnsafe\") {\n        return false;\n    }\n\n    return isDocumentConstructorReference(node.callee.object);\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isDocumentParseHtmlUnsafeCall(node)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument !== undefined &&\n                    firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n                    getStaticStringValue(firstArgument) === \"\"\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument ?? node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Document.parseHTMLUnsafe() because it preserves unsafe HTML unless a reviewed sanitization path is enforced separately.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-document-parse-html-unsafe\",\n        },\n        messages: {\n            default:\n                \"Do not call Document.parseHTMLUnsafe(); prefer Document.parseHTML() or a reviewed sanitization pipeline.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-document-parse-html-unsafe\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    isDocumentObject,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            \"CallExpression[arguments.length=1][callee.property.name=/^(?:write|writeln)$/]\"(\n                node: TSESTree.CallExpression\n            ) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    !isDocumentObject(\n                        node.callee.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow document.write/document.writeln because they bypass safe DOM construction patterns.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-document-write\",\n        },\n        messages: {\n            default:\n                \"Do not write to the DOM directly using document.write/document.writeln.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-document-write\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    isDomParserParseFromStringCall,\n    isSanitizedExpression,\n} from \"../_internal/domparser.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isDomParserParseFromStringCall(node)) {\n                    return;\n                }\n\n                if (node.arguments.length < 2) {\n                    return;\n                }\n\n                const [firstArgument, secondArgument] = node.arguments;\n\n                if (!isDefined(firstArgument) || !isDefined(secondArgument)) {\n                    return;\n                }\n\n                if (\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const mimeTypeValue = getStaticStringValue(secondArgument);\n\n                if (mimeTypeValue !== \"text/html\") {\n                    return;\n                }\n\n                if (isSanitizedExpression(firstArgument)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow DOMParser.parseFromString(..., 'text/html') calls on unsanitized input.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-domparser-html-without-sanitization\",\n        },\n        messages: {\n            default:\n                \"Sanitize HTML input before parsing with DOMParser.parseFromString(..., 'text/html').\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-domparser-html-without-sanitization\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { getMemberPropertyName } from \"./estree-utils.js\";\n\nconst SANITIZER_NAME_PATTERN = /createhtml|sanitize|trusted/v;\n\n/**\n * Check whether a call is `new DOMParser().parseFromString(...)`.\n *\n * @param node - Call expression to inspect.\n *\n * @returns Whether the call matches the DOMParser parsing sink.\n */\nexport const isDomParserParseFromStringCall = (\n    node: Readonly<TSESTree.CallExpression>\n): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"parseFromString\") {\n        return false;\n    }\n\n    if (node.callee.object.type !== AST_NODE_TYPES.NewExpression) {\n        return false;\n    }\n\n    return (\n        node.callee.object.callee.type === AST_NODE_TYPES.Identifier &&\n        node.callee.object.callee.name === \"DOMParser\"\n    );\n};\n\n/**\n * Check whether an expression appears to run through a sanitizer or trusted\n * policy helper.\n *\n * @param node - Expression to inspect.\n *\n * @returns Whether the expression is an explicit sanitization call.\n */\nexport const isSanitizedExpression = (\n    node: Readonly<TSESTree.Expression>\n): boolean => {\n    if (node.type !== AST_NODE_TYPES.CallExpression) {\n        return false;\n    }\n\n    if (node.callee.type === AST_NODE_TYPES.Identifier) {\n        return SANITIZER_NAME_PATTERN.test(node.callee.name.toLowerCase());\n    }\n\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(node.callee);\n\n    return (\n        typeof propertyName === \"string\" &&\n        SANITIZER_NAME_PATTERN.test(propertyName.toLowerCase())\n    );\n};\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    isDomParserParseFromStringCall,\n    isSanitizedExpression,\n} from \"../_internal/domparser.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isDomParserParseFromStringCall(node)) {\n                    return;\n                }\n\n                if (node.arguments.length < 2) {\n                    return;\n                }\n\n                const [firstArgument, secondArgument] = node.arguments;\n\n                if (!isDefined(firstArgument) || !isDefined(secondArgument)) {\n                    return;\n                }\n\n                if (\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const mimeTypeValue = getStaticStringValue(secondArgument);\n\n                if (mimeTypeValue !== \"image/svg+xml\") {\n                    return;\n                }\n\n                if (isSanitizedExpression(firstArgument)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow DOMParser.parseFromString(..., 'image/svg+xml') calls on unsanitized input.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-domparser-svg-without-sanitization\",\n        },\n        messages: {\n            default:\n                \"Sanitize SVG input before parsing with DOMParser.parseFromString(..., 'image/svg+xml').\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-domparser-svg-without-sanitization\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getMemberPropertyName } from \"./estree-utils.js\";\n\ntype WorkerConstructorName = \"SharedWorker\" | \"Worker\";\n\nconst WORKER_CONSTRUCTOR_NAMES = new Set([\"SharedWorker\", \"Worker\"]);\nconst GLOBAL_OBJECT_NAMES = new Set([\n    \"globalThis\",\n    \"self\",\n    \"window\",\n]);\n\nconst isNavigatorObject = (value: Readonly<TSESTree.Expression>): boolean => {\n    if (value.type === AST_NODE_TYPES.Identifier) {\n        return value.name === \"navigator\";\n    }\n\n    if (value.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return (\n        getMemberPropertyName(value) === \"navigator\" &&\n        value.object.type === AST_NODE_TYPES.Identifier &&\n        setHas(GLOBAL_OBJECT_NAMES, value.object.name)\n    );\n};\n\n/**\n * Check whether a value is a static `blob:` URL.\n *\n * @param value - URL string to inspect.\n *\n * @returns Whether the string starts with `blob:`.\n */\nexport const isBlobUrl = (value: string): boolean => /^\\s*blob:/iv.test(value);\n\n/**\n * Check whether a value is a static `data:` URL.\n *\n * @param value - URL string to inspect.\n *\n * @returns Whether the string starts with `data:`.\n */\nexport const isDataUrl = (value: string): boolean => /^\\s*data:/iv.test(value);\n\nconst isWorkerConstructorName = (\n    value: string | undefined\n): value is WorkerConstructorName =>\n    isDefined(value) && setHas(WORKER_CONSTRUCTOR_NAMES, value);\n\nconst isGlobalObjectName = (value: string): boolean =>\n    setHas(GLOBAL_OBJECT_NAMES, value);\n\n/**\n * Check whether an expression is one of the common global objects used for\n * worker-related APIs.\n *\n * @param value - Expression to inspect.\n *\n * @returns Whether the expression is `window`, `self`, or `globalThis`.\n */\nexport const isWorkerGlobalObject = (\n    value: Readonly<TSESTree.Expression>\n): boolean =>\n    value.type === AST_NODE_TYPES.Identifier && isGlobalObjectName(value.name);\n\n/**\n * Check whether a constructor callee targets `Worker` or `SharedWorker`.\n *\n * @param callee - Constructor callee to inspect.\n *\n * @returns Whether the callee is a worker constructor.\n */\nexport const isWorkerConstructor = (\n    callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return isWorkerConstructorName(callee.name);\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return (\n        isWorkerConstructorName(getMemberPropertyName(callee)) &&\n        isWorkerGlobalObject(callee.object)\n    );\n};\n\n/**\n * Check whether a call targets `importScripts(...)`.\n *\n * @param callee - Call callee to inspect.\n *\n * @returns Whether the callee is an importScripts sink.\n */\nexport const isImportScriptsCall = (\n    callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee.name === \"importScripts\";\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return (\n        getMemberPropertyName(callee) === \"importScripts\" &&\n        isWorkerGlobalObject(callee.object)\n    );\n};\n\n/**\n * Check whether an expression resolves the service worker container from\n * `navigator.serviceWorker`.\n *\n * @param value - Expression to inspect.\n *\n * @returns Whether the expression is a service worker container access.\n */\nexport const isServiceWorkerContainerAccess = (\n    value: Readonly<TSESTree.Expression>\n): value is TSESTree.MemberExpression => {\n    if (value.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return (\n        getMemberPropertyName(value) === \"serviceWorker\" &&\n        isNavigatorObject(value.object)\n    );\n};\n\n/**\n * Check whether a call targets `navigator.serviceWorker.register(...)`.\n *\n * @param callee - Call callee to inspect.\n *\n * @returns Whether the callee is a service worker registration sink.\n */\nexport const isServiceWorkerRegisterCall = (\n    callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean =>\n    callee.type === AST_NODE_TYPES.MemberExpression &&\n    getMemberPropertyName(callee) === \"register\" &&\n    isServiceWorkerContainerAccess(callee.object);\n\nconst isGlobalUrlObject = (\n    node: Readonly<TSESTree.MemberExpression>\n): boolean => {\n    if (getMemberPropertyName(node) !== \"URL\") {\n        return false;\n    }\n\n    return (\n        node.object.type === AST_NODE_TYPES.Identifier &&\n        isGlobalObjectName(node.object.name)\n    );\n};\n\n/**\n * Check whether an expression is a direct `URL.createObjectURL(...)` call.\n *\n * @param node - Expression to inspect.\n *\n * @returns Whether the expression creates an object URL from the global URL\n *   API.\n */\nexport const isUrlCreateObjectUrlCall = (\n    node: Readonly<TSESTree.Expression>\n): node is TSESTree.CallExpression => {\n    if (\n        node.type !== AST_NODE_TYPES.CallExpression ||\n        node.callee.type !== AST_NODE_TYPES.MemberExpression\n    ) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"createObjectURL\") {\n        return false;\n    }\n\n    return (\n        (node.callee.object.type === AST_NODE_TYPES.Identifier &&\n            node.callee.object.name === \"URL\") ||\n        (node.callee.object.type === AST_NODE_TYPES.MemberExpression &&\n            isGlobalUrlObject(node.callee.object))\n    );\n};\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\nimport {\n    isBlobUrl,\n    isDataUrl,\n    isUrlCreateObjectUrlCall,\n} from \"../_internal/worker-code-loading.js\";\n\ntype MessageIds = \"default\";\n\nconst isJavaScriptUrl = (value: string): boolean =>\n    /^\\s*javascript\\s*:/iv.test(value);\n\nconst isUnsafeDynamicImportSource = (\n    expression: Readonly<TSESTree.Expression>\n): boolean => {\n    const configuredValue = getStaticStringValue(expression);\n\n    return (\n        (typeof configuredValue === \"string\" &&\n            (isBlobUrl(configuredValue) ||\n                isDataUrl(configuredValue) ||\n                isJavaScriptUrl(configuredValue))) ||\n        isUrlCreateObjectUrlCall(expression)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        ImportExpression(node: TSESTree.ImportExpression) {\n            if (!isUnsafeDynamicImportSource(node.source)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node: node.source,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow dynamic import() calls that load code from data:, blob:, javascript:, or direct URL.createObjectURL(...) URLs.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-dynamic-import-unsafe-url\",\n        },\n        messages: {\n            default:\n                \"Do not dynamically import code from data:, blob:, javascript:, or URL.createObjectURL(...) URLs.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-dynamic-import-unsafe-url\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\ntype ElectronPreferenceMessageIds = \"default\";\n\ntype ElectronWebPreferenceCheck = Readonly<{\n    disallowedValue: boolean;\n    preferenceName: string;\n}>;\n\ntype RuleContext = Readonly<\n    TSESLint.RuleContext<ElectronPreferenceMessageIds, unknown[]>\n>;\n\nconst getPropertyName = (\n    property: Readonly<TSESTree.Property>\n): string | undefined => {\n    if (property.computed) {\n        return undefined;\n    }\n\n    if (property.key.type === AST_NODE_TYPES.Identifier) {\n        return property.key.name;\n    }\n\n    return typeof property.key.value === \"string\"\n        ? property.key.value\n        : undefined;\n};\n\nconst getPropertyByName = (\n    objectExpression: Readonly<TSESTree.ObjectExpression>,\n    propertyName: string\n): TSESTree.Property | undefined => {\n    for (const propertyNode of objectExpression.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        if (getPropertyName(propertyNode) === propertyName) {\n            return propertyNode;\n        }\n    }\n\n    return undefined;\n};\n\nconst getBooleanLiteralValue = (\n    valueNode: Readonly<TSESTree.Node>\n): boolean | undefined => {\n    if (\n        valueNode.type !== AST_NODE_TYPES.Literal ||\n        typeof valueNode.value !== \"boolean\"\n    ) {\n        return undefined;\n    }\n\n    return valueNode.value;\n};\n\n/**\n * Creates a listener that reports unsafe boolean Electron `webPreferences`\n * values.\n */\nexport const createElectronWebPreferencesBooleanListener = (\n    context: RuleContext,\n    check: ElectronWebPreferenceCheck\n): TSESLint.RuleListener => ({\n    \"NewExpression[callee.name=/^(?:BrowserWindow|BrowserView)$/]\"(\n        node: Readonly<TSESTree.NewExpression>\n    ) {\n        const [firstArgument] = node.arguments;\n\n        if (firstArgument?.type !== AST_NODE_TYPES.ObjectExpression) {\n            return;\n        }\n\n        const webPreferencesProperty = getPropertyByName(\n            firstArgument,\n            \"webPreferences\"\n        );\n\n        if (\n            webPreferencesProperty?.value.type !==\n            AST_NODE_TYPES.ObjectExpression\n        ) {\n            return;\n        }\n\n        const preferenceProperty = getPropertyByName(\n            webPreferencesProperty.value,\n            check.preferenceName\n        );\n\n        if (preferenceProperty === undefined) {\n            return;\n        }\n\n        const preferenceValueNode = preferenceProperty.value;\n        const literalValue = getBooleanLiteralValue(preferenceValueNode);\n\n        if (literalValue !== check.disallowedValue) {\n            return;\n        }\n\n        context.report({\n            fix: (fixer) =>\n                fixer.replaceText(\n                    preferenceValueNode,\n                    String(!check.disallowedValue)\n                ),\n            messageId: \"default\",\n            node: preferenceProperty,\n        });\n    },\n});\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: true,\n            preferenceName: \"allowRunningInsecureContent\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling allowRunningInsecureContent in Electron webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-allow-running-insecure-content\",\n        },\n        fixable: \"code\",\n        messages: {\n            default:\n                \"Do not set webPreferences.allowRunningInsecureContent to true.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-allow-running-insecure-content\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getPropertyName = (property: TSESTree.Property): string | undefined => {\n    if (property.computed) {\n        return undefined;\n    }\n\n    if (property.key.type === AST_NODE_TYPES.Identifier) {\n        return property.key.name;\n    }\n\n    return typeof property.key.value === \"string\"\n        ? property.key.value\n        : undefined;\n};\n\nconst getPropertyByName = (\n    objectExpression: TSESTree.ObjectExpression,\n    propertyName: string\n): TSESTree.Property | undefined => {\n    for (const propertyNode of objectExpression.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        if (getPropertyName(propertyNode) === propertyName) {\n            return propertyNode;\n        }\n    }\n\n    return undefined;\n};\n\nconst getStaticStringValue = (node: TSESTree.Node): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\nconst isDangerousBlinkFeaturesValue = (node: TSESTree.Node): boolean => {\n    const staticStringValue = getStaticStringValue(node);\n\n    if (typeof staticStringValue !== \"string\") {\n        return false;\n    }\n\n    return staticStringValue.trim().length > 0;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            \"NewExpression[callee.name=/^(?:BrowserWindow|BrowserView)$/]\"(\n                node: TSESTree.NewExpression\n            ) {\n                const [firstArgument] = node.arguments;\n\n                if (firstArgument?.type !== AST_NODE_TYPES.ObjectExpression) {\n                    return;\n                }\n\n                const webPreferencesProperty = getPropertyByName(\n                    firstArgument,\n                    \"webPreferences\"\n                );\n\n                if (\n                    webPreferencesProperty?.value.type !==\n                    AST_NODE_TYPES.ObjectExpression\n                ) {\n                    return;\n                }\n\n                const enableBlinkFeaturesProperty = getPropertyByName(\n                    webPreferencesProperty.value,\n                    \"enableBlinkFeatures\"\n                );\n\n                if (enableBlinkFeaturesProperty === undefined) {\n                    return;\n                }\n\n                if (\n                    !isDangerousBlinkFeaturesValue(\n                        enableBlinkFeaturesProperty.value\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: enableBlinkFeaturesProperty,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling risky Blink runtime features through Electron webPreferences.enableBlinkFeatures.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-dangerous-blink-features\",\n        },\n        messages: {\n            default:\n                \"Do not set webPreferences.enableBlinkFeatures to a non-empty value.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-dangerous-blink-features\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: false,\n            preferenceName: \"contextIsolation\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow disabling contextIsolation in Electron webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-disable-context-isolation\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.contextIsolation to false.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-disable-context-isolation\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: false,\n            preferenceName: \"sandbox\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow disabling Electron sandbox in webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-disable-sandbox\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.sandbox to false.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-disable-sandbox\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: false,\n            preferenceName: \"webSecurity\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow disabling webSecurity in Electron webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-disable-web-security\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.webSecurity to false.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-disable-web-security\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: true,\n            preferenceName: \"enableRemoteModule\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling enableRemoteModule in Electron webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-enable-remote-module\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.enableRemoteModule to true.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-enable-remote-module\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: true,\n            preferenceName: \"webviewTag\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling Electron webPreferences.webviewTag.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-enable-webview-tag\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.webviewTag to true.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-enable-webview-tag\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\nimport { createElectronWebPreferencesBooleanListener } from \"../_internal/electron-web-preferences.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) =>\n        createElectronWebPreferencesBooleanListener(context, {\n            disallowedValue: true,\n            preferenceName: \"experimentalFeatures\",\n        }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling Electron webPreferences.experimentalFeatures.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-experimental-features\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not set webPreferences.experimentalFeatures to true.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-experimental-features\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getMemberPropertyName } from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isExpressionNode = (node: TSESTree.Node): node is TSESTree.Expression =>\n    node.type !== AST_NODE_TYPES.ArrayPattern &&\n    node.type !== AST_NODE_TYPES.AssignmentPattern &&\n    node.type !== AST_NODE_TYPES.ObjectPattern;\n\nconst isContextBridgeObjectExpression = (\n    expression: TSESTree.Expression\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name === \"contextBridge\";\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(expression) === \"contextBridge\";\n};\n\nconst isContextBridgeExposeCall = (node: TSESTree.CallExpression): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const methodName = getMemberPropertyName(node.callee);\n\n    if (\n        methodName !== \"exposeInIsolatedWorld\" &&\n        methodName !== \"exposeInMainWorld\"\n    ) {\n        return false;\n    }\n\n    return isContextBridgeObjectExpression(node.callee.object);\n};\n\nconst isIpcRendererReference = (expression: TSESTree.Expression): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name === \"ipcRenderer\";\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (expression.object.type === AST_NODE_TYPES.Identifier) {\n        return expression.object.name === \"ipcRenderer\";\n    }\n\n    if (expression.object.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(expression.object) === \"ipcRenderer\";\n};\n\nconst isUnsafeExposedValue = (expression: TSESTree.Expression): boolean => {\n    if (isIpcRendererReference(expression)) {\n        return true;\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.CallExpression &&\n        expression.callee.type === AST_NODE_TYPES.MemberExpression &&\n        getMemberPropertyName(expression.callee) === \"bind\" &&\n        expression.callee.object.type === AST_NODE_TYPES.MemberExpression\n    ) {\n        return isIpcRendererReference(expression.callee.object);\n    }\n\n    if (expression.type === AST_NODE_TYPES.ArrayExpression) {\n        return expression.elements.some(\n            (element): element is TSESTree.Expression =>\n                element !== null &&\n                element.type !== AST_NODE_TYPES.SpreadElement &&\n                isUnsafeExposedValue(element)\n        );\n    }\n\n    if (expression.type !== AST_NODE_TYPES.ObjectExpression) {\n        return false;\n    }\n\n    return expression.properties.some((propertyNode) => {\n        if (propertyNode.type === AST_NODE_TYPES.SpreadElement) {\n            return isUnsafeExposedValue(propertyNode.argument);\n        }\n\n        return (\n            propertyNode.kind === \"init\" &&\n            isExpressionNode(propertyNode.value) &&\n            isUnsafeExposedValue(propertyNode.value)\n        );\n    });\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isContextBridgeExposeCall(node)) {\n                    return;\n                }\n\n                const [, exposedValue] = node.arguments;\n\n                if (\n                    exposedValue === undefined ||\n                    exposedValue.type === AST_NODE_TYPES.SpreadElement ||\n                    !isUnsafeExposedValue(exposedValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: exposedValue,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow exposing raw Electron ipcRenderer objects or methods through contextBridge APIs.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-expose-raw-ipc-renderer\",\n        },\n        messages: {\n            default:\n                \"Expose narrow preload wrapper functions instead of raw ipcRenderer objects or methods.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-expose-raw-ipc-renderer\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getStaticStringValue = (\n    node: TSESTree.Expression\n): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\nconst isOnMemberExpression = (\n    callee: TSESTree.CallExpression[\"callee\"]\n): boolean => {\n    if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.computed) {\n        return false;\n    }\n\n    return (\n        callee.property.type === AST_NODE_TYPES.Identifier &&\n        callee.property.name === \"on\"\n    );\n};\n\nconst getCallbackParameterName = (\n    node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression\n): string | undefined => {\n    const callbackParameter = arrayAt(node.params, -1);\n\n    return callbackParameter?.type === AST_NODE_TYPES.Identifier\n        ? callbackParameter.name\n        : undefined;\n};\n\nconst toUnsafeCallbackTruePattern = (callbackName: string): RegExp =>\n    // eslint-disable-next-line security/detect-non-literal-regexp -- Callback identifier is static source text and safely interpolated for targeted pattern matching.\n    new RegExp(String.raw`\\b${callbackName}\\s*\\(\\s*true\\b`, \"u\");\n\nconst hasUnsafeCallbackTrueCall = (\n    callbackName: string,\n    handlerNode: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>\n): boolean => {\n    const handlerSourceText = context.sourceCode.getText(handlerNode);\n\n    return toUnsafeCallbackTruePattern(callbackName).test(handlerSourceText);\n};\n\nconst isCertificateErrorEventRegistration = (\n    node: TSESTree.CallExpression\n): boolean => {\n    if (!isOnMemberExpression(node.callee)) {\n        return false;\n    }\n\n    const [firstArgument] = node.arguments;\n\n    if (\n        firstArgument === undefined ||\n        firstArgument.type === AST_NODE_TYPES.SpreadElement\n    ) {\n        return false;\n    }\n\n    return getStaticStringValue(firstArgument) === \"certificate-error\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isCertificateErrorEventRegistration(node)) {\n                    return;\n                }\n\n                const [, secondArgument] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                if (\n                    secondArgument.type !==\n                        AST_NODE_TYPES.ArrowFunctionExpression &&\n                    secondArgument.type !== AST_NODE_TYPES.FunctionExpression\n                ) {\n                    return;\n                }\n\n                const callbackParameterName =\n                    getCallbackParameterName(secondArgument);\n\n                if (typeof callbackParameterName !== \"string\") {\n                    return;\n                }\n\n                if (\n                    !hasUnsafeCallbackTrueCall(\n                        callbackParameterName,\n                        secondArgument,\n                        context\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Electron certificate-error handlers that call the callback with true.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-insecure-certificate-error-handler\",\n        },\n        messages: {\n            default:\n                \"Do not bypass certificate validation by calling the certificate-error callback with true.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-insecure-certificate-error-handler\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isFunctionExpression = (\n    expression: TSESTree.CallExpressionArgument\n): expression is\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst hasInsecureCertificateOverride = (\n    callbackNode:\n        TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>,\n    callbackParameterName: string\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n    const escapedName = callbackParameterName.replaceAll(\n        \"$\",\n        // eslint-disable-next-line unicorn/prefer-string-raw -- Replacement callback avoids `$` replacement-token semantics.\n        () => \"\\\\$\"\n    );\n    // eslint-disable-next-line security/detect-non-literal-regexp -- Callback identifier is escaped before interpolation for strict handler-call detection.\n    const callbackPattern = new RegExp(\n        String.raw`\\b${escapedName}\\s*\\(\\s*0\\b`,\n        \"u\"\n    );\n\n    return (\n        callbackPattern.test(callbackSourceText) ||\n        // eslint-disable-next-line regexp/require-unicode-sets-regexp -- `/v` is not yet parseable in the current TypeScript-ESLint parser stack.\n        /\\breturn\\s+0\\b/u.test(callbackSourceText)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    getMemberPropertyName(node.callee) !==\n                    \"setCertificateVerifyProc\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isFunctionExpression(firstArgument)\n                ) {\n                    return;\n                }\n\n                const callbackParameter = arrayAt(firstArgument.params, -1);\n\n                if (callbackParameter?.type !== AST_NODE_TYPES.Identifier) {\n                    return;\n                }\n\n                if (\n                    !hasInsecureCertificateOverride(\n                        firstArgument,\n                        context,\n                        callbackParameter.name\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Electron certificate verify proc callbacks that accept invalid certificates.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-insecure-certificate-verify-proc\",\n        },\n        messages: {\n            default:\n                \"Do not override certificate verification by returning/callbacking with 0 in setCertificateVerifyProc handlers.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-insecure-certificate-verify-proc\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayAt } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isFunctionExpression = (\n    expression: TSESTree.CallExpressionArgument\n): expression is\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst hasUnsafePermissionAllowPattern = (\n    callbackNode:\n        TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>,\n    callbackParameterName: string\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n    const escapedName = callbackParameterName.replaceAll(\n        \"$\",\n        // eslint-disable-next-line unicorn/prefer-string-raw -- Replacement callback avoids `$` replacement-token semantics.\n        () => \"\\\\$\"\n    );\n    // eslint-disable-next-line security/detect-non-literal-regexp -- Callback identifier is escaped before interpolation for strict permission-allow detection.\n    const callbackPattern = new RegExp(\n        String.raw`\\b${escapedName}\\s*\\(\\s*true\\b`,\n        \"u\"\n    );\n\n    return (\n        callbackPattern.test(callbackSourceText) ||\n        // eslint-disable-next-line regexp/require-unicode-sets-regexp -- `/v` is not yet parseable in the current TypeScript-ESLint parser stack.\n        /\\breturn\\s+true\\b/u.test(callbackSourceText)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    getMemberPropertyName(node.callee) !==\n                    \"setPermissionRequestHandler\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isFunctionExpression(firstArgument)\n                ) {\n                    return;\n                }\n\n                const callbackParameter = arrayAt(firstArgument.params, -1);\n\n                if (callbackParameter?.type !== AST_NODE_TYPES.Identifier) {\n                    return;\n                }\n\n                if (\n                    !hasUnsafePermissionAllowPattern(\n                        firstArgument,\n                        context,\n                        callbackParameter.name\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Electron permission request handlers that blanket-allow permission requests.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-insecure-permission-request-handler\",\n        },\n        messages: {\n            default:\n                \"Do not blanket-allow permissions in setPermissionRequestHandler callbacks.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-insecure-permission-request-handler\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create: (context) => ({\n        \"NewExpression[callee.name=/^(?:BrowserWindow|BrowserView)$/] > ObjectExpression.arguments > Property.properties[key.name='webPreferences'] > ObjectExpression.value > Property.properties[key.name=/^(?:nodeIntegration|nodeIntegrationInWorker|nodeIntegrationInSubFrames)$/][value.value=true]\"(\n            node\n        ) {\n            context.report({\n                fix(fixer) {\n                    const propertyText = context.sourceCode.getText(node);\n                    const separatorIndex = propertyText.indexOf(\":\");\n\n                    if (separatorIndex === -1) {\n                        return null;\n                    }\n\n                    const valuePortion = propertyText.slice(separatorIndex + 1);\n                    const trimmedValuePortion = valuePortion.trimStart();\n\n                    if (!trimmedValuePortion.startsWith(\"true\")) {\n                        return null;\n                    }\n\n                    const leadingWhitespaceLength =\n                        valuePortion.length - trimmedValuePortion.length;\n                    const nextValuePortion = `${valuePortion.slice(0, leadingWhitespaceLength)}false${trimmedValuePortion.slice(\"true\".length)}`;\n                    const nextPropertyText = `${propertyText.slice(0, separatorIndex + 1)}${nextValuePortion}`;\n\n                    if (nextPropertyText === propertyText) {\n                        return null;\n                    }\n\n                    return fixer.replaceText(node, nextPropertyText);\n                },\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling Electron Node.js integration in BrowserWindow/BrowserView webPreferences.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-node-integration\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not enable Node.js integration for remote content.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-node-integration\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getMemberPropertyName } from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isFunctionExpression = (\n    expression: TSESTree.CallExpressionArgument\n): expression is\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst isBooleanTrueLiteral = (\n    expression: null | TSESTree.Expression | undefined\n): boolean =>\n    expression?.type === AST_NODE_TYPES.Literal && expression.value === true;\n\nconst isAllowAllPermissionCheckHandler = (\n    callbackNode: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression\n): boolean => {\n    if (callbackNode.body.type !== AST_NODE_TYPES.BlockStatement) {\n        return isBooleanTrueLiteral(callbackNode.body);\n    }\n\n    if (callbackNode.body.body.length !== 1) {\n        return false;\n    }\n\n    const onlyStatement = arrayFirst(callbackNode.body.body);\n\n    return (\n        onlyStatement?.type === AST_NODE_TYPES.ReturnStatement &&\n        isBooleanTrueLiteral(onlyStatement.argument)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    getMemberPropertyName(node.callee) !==\n                    \"setPermissionCheckHandler\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isFunctionExpression(firstArgument) ||\n                    !isAllowAllPermissionCheckHandler(firstArgument)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Electron permission check handlers that unconditionally allow every permission request.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-permission-check-handler-allow-all\",\n        },\n        messages: {\n            default:\n                \"Do not unconditionally return true from setPermissionCheckHandler callbacks.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-permission-check-handler-allow-all\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isIpcMainObjectExpression = (\n    expression: TSESTree.Expression\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name === \"ipcMain\";\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(expression) === \"ipcMain\";\n};\n\nconst isIpcMainHandlerRegistration = (\n    node: TSESTree.CallExpression\n): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const methodName = getMemberPropertyName(node.callee);\n\n    if (methodName !== \"on\" && methodName !== \"handle\") {\n        return false;\n    }\n\n    return isIpcMainObjectExpression(node.callee.object);\n};\n\nconst isFunctionExpression = (\n    expression: TSESTree.CallExpressionArgument\n): expression is\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst hasSenderValidationPattern = (\n    callbackNode:\n        TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>,\n    eventParameterName: string\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n    const escapedEventName = eventParameterName.replaceAll(\n        \"$\",\n        // eslint-disable-next-line etc-misc/no-unnecessary-template-literal -- String.raw preserves the intended regex-escape backslash.\n        () => String.raw`\\$`\n    );\n    // eslint-disable-next-line security/detect-non-literal-regexp -- Event parameter identifier is escaped before interpolation for sender-access detection.\n    const eventSenderPattern = new RegExp(\n        String.raw`\\b${escapedEventName}\\s*\\.\\s*(?:sender|senderFrame)\\b`,\n        \"u\"\n    );\n\n    return (\n        eventSenderPattern.test(callbackSourceText) ||\n        // eslint-disable-next-line regexp/require-unicode-sets-regexp -- `/v` is not yet parseable in the current TypeScript-ESLint parser stack.\n        /\\b(?:allowlist|getURL|isTrusted|origin|validate|whitelist)\\b/u.test(\n            callbackSourceText\n        )\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isIpcMainHandlerRegistration(node)) {\n                    return;\n                }\n\n                const [, handlerNode] = node.arguments;\n\n                if (\n                    handlerNode === undefined ||\n                    handlerNode.type === AST_NODE_TYPES.SpreadElement ||\n                    !isFunctionExpression(handlerNode)\n                ) {\n                    return;\n                }\n\n                const eventParameter = arrayFirst(handlerNode.params);\n\n                if (eventParameter?.type !== AST_NODE_TYPES.Identifier) {\n                    return;\n                }\n\n                if (\n                    hasSenderValidationPattern(\n                        handlerNode,\n                        context,\n                        eventParameter.name\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: handlerNode,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow privileged ipcMain handlers that do not validate sender/frame trust.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-unchecked-ipc-sender\",\n        },\n        messages: {\n            default:\n                \"Validate the IPC sender or sender frame before handling privileged ipcMain requests.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-unchecked-ipc-sender\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isFunctionExpression = (\n    expression: TSESTree.CallExpressionArgument\n): expression is\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst hasUnsafeAllowAction = (\n    callbackNode:\n        TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n\n    // eslint-disable-next-line regexp/require-unicode-sets-regexp -- `/v` is not yet parseable in the current TypeScript-ESLint parser stack.\n    return /\\baction\\s*:\\s*[\"'`]allow[\"'`]/u.test(callbackSourceText);\n};\n\nconst hasPreventDefaultCall = (\n    callbackNode:\n        TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression,\n    context: TSESLint.RuleContext<MessageIds, unknown[]>,\n    eventParameterName: string\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n    const escapedName = eventParameterName.replaceAll(\n        \"$\",\n        // eslint-disable-next-line unicorn/prefer-string-raw -- Replacement callback avoids `$` replacement-token semantics.\n        () => \"\\\\$\"\n    );\n    // eslint-disable-next-line security/detect-non-literal-regexp -- Event parameter identifier is escaped before interpolation for preventDefault-call detection.\n    const preventDefaultPattern = new RegExp(\n        String.raw`\\b${escapedName}\\s*\\.\\s*preventDefault\\s*\\(`,\n        \"u\"\n    );\n\n    return preventDefaultPattern.test(callbackSourceText);\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (methodName === \"setWindowOpenHandler\") {\n                    const [firstArgument] = node.arguments;\n\n                    if (\n                        firstArgument === undefined ||\n                        firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                        !isFunctionExpression(firstArgument)\n                    ) {\n                        return;\n                    }\n\n                    if (!hasUnsafeAllowAction(firstArgument, context)) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: firstArgument,\n                    });\n\n                    return;\n                }\n\n                if (methodName !== \"on\") {\n                    return;\n                }\n\n                const [firstArgument, secondArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isFunctionExpression(secondArgument)\n                ) {\n                    return;\n                }\n\n                if (\n                    firstArgument.type !== AST_NODE_TYPES.Literal ||\n                    firstArgument.value !== \"will-navigate\"\n                ) {\n                    return;\n                }\n\n                const eventParameter = arrayFirst(secondArgument.params);\n\n                if (eventParameter?.type !== AST_NODE_TYPES.Identifier) {\n                    return;\n                }\n\n                if (\n                    hasPreventDefaultCall(\n                        secondArgument,\n                        context,\n                        eventParameter.name\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Electron navigation handlers that allow unrestricted navigation or window opening.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-unrestricted-navigation\",\n        },\n        messages: {\n            default:\n                \"Restrict Electron navigation/window-opening handlers with explicit blocking or allowlist logic.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-unrestricted-navigation\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getStaticTemplateLiteralValue = (\n    templateLiteral: TSESTree.TemplateLiteral\n): string | undefined => {\n    if (templateLiteral.expressions.length > 0) {\n        return undefined;\n    }\n\n    return arrayFirst(templateLiteral.quasis)?.value.cooked ?? undefined;\n};\n\nconst getStringValue = (node: TSESTree.Expression): string | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.Literal &&\n        typeof node.value === \"string\"\n    ) {\n        return node.value;\n    }\n\n    if (node.type === AST_NODE_TYPES.TemplateLiteral) {\n        return getStaticTemplateLiteralValue(node);\n    }\n\n    return undefined;\n};\n\nconst isAllowedExternalProtocol = (value: string): boolean =>\n    /^(?:https|mailto):/iv.test(value.trim());\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isShellObjectExpression = (node: TSESTree.Expression): boolean => {\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return node.name === \"shell\";\n    }\n\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(node) === \"shell\";\n};\n\nconst isShellOpenExternalCallee = (\n    callee: TSESTree.CallExpression[\"callee\"]\n): boolean => {\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(callee) !== \"openExternal\") {\n        return false;\n    }\n\n    return isShellObjectExpression(callee.object);\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node) {\n                if (!isShellOpenExternalCallee(node.callee)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const firstArgumentValue = getStringValue(firstArgument);\n\n                if (\n                    typeof firstArgumentValue === \"string\" &&\n                    isAllowedExternalProtocol(firstArgumentValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow untrusted or non-HTTPS/non-mailto URLs in Electron shell.openExternal calls.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-untrusted-open-external\",\n        },\n        messages: {\n            default:\n                \"Only open trusted https: or mailto: URLs with shell.openExternal.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-untrusted-open-external\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst isJsxWebviewElement = (node: TSESTree.JSXOpeningElement): boolean => {\n    if (node.name.type === AST_NODE_TYPES.JSXIdentifier) {\n        return node.name.name.toLowerCase() === \"webview\";\n    }\n\n    return false;\n};\n\nconst getJsxAttributeName = (\n    attributeNode: TSESTree.JSXAttribute\n): string | undefined => {\n    if (attributeNode.name.type !== AST_NODE_TYPES.JSXIdentifier) {\n        return undefined;\n    }\n\n    return attributeNode.name.name.toLowerCase();\n};\n\nconst isTruthyJsxAttributeValue = (\n    attributeValue: TSESTree.JSXAttribute[\"value\"]\n): boolean => {\n    if (attributeValue === null) {\n        return true;\n    }\n\n    if (attributeValue.type === AST_NODE_TYPES.Literal) {\n        if (typeof attributeValue.value === \"boolean\") {\n            return attributeValue.value;\n        }\n\n        if (typeof attributeValue.value === \"string\") {\n            return attributeValue.value.toLowerCase() !== \"false\";\n        }\n\n        return false;\n    }\n\n    if (attributeValue.type !== AST_NODE_TYPES.JSXExpressionContainer) {\n        return false;\n    }\n\n    if (\n        attributeValue.expression.type === AST_NODE_TYPES.Literal &&\n        typeof attributeValue.expression.value === \"boolean\"\n    ) {\n        return attributeValue.expression.value;\n    }\n\n    return true;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        JSXOpeningElement(node: TSESTree.JSXOpeningElement) {\n            if (!isJsxWebviewElement(node)) {\n                return;\n            }\n\n            for (const attributeNode of node.attributes) {\n                if (attributeNode.type !== AST_NODE_TYPES.JSXAttribute) {\n                    continue;\n                }\n\n                if (getJsxAttributeName(attributeNode) !== \"allowpopups\") {\n                    continue;\n                }\n\n                if (!isTruthyJsxAttributeValue(attributeNode.value)) {\n                    continue;\n                }\n\n                context.report({\n                    fix: (fixer) => fixer.remove(attributeNode),\n                    messageId: \"default\",\n                    node: attributeNode,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow enabling allowpopups in Electron webview elements.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-webview-allowpopups\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not enable allowpopups on Electron webview elements.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-webview-allowpopups\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayJoin, isEmpty } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getStaticJsxAttributeStringValue } from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst UNSAFE_WEBPREFERENCES_PATTERNS = [\n    {\n        flagName: \"allowRunningInsecureContent\",\n        pattern: /\\ballowrunninginsecurecontent\\s*=\\s*(?:1|on|true|yes)\\b/iv,\n    },\n    {\n        flagName: \"contextIsolation\",\n        pattern: /\\bcontextisolation\\s*=\\s*(?:0|false|no|off)\\b/iv,\n    },\n    {\n        flagName: \"experimentalFeatures\",\n        pattern: /\\bexperimentalfeatures\\s*=\\s*(?:1|on|true|yes)\\b/iv,\n    },\n    {\n        flagName: \"sandbox\",\n        pattern: /\\bsandbox\\s*=\\s*(?:0|false|no|off)\\b/iv,\n    },\n    {\n        flagName: \"webSecurity\",\n        pattern: /\\bwebsecurity\\s*=\\s*(?:0|false|no|off)\\b/iv,\n    },\n] as const;\n\nconst isJsxWebviewElement = (node: TSESTree.JSXOpeningElement): boolean =>\n    node.name.type === AST_NODE_TYPES.JSXIdentifier &&\n    node.name.name.toLowerCase() === \"webview\";\n\nconst getJsxAttributeName = (attributeNode: TSESTree.JSXAttribute): string => {\n    if (attributeNode.name.type === AST_NODE_TYPES.JSXIdentifier) {\n        return attributeNode.name.name.toLowerCase();\n    }\n\n    return `${attributeNode.name.namespace.name}:${attributeNode.name.name.name}`.toLowerCase();\n};\n\nconst getUnsafeWebPreferencesFlags = (\n    attributeValue: string\n): readonly string[] =>\n    UNSAFE_WEBPREFERENCES_PATTERNS.flatMap(({ flagName, pattern }) =>\n        pattern.test(attributeValue) ? [flagName] : []\n    );\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        JSXOpeningElement(node: TSESTree.JSXOpeningElement) {\n            if (!isJsxWebviewElement(node)) {\n                return;\n            }\n\n            for (const attributeNode of node.attributes) {\n                if (attributeNode.type !== AST_NODE_TYPES.JSXAttribute) {\n                    continue;\n                }\n\n                if (getJsxAttributeName(attributeNode) !== \"webpreferences\") {\n                    continue;\n                }\n\n                const staticValue = getStaticJsxAttributeStringValue(\n                    attributeNode.value\n                );\n\n                if (typeof staticValue !== \"string\") {\n                    continue;\n                }\n\n                const unsafeFlags = getUnsafeWebPreferencesFlags(staticValue);\n\n                if (isEmpty(unsafeFlags)) {\n                    continue;\n                }\n\n                context.report({\n                    data: {\n                        flags: arrayJoin(unsafeFlags, \", \"),\n                    },\n                    messageId: \"default\",\n                    node: attributeNode,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow unsafe Electron webview webpreferences string flags.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-webview-insecure-webpreferences\",\n        },\n        messages: {\n            default:\n                \"Do not enable unsafe Electron webview webpreferences flags: {{flags}}.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-webview-insecure-webpreferences\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst isJsxWebviewElement = (node: TSESTree.JSXOpeningElement): boolean =>\n    node.name.type === AST_NODE_TYPES.JSXIdentifier &&\n    node.name.name.toLowerCase() === \"webview\";\n\nconst getJsxAttributeName = (attributeNode: TSESTree.JSXAttribute): string => {\n    if (attributeNode.name.type === AST_NODE_TYPES.JSXIdentifier) {\n        return attributeNode.name.name.toLowerCase();\n    }\n\n    return `${attributeNode.name.namespace.name}:${attributeNode.name.name.name}`.toLowerCase();\n};\n\nconst isNodeIntegrationAttribute = (attributeName: string): boolean => {\n    const normalizedName = attributeName.toLowerCase();\n\n    return (\n        normalizedName === \"nodeintegration\" ||\n        normalizedName === \"nodeintegrationinsubframes\"\n    );\n};\n\nconst isTruthyJsxAttributeValue = (\n    attributeValue: TSESTree.JSXAttribute[\"value\"]\n): boolean => {\n    if (attributeValue === null) {\n        return true;\n    }\n\n    if (attributeValue.type === AST_NODE_TYPES.Literal) {\n        if (typeof attributeValue.value === \"boolean\") {\n            return attributeValue.value;\n        }\n\n        if (typeof attributeValue.value === \"string\") {\n            return attributeValue.value.toLowerCase() !== \"false\";\n        }\n\n        return false;\n    }\n\n    if (attributeValue.type !== AST_NODE_TYPES.JSXExpressionContainer) {\n        return false;\n    }\n\n    if (\n        attributeValue.expression.type === AST_NODE_TYPES.Literal &&\n        typeof attributeValue.expression.value === \"boolean\"\n    ) {\n        return attributeValue.expression.value;\n    }\n\n    return true;\n};\n\nconst hasNodeIntegrationWebPreference = (\n    attributeValue: TSESTree.JSXAttribute[\"value\"]\n): boolean => {\n    if (attributeValue === null) {\n        return false;\n    }\n\n    if (\n        attributeValue.type === AST_NODE_TYPES.Literal &&\n        typeof attributeValue.value === \"string\"\n    ) {\n        return /\\bnodeintegration\\b/iv.test(attributeValue.value);\n    }\n\n    return false;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        JSXOpeningElement(node: TSESTree.JSXOpeningElement) {\n            if (!isJsxWebviewElement(node)) {\n                return;\n            }\n\n            for (const attributeNode of node.attributes) {\n                if (attributeNode.type !== AST_NODE_TYPES.JSXAttribute) {\n                    continue;\n                }\n\n                const attributeName = getJsxAttributeName(attributeNode);\n\n                if (isNodeIntegrationAttribute(attributeName)) {\n                    if (!isTruthyJsxAttributeValue(attributeNode.value)) {\n                        continue;\n                    }\n\n                    context.report({\n                        fix: (fixer) => fixer.remove(attributeNode),\n                        messageId: \"default\",\n                        node: attributeNode,\n                    });\n\n                    continue;\n                }\n\n                if (attributeName !== \"webpreferences\") {\n                    continue;\n                }\n\n                if (!hasNodeIntegrationWebPreference(attributeNode.value)) {\n                    continue;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: attributeNode,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow node integration flags on Electron webview elements.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-electron-webview-node-integration\",\n        },\n        fixable: \"code\",\n        messages: {\n            default:\n                \"Do not enable node integration options on Electron webview elements.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-electron-webview-node-integration\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create(context) {\n        return {\n            \"CallExpression[arguments.length=1] > MemberExpression.callee[property.name='html']\"(\n                node: TSESTree.MemberExpression\n            ) {\n                const parentCall = node.parent;\n\n                if (parentCall.type !== AST_NODE_TYPES.CallExpression) {\n                    return;\n                }\n\n                const [firstArgument] = parentCall.arguments;\n\n                if (\n                    firstArgument?.type === AST_NODE_TYPES.Literal &&\n                    (firstArgument.value === \"\" || firstArgument.value === null)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow direct html(...) DOM writes (for example jQuery html()) that bypass sanitization.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-html-method\",\n        },\n        messages: {\n            default: \"Do not write to the DOM directly using html(...).\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-html-method\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst getStaticStringValue = (\n    node: TSESTree.Expression\n): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\nconst isInsecureHttpUrl = (value: string): boolean =>\n    /^http:\\/\\//iv.test(value.trim());\n\nconst isTargetRequestMethod = (node: TSESTree.CallExpression): boolean => {\n    if (node.callee.type === AST_NODE_TYPES.Identifier) {\n        return node.callee.name === \"fetch\";\n    }\n\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const methodName = getMemberPropertyName(node.callee);\n\n    if (methodName !== \"request\" && methodName !== \"get\") {\n        return false;\n    }\n\n    if (node.callee.object.type !== AST_NODE_TYPES.Identifier) {\n        return false;\n    }\n\n    return (\n        node.callee.object.name === \"http\" ||\n        node.callee.object.name === \"https\"\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isTargetRequestMethod(node)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const firstArgumentValue = getStaticStringValue(firstArgument);\n\n                if (\n                    typeof firstArgumentValue !== \"string\" ||\n                    !isInsecureHttpUrl(firstArgumentValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    fix(fixer) {\n                        const sourceText =\n                            context.sourceCode.getText(firstArgument);\n                        const fixedSourceText = sourceText.replace(\n                            /^(?<quote>[\"'`]?)http:\\/\\//iv,\n                            \"$<quote>https://\"\n                        );\n\n                        if (fixedSourceText === sourceText) {\n                            return null;\n                        }\n\n                        return fixer.replaceText(\n                            firstArgument,\n                            fixedSourceText\n                        );\n                    },\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Node HTTP client calls that use insecure http:// URLs.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-http-request-to-insecure-protocol\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Use HTTPS endpoints instead of insecure http:// URLs.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-http-request-to-insecure-protocol\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    getNodeTypeAsString,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticJsxAttributeStringValue,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype AstUtilsRuleContext = Parameters<typeof getFullTypeChecker>[0];\ntype MessageIds = \"default\";\n\nconst isJsxIframeElement = (node: TSESTree.JSXOpeningElement): boolean => {\n    if (node.name.type !== AST_NODE_TYPES.JSXIdentifier) {\n        return false;\n    }\n\n    return node.name.name.toLowerCase() === \"iframe\";\n};\n\nconst getJsxAttributeName = (\n    attributeNode: TSESTree.JSXAttribute\n): string | undefined => {\n    if (attributeNode.name.type !== AST_NODE_TYPES.JSXIdentifier) {\n        return undefined;\n    }\n\n    return attributeNode.name.name.toLowerCase();\n};\n\nconst isCreateElementIFrameCall = (node: TSESTree.Node): boolean => {\n    if (\n        node.type !== AST_NODE_TYPES.CallExpression ||\n        node.callee.type !== AST_NODE_TYPES.MemberExpression\n    ) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"createElement\") {\n        return false;\n    }\n\n    const [firstArgument] = node.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        getStaticStringValue(firstArgument) === \"iframe\"\n    );\n};\n\nconst isLikelyIFrameElement = (\n    node: TSESTree.Node,\n    context: AstUtilsRuleContext,\n    fullTypeChecker: ReturnType<typeof getFullTypeChecker>\n): boolean => {\n    if (fullTypeChecker !== undefined) {\n        const nodeType = getNodeTypeAsString(fullTypeChecker, node, context);\n\n        if (nodeType === \"any\" || nodeType.includes(\"HTMLIFrameElement\")) {\n            return true;\n        }\n    }\n\n    if (isCreateElementIFrameCall(node)) {\n        return true;\n    }\n\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        const normalizedName = node.name.toLowerCase();\n\n        return normalizedName === \"frame\" || normalizedName.endsWith(\"iframe\");\n    }\n\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(node);\n\n    if (typeof propertyName !== \"string\") {\n        return false;\n    }\n\n    return propertyName.toLowerCase().endsWith(\"iframe\");\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            AssignmentExpression(node: TSESTree.AssignmentExpression) {\n                if (node.left.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (getMemberPropertyName(node.left) !== \"srcdoc\") {\n                    return;\n                }\n\n                if (getStaticStringValue(node.right) === \"\") {\n                    return;\n                }\n\n                if (\n                    !isLikelyIFrameElement(\n                        node.left.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: node.right,\n                });\n            },\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (\n                    methodName !== \"setAttribute\" &&\n                    methodName !== \"setAttributeNS\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument, secondArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    getStaticStringValue(firstArgument) !== \"srcdoc\"\n                ) {\n                    return;\n                }\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    getStaticStringValue(secondArgument) === \"\"\n                ) {\n                    return;\n                }\n\n                if (\n                    !isLikelyIFrameElement(\n                        node.callee.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n            JSXOpeningElement(node: TSESTree.JSXOpeningElement) {\n                if (!isJsxIframeElement(node)) {\n                    return;\n                }\n\n                for (const attributeNode of node.attributes) {\n                    if (attributeNode.type !== AST_NODE_TYPES.JSXAttribute) {\n                        continue;\n                    }\n\n                    if (getJsxAttributeName(attributeNode) !== \"srcdoc\") {\n                        continue;\n                    }\n\n                    if (\n                        getStaticJsxAttributeStringValue(\n                            attributeNode.value\n                        ) === \"\"\n                    ) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: attributeNode,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow iframe srcdoc assignments and JSX srcDoc attributes that embed inline HTML documents.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-iframe-srcdoc\",\n        },\n        messages: {\n            default:\n                \"Do not populate iframe srcdoc with inline HTML; load a reviewed document URL instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-iframe-srcdoc\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport {\n    getFullTypeChecker,\n    getNodeTypeAsString,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\nconst isEmptyStringLiteral = (node: TSESTree.Node): boolean =>\n    node.type === AST_NODE_TYPES.Literal && node.value === \"\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<\n    [],\n    \"noInnerHtml\" | \"noInsertAdjacentHTML\"\n>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        const isPossibleHtmlElement = (node: TSESTree.Node): boolean => {\n            const nodeType = getNodeTypeAsString(\n                fullTypeChecker,\n                node,\n                context\n            );\n\n            return /HTML.*Element/v.test(nodeType) || nodeType === \"any\";\n        };\n\n        return {\n            \"AssignmentExpression[left.type='MemberExpression'][left.property.name=/^(?:innerHTML|outerHTML)$/]\"(\n                node: TSESTree.AssignmentExpression\n            ) {\n                if (isEmptyStringLiteral(node.right)) {\n                    return;\n                }\n\n                if (node.left.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (!isPossibleHtmlElement(node.left.object)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"noInnerHtml\",\n                    node,\n                });\n            },\n            \"CallExpression[arguments.length=2] > MemberExpression.callee[property.name='insertAdjacentHTML']\"(\n                node: TSESTree.MemberExpression\n            ) {\n                if (node.parent.type !== AST_NODE_TYPES.CallExpression) {\n                    return;\n                }\n\n                const secondArgument = node.parent.arguments[1];\n\n                if (\n                    secondArgument !== undefined &&\n                    isEmptyStringLiteral(secondArgument)\n                ) {\n                    return;\n                }\n\n                if (!isPossibleHtmlElement(node.object)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"noInsertAdjacentHTML\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow unsafe direct DOM HTML writes via innerHTML/outerHTML/insertAdjacentHTML.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-inner-html\",\n        },\n        messages: {\n            noInnerHtml:\n                \"Do not write to the DOM directly using innerHTML/outerHTML.\",\n            noInsertAdjacentHTML:\n                \"Do not write to the DOM using insertAdjacentHTML.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-inner-html\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport * as path from \"node:path\";\nimport { arrayIncludes, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    getFullTypeChecker,\n    getNodeTypeAsString,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\nconst bannedRandomLibraries = [\n    \"chance\",\n    \"random-float\",\n    \"random-int\",\n    \"random-number\",\n    \"random-seed\",\n    \"unique-random\",\n] as const;\nconst bannedRandomLibrarySet = new Set(bannedRandomLibraries);\n\nconst isBannedRandomLibrary = (value: string): boolean =>\n    setHas(bannedRandomLibrarySet, value);\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            \"CallExpression > MemberExpression[property.name='pseudoRandomBytes']\"(\n                node: TSESTree.MemberExpression\n            ) {\n                const isUnsafe = isDefined(fullTypeChecker)\n                    ? arrayIncludes(\n                          [\"any\", \"Crypto\"],\n                          getNodeTypeAsString(\n                              fullTypeChecker,\n                              node.object,\n                              context\n                          )\n                      )\n                    : node.object.type === AST_NODE_TYPES.Identifier &&\n                      node.object.name === \"crypto\";\n\n                if (!isUnsafe) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n            \"CallExpression > MemberExpression[property.name='random']\"(\n                node: TSESTree.MemberExpression\n            ) {\n                const isUnsafe = isDefined(fullTypeChecker)\n                    ? arrayIncludes(\n                          [\"any\", \"Math\"],\n                          getNodeTypeAsString(\n                              fullTypeChecker,\n                              node.object,\n                              context\n                          )\n                      )\n                    : node.object.type === AST_NODE_TYPES.Identifier &&\n                      node.object.name === \"Math\";\n\n                if (!isUnsafe) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n            \"CallExpression[callee.name='require'][arguments.length=1]\"(\n                node: TSESTree.CallExpression\n            ) {\n                const [sourceArgument] = node.arguments;\n\n                if (\n                    !isDefined(sourceArgument) ||\n                    sourceArgument.type !== AST_NODE_TYPES.Literal ||\n                    typeof sourceArgument.value !== \"string\"\n                ) {\n                    return;\n                }\n\n                const requireName = path.parse(\n                    path.basename(sourceArgument.value)\n                ).name;\n\n                if (!isBannedRandomLibrary(requireName)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n            ImportDeclaration(node) {\n                const sourceText = node.source.value;\n\n                if (typeof sourceText !== \"string\") {\n                    return;\n                }\n\n                if (!isBannedRandomLibrary(path.basename(sourceText))) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow insecure pseudo-random APIs and known non-cryptographic random libraries for security-sensitive code.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-insecure-random\",\n        },\n        messages: {\n            default:\n                \"Do not use pseudo-random generators for secrets such as tokens, keys, or passwords.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-insecure-random\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst isFalseLiteral = (node: TSESTree.Property[\"value\"]): boolean =>\n    node.type === AST_NODE_TYPES.Literal && node.value === false;\n\nconst getObjectPropertyName = (\n    propertyNode: TSESTree.Property\n): string | undefined => {\n    if (propertyNode.computed) {\n        return undefined;\n    }\n\n    if (propertyNode.key.type === AST_NODE_TYPES.Identifier) {\n        return propertyNode.key.name;\n    }\n\n    return typeof propertyNode.key.value === \"string\"\n        ? propertyNode.key.value\n        : undefined;\n};\n\nconst findRejectUnauthorizedFalseProperty = (\n    objectExpression: TSESTree.ObjectExpression\n): TSESTree.Property | undefined => {\n    for (const propertyNode of objectExpression.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        if (getObjectPropertyName(propertyNode) !== \"rejectUnauthorized\") {\n            continue;\n        }\n\n        if (isFalseLiteral(propertyNode.value)) {\n            return propertyNode;\n        }\n    }\n\n    return undefined;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        ObjectExpression(node: TSESTree.ObjectExpression) {\n            const insecureOptionProperty =\n                findRejectUnauthorizedFalseProperty(node);\n\n            if (insecureOptionProperty === undefined) {\n                return;\n            }\n\n            context.report({\n                fix(fixer) {\n                    if (\n                        insecureOptionProperty.value.type !==\n                            AST_NODE_TYPES.Literal ||\n                        insecureOptionProperty.value.value !== false\n                    ) {\n                        return null;\n                    }\n\n                    return fixer.replaceText(\n                        insecureOptionProperty.value,\n                        \"true\"\n                    );\n                },\n                messageId: \"default\",\n                node: insecureOptionProperty,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow rejectUnauthorized: false in TLS/HTTPS option objects.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-insecure-tls-agent-options\",\n        },\n        fixable: \"code\",\n        messages: {\n            default:\n                \"Do not disable TLS certificate verification with rejectUnauthorized: false.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-insecure-tls-agent-options\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Default insecure-protocol blocklist patterns. */\nconst defaultBlocklist: readonly RegExp[] = [/^(?:ftp|http|telnet|ws):\\/\\//iv];\n\n/** Default allowlisted literal URL exceptions. */\nconst defaultExceptions: readonly RegExp[] = [\n    /^http:(?:\\/\\/|\\\\u002f\\\\u002f)schemas\\.microsoft\\.com.*/iv,\n    /^http:(?:\\/\\/|\\\\u002f\\\\u002f)schemas\\.openxmlformats\\.org.*/iv,\n    /^http:(?:\\/|\\\\u002f){2}localhost(?::|\\/|\\\\u002f)*/iv,\n    /^http:\\/\\/w{3}\\.w3\\.org\\/1999\\/xhtml/iv,\n    /^http:\\/\\/w{3}\\.w3\\.org\\/2000\\/svg/iv,\n];\n\n/** Default source-text exceptions for variable/template contexts. */\nconst defaultVariableExceptions: readonly RegExp[] = [];\n\ntype MessageIds = \"doNotUseInsecureUrl\";\n\ntype NoInsecureUrlOptions = Readonly<{\n    blocklist?: readonly string[];\n    exceptions?: readonly string[];\n    varExceptions?: readonly string[];\n}>;\n\ntype Options = [NoInsecureUrlOptions?];\n\nconst asCaseInsensitiveRegex = (pattern: RegExp | string): RegExp => {\n    if (pattern instanceof RegExp) {\n        // eslint-disable-next-line security/detect-non-literal-regexp -- Rebuild trusted RegExp source with normalized flags only.\n        return new RegExp(pattern.source, \"iu\");\n    }\n\n    // eslint-disable-next-line security/detect-non-literal-regexp -- User-configured regex patterns are intentionally compiled for matching behavior.\n    return new RegExp(pattern, \"iu\");\n};\n\nconst hasPatternMatch = (patterns: readonly RegExp[], value: string): boolean =>\n    patterns.some((pattern) => pattern.test(value));\n\nconst toRegexSources = (patterns: readonly RegExp[]): readonly string[] =>\n    patterns.map((pattern) => pattern.source);\n\nconst shouldAttemptFix = (\n    variableExceptions: readonly RegExp[],\n    context: TSESLint.RuleContext<MessageIds, Options>,\n    node: TSESTree.Node\n): boolean => {\n    const targetNode = node.parent ?? node;\n    const targetText = context.sourceCode.getText(targetNode);\n\n    return !hasPatternMatch(variableExceptions, targetText);\n};\n\nconst reportInsecureUrl = (\n    context: TSESLint.RuleContext<MessageIds, Options>,\n    node: TSESTree.Node,\n    replacementSourceText: string\n): void => {\n    context.report({\n        fix(fixer) {\n            if (!/http:/iv.test(replacementSourceText)) {\n                return null;\n            }\n\n            return fixer.replaceText(\n                node,\n                replacementSourceText.replace(/http:/iv, \"https:\")\n            );\n        },\n        messageId: \"doNotUseInsecureUrl\",\n        node,\n    });\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<Options, MessageIds>({\n    create(context) {\n        const [options = {}] = context.options;\n        const blocklist = (options.blocklist ?? defaultBlocklist).map(\n            (pattern) => asCaseInsensitiveRegex(pattern)\n        );\n        const exceptions = (options.exceptions ?? defaultExceptions).map(\n            (pattern) => asCaseInsensitiveRegex(pattern)\n        );\n        const variableExceptions = (\n            options.varExceptions ?? defaultVariableExceptions\n        ).map((pattern) => asCaseInsensitiveRegex(pattern));\n\n        return {\n            Literal(node) {\n                if (typeof node.value !== \"string\") {\n                    return;\n                }\n\n                if (\n                    node.parent.type === AST_NODE_TYPES.JSXAttribute &&\n                    node.parent.name.type === AST_NODE_TYPES.JSXIdentifier &&\n                    node.parent.name.name === \"xmlns\"\n                ) {\n                    return;\n                }\n\n                if (\n                    !hasPatternMatch(blocklist, node.value) ||\n                    hasPatternMatch(exceptions, node.value)\n                ) {\n                    return;\n                }\n\n                if (!shouldAttemptFix(variableExceptions, context, node)) {\n                    return;\n                }\n\n                reportInsecureUrl(context, node, JSON.stringify(node.value));\n            },\n            TemplateElement(node) {\n                if (\n                    typeof node.value.raw !== \"string\" ||\n                    typeof node.value.cooked !== \"string\"\n                ) {\n                    return;\n                }\n\n                const isRawMatch =\n                    shouldAttemptFix(variableExceptions, context, node) &&\n                    hasPatternMatch(blocklist, node.value.raw) &&\n                    !hasPatternMatch(exceptions, node.value.raw);\n                const isCookedMatch =\n                    hasPatternMatch(blocklist, node.value.cooked) &&\n                    !hasPatternMatch(exceptions, node.value.cooked);\n\n                if (!isRawMatch && !isCookedMatch) {\n                    return;\n                }\n\n                const escapedTemplatePart = JSON.stringify(\n                    context.sourceCode.getText(node)\n                ).slice(1, -1);\n\n                reportInsecureUrl(context, node, escapedTemplatePart);\n            },\n        };\n    },\n    meta: {\n        defaultOptions: [\n            {\n                blocklist: toRegexSources(defaultBlocklist),\n                exceptions: toRegexSources(defaultExceptions),\n                varExceptions: toRegexSources(defaultVariableExceptions),\n            },\n        ],\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow insecure URL protocols such as http:// and ftp:// with configurable exceptions.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-insecure-url\",\n        },\n        fixable: \"code\",\n        messages: {\n            doNotUseInsecureUrl: \"Do not use insecure URLs.\",\n        },\n        schema: [\n            {\n                additionalProperties: false,\n                properties: {\n                    blocklist: {\n                        description:\n                            \"Regular-expression strings that identify insecure URL patterns to block.\",\n                        items: { type: \"string\" },\n                        type: \"array\",\n                    },\n                    exceptions: {\n                        description:\n                            \"Regular-expression strings that identify allowed URL literals excluded from blocklist checks.\",\n                        items: { type: \"string\" },\n                        type: \"array\",\n                    },\n                    varExceptions: {\n                        description:\n                            \"Regular-expression strings that identify source-text contexts where automatic fixing should be skipped.\",\n                        items: { type: \"string\" },\n                        type: \"array\",\n                    },\n                },\n                type: \"object\",\n            },\n        ],\n        type: \"problem\",\n    },\n    name: \"no-insecure-url\",\n});\n\nexport { defaultBlocklist, defaultExceptions, defaultVariableExceptions };\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst getStaticStringValue = (\n    node: TSESTree.Expression\n): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\nconst isJavaScriptUrl = (value: string): boolean =>\n    /^\\s*javascript\\s*:/iv.test(value);\n\nconst isLocationLikeLeftHand = (\n    expression: TSESTree.AssignmentExpression[\"left\"]\n): boolean => {\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(expression);\n\n    return propertyName === \"location\" || propertyName === \"href\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            AssignmentExpression(node: TSESTree.AssignmentExpression) {\n                if (node.operator !== \"=\") {\n                    return;\n                }\n\n                if (!isLocationLikeLeftHand(node.left)) {\n                    return;\n                }\n\n                const assignedValue = getStaticStringValue(node.right);\n\n                if (\n                    typeof assignedValue !== \"string\" ||\n                    !isJavaScriptUrl(assignedValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (\n                    methodName !== \"assign\" &&\n                    methodName !== \"replace\" &&\n                    methodName !== \"open\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const argumentValue = getStaticStringValue(firstArgument);\n\n                if (\n                    typeof argumentValue !== \"string\" ||\n                    !isJavaScriptUrl(argumentValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow assigning javascript: URLs to location-like navigation sinks.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-location-javascript-url\",\n        },\n        messages: {\n            default:\n                \"Do not use javascript: URLs in location or open-like navigation sinks.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-location-javascript-url\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\nimport type { UnknownRecord } from \"type-fest\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { keyIn, objectEntries } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype CallbackFunction =\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression;\n\ntype MessageIds = \"default\";\ntype RuleContext = Readonly<TSESLint.RuleContext<MessageIds, unknown[]>>;\n\nconst isFunctionExpression = (\n    expression: Readonly<TSESTree.Node>\n): expression is CallbackFunction =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst hasMessageEventGuardKeywords = (callbackText: string): boolean =>\n    /\\b(?:allowlist|origin|trusted|validate|verify|whitelist)\\b/iv.test(\n        callbackText\n    );\n\nconst isUnknownRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null;\n\nconst isNodeLike = (value: unknown): value is Readonly<TSESTree.Node> =>\n    isUnknownRecord(value) &&\n    keyIn(value, \"type\") &&\n    typeof value[\"type\"] === \"string\";\n\nconst toNode = (value: unknown): Readonly<TSESTree.Node> | undefined =>\n    isNodeLike(value) ? value : undefined;\n\nconst hasDescendantNode = (\n    node: Readonly<TSESTree.Node>,\n    hasMatchingNode: (node: Readonly<TSESTree.Node>) => boolean\n): boolean => {\n    if (hasMatchingNode(node)) {\n        return true;\n    }\n\n    for (const [propertyName, propertyValue] of objectEntries(node)) {\n        if (propertyName === \"parent\") {\n            continue;\n        }\n\n        if (Array.isArray(propertyValue)) {\n            for (const element of propertyValue) {\n                const childNode = toNode(element);\n\n                if (\n                    childNode !== undefined &&\n                    hasDescendantNode(childNode, hasMatchingNode)\n                ) {\n                    return true;\n                }\n            }\n\n            continue;\n        }\n\n        const childNode = toNode(propertyValue);\n\n        if (\n            childNode !== undefined &&\n            hasDescendantNode(childNode, hasMatchingNode)\n        ) {\n            return true;\n        }\n    }\n\n    return false;\n};\n\nconst isIdentifierNamed = (\n    node: Readonly<TSESTree.Node>,\n    identifierName: string\n): node is TSESTree.Identifier =>\n    node.type === AST_NODE_TYPES.Identifier && node.name === identifierName;\n\nconst isStaticPropertyMatch = (\n    memberExpression: Readonly<TSESTree.MemberExpression>,\n    objectName: string,\n    propertyName: string\n): boolean =>\n    isIdentifierNamed(memberExpression.object, objectName) &&\n    getMemberPropertyName(memberExpression) === propertyName;\n\nconst hasPatternProperty = (\n    pattern: Readonly<TSESTree.ObjectPattern>,\n    propertyName: string\n): boolean =>\n    pattern.properties.some((propertyNode) => {\n        if (propertyNode.type !== AST_NODE_TYPES.Property) {\n            return false;\n        }\n\n        return getPropertyName(propertyNode) === propertyName;\n    });\n\nconst hasObjectDestructureFromIdentifier = (\n    rootNode: Readonly<TSESTree.Node>,\n    sourceName: string,\n    propertyName: string\n): boolean =>\n    hasDescendantNode(rootNode, (node) => {\n        if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n            return (\n                node.id.type === AST_NODE_TYPES.ObjectPattern &&\n                node.init !== null &&\n                isIdentifierNamed(node.init, sourceName) &&\n                hasPatternProperty(node.id, propertyName)\n            );\n        }\n\n        if (node.type !== AST_NODE_TYPES.AssignmentExpression) {\n            return false;\n        }\n\n        return (\n            node.left.type === AST_NODE_TYPES.ObjectPattern &&\n            isIdentifierNamed(node.right, sourceName) &&\n            hasPatternProperty(node.left, propertyName)\n        );\n    });\n\nconst hasMemberPropertyAccess = (\n    rootNode: Readonly<TSESTree.Node>,\n    objectName: string,\n    propertyName: string\n): boolean =>\n    hasDescendantNode(rootNode, (node) =>\n        node.type === AST_NODE_TYPES.MemberExpression\n            ? isStaticPropertyMatch(node, objectName, propertyName)\n            : false\n    );\n\nconst hasObjectPatternProperty = (\n    objectPattern: TSESTree.ObjectPattern,\n    propertyName: string\n): boolean =>\n    objectPattern.properties.some((propertyNode) => {\n        if (propertyNode.type !== AST_NODE_TYPES.Property) {\n            return false;\n        }\n\n        return getPropertyName(propertyNode) === propertyName;\n    });\n\nconst hasCallbackMessageDataUsage = (\n    callbackNode: CallbackFunction,\n    eventParameterName: string\n): boolean =>\n    hasMemberPropertyAccess(callbackNode.body, eventParameterName, \"data\") ||\n    hasObjectDestructureFromIdentifier(\n        callbackNode.body,\n        eventParameterName,\n        \"data\"\n    );\n\nconst hasCallbackOriginValidation = (\n    callbackNode: CallbackFunction,\n    context: RuleContext,\n    eventParameterName: string\n): boolean => {\n    const callbackSourceText = context.sourceCode.getText(callbackNode);\n\n    return (\n        hasMemberPropertyAccess(\n            callbackNode.body,\n            eventParameterName,\n            \"origin\"\n        ) ||\n        hasObjectDestructureFromIdentifier(\n            callbackNode.body,\n            eventParameterName,\n            \"origin\"\n        ) ||\n        hasMessageEventGuardKeywords(callbackSourceText)\n    );\n};\n\nconst shouldReportIdentifierCallback = (\n    callbackNode: CallbackFunction,\n    context: RuleContext,\n    eventParameter: TSESTree.Identifier\n): boolean =>\n    hasCallbackMessageDataUsage(callbackNode, eventParameter.name) &&\n    !hasCallbackOriginValidation(callbackNode, context, eventParameter.name);\n\nconst shouldReportObjectPatternCallback = (\n    callbackNode: CallbackFunction,\n    context: RuleContext,\n    eventParameter: TSESTree.ObjectPattern\n): boolean => {\n    if (!hasObjectPatternProperty(eventParameter, \"data\")) {\n        return false;\n    }\n\n    if (hasObjectPatternProperty(eventParameter, \"origin\")) {\n        return false;\n    }\n\n    return !hasMessageEventGuardKeywords(\n        context.sourceCode.getText(callbackNode)\n    );\n};\n\nconst shouldReportMessageEventCallback = (\n    callbackNode: CallbackFunction,\n    context: RuleContext\n): boolean => {\n    const [firstParameter] = callbackNode.params;\n\n    if (\n        firstParameter === undefined ||\n        firstParameter.type === AST_NODE_TYPES.RestElement\n    ) {\n        return false;\n    }\n\n    if (firstParameter.type === AST_NODE_TYPES.Identifier) {\n        return shouldReportIdentifierCallback(\n            callbackNode,\n            context,\n            firstParameter\n        );\n    }\n\n    if (firstParameter.type === AST_NODE_TYPES.ObjectPattern) {\n        return shouldReportObjectPatternCallback(\n            callbackNode,\n            context,\n            firstParameter\n        );\n    }\n\n    return false;\n};\n\nconst isMessageEventListenerCall = (node: TSESTree.CallExpression): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"addEventListener\") {\n        return false;\n    }\n\n    const [firstArgument] = node.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        getStaticStringValue(firstArgument) === \"message\"\n    );\n};\n\nconst isOnMessageAssignment = (node: TSESTree.AssignmentExpression): boolean =>\n    node.operator === \"=\" &&\n    node.left.type === AST_NODE_TYPES.MemberExpression &&\n    getMemberPropertyName(node.left) === \"onmessage\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            AssignmentExpression(node: TSESTree.AssignmentExpression) {\n                if (!isOnMessageAssignment(node)) {\n                    return;\n                }\n\n                if (!isFunctionExpression(node.right)) {\n                    return;\n                }\n\n                if (!shouldReportMessageEventCallback(node.right, context)) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: node.right,\n                });\n            },\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isMessageEventListenerCall(node)) {\n                    return;\n                }\n\n                const [, secondArgument] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                if (!isFunctionExpression(secondArgument)) {\n                    return;\n                }\n\n                if (\n                    !shouldReportMessageEventCallback(secondArgument, context)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow MessageEvent handlers that consume event data without validating event.origin.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-message-event-without-origin-check\",\n        },\n        messages: {\n            default:\n                \"Validate MessageEvent.origin before consuming data from received message events.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-message-event-without-origin-check\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create: (context) => ({\n        \"CallExpression[arguments.length=1][callee.object.name='MSApp'][callee.property.name='execUnsafeLocalFunction']\"(\n            node\n        ) {\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow MSApp.execUnsafeLocalFunction which bypasses script-injection safeguards.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-msapp-exec-unsafe\",\n        },\n        messages: {\n            default: \"Do not bypass script injection validation.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-msapp-exec-unsafe\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getPropertyName } from \"../_internal/estree-utils.js\";\nimport {\n    isNodeTlsStaticMember,\n    isRelevantNodeTlsOptionsObject,\n} from \"../_internal/node-tls-config.js\";\n\ntype CheckServerIdentityFunction =\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression;\n\ntype MessageIds = \"default\";\n\nconst CHECK_SERVER_IDENTITY_PROPERTY_NAMES = new Set([\"checkServerIdentity\"]);\n\nconst isFunctionExpression = (\n    expression: TSESTree.Expression\n): expression is CheckServerIdentityFunction =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst isExpressionNode = (node: TSESTree.Node): node is TSESTree.Expression =>\n    node.type !== AST_NODE_TYPES.ArrayPattern &&\n    node.type !== AST_NODE_TYPES.AssignmentPattern &&\n    node.type !== AST_NODE_TYPES.ObjectPattern;\n\nconst isAlwaysSuccessfulReturnExpression = (\n    expression: TSESTree.Expression\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return expression.name === \"undefined\";\n    }\n\n    if (expression.type === AST_NODE_TYPES.Literal) {\n        return expression.value === null;\n    }\n\n    return (\n        expression.type === AST_NODE_TYPES.UnaryExpression &&\n        expression.operator === \"void\"\n    );\n};\n\nconst isAlwaysSuccessfulCheckServerIdentity = (\n    callbackNode: CheckServerIdentityFunction\n): boolean => {\n    if (callbackNode.body.type !== AST_NODE_TYPES.BlockStatement) {\n        return isAlwaysSuccessfulReturnExpression(callbackNode.body);\n    }\n\n    if (callbackNode.body.body.length === 0) {\n        return true;\n    }\n\n    if (callbackNode.body.body.length !== 1) {\n        return false;\n    }\n\n    const onlyStatement = arrayFirst(callbackNode.body.body);\n\n    if (onlyStatement?.type !== AST_NODE_TYPES.ReturnStatement) {\n        return false;\n    }\n\n    return (\n        onlyStatement.argument === null ||\n        isAlwaysSuccessfulReturnExpression(onlyStatement.argument)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        AssignmentExpression(node: TSESTree.AssignmentExpression) {\n            if (\n                node.operator !== \"=\" ||\n                !isNodeTlsStaticMember(\n                    node.left,\n                    CHECK_SERVER_IDENTITY_PROPERTY_NAMES\n                ) ||\n                !isFunctionExpression(node.right) ||\n                !isAlwaysSuccessfulCheckServerIdentity(node.right)\n            ) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node: node.right,\n            });\n        },\n        ObjectExpression(node: TSESTree.ObjectExpression) {\n            if (!isRelevantNodeTlsOptionsObject(node)) {\n                return;\n            }\n\n            for (const propertyNode of node.properties) {\n                if (\n                    propertyNode.type !== AST_NODE_TYPES.Property ||\n                    propertyNode.kind !== \"init\" ||\n                    getPropertyName(propertyNode) !== \"checkServerIdentity\" ||\n                    !isExpressionNode(propertyNode.value) ||\n                    !isFunctionExpression(propertyNode.value) ||\n                    !isAlwaysSuccessfulCheckServerIdentity(propertyNode.value)\n                ) {\n                    continue;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: propertyNode.value,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Node.js checkServerIdentity overrides that always accept the peer hostname.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-tls-check-server-identity-bypass\",\n        },\n        messages: {\n            default:\n                \"Do not bypass Node.js hostname verification with a checkServerIdentity implementation that always succeeds.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-tls-check-server-identity-bypass\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getMemberPropertyName } from \"./estree-utils.js\";\n\nconst NODE_TLS_OBJECT_NAMES = new Set([\n    \"http2\",\n    \"https\",\n    \"tls\",\n]);\nconst NODE_TLS_CALL_METHOD_NAMES = new Set([\n    \"connect\",\n    \"createSecureContext\",\n    \"createSecureServer\",\n    \"createServer\",\n    \"get\",\n    \"request\",\n]);\n\n/**\n * Check whether an expression targets a Node TLS-capable module object.\n *\n * @param expression - Expression to inspect.\n *\n * @returns Whether the expression resolves to `tls`, `https`, or `http2`.\n */\nexport const isNodeTlsObjectExpression = (\n    expression: Readonly<TSESTree.Expression>\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return setHas(NODE_TLS_OBJECT_NAMES, expression.name);\n    }\n\n    if (expression.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(expression);\n\n    return (\n        isDefined(propertyName) && setHas(NODE_TLS_OBJECT_NAMES, propertyName)\n    );\n};\n\n/**\n * Check whether a call expression targets a relevant Node TLS API sink.\n *\n * @param callee - Call-expression callee to inspect.\n *\n * @returns Whether the callee matches a TLS-relevant call site.\n */\nexport const isRelevantNodeTlsCall = (\n    callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return callee.name === \"createSecureContext\";\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const methodName = getMemberPropertyName(callee);\n\n    return (\n        isDefined(methodName) &&\n        setHas(NODE_TLS_CALL_METHOD_NAMES, methodName) &&\n        isNodeTlsObjectExpression(callee.object)\n    );\n};\n\n/**\n * Check whether a constructor call targets a relevant Node TLS constructor.\n *\n * @param callee - New-expression callee to inspect.\n *\n * @returns Whether the callee matches a TLS-relevant constructor site.\n */\nexport const isRelevantNodeTlsConstructor = (\n    callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean => {\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return (\n        getMemberPropertyName(callee) === \"Agent\" &&\n        isNodeTlsObjectExpression(callee.object)\n    );\n};\n\n/**\n * Check whether an object literal is being used as options for a relevant Node\n * TLS API.\n *\n * @param node - Object expression to inspect.\n *\n * @returns Whether the object expression belongs to a TLS-relevant call site.\n */\nexport const isRelevantNodeTlsOptionsObject = (\n    node: Readonly<TSESTree.ObjectExpression>\n): boolean => {\n    const parentNode = node.parent;\n\n    if (parentNode.type === AST_NODE_TYPES.CallExpression) {\n        return isRelevantNodeTlsCall(parentNode.callee);\n    }\n\n    if (parentNode.type === AST_NODE_TYPES.NewExpression) {\n        return isRelevantNodeTlsConstructor(parentNode.callee);\n    }\n\n    return false;\n};\n\n/**\n * Check whether an assignment left-hand side targets a static TLS member.\n *\n * @param node - Assignment left-hand side expression to inspect.\n * @param propertyNames - Allowed member names for matching.\n *\n * @returns Whether the node matches one of the targeted TLS static members.\n */\nexport const isNodeTlsStaticMember = (\n    node: Readonly<TSESTree.AssignmentExpression[\"left\"]>,\n    propertyNames: ReadonlySet<string>\n): node is TSESTree.MemberExpression => {\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(node);\n\n    return (\n        isDefined(propertyName) &&\n        setHas(propertyNames, propertyName) &&\n        isNodeTlsObjectExpression(node.object)\n    );\n};\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayIncludes, isDefined, setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\nimport {\n    isNodeTlsStaticMember,\n    isRelevantNodeTlsOptionsObject,\n} from \"../_internal/node-tls-config.js\";\n\ntype LegacyTlsPropertyName = \"maxVersion\" | \"minVersion\" | \"secureProtocol\";\ntype MessageIds = \"default\";\n\nconst LEGACY_TLS_PROPERTY_NAMES = [\n    \"maxVersion\",\n    \"minVersion\",\n    \"secureProtocol\",\n] as const satisfies readonly LegacyTlsPropertyName[];\n\nconst LEGACY_TLS_VERSION_VALUES = new Set([\n    \"TLSv1\",\n    \"TLSv1.0\",\n    \"TLSv1.1\",\n]);\n\nconst isLegacySecureProtocolValue = (value: string): boolean =>\n    /^(?:SSLv2|SSLv3|TLSv1(?:_1)?)(?:_(?:client|server))?_method$/v.test(value);\n\nconst isExpressionNode = (node: TSESTree.Node): node is TSESTree.Expression =>\n    node.type !== AST_NODE_TYPES.ArrayPattern &&\n    node.type !== AST_NODE_TYPES.AssignmentPattern &&\n    node.type !== AST_NODE_TYPES.ObjectPattern;\n\nconst isLegacyTlsPropertyValue = (\n    propertyName: LegacyTlsPropertyName,\n    configuredValue: string\n): boolean => {\n    if (propertyName === \"secureProtocol\") {\n        return isLegacySecureProtocolValue(configuredValue);\n    }\n\n    return setHas(LEGACY_TLS_VERSION_VALUES, configuredValue);\n};\n\nconst getLegacyTlsPropertyName = (\n    propertyNode: TSESTree.Property\n): LegacyTlsPropertyName | undefined => {\n    const propertyName = getPropertyName(propertyNode);\n\n    if (arrayIncludes(LEGACY_TLS_PROPERTY_NAMES, propertyName)) {\n        return propertyName;\n    }\n\n    return undefined;\n};\n\nconst isTlsDefaultVersionMember = (\n    node: TSESTree.AssignmentExpression[\"left\"]\n): node is TSESTree.MemberExpression =>\n    isNodeTlsStaticMember(\n        node,\n        new Set([\"DEFAULT_MAX_VERSION\", \"DEFAULT_MIN_VERSION\"])\n    );\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        AssignmentExpression(node: TSESTree.AssignmentExpression) {\n            if (\n                node.operator !== \"=\" ||\n                !isTlsDefaultVersionMember(node.left)\n            ) {\n                return;\n            }\n\n            const configuredValue = getStaticStringValue(node.right);\n\n            if (\n                typeof configuredValue !== \"string\" ||\n                !setHas(LEGACY_TLS_VERSION_VALUES, configuredValue)\n            ) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    configuredValue,\n                    propertyName:\n                        getMemberPropertyName(node.left) ??\n                        \"DEFAULT_MIN_VERSION\",\n                },\n                messageId: \"default\",\n                node: node.right,\n            });\n        },\n        ObjectExpression(node: TSESTree.ObjectExpression) {\n            if (!isRelevantNodeTlsOptionsObject(node)) {\n                return;\n            }\n\n            for (const propertyNode of node.properties) {\n                if (\n                    propertyNode.type !== AST_NODE_TYPES.Property ||\n                    propertyNode.kind !== \"init\"\n                ) {\n                    continue;\n                }\n\n                if (!isExpressionNode(propertyNode.value)) {\n                    continue;\n                }\n\n                const propertyName = getLegacyTlsPropertyName(propertyNode);\n\n                if (!isDefined(propertyName)) {\n                    continue;\n                }\n\n                const configuredValue = getStaticStringValue(\n                    propertyNode.value\n                );\n\n                if (\n                    typeof configuredValue !== \"string\" ||\n                    !isLegacyTlsPropertyValue(propertyName, configuredValue)\n                ) {\n                    continue;\n                }\n\n                context.report({\n                    data: {\n                        configuredValue,\n                        propertyName,\n                    },\n                    messageId: \"default\",\n                    node: propertyNode.value,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow legacy TLS protocol selection such as TLSv1/TLSv1.1 in Node.js TLS and HTTPS configuration.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-tls-legacy-protocol\",\n        },\n        messages: {\n            default:\n                \"Do not configure {{propertyName}} with legacy TLS protocol {{configuredValue}}; require TLSv1.2 or newer instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-tls-legacy-protocol\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\" | \"replaceWithTlsRejectUnauthorizedOne\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst isProcessEnvAccess = (node: TSESTree.Expression): boolean => {\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node) !== \"env\") {\n        return false;\n    }\n\n    return (\n        node.object.type === AST_NODE_TYPES.Identifier &&\n        node.object.name === \"process\"\n    );\n};\n\nconst isTlsRejectUnauthorizedMember = (\n    node: TSESTree.AssignmentExpression[\"left\"]\n): boolean => {\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node) !== \"NODE_TLS_REJECT_UNAUTHORIZED\") {\n        return false;\n    }\n\n    return isProcessEnvAccess(node.object);\n};\n\nconst isUnsafeOverrideValue = (node: TSESTree.Expression): boolean => {\n    if (node.type === AST_NODE_TYPES.Literal) {\n        return node.value === 0 || node.value === \"0\";\n    }\n\n    return (\n        node.type === AST_NODE_TYPES.TemplateLiteral &&\n        node.expressions.length === 0 &&\n        arrayFirst(node.quasis)?.value.cooked === \"0\"\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        AssignmentExpression(node: TSESTree.AssignmentExpression) {\n            if (node.operator !== \"=\") {\n                return;\n            }\n\n            if (!isTlsRejectUnauthorizedMember(node.left)) {\n                return;\n            }\n\n            if (!isUnsafeOverrideValue(node.right)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n                suggest: [\n                    {\n                        fix(fixer) {\n                            const replacementValue =\n                                node.right.type ===\n                                AST_NODE_TYPES.TemplateLiteral\n                                    ? \"`1`\"\n                                    : \"'1'\";\n\n                            return fixer.replaceText(\n                                node.right,\n                                replacementValue\n                            );\n                        },\n                        messageId: \"replaceWithTlsRejectUnauthorizedOne\",\n                    },\n                ],\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' overrides in Node.js runtime code.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-tls-reject-unauthorized-zero\",\n        },\n        hasSuggestions: true,\n        messages: {\n            default:\n                \"Do not disable TLS certificate validation with NODE_TLS_REJECT_UNAUTHORIZED=0.\",\n            replaceWithTlsRejectUnauthorizedOne:\n                \"Set NODE_TLS_REJECT_UNAUTHORIZED to '1' to keep TLS certificate validation enabled.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-tls-reject-unauthorized-zero\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\nimport {\n    isNodeTlsStaticMember,\n    isRelevantNodeTlsOptionsObject,\n} from \"../_internal/node-tls-config.js\";\n\ntype MessageIds = \"default\";\n\nconst TLS_DEFAULT_CIPHERS_PROPERTY_NAMES = new Set([\"DEFAULT_CIPHERS\"]);\nconst TLS_SECURITY_LEVEL_ZERO_PATTERN = /@seclevel\\s*=\\s*0\\b/iv;\n\nconst isExpressionNode = (node: TSESTree.Node): node is TSESTree.Expression =>\n    node.type !== AST_NODE_TYPES.ArrayPattern &&\n    node.type !== AST_NODE_TYPES.AssignmentPattern &&\n    node.type !== AST_NODE_TYPES.ObjectPattern;\n\nconst isSecurityLevelZeroCipherString = (value: string): boolean =>\n    TLS_SECURITY_LEVEL_ZERO_PATTERN.test(value);\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        AssignmentExpression(node: TSESTree.AssignmentExpression) {\n            if (\n                node.operator !== \"=\" ||\n                !isNodeTlsStaticMember(\n                    node.left,\n                    TLS_DEFAULT_CIPHERS_PROPERTY_NAMES\n                )\n            ) {\n                return;\n            }\n\n            const configuredValue = getStaticStringValue(node.right);\n\n            if (\n                typeof configuredValue !== \"string\" ||\n                !isSecurityLevelZeroCipherString(configuredValue)\n            ) {\n                return;\n            }\n\n            context.report({\n                data: {\n                    configuredValue,\n                    propertyName: \"DEFAULT_CIPHERS\",\n                },\n                messageId: \"default\",\n                node: node.right,\n            });\n        },\n        ObjectExpression(node: TSESTree.ObjectExpression) {\n            if (!isRelevantNodeTlsOptionsObject(node)) {\n                return;\n            }\n\n            for (const propertyNode of node.properties) {\n                if (\n                    propertyNode.type !== AST_NODE_TYPES.Property ||\n                    propertyNode.kind !== \"init\" ||\n                    getPropertyName(propertyNode) !== \"ciphers\" ||\n                    !isExpressionNode(propertyNode.value)\n                ) {\n                    continue;\n                }\n\n                const configuredValue = getStaticStringValue(\n                    propertyNode.value\n                );\n\n                if (\n                    typeof configuredValue !== \"string\" ||\n                    !isSecurityLevelZeroCipherString(configuredValue)\n                ) {\n                    continue;\n                }\n\n                context.report({\n                    data: {\n                        configuredValue,\n                        propertyName: \"ciphers\",\n                    },\n                    messageId: \"default\",\n                    node: propertyNode.value,\n                });\n            }\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow lowering Node.js TLS cipher security to OpenSSL security level 0.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-tls-security-level-zero\",\n        },\n        messages: {\n            default:\n                \"Do not lower TLS cipher security with {{propertyName}}={{configuredValue}}; keep Node's default security level or use a reviewed stronger cipher policy instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-tls-security-level-zero\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n} from \"../_internal/estree-utils.js\";\n\ntype DisallowedVmCallName =\n    \"compileFunction\" | \"runInContext\" | \"runInNewContext\" | \"runInThisContext\";\n\ntype DisallowedVmConstructorName = \"Script\";\n\ntype MessageIds = \"default\";\n\nconst VM_MODULE_NAMES = new Set([\"node:vm\", \"vm\"]);\nconst DISALLOWED_VM_CALL_NAMES = new Set([\n    \"compileFunction\",\n    \"runInContext\",\n    \"runInNewContext\",\n    \"runInThisContext\",\n]);\nconst DISALLOWED_VM_CONSTRUCTOR_NAMES = new Set([\"Script\"]);\n\nconst isVmModuleSource = (value: string): boolean =>\n    setHas(VM_MODULE_NAMES, value);\n\nconst isDisallowedVmCallName = (\n    value: string | undefined\n): value is DisallowedVmCallName =>\n    isDefined(value) && setHas(DISALLOWED_VM_CALL_NAMES, value);\n\nconst isDisallowedVmConstructorName = (\n    value: string | undefined\n): value is DisallowedVmConstructorName =>\n    isDefined(value) && setHas(DISALLOWED_VM_CONSTRUCTOR_NAMES, value);\n\nconst isRequireCallFromVmModule = (\n    expression: null | TSESTree.Expression\n): expression is TSESTree.CallExpression => {\n    if (\n        expression?.type !== AST_NODE_TYPES.CallExpression ||\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        expression.callee.name !== \"require\"\n    ) {\n        return false;\n    }\n\n    const [firstArgument] = expression.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        firstArgument.type === AST_NODE_TYPES.Literal &&\n        typeof firstArgument.value === \"string\" &&\n        isVmModuleSource(firstArgument.value)\n    );\n};\n\nconst getPatternIdentifier = (\n    pattern: TSESTree.Property[\"value\"]\n): TSESTree.Identifier | undefined => {\n    if (pattern.type === AST_NODE_TYPES.Identifier) {\n        return pattern;\n    }\n\n    if (\n        pattern.type === AST_NODE_TYPES.AssignmentPattern &&\n        pattern.left.type === AST_NODE_TYPES.Identifier\n    ) {\n        return pattern.left;\n    }\n\n    return undefined;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const vmCallBindingNames = new Set<string>();\n        const vmConstructorBindingNames = new Set<string>();\n        const vmNamespaceBindingNames = new Set<string>();\n\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type === AST_NODE_TYPES.Identifier) {\n                    if (!setHas(vmCallBindingNames, node.callee.name)) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (!isDisallowedVmCallName(methodName)) {\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.Identifier &&\n                    setHas(vmNamespaceBindingNames, node.callee.object.name)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.CallExpression &&\n                    isRequireCallFromVmModule(node.callee.object)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n                }\n            },\n            ImportDeclaration(node: TSESTree.ImportDeclaration) {\n                if (!isVmModuleSource(node.source.value)) {\n                    return;\n                }\n\n                for (const specifierNode of node.specifiers) {\n                    if (\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportDefaultSpecifier ||\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportNamespaceSpecifier\n                    ) {\n                        vmNamespaceBindingNames.add(specifierNode.local.name);\n                        continue;\n                    }\n\n                    const importedName =\n                        specifierNode.imported.type ===\n                        AST_NODE_TYPES.Identifier\n                            ? specifierNode.imported.name\n                            : specifierNode.imported.value;\n\n                    if (isDisallowedVmCallName(importedName)) {\n                        vmCallBindingNames.add(specifierNode.local.name);\n                        continue;\n                    }\n\n                    if (isDisallowedVmConstructorName(importedName)) {\n                        vmConstructorBindingNames.add(specifierNode.local.name);\n                    }\n                }\n            },\n            NewExpression(node: TSESTree.NewExpression) {\n                if (node.callee.type === AST_NODE_TYPES.Identifier) {\n                    if (!setHas(vmConstructorBindingNames, node.callee.name)) {\n                        return;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const constructorName = getMemberPropertyName(node.callee);\n\n                if (!isDisallowedVmConstructorName(constructorName)) {\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.Identifier &&\n                    setHas(vmNamespaceBindingNames, node.callee.object.name)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n\n                    return;\n                }\n\n                if (\n                    node.callee.object.type === AST_NODE_TYPES.CallExpression &&\n                    isRequireCallFromVmModule(node.callee.object)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: node.callee,\n                    });\n                }\n            },\n            VariableDeclarator(node: TSESTree.VariableDeclarator) {\n                if (!isRequireCallFromVmModule(node.init)) {\n                    return;\n                }\n\n                if (node.id.type === AST_NODE_TYPES.Identifier) {\n                    vmNamespaceBindingNames.add(node.id.name);\n                    return;\n                }\n\n                if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n                    return;\n                }\n\n                for (const propertyNode of node.id.properties) {\n                    if (\n                        propertyNode.type !== AST_NODE_TYPES.Property ||\n                        propertyNode.computed\n                    ) {\n                        continue;\n                    }\n\n                    const importedName = getPropertyName(propertyNode);\n                    const localIdentifier = getPatternIdentifier(\n                        propertyNode.value\n                    );\n\n                    if (localIdentifier === undefined) {\n                        continue;\n                    }\n\n                    if (isDisallowedVmCallName(importedName)) {\n                        vmCallBindingNames.add(localIdentifier.name);\n                        continue;\n                    }\n\n                    if (isDisallowedVmConstructorName(importedName)) {\n                        vmConstructorBindingNames.add(localIdentifier.name);\n                    }\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow node:vm dynamic code execution APIs that are commonly mistaken for a security sandbox.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-vm-run-in-context\",\n        },\n        messages: {\n            default:\n                \"Do not execute dynamic code through node:vm run/compile APIs; the vm module is not a security boundary.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-vm-run-in-context\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst VM_MODULE_NAMES = new Set([\"node:vm\", \"vm\"]);\nconst SOURCE_TEXT_MODULE_NAME = \"SourceTextModule\";\n\nconst isVmModuleSource = (value: string): boolean =>\n    setHas(VM_MODULE_NAMES, value);\n\nconst isRequireCallFromVmModule = (\n    expression: null | TSESTree.Expression\n): expression is TSESTree.CallExpression => {\n    if (\n        expression?.type !== AST_NODE_TYPES.CallExpression ||\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        expression.callee.name !== \"require\"\n    ) {\n        return false;\n    }\n\n    const [firstArgument] = expression.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        firstArgument.type === AST_NODE_TYPES.Literal &&\n        typeof firstArgument.value === \"string\" &&\n        isVmModuleSource(firstArgument.value)\n    );\n};\n\nconst getPatternIdentifier = (\n    pattern: TSESTree.Property[\"value\"]\n): TSESTree.Identifier | undefined => {\n    if (pattern.type === AST_NODE_TYPES.Identifier) {\n        return pattern;\n    }\n\n    if (\n        pattern.type === AST_NODE_TYPES.AssignmentPattern &&\n        pattern.left.type === AST_NODE_TYPES.Identifier\n    ) {\n        return pattern.left;\n    }\n\n    return undefined;\n};\n\nconst isSourceTextModuleConstructor = (\n    callee: Readonly<TSESTree.NewExpression[\"callee\"]>,\n    sourceTextModuleBindingNames: ReadonlySet<string>,\n    vmNamespaceBindingNames: ReadonlySet<string>\n): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return setHas(sourceTextModuleBindingNames, callee.name);\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(callee) !== SOURCE_TEXT_MODULE_NAME) {\n        return false;\n    }\n\n    return (\n        (callee.object.type === AST_NODE_TYPES.Identifier &&\n            setHas(vmNamespaceBindingNames, callee.object.name)) ||\n        (callee.object.type === AST_NODE_TYPES.CallExpression &&\n            isRequireCallFromVmModule(callee.object))\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const sourceTextModuleBindingNames = new Set<string>();\n        const vmNamespaceBindingNames = new Set<string>();\n\n        return {\n            ImportDeclaration(node: TSESTree.ImportDeclaration) {\n                if (!isVmModuleSource(node.source.value)) {\n                    return;\n                }\n\n                for (const specifierNode of node.specifiers) {\n                    if (\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportDefaultSpecifier ||\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportNamespaceSpecifier\n                    ) {\n                        vmNamespaceBindingNames.add(specifierNode.local.name);\n                        continue;\n                    }\n\n                    const importedName =\n                        specifierNode.imported.type ===\n                        AST_NODE_TYPES.Identifier\n                            ? specifierNode.imported.name\n                            : specifierNode.imported.value;\n\n                    if (importedName === SOURCE_TEXT_MODULE_NAME) {\n                        sourceTextModuleBindingNames.add(\n                            specifierNode.local.name\n                        );\n                    }\n                }\n            },\n            NewExpression(node: TSESTree.NewExpression) {\n                if (\n                    !isSourceTextModuleConstructor(\n                        node.callee,\n                        sourceTextModuleBindingNames,\n                        vmNamespaceBindingNames\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: node.callee,\n                });\n            },\n            VariableDeclarator(node: TSESTree.VariableDeclarator) {\n                if (!isRequireCallFromVmModule(node.init)) {\n                    return;\n                }\n\n                if (node.id.type === AST_NODE_TYPES.Identifier) {\n                    vmNamespaceBindingNames.add(node.id.name);\n                    return;\n                }\n\n                if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n                    return;\n                }\n\n                for (const propertyNode of node.id.properties) {\n                    if (\n                        propertyNode.type !== AST_NODE_TYPES.Property ||\n                        propertyNode.computed\n                    ) {\n                        continue;\n                    }\n\n                    if (\n                        getPropertyName(propertyNode) !==\n                        SOURCE_TEXT_MODULE_NAME\n                    ) {\n                        continue;\n                    }\n\n                    const localIdentifier = getPatternIdentifier(\n                        propertyNode.value\n                    );\n\n                    if (localIdentifier === undefined) {\n                        continue;\n                    }\n\n                    sourceTextModuleBindingNames.add(localIdentifier.name);\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow node:vm SourceTextModule constructors that compile JavaScript source strings into executable modules.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-vm-source-text-module\",\n        },\n        messages: {\n            default:\n                \"Do not compile code with node:vm SourceTextModule; loading executable modules from source strings is not a security boundary.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-vm-source-text-module\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst WORKER_THREADS_MODULE_NAMES = new Set([\n    \"node:worker_threads\",\n    \"worker_threads\",\n]);\n\nconst isWorkerThreadsModuleSource = (value: string): boolean =>\n    setHas(WORKER_THREADS_MODULE_NAMES, value);\n\nconst isRequireCallFromWorkerThreads = (\n    expression: null | TSESTree.Expression\n): expression is TSESTree.CallExpression => {\n    if (\n        expression?.type !== AST_NODE_TYPES.CallExpression ||\n        expression.callee.type !== AST_NODE_TYPES.Identifier ||\n        expression.callee.name !== \"require\"\n    ) {\n        return false;\n    }\n\n    const [firstArgument] = expression.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        firstArgument.type === AST_NODE_TYPES.Literal &&\n        typeof firstArgument.value === \"string\" &&\n        isWorkerThreadsModuleSource(firstArgument.value)\n    );\n};\n\nconst getPatternIdentifier = (\n    pattern: TSESTree.Property[\"value\"]\n): TSESTree.Identifier | undefined => {\n    if (pattern.type === AST_NODE_TYPES.Identifier) {\n        return pattern;\n    }\n\n    if (\n        pattern.type === AST_NODE_TYPES.AssignmentPattern &&\n        pattern.left.type === AST_NODE_TYPES.Identifier\n    ) {\n        return pattern.left;\n    }\n\n    return undefined;\n};\n\nconst hasEvalTrueOption = (\n    optionsNode: Readonly<TSESTree.Expression>\n): boolean => {\n    if (optionsNode.type !== AST_NODE_TYPES.ObjectExpression) {\n        return false;\n    }\n\n    for (const propertyNode of optionsNode.properties) {\n        if (\n            propertyNode.type !== AST_NODE_TYPES.Property ||\n            propertyNode.kind !== \"init\"\n        ) {\n            continue;\n        }\n\n        if (getPropertyName(propertyNode) !== \"eval\") {\n            continue;\n        }\n\n        if (\n            propertyNode.value.type === AST_NODE_TYPES.Literal &&\n            propertyNode.value.value === true\n        ) {\n            return true;\n        }\n    }\n\n    return false;\n};\n\nconst isWorkerThreadsWorkerConstructor = (\n    callee: Readonly<TSESTree.NewExpression[\"callee\"]>,\n    workerBindingNames: ReadonlySet<string>,\n    workerThreadsNamespaceBindingNames: ReadonlySet<string>\n): boolean => {\n    if (callee.type === AST_NODE_TYPES.Identifier) {\n        return setHas(workerBindingNames, callee.name);\n    }\n\n    if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(callee) !== \"Worker\") {\n        return false;\n    }\n\n    return (\n        (callee.object.type === AST_NODE_TYPES.Identifier &&\n            setHas(workerThreadsNamespaceBindingNames, callee.object.name)) ||\n        (callee.object.type === AST_NODE_TYPES.CallExpression &&\n            isRequireCallFromWorkerThreads(callee.object))\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const workerBindingNames = new Set<string>();\n        const workerThreadsNamespaceBindingNames = new Set<string>();\n\n        return {\n            ImportDeclaration(node: TSESTree.ImportDeclaration) {\n                if (!isWorkerThreadsModuleSource(node.source.value)) {\n                    return;\n                }\n\n                for (const specifierNode of node.specifiers) {\n                    if (\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportDefaultSpecifier ||\n                        specifierNode.type ===\n                            AST_NODE_TYPES.ImportNamespaceSpecifier\n                    ) {\n                        workerThreadsNamespaceBindingNames.add(\n                            specifierNode.local.name\n                        );\n                        continue;\n                    }\n\n                    const importedName =\n                        specifierNode.imported.type ===\n                        AST_NODE_TYPES.Identifier\n                            ? specifierNode.imported.name\n                            : specifierNode.imported.value;\n\n                    if (importedName === \"Worker\") {\n                        workerBindingNames.add(specifierNode.local.name);\n                    }\n                }\n            },\n            NewExpression(node: TSESTree.NewExpression) {\n                if (\n                    !isWorkerThreadsWorkerConstructor(\n                        node.callee,\n                        workerBindingNames,\n                        workerThreadsNamespaceBindingNames\n                    )\n                ) {\n                    return;\n                }\n\n                const [, secondArgument] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !hasEvalTrueOption(secondArgument)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n            VariableDeclarator(node: TSESTree.VariableDeclarator) {\n                if (!isRequireCallFromWorkerThreads(node.init)) {\n                    return;\n                }\n\n                if (node.id.type === AST_NODE_TYPES.Identifier) {\n                    workerThreadsNamespaceBindingNames.add(node.id.name);\n                    return;\n                }\n\n                if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n                    return;\n                }\n\n                for (const propertyNode of node.id.properties) {\n                    if (\n                        propertyNode.type !== AST_NODE_TYPES.Property ||\n                        propertyNode.computed\n                    ) {\n                        continue;\n                    }\n\n                    if (getPropertyName(propertyNode) !== \"Worker\") {\n                        continue;\n                    }\n\n                    const localIdentifier = getPatternIdentifier(\n                        propertyNode.value\n                    );\n\n                    if (localIdentifier === undefined) {\n                        continue;\n                    }\n\n                    workerBindingNames.add(localIdentifier.name);\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow node:worker_threads Worker options that enable eval: true string execution.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-node-worker-threads-eval\",\n        },\n        messages: {\n            default:\n                \"Do not enable eval: true for node:worker_threads Worker instances; prefer reviewed worker script files instead of string-backed execution.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-node-worker-threads-eval\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst SECURITY_INPUT_PATTERN = /html|input|message|origin|payload|token|url/iv;\n\nconst isSecuritySensitiveExpression = (\n    expression: TSESTree.Expression\n): boolean => {\n    if (expression.type === AST_NODE_TYPES.Identifier) {\n        return SECURITY_INPUT_PATTERN.test(expression.name);\n    }\n\n    if (\n        expression.type === AST_NODE_TYPES.MemberExpression &&\n        !expression.computed &&\n        expression.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return SECURITY_INPUT_PATTERN.test(expression.property.name);\n    }\n\n    return false;\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        TSNonNullExpression(node: TSESTree.TSNonNullExpression) {\n            if (!isSecuritySensitiveExpression(node.expression)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow non-null assertions on likely security-sensitive input values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-nonnull-assertion-on-security-input\",\n        },\n        messages: {\n            default:\n                \"Avoid non-null assertions on security-sensitive inputs; validate before use.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-nonnull-assertion-on-security-input\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayIncludes, isDefined } from \"ts-extras\";\n\nimport {\n    getFullTypeChecker,\n    getNodeTypeAsString,\n} from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\" | \"replaceWithExplicitOrigin\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            \"CallExpression[arguments.length>=2][arguments.length<=3][callee.property.name='postMessage']\"(\n                node: TSESTree.CallExpression\n            ) {\n                const [, targetOrigin] = node.arguments;\n\n                if (\n                    !isDefined(targetOrigin) ||\n                    targetOrigin.type !== AST_NODE_TYPES.Literal ||\n                    targetOrigin.value !== \"*\"\n                ) {\n                    return;\n                }\n\n                if (\n                    isDefined(fullTypeChecker) &&\n                    node.callee.type === AST_NODE_TYPES.MemberExpression\n                ) {\n                    const calleeObjectType = getNodeTypeAsString(\n                        fullTypeChecker,\n                        node.callee.object,\n                        context\n                    );\n\n                    if (!arrayIncludes([\"any\", \"Window\"], calleeObjectType)) {\n                        return;\n                    }\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: targetOrigin,\n                    suggest: [\n                        {\n                            fix: (fixer) =>\n                                fixer.replaceText(\n                                    targetOrigin,\n                                    \"location.origin\"\n                                ),\n                            messageId: \"replaceWithExplicitOrigin\",\n                        },\n                    ],\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow '*' targetOrigin in postMessage calls to prevent cross-origin data leakage.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-postmessage-star-origin\",\n        },\n        hasSuggestions: true,\n        messages: {\n            default:\n                \"Do not use '*' as targetOrigin when sending data with postMessage.\",\n            replaceWithExplicitOrigin:\n                \"Replace '*' with a specific trusted origin, such as location.origin.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-postmessage-star-origin\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getMemberPropertyName = (\n    memberExpression: TSESTree.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    if (\n        memberExpression.property.type === AST_NODE_TYPES.Literal &&\n        typeof memberExpression.property.value === \"string\"\n    ) {\n        return memberExpression.property.value;\n    }\n\n    return undefined;\n};\n\nconst getStaticStringValue = (\n    node: TSESTree.Expression\n): string | undefined => {\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    ) {\n        return arrayFirst(node.quasis)?.value.cooked ?? undefined;\n    }\n\n    return undefined;\n};\n\nconst isAllowedOriginLiteral = (origin: string): boolean => {\n    const normalizedOrigin = origin.trim();\n\n    if (normalizedOrigin === \"\") {\n        return false;\n    }\n\n    if (normalizedOrigin.includes(\"*\")) {\n        return false;\n    }\n\n    return /^https?:\\/\\//iv.test(normalizedOrigin);\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (getMemberPropertyName(node.callee) !== \"postMessage\") {\n                    return;\n                }\n\n                const [, secondArgument] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const secondArgumentValue =\n                    getStaticStringValue(secondArgument);\n\n                if (\n                    typeof secondArgumentValue === \"string\" &&\n                    isAllowedOriginLiteral(secondArgumentValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"require explicit, allowlisted postMessage target origins instead of wildcard/dynamic values.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-postmessage-without-origin-allowlist\",\n        },\n        messages: {\n            default:\n                \"Use a strict, explicit allowlisted origin for postMessage targetOrigin.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-postmessage-without-origin-allowlist\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isSanitizedExpression = (node: TSESTree.Expression): boolean => {\n    if (node.type !== AST_NODE_TYPES.CallExpression) {\n        return false;\n    }\n\n    if (node.callee.type === AST_NODE_TYPES.Identifier) {\n        return /createhtml|sanitize|trusted/v.test(\n            node.callee.name.toLowerCase()\n        );\n    }\n\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(node.callee);\n\n    return (\n        typeof propertyName === \"string\" &&\n        /createhtml|sanitize|trusted/v.test(propertyName.toLowerCase())\n    );\n};\n\nconst isCreateContextualFragmentCall = (\n    node: TSESTree.CallExpression\n): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(node.callee) === \"createContextualFragment\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isCreateContextualFragmentCall(node)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    getStaticStringValue(firstArgument) === \"\" ||\n                    isSanitizedExpression(firstArgument)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Range.createContextualFragment(...) calls on unsanitized HTML input.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-range-create-contextual-fragment\",\n        },\n        messages: {\n            default:\n                \"Sanitize HTML before passing it to Range.createContextualFragment().\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-range-create-contextual-fragment\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { getFullTypeChecker } from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticJsxAttributeStringValue,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\nimport { isLikelyScriptElement } from \"../_internal/script-element.js\";\n\ntype MessageIds = \"default\";\n\nconst isDataUrl = (value: string): boolean => /^\\s*data:/iv.test(value);\n\nconst isJsxScriptElement = (node: TSESTree.JSXOpeningElement): boolean =>\n    node.name.type === AST_NODE_TYPES.JSXIdentifier &&\n    node.name.name.toLowerCase() === \"script\";\n\nconst getJsxAttributeName = (\n    attributeNode: TSESTree.JSXAttribute\n): string | undefined => {\n    if (attributeNode.name.type !== AST_NODE_TYPES.JSXIdentifier) {\n        return undefined;\n    }\n\n    return attributeNode.name.name.toLowerCase();\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            AssignmentExpression(node: TSESTree.AssignmentExpression) {\n                if (node.left.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (getMemberPropertyName(node.left) !== \"src\") {\n                    return;\n                }\n\n                const configuredValue = getStaticStringValue(node.right);\n\n                if (\n                    typeof configuredValue !== \"string\" ||\n                    !isDataUrl(configuredValue) ||\n                    !isLikelyScriptElement(\n                        node.left.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: node.right,\n                });\n            },\n            CallExpression(node: TSESTree.CallExpression) {\n                if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                const methodName = getMemberPropertyName(node.callee);\n\n                if (\n                    methodName !== \"setAttribute\" &&\n                    methodName !== \"setAttributeNS\"\n                ) {\n                    return;\n                }\n\n                const [firstArgument, secondArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    getStaticStringValue(firstArgument) !== \"src\" ||\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const configuredValue = getStaticStringValue(secondArgument);\n\n                if (\n                    typeof configuredValue !== \"string\" ||\n                    !isDataUrl(configuredValue) ||\n                    !isLikelyScriptElement(\n                        node.callee.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: secondArgument,\n                });\n            },\n            JSXOpeningElement(node: TSESTree.JSXOpeningElement) {\n                if (!isJsxScriptElement(node)) {\n                    return;\n                }\n\n                for (const attributeNode of node.attributes) {\n                    if (attributeNode.type !== AST_NODE_TYPES.JSXAttribute) {\n                        continue;\n                    }\n\n                    if (getJsxAttributeName(attributeNode) !== \"src\") {\n                        continue;\n                    }\n\n                    const staticValue = getStaticJsxAttributeStringValue(\n                        attributeNode.value\n                    );\n\n                    if (\n                        typeof staticValue !== \"string\" ||\n                        !isDataUrl(staticValue)\n                    ) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: attributeNode,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow HTMLScriptElement src values that load executable code from data: URLs.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-script-src-data-url\",\n        },\n        messages: {\n            default:\n                \"Do not load script code from a data: URL; use a reviewed external resource or module instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-script-src-data-url\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { type getFullTypeChecker, getNodeTypeAsString } from \"./ast-utils.js\";\nimport { getMemberPropertyName, getStaticStringValue } from \"./estree-utils.js\";\n\n/** ESLint rule context shape accepted by AST/type helper utilities. */\nexport type AstUtilsRuleContext = Parameters<typeof getFullTypeChecker>[0];\n\nconst isLikelyScriptIdentifierName = (identifierName: string): boolean =>\n    identifierName === \"currentScript\" ||\n    identifierName === \"script\" ||\n    identifierName === \"scriptElement\" ||\n    identifierName.endsWith(\"Script\") ||\n    identifierName.endsWith(\"ScriptElement\") ||\n    identifierName.endsWith(\"_script\") ||\n    identifierName.endsWith(\"_script_element\");\n\nconst isCreateElementScriptCall = (node: TSESTree.Node): boolean => {\n    if (\n        node.type !== AST_NODE_TYPES.CallExpression ||\n        node.callee.type !== AST_NODE_TYPES.MemberExpression\n    ) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"createElement\") {\n        return false;\n    }\n\n    const [firstArgument] = node.arguments;\n\n    return (\n        firstArgument !== undefined &&\n        firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n        getStaticStringValue(firstArgument) === \"script\"\n    );\n};\n\n/** Returns whether an AST node likely refers to an `HTMLScriptElement`. */\nexport const isLikelyScriptElement = (\n    node: TSESTree.Node,\n    context: AstUtilsRuleContext,\n    fullTypeChecker: ReturnType<typeof getFullTypeChecker>\n): boolean => {\n    if (fullTypeChecker !== undefined) {\n        const nodeType = getNodeTypeAsString(fullTypeChecker, node, context);\n\n        if (nodeType.includes(\"HTMLScriptElement\")) {\n            return true;\n        }\n    }\n\n    if (isCreateElementScriptCall(node)) {\n        return true;\n    }\n\n    if (node.type === AST_NODE_TYPES.Identifier) {\n        return isLikelyScriptIdentifierName(node.name);\n    }\n\n    if (node.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    const propertyName = getMemberPropertyName(node);\n\n    return (\n        typeof propertyName === \"string\" &&\n        (propertyName === \"currentScript\" ||\n            isLikelyScriptIdentifierName(propertyName))\n    );\n};\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayIncludes } from \"ts-extras\";\n\nimport { getFullTypeChecker } from \"../_internal/ast-utils.js\";\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\nimport { isLikelyScriptElement } from \"../_internal/script-element.js\";\n\ntype MessageIds = \"default\";\n\nconst isScriptTextPropertyName = (propertyName: string | undefined): boolean =>\n    arrayIncludes(\n        [\n            \"innerText\",\n            \"text\",\n            \"textContent\",\n        ],\n        propertyName ?? \"\"\n    );\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        const fullTypeChecker = getFullTypeChecker(context);\n\n        return {\n            AssignmentExpression(node: TSESTree.AssignmentExpression) {\n                if (node.left.type !== AST_NODE_TYPES.MemberExpression) {\n                    return;\n                }\n\n                if (\n                    !isScriptTextPropertyName(getMemberPropertyName(node.left))\n                ) {\n                    return;\n                }\n\n                if (getStaticStringValue(node.right) === \"\") {\n                    return;\n                }\n\n                if (\n                    !isLikelyScriptElement(\n                        node.left.object,\n                        context,\n                        fullTypeChecker\n                    )\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: node.right,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow assigning executable code through HTMLScriptElement text, textContent, or innerText sinks.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-script-text\",\n        },\n        messages: {\n            default:\n                \"Do not inject executable code through script text sinks; load a reviewed script resource or module instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-script-text\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\nimport {\n    isBlobUrl,\n    isDataUrl,\n    isServiceWorkerRegisterCall,\n    isUrlCreateObjectUrlCall,\n} from \"../_internal/worker-code-loading.js\";\n\ntype MessageIds = \"default\";\n\nconst isJavaScriptUrl = (value: string): boolean =>\n    /^\\s*javascript\\s*:/iv.test(value);\n\nconst isUnsafeServiceWorkerScriptUrl = (\n    expression: Readonly<TSESTree.Expression>\n): boolean => {\n    const configuredValue = getStaticStringValue(expression);\n\n    return (\n        (typeof configuredValue === \"string\" &&\n            (isBlobUrl(configuredValue) ||\n                isDataUrl(configuredValue) ||\n                isJavaScriptUrl(configuredValue))) ||\n        isUrlCreateObjectUrlCall(expression)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isServiceWorkerRegisterCall(node.callee)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isUnsafeServiceWorkerScriptUrl(firstArgument)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow unsafe service worker script URLs such as data:, blob:, javascript:, and direct URL.createObjectURL(...) registrations.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-service-worker-unsafe-script-url\",\n        },\n        messages: {\n            default:\n                \"Do not register a service worker from data:, blob:, javascript:, or URL.createObjectURL(...) script URLs.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-service-worker-unsafe-script-url\",\n});\n\nexport default rule;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getStaticStringValue,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\nconst isSetHtmlUnsafeCall = (node: TSESTree.CallExpression): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(node.callee) === \"setHTMLUnsafe\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isSetHtmlUnsafeCall(node)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument !== undefined &&\n                    firstArgument.type !== AST_NODE_TYPES.SpreadElement &&\n                    getStaticStringValue(firstArgument) === \"\"\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow setHTMLUnsafe() calls that bypass the safer HTML Sanitizer API path.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-set-html-unsafe\",\n        },\n        messages: {\n            default:\n                \"Do not call setHTMLUnsafe(); use setHTML() or build DOM nodes safely instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-set-html-unsafe\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport {\n    getMemberPropertyName,\n    getPropertyName,\n} from \"../_internal/estree-utils.js\";\n\ntype MessageIds = \"default\";\n\ntype PolicyFactoryFunction =\n    TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression;\n\nconst isExpressionNode = (node: TSESTree.Node): node is TSESTree.Expression =>\n    node.type !== AST_NODE_TYPES.ArrayPattern &&\n    node.type !== AST_NODE_TYPES.AssignmentPattern &&\n    node.type !== AST_NODE_TYPES.ObjectPattern;\n\nconst POLICY_FACTORY_NAMES = new Set([\n    \"createHTML\",\n    \"createScript\",\n    \"createScriptURL\",\n]);\n\nconst isFunctionExpression = (\n    expression: TSESTree.Expression\n): expression is PolicyFactoryFunction =>\n    expression.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n    expression.type === AST_NODE_TYPES.FunctionExpression;\n\nconst unwrapTransparentExpression = (\n    expression: TSESTree.Expression\n): TSESTree.Expression => {\n    if (\n        expression.type === AST_NODE_TYPES.TSAsExpression ||\n        expression.type === AST_NODE_TYPES.TSTypeAssertion\n    ) {\n        return unwrapTransparentExpression(expression.expression);\n    }\n\n    return expression;\n};\n\nconst isPassThroughFactory = (factoryNode: PolicyFactoryFunction): boolean => {\n    const [firstParameter] = factoryNode.params;\n\n    if (firstParameter?.type !== AST_NODE_TYPES.Identifier) {\n        return false;\n    }\n\n    if (factoryNode.body.type !== AST_NODE_TYPES.BlockStatement) {\n        const expressionBody = unwrapTransparentExpression(factoryNode.body);\n\n        return (\n            expressionBody.type === AST_NODE_TYPES.Identifier &&\n            expressionBody.name === firstParameter.name\n        );\n    }\n\n    if (factoryNode.body.body.length !== 1) {\n        return false;\n    }\n\n    const onlyStatement = arrayFirst(factoryNode.body.body);\n\n    if (\n        onlyStatement?.type !== AST_NODE_TYPES.ReturnStatement ||\n        onlyStatement.argument === null\n    ) {\n        return false;\n    }\n\n    const returnedExpression = unwrapTransparentExpression(\n        onlyStatement.argument\n    );\n\n    return (\n        returnedExpression.type === AST_NODE_TYPES.Identifier &&\n        returnedExpression.name === firstParameter.name\n    );\n};\n\nconst isTrustedTypesCreatePolicyCall = (\n    node: TSESTree.CallExpression\n): boolean => {\n    if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    if (getMemberPropertyName(node.callee) !== \"createPolicy\") {\n        return false;\n    }\n\n    if (node.callee.object.type === AST_NODE_TYPES.Identifier) {\n        return node.callee.object.name === \"trustedTypes\";\n    }\n\n    if (node.callee.object.type !== AST_NODE_TYPES.MemberExpression) {\n        return false;\n    }\n\n    return getMemberPropertyName(node.callee.object) === \"trustedTypes\";\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isTrustedTypesCreatePolicyCall(node)) {\n                    return;\n                }\n\n                const [, secondArgument] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    secondArgument.type !== AST_NODE_TYPES.ObjectExpression\n                ) {\n                    return;\n                }\n\n                for (const propertyNode of secondArgument.properties) {\n                    if (\n                        propertyNode.type !== AST_NODE_TYPES.Property ||\n                        propertyNode.kind !== \"init\"\n                    ) {\n                        continue;\n                    }\n\n                    const propertyName = getPropertyName(propertyNode);\n\n                    if (\n                        !isDefined(propertyName) ||\n                        !setHas(POLICY_FACTORY_NAMES, propertyName) ||\n                        !isExpressionNode(propertyNode.value) ||\n                        !isFunctionExpression(propertyNode.value) ||\n                        !isPassThroughFactory(propertyNode.value)\n                    ) {\n                        continue;\n                    }\n\n                    context.report({\n                        data: {\n                            methodName: propertyName,\n                        },\n                        messageId: \"default\",\n                        node: propertyNode,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow pass-through Trusted Types policies that return unvalidated input unchanged.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-trusted-types-policy-pass-through\",\n        },\n        messages: {\n            default:\n                \"Do not implement {{methodName}} as a Trusted Types pass-through; sanitize or validate the input first.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-trusted-types-policy-pass-through\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create(context) {\n        return {\n            \"MemberExpression[object.name='Buffer'][property.name=/^(?:allocUnsafe|allocUnsafeSlow)$/]\"(\n                node: TSESTree.MemberExpression\n            ) {\n                const parentNode = node.parent;\n\n                if (\n                    parentNode.type === AST_NODE_TYPES.CallExpression &&\n                    parentNode.arguments.length === 1\n                ) {\n                    const [firstArgument] = parentNode.arguments;\n\n                    if (\n                        firstArgument?.type === AST_NODE_TYPES.Literal &&\n                        (firstArgument.value === 0 ||\n                            firstArgument.value === \"0\")\n                    ) {\n                        return;\n                    }\n                }\n\n                context.report({\n                    fix(fixer) {\n                        if (\n                            node.computed ||\n                            node.property.type !== AST_NODE_TYPES.Identifier\n                        ) {\n                            return null;\n                        }\n\n                        return fixer.replaceText(node.property, \"alloc\");\n                    },\n                    messageId: \"default\",\n                    node,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow Buffer.allocUnsafe/allocUnsafeSlow allocations that may expose uninitialized memory.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-unsafe-alloc\",\n        },\n        fixable: \"code\",\n        messages: {\n            default: \"Do not allocate uninitialized buffers in Node.js.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-unsafe-alloc\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst TRUSTED_TYPE_NAMES = new Set([\n    \"TrustedHTML\",\n    \"TrustedScript\",\n    \"TrustedScriptURL\",\n]);\n\nconst getTypeName = (node: TSESTree.TypeNode): string | undefined => {\n    if (\n        node.type === AST_NODE_TYPES.TSTypeReference &&\n        node.typeName.type === AST_NODE_TYPES.Identifier\n    ) {\n        return node.typeName.name;\n    }\n\n    return undefined;\n};\n\nconst isTrustedTypeNode = (node: TSESTree.TypeNode): boolean => {\n    const typeName = getTypeName(node);\n\n    return isDefined(typeName) && setHas(TRUSTED_TYPE_NAMES, typeName);\n};\n\nconst getExpressionCalleeName = (\n    expression: TSESTree.Expression\n): string | undefined => {\n    if (expression.type !== AST_NODE_TYPES.CallExpression) {\n        return undefined;\n    }\n\n    if (expression.callee.type === AST_NODE_TYPES.Identifier) {\n        return expression.callee.name;\n    }\n\n    if (\n        expression.callee.type === AST_NODE_TYPES.MemberExpression &&\n        !expression.callee.computed &&\n        expression.callee.property.type === AST_NODE_TYPES.Identifier\n    ) {\n        return expression.callee.property.name;\n    }\n\n    return undefined;\n};\n\nconst isKnownTrustedFactoryCall = (\n    expression: TSESTree.Expression\n): boolean => {\n    const calleeName = getExpressionCalleeName(expression);\n\n    if (!isDefined(calleeName)) {\n        return false;\n    }\n\n    return /sanitize|createhtml|createscripturl|createscript|trusted/v.test(\n        calleeName.toLowerCase()\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create: (context) => ({\n        TSAsExpression(node: TSESTree.TSAsExpression) {\n            if (!isTrustedTypeNode(node.typeAnnotation)) {\n                return;\n            }\n\n            if (isKnownTrustedFactoryCall(node.expression)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n        TSTypeAssertion(node: TSESTree.TSTypeAssertion) {\n            if (!isTrustedTypeNode(node.typeAnnotation)) {\n                return;\n            }\n\n            if (isKnownTrustedFactoryCall(node.expression)) {\n                return;\n            }\n\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow unsafe casts to Trusted Types without validated/trusted factory paths.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-unsafe-cast-to-trusted-types\",\n        },\n        messages: {\n            default: \"Do not cast unvalidated values to Trusted Types.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-unsafe-cast-to-trusted-types\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, stringSplit } from \"ts-extras\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\n\ntype MessageIds = \"default\";\n\nconst getStaticStringValue = (\n    node: TSESTree.Expression\n): string | undefined => {\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    ) {\n        const firstQuasi = arrayFirst(node.quasis);\n\n        if (\n            !isDefined(firstQuasi) ||\n            typeof firstQuasi.value.cooked !== \"string\"\n        ) {\n            return undefined;\n        }\n\n        return firstQuasi.value.cooked;\n    }\n\n    return undefined;\n};\n\nconst isWindowOpenCallee = (\n    callee: TSESTree.CallExpression[\"callee\"]\n): boolean => {\n    if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.computed) {\n        return false;\n    }\n\n    return (\n        callee.object.type === AST_NODE_TYPES.Identifier &&\n        callee.object.name === \"window\" &&\n        callee.property.type === AST_NODE_TYPES.Identifier &&\n        callee.property.name === \"open\"\n    );\n};\n\nconst hasNoopenerToken = (features: string): boolean =>\n    stringSplit(features.toLowerCase(), \",\")\n        .map((token) => token.trim())\n        .some((token) => token === \"noopener\" || token.startsWith(\"noopener=\"));\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isWindowOpenCallee(node.callee)) {\n                    return;\n                }\n\n                const [\n                    ,\n                    secondArgument,\n                    thirdArgument,\n                ] = node.arguments;\n\n                if (\n                    secondArgument === undefined ||\n                    secondArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const targetValue = getStaticStringValue(secondArgument);\n\n                if (targetValue !== \"_blank\") {\n                    return;\n                }\n\n                if (\n                    thirdArgument === undefined ||\n                    thirdArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node,\n                    });\n\n                    return;\n                }\n\n                const featuresValue = getStaticStringValue(thirdArgument);\n\n                if (\n                    typeof featuresValue !== \"string\" ||\n                    !hasNoopenerToken(featuresValue)\n                ) {\n                    context.report({\n                        messageId: \"default\",\n                        node: thirdArgument,\n                    });\n                }\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"require noopener when using window.open with a _blank target.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-window-open-without-noopener\",\n        },\n        messages: {\n            default:\n                \"Include 'noopener' in window.open features when target is '_blank'.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-window-open-without-noopener\",\n});\n\nexport default rule;\n", "import { createRule } from \"../_internal/create-rule.js\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], \"default\">({\n    create: (context) => ({\n        \"CallExpression[callee.object.object.name='WinJS'][callee.object.property.name='Utilities'][callee.property.name=/^(?:insertAdjacent|setInner|setOuter)HTMLUnsafe$/]\"(\n            node\n        ) {\n            context.report({\n                messageId: \"default\",\n                node,\n            });\n        },\n    }),\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow WinJS.Utilities unsafe HTML write APIs (setInnerHTMLUnsafe, setOuterHTMLUnsafe, insertAdjacentHTMLUnsafe).\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-winjs-html-unsafe\",\n        },\n        messages: {\n            default:\n                \"Do not set HTML using unsafe methods from WinJS.Utilities.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-winjs-html-unsafe\",\n});\n\nexport default rule;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\nimport {\n    isBlobUrl,\n    isImportScriptsCall,\n    isUrlCreateObjectUrlCall,\n    isWorkerConstructor,\n} from \"../_internal/worker-code-loading.js\";\n\ntype MessageIds = \"default\";\n\nconst isBlobBackedWorkerCodeExpression = (\n    expression: Readonly<TSESTree.Expression>\n): boolean => {\n    const configuredValue = getStaticStringValue(expression);\n\n    return (\n        (typeof configuredValue === \"string\" && isBlobUrl(configuredValue)) ||\n        isUrlCreateObjectUrlCall(expression)\n    );\n};\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isImportScriptsCall(node.callee)) {\n                    return;\n                }\n\n                for (const argumentNode of node.arguments) {\n                    if (\n                        argumentNode.type === AST_NODE_TYPES.SpreadElement ||\n                        !isBlobBackedWorkerCodeExpression(argumentNode)\n                    ) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: argumentNode,\n                    });\n                }\n            },\n            NewExpression(node: TSESTree.NewExpression) {\n                if (!isWorkerConstructor(node.callee)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement ||\n                    !isBlobBackedWorkerCodeExpression(firstArgument)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow worker code-loading APIs that use blob: URLs or URL.createObjectURL(...) for executable scripts.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-worker-blob-url\",\n        },\n        messages: {\n            default:\n                \"Do not load worker code from a blob: URL or URL.createObjectURL(...); use a reviewed worker script resource instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-worker-blob-url\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ESTree/ESLint callback parameter shapes are mutable in upstream types and cannot be represented as fully readonly without invasive casts. */\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { createRule } from \"../_internal/create-rule.js\";\nimport { getStaticStringValue } from \"../_internal/estree-utils.js\";\nimport {\n    isDataUrl,\n    isImportScriptsCall,\n    isWorkerConstructor,\n} from \"../_internal/worker-code-loading.js\";\n\ntype MessageIds = \"default\";\n\n/** Rule implementation. */\nconst rule: ReturnType<typeof createRule> = createRule<[], MessageIds>({\n    create(context) {\n        return {\n            CallExpression(node: TSESTree.CallExpression) {\n                if (!isImportScriptsCall(node.callee)) {\n                    return;\n                }\n\n                for (const argumentNode of node.arguments) {\n                    if (argumentNode.type === AST_NODE_TYPES.SpreadElement) {\n                        continue;\n                    }\n\n                    const configuredValue = getStaticStringValue(argumentNode);\n\n                    if (\n                        typeof configuredValue !== \"string\" ||\n                        !isDataUrl(configuredValue)\n                    ) {\n                        continue;\n                    }\n\n                    context.report({\n                        messageId: \"default\",\n                        node: argumentNode,\n                    });\n                }\n            },\n            NewExpression(node: TSESTree.NewExpression) {\n                if (!isWorkerConstructor(node.callee)) {\n                    return;\n                }\n\n                const [firstArgument] = node.arguments;\n\n                if (\n                    firstArgument === undefined ||\n                    firstArgument.type === AST_NODE_TYPES.SpreadElement\n                ) {\n                    return;\n                }\n\n                const configuredValue = getStaticStringValue(firstArgument);\n\n                if (\n                    typeof configuredValue !== \"string\" ||\n                    !isDataUrl(configuredValue)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    messageId: \"default\",\n                    node: firstArgument,\n                });\n            },\n        };\n    },\n    meta: {\n        deprecated: false,\n        docs: {\n            description:\n                \"disallow worker code-loading APIs that use static data: URLs for executable scripts.\",\n            frozen: false,\n            recommended: false,\n            url: \"https://nick2bad4u.github.io/eslint-plugin-SDL-2/docs/rules/no-worker-data-url\",\n        },\n        messages: {\n            default:\n                \"Do not load worker code from a data: URL; use a reviewed worker script resource instead.\",\n        },\n        schema: [],\n        type: \"problem\",\n    },\n    name: \"no-worker-data-url\",\n});\n\nexport default rule;\n/* eslint-enable @typescript-eslint/prefer-readonly-parameter-types -- Restore linting after rule implementation declarations. */\n", "import type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { UnknownArray } from \"type-fest\";\n\nimport * as noAngularBypassSanitizerRuleModule from \"../rules/no-angular-bypass-sanitizer.js\";\nimport * as noAngularBypassSecurityTrustHtmlRuleModule from \"../rules/no-angular-bypass-security-trust-html.js\";\nimport * as noAngularInnerhtmlBindingRuleModule from \"../rules/no-angular-innerhtml-binding.js\";\nimport * as noAngularSanitizationTrustedUrlsRuleModule from \"../rules/no-angular-sanitization-trusted-urls.js\";\nimport * as noAngularjsBypassSceRuleModule from \"../rules/no-angularjs-bypass-sce.js\";\nimport * as noAngularjsEnableSvgRuleModule from \"../rules/no-angularjs-enable-svg.js\";\nimport * as noAngularjsNgBindHtmlWithoutSanitizeRuleModule from \"../rules/no-angularjs-ng-bind-html-without-sanitize.js\";\nimport * as noAngularjsSanitizationWhitelistRuleModule from \"../rules/no-angularjs-sanitization-whitelist.js\";\nimport * as noAngularjsSceResourceUrlWildcardRuleModule from \"../rules/no-angularjs-sce-resource-url-wildcard.js\";\nimport * as noChildProcessExecRuleModule from \"../rules/no-child-process-exec.js\";\nimport * as noChildProcessShellTrueRuleModule from \"../rules/no-child-process-shell-true.js\";\nimport * as noCookiesRuleModule from \"../rules/no-cookies.js\";\nimport * as noDocumentDomainRuleModule from \"../rules/no-document-domain.js\";\nimport * as noDocumentExeccommandInsertHtmlRuleModule from \"../rules/no-document-execcommand-insert-html.js\";\nimport * as noDocumentParseHtmlUnsafeRuleModule from \"../rules/no-document-parse-html-unsafe.js\";\nimport * as noDocumentWriteRuleModule from \"../rules/no-document-write.js\";\nimport * as noDomparserHtmlWithoutSanitizationRuleModule from \"../rules/no-domparser-html-without-sanitization.js\";\nimport * as noDomparserSvgWithoutSanitizationRuleModule from \"../rules/no-domparser-svg-without-sanitization.js\";\nimport * as noDynamicImportUnsafeUrlRuleModule from \"../rules/no-dynamic-import-unsafe-url.js\";\nimport * as noElectronAllowRunningInsecureContentRuleModule from \"../rules/no-electron-allow-running-insecure-content.js\";\nimport * as noElectronDangerousBlinkFeaturesRuleModule from \"../rules/no-electron-dangerous-blink-features.js\";\nimport * as noElectronDisableContextIsolationRuleModule from \"../rules/no-electron-disable-context-isolation.js\";\nimport * as noElectronDisableSandboxRuleModule from \"../rules/no-electron-disable-sandbox.js\";\nimport * as noElectronDisableWebSecurityRuleModule from \"../rules/no-electron-disable-web-security.js\";\nimport * as noElectronEnableRemoteModuleRuleModule from \"../rules/no-electron-enable-remote-module.js\";\nimport * as noElectronEnableWebviewTagRuleModule from \"../rules/no-electron-enable-webview-tag.js\";\nimport * as noElectronExperimentalFeaturesRuleModule from \"../rules/no-electron-experimental-features.js\";\nimport * as noElectronExposeRawIpcRendererRuleModule from \"../rules/no-electron-expose-raw-ipc-renderer.js\";\nimport * as noElectronInsecureCertificateErrorHandlerRuleModule from \"../rules/no-electron-insecure-certificate-error-handler.js\";\nimport * as noElectronInsecureCertificateVerifyProcRuleModule from \"../rules/no-electron-insecure-certificate-verify-proc.js\";\nimport * as noElectronInsecurePermissionRequestHandlerRuleModule from \"../rules/no-electron-insecure-permission-request-handler.js\";\nimport * as noElectronNodeIntegrationRuleModule from \"../rules/no-electron-node-integration.js\";\nimport * as noElectronPermissionCheckHandlerAllowAllRuleModule from \"../rules/no-electron-permission-check-handler-allow-all.js\";\nimport * as noElectronUncheckedIpcSenderRuleModule from \"../rules/no-electron-unchecked-ipc-sender.js\";\nimport * as noElectronUnrestrictedNavigationRuleModule from \"../rules/no-electron-unrestricted-navigation.js\";\nimport * as noElectronUntrustedOpenExternalRuleModule from \"../rules/no-electron-untrusted-open-external.js\";\nimport * as noElectronWebviewAllowpopupsRuleModule from \"../rules/no-electron-webview-allowpopups.js\";\nimport * as noElectronWebviewInsecureWebpreferencesRuleModule from \"../rules/no-electron-webview-insecure-webpreferences.js\";\nimport * as noElectronWebviewNodeIntegrationRuleModule from \"../rules/no-electron-webview-node-integration.js\";\nimport * as noHtmlMethodRuleModule from \"../rules/no-html-method.js\";\nimport * as noHttpRequestToInsecureProtocolRuleModule from \"../rules/no-http-request-to-insecure-protocol.js\";\nimport * as noIframeSrcdocRuleModule from \"../rules/no-iframe-srcdoc.js\";\nimport * as noInnerHtmlRuleModule from \"../rules/no-inner-html.js\";\nimport * as noInsecureRandomRuleModule from \"../rules/no-insecure-random.js\";\nimport * as noInsecureTlsAgentOptionsRuleModule from \"../rules/no-insecure-tls-agent-options.js\";\nimport * as noInsecureUrlRuleModule from \"../rules/no-insecure-url.js\";\nimport * as noLocationJavascriptUrlRuleModule from \"../rules/no-location-javascript-url.js\";\nimport * as noMessageEventWithoutOriginCheckRuleModule from \"../rules/no-message-event-without-origin-check.js\";\nimport * as noMsappExecUnsafeRuleModule from \"../rules/no-msapp-exec-unsafe.js\";\nimport * as noNodeTlsCheckServerIdentityBypassRuleModule from \"../rules/no-node-tls-check-server-identity-bypass.js\";\nimport * as noNodeTlsLegacyProtocolRuleModule from \"../rules/no-node-tls-legacy-protocol.js\";\nimport * as noNodeTlsRejectUnauthorizedZeroRuleModule from \"../rules/no-node-tls-reject-unauthorized-zero.js\";\nimport * as noNodeTlsSecurityLevelZeroRuleModule from \"../rules/no-node-tls-security-level-zero.js\";\nimport * as noNodeVmRunInContextRuleModule from \"../rules/no-node-vm-run-in-context.js\";\nimport * as noNodeVmSourceTextModuleRuleModule from \"../rules/no-node-vm-source-text-module.js\";\nimport * as noNodeWorkerThreadsEvalRuleModule from \"../rules/no-node-worker-threads-eval.js\";\nimport * as noNonnullAssertionOnSecurityInputRuleModule from \"../rules/no-nonnull-assertion-on-security-input.js\";\nimport * as noPostmessageStarOriginRuleModule from \"../rules/no-postmessage-star-origin.js\";\nimport * as noPostmessageWithoutOriginAllowlistRuleModule from \"../rules/no-postmessage-without-origin-allowlist.js\";\nimport * as noRangeCreateContextualFragmentRuleModule from \"../rules/no-range-create-contextual-fragment.js\";\nimport * as noScriptSrcDataUrlRuleModule from \"../rules/no-script-src-data-url.js\";\nimport * as noScriptTextRuleModule from \"../rules/no-script-text.js\";\nimport * as noServiceWorkerUnsafeScriptUrlRuleModule from \"../rules/no-service-worker-unsafe-script-url.js\";\nimport * as noSetHtmlUnsafeRuleModule from \"../rules/no-set-html-unsafe.js\";\nimport * as noTrustedTypesPolicyPassThroughRuleModule from \"../rules/no-trusted-types-policy-pass-through.js\";\nimport * as noUnsafeAllocRuleModule from \"../rules/no-unsafe-alloc.js\";\nimport * as noUnsafeCastToTrustedTypesRuleModule from \"../rules/no-unsafe-cast-to-trusted-types.js\";\nimport * as noWindowOpenWithoutNoopenerRuleModule from \"../rules/no-window-open-without-noopener.js\";\nimport * as noWinjsHtmlUnsafeRuleModule from \"../rules/no-winjs-html-unsafe.js\";\nimport * as noWorkerBlobUrlRuleModule from \"../rules/no-worker-blob-url.js\";\nimport * as noWorkerDataUrlRuleModule from \"../rules/no-worker-data-url.js\";\n\n/** Canonical SDL rule module type used in the exported registry map. */\nexport type SdlRuleModule = TSESLint.RuleModule<string, Readonly<UnknownArray>>;\n\n/** Naming convention for SDL security rule identifiers. */\nexport type SdlRuleNamePattern = `no-${string}`;\n\n/** SDL rule registry keyed by rule name for plugin export wiring. */\nexport const sdlRules: Readonly<Record<SdlRuleNamePattern, SdlRuleModule>> = {\n    \"no-angular-bypass-sanitizer\": noAngularBypassSanitizerRuleModule.default,\n    \"no-angular-bypass-security-trust-html\":\n        noAngularBypassSecurityTrustHtmlRuleModule.default,\n    \"no-angular-innerhtml-binding\": noAngularInnerhtmlBindingRuleModule.default,\n    \"no-angular-sanitization-trusted-urls\":\n        noAngularSanitizationTrustedUrlsRuleModule.default,\n    \"no-angularjs-bypass-sce\": noAngularjsBypassSceRuleModule.default,\n    \"no-angularjs-enable-svg\": noAngularjsEnableSvgRuleModule.default,\n    \"no-angularjs-ng-bind-html-without-sanitize\":\n        noAngularjsNgBindHtmlWithoutSanitizeRuleModule.default,\n    \"no-angularjs-sanitization-whitelist\":\n        noAngularjsSanitizationWhitelistRuleModule.default,\n    \"no-angularjs-sce-resource-url-wildcard\":\n        noAngularjsSceResourceUrlWildcardRuleModule.default,\n    \"no-child-process-exec\": noChildProcessExecRuleModule.default,\n    \"no-child-process-shell-true\": noChildProcessShellTrueRuleModule.default,\n    \"no-cookies\": noCookiesRuleModule.default,\n    \"no-document-domain\": noDocumentDomainRuleModule.default,\n    \"no-document-execcommand-insert-html\":\n        noDocumentExeccommandInsertHtmlRuleModule.default,\n    \"no-document-parse-html-unsafe\":\n        noDocumentParseHtmlUnsafeRuleModule.default,\n    \"no-document-write\": noDocumentWriteRuleModule.default,\n    \"no-domparser-html-without-sanitization\":\n        noDomparserHtmlWithoutSanitizationRuleModule.default,\n    \"no-domparser-svg-without-sanitization\":\n        noDomparserSvgWithoutSanitizationRuleModule.default,\n    \"no-dynamic-import-unsafe-url\": noDynamicImportUnsafeUrlRuleModule.default,\n    \"no-electron-allow-running-insecure-content\":\n        noElectronAllowRunningInsecureContentRuleModule.default,\n    \"no-electron-dangerous-blink-features\":\n        noElectronDangerousBlinkFeaturesRuleModule.default,\n    \"no-electron-disable-context-isolation\":\n        noElectronDisableContextIsolationRuleModule.default,\n    \"no-electron-disable-sandbox\": noElectronDisableSandboxRuleModule.default,\n    \"no-electron-disable-web-security\":\n        noElectronDisableWebSecurityRuleModule.default,\n    \"no-electron-enable-remote-module\":\n        noElectronEnableRemoteModuleRuleModule.default,\n    \"no-electron-enable-webview-tag\":\n        noElectronEnableWebviewTagRuleModule.default,\n    \"no-electron-experimental-features\":\n        noElectronExperimentalFeaturesRuleModule.default,\n    \"no-electron-expose-raw-ipc-renderer\":\n        noElectronExposeRawIpcRendererRuleModule.default,\n    \"no-electron-insecure-certificate-error-handler\":\n        noElectronInsecureCertificateErrorHandlerRuleModule.default,\n    \"no-electron-insecure-certificate-verify-proc\":\n        noElectronInsecureCertificateVerifyProcRuleModule.default,\n    \"no-electron-insecure-permission-request-handler\":\n        noElectronInsecurePermissionRequestHandlerRuleModule.default,\n    \"no-electron-node-integration\": noElectronNodeIntegrationRuleModule.default,\n    \"no-electron-permission-check-handler-allow-all\":\n        noElectronPermissionCheckHandlerAllowAllRuleModule.default,\n    \"no-electron-unchecked-ipc-sender\":\n        noElectronUncheckedIpcSenderRuleModule.default,\n    \"no-electron-unrestricted-navigation\":\n        noElectronUnrestrictedNavigationRuleModule.default,\n    \"no-electron-untrusted-open-external\":\n        noElectronUntrustedOpenExternalRuleModule.default,\n    \"no-electron-webview-allowpopups\":\n        noElectronWebviewAllowpopupsRuleModule.default,\n    \"no-electron-webview-insecure-webpreferences\":\n        noElectronWebviewInsecureWebpreferencesRuleModule.default,\n    \"no-electron-webview-node-integration\":\n        noElectronWebviewNodeIntegrationRuleModule.default,\n    \"no-html-method\": noHtmlMethodRuleModule.default,\n    \"no-http-request-to-insecure-protocol\":\n        noHttpRequestToInsecureProtocolRuleModule.default,\n    \"no-iframe-srcdoc\": noIframeSrcdocRuleModule.default,\n    \"no-inner-html\": noInnerHtmlRuleModule.default,\n    \"no-insecure-random\": noInsecureRandomRuleModule.default,\n    \"no-insecure-tls-agent-options\":\n        noInsecureTlsAgentOptionsRuleModule.default,\n    \"no-insecure-url\": noInsecureUrlRuleModule.default,\n    \"no-location-javascript-url\": noLocationJavascriptUrlRuleModule.default,\n    \"no-message-event-without-origin-check\":\n        noMessageEventWithoutOriginCheckRuleModule.default,\n    \"no-msapp-exec-unsafe\": noMsappExecUnsafeRuleModule.default,\n    \"no-node-tls-check-server-identity-bypass\":\n        noNodeTlsCheckServerIdentityBypassRuleModule.default,\n    \"no-node-tls-legacy-protocol\": noNodeTlsLegacyProtocolRuleModule.default,\n    \"no-node-tls-reject-unauthorized-zero\":\n        noNodeTlsRejectUnauthorizedZeroRuleModule.default,\n    \"no-node-tls-security-level-zero\":\n        noNodeTlsSecurityLevelZeroRuleModule.default,\n    \"no-node-vm-run-in-context\": noNodeVmRunInContextRuleModule.default,\n    \"no-node-vm-source-text-module\": noNodeVmSourceTextModuleRuleModule.default,\n    \"no-node-worker-threads-eval\": noNodeWorkerThreadsEvalRuleModule.default,\n    \"no-nonnull-assertion-on-security-input\":\n        noNonnullAssertionOnSecurityInputRuleModule.default,\n    \"no-postmessage-star-origin\": noPostmessageStarOriginRuleModule.default,\n    \"no-postmessage-without-origin-allowlist\":\n        noPostmessageWithoutOriginAllowlistRuleModule.default,\n    \"no-range-create-contextual-fragment\":\n        noRangeCreateContextualFragmentRuleModule.default,\n    \"no-script-src-data-url\": noScriptSrcDataUrlRuleModule.default,\n    \"no-script-text\": noScriptTextRuleModule.default,\n    \"no-service-worker-unsafe-script-url\":\n        noServiceWorkerUnsafeScriptUrlRuleModule.default,\n    \"no-set-html-unsafe\": noSetHtmlUnsafeRuleModule.default,\n    \"no-trusted-types-policy-pass-through\":\n        noTrustedTypesPolicyPassThroughRuleModule.default,\n    \"no-unsafe-alloc\": noUnsafeAllocRuleModule.default,\n    \"no-unsafe-cast-to-trusted-types\":\n        noUnsafeCastToTrustedTypesRuleModule.default,\n    \"no-window-open-without-noopener\":\n        noWindowOpenWithoutNoopenerRuleModule.default,\n    \"no-winjs-html-unsafe\": noWinjsHtmlUnsafeRuleModule.default,\n    \"no-worker-blob-url\": noWorkerBlobUrlRuleModule.default,\n    \"no-worker-data-url\": noWorkerDataUrlRuleModule.default,\n};\n\nexport default sdlRules;\n"],
  "mappings": "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",
  "names": ["import_utils", "rule", "rule", "rule", "import_utils", "import_ts_extras", "import_utils", "import_ts_extras", "rule", "import_ts_extras", "rule", "rule", "import_utils", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "getMemberPropertyName", "import_utils", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "rule", "getMemberPropertyName", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "import_utils", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "getPropertyName", "rule", "import_utils", "import_ts_extras", "getPropertyName", "getPropertyByName", "getStaticStringValue", "rule", "rule", "rule", "rule", "rule", "rule", "rule", "import_utils", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "getStaticStringValue", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "isFunctionExpression", "rule", "rule", "import_utils", "import_ts_extras", "isFunctionExpression", "rule", "getMemberPropertyName", "import_utils", "import_ts_extras", "getMemberPropertyName", "isFunctionExpression", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "isFunctionExpression", "rule", "firstArgument", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "isJsxWebviewElement", "getJsxAttributeName", "rule", "import_utils", "isJsxWebviewElement", "getJsxAttributeName", "isTruthyJsxAttributeValue", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "getStaticStringValue", "rule", "import_utils", "getJsxAttributeName", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "rule", "import_utils", "rule", "import_utils", "rule", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "getStaticStringValue", "isJavaScriptUrl", "rule", "import_utils", "import_ts_extras", "isFunctionExpression", "isUnknownRecord", "childNode", "getMemberPropertyName", "rule", "rule", "import_utils", "import_ts_extras", "import_utils", "import_ts_extras", "getMemberPropertyName", "isFunctionExpression", "isExpressionNode", "rule", "import_utils", "import_ts_extras", "isExpressionNode", "rule", "getMemberPropertyName", "import_utils", "import_ts_extras", "getMemberPropertyName", "rule", "import_utils", "isExpressionNode", "rule", "import_utils", "import_ts_extras", "getPatternIdentifier", "rule", "getMemberPropertyName", "import_utils", "import_ts_extras", "VM_MODULE_NAMES", "isVmModuleSource", "isRequireCallFromVmModule", "getPatternIdentifier", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "getPatternIdentifier", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "getMemberPropertyName", "getStaticStringValue", "rule", "import_utils", "isSanitizedExpression", "getMemberPropertyName", "rule", "import_utils", "import_utils", "getMemberPropertyName", "isDataUrl", "getJsxAttributeName", "rule", "getMemberPropertyName", "import_utils", "import_ts_extras", "rule", "getMemberPropertyName", "import_utils", "isJavaScriptUrl", "rule", "import_utils", "getMemberPropertyName", "rule", "import_utils", "import_ts_extras", "isExpressionNode", "isFunctionExpression", "getMemberPropertyName", "rule", "import_utils", "rule", "import_utils", "import_ts_extras", "rule", "import_utils", "import_ts_extras", "getStaticStringValue", "rule", "rule", "import_utils", "rule", "import_utils", "rule", "isUnknownRecord", "typeScriptParser", "configs"]
}
