eslint-plugin-runtime-cleanup 1.2.8 → 1.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -29
- package/dist/_internal/ast-node.d.ts +5 -1
- package/dist/_internal/ast-node.d.ts.map +1 -1
- package/dist/_internal/ast-node.js +2 -1
- package/dist/_internal/ast-node.js.map +1 -1
- package/dist/_internal/bounded-cache.d.ts.map +1 -1
- package/dist/_internal/bounded-cache.js +2 -1
- package/dist/_internal/bounded-cache.js.map +1 -1
- package/dist/_internal/expression-boolean-memoizer.d.ts.map +1 -1
- package/dist/_internal/expression-boolean-memoizer.js +2 -1
- package/dist/_internal/expression-boolean-memoizer.js.map +1 -1
- package/dist/_internal/filter-callback.d.ts +5 -1
- package/dist/_internal/filter-callback.d.ts.map +1 -1
- package/dist/_internal/filter-callback.js +9 -10
- package/dist/_internal/filter-callback.js.map +1 -1
- package/dist/_internal/floating-resource.d.ts +8 -0
- package/dist/_internal/floating-resource.d.ts.map +1 -1
- package/dist/_internal/floating-resource.js +42 -36
- package/dist/_internal/floating-resource.js.map +1 -1
- package/dist/_internal/normalize-expression-text.d.ts +6 -1
- package/dist/_internal/normalize-expression-text.d.ts.map +1 -1
- package/dist/_internal/normalize-expression-text.js +30 -28
- package/dist/_internal/normalize-expression-text.js.map +1 -1
- package/dist/_internal/nullish-comparison.d.ts +1 -1
- package/dist/_internal/nullish-comparison.d.ts.map +1 -1
- package/dist/_internal/nullish-comparison.js +16 -11
- package/dist/_internal/nullish-comparison.js.map +1 -1
- package/dist/_internal/plugin-settings.d.ts +2 -1
- package/dist/_internal/plugin-settings.d.ts.map +1 -1
- package/dist/_internal/plugin-settings.js +3 -2
- package/dist/_internal/plugin-settings.js.map +1 -1
- package/dist/_internal/report-adapter.d.ts +5 -4
- package/dist/_internal/report-adapter.d.ts.map +1 -1
- package/dist/_internal/report-adapter.js +3 -2
- package/dist/_internal/report-adapter.js.map +1 -1
- package/dist/_internal/rule-catalog.d.ts.map +1 -1
- package/dist/_internal/rule-catalog.js +3 -2
- package/dist/_internal/rule-catalog.js.map +1 -1
- package/dist/_internal/rule-docs-metadata.d.ts +2 -1
- package/dist/_internal/rule-docs-metadata.d.ts.map +1 -1
- package/dist/_internal/rule-docs-metadata.js +36 -33
- package/dist/_internal/rule-docs-metadata.js.map +1 -1
- package/dist/_internal/rules-registry.d.ts +2 -1
- package/dist/_internal/rules-registry.d.ts.map +1 -1
- package/dist/_internal/rules-registry.js.map +1 -1
- package/dist/_internal/runtime-cleanup-config-references.d.ts +2 -1
- package/dist/_internal/runtime-cleanup-config-references.d.ts.map +1 -1
- package/dist/_internal/runtime-cleanup-config-references.js +8 -7
- package/dist/_internal/runtime-cleanup-config-references.js.map +1 -1
- package/dist/_internal/scope-variable.d.ts.map +1 -1
- package/dist/_internal/scope-variable.js +5 -4
- package/dist/_internal/scope-variable.js.map +1 -1
- package/dist/_internal/type-checker.d.ts +2 -2
- package/dist/_internal/type-checker.d.ts.map +1 -1
- package/dist/_internal/type-checker.js +10 -8
- package/dist/_internal/type-checker.js.map +1 -1
- package/dist/_internal/type-predicate-autofix-safety.d.ts +5 -1
- package/dist/_internal/type-predicate-autofix-safety.d.ts.map +1 -1
- package/dist/_internal/type-predicate-autofix-safety.js +9 -10
- package/dist/_internal/type-predicate-autofix-safety.js.map +1 -1
- package/dist/_internal/type-reference-node.d.ts +7 -5
- package/dist/_internal/type-reference-node.d.ts.map +1 -1
- package/dist/_internal/type-reference-node.js +6 -6
- package/dist/_internal/type-reference-node.js.map +1 -1
- package/dist/_internal/typed-rule.d.ts +2 -1
- package/dist/_internal/typed-rule.d.ts.map +1 -1
- package/dist/_internal/typed-rule.js +6 -5
- package/dist/_internal/typed-rule.js.map +1 -1
- package/dist/_internal/value-rewrite-autofix-safety.d.ts +5 -1
- package/dist/_internal/value-rewrite-autofix-safety.d.ts.map +1 -1
- package/dist/_internal/value-rewrite-autofix-safety.js +10 -18
- package/dist/_internal/value-rewrite-autofix-safety.js.map +1 -1
- package/dist/plugin.cjs +571 -662
- package/dist/plugin.cjs.map +4 -4
- package/dist/plugin.d.cts +2 -1
- package/dist/plugin.d.ts +2 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +8 -7
- package/dist/plugin.js.map +1 -1
- package/dist/rules/no-floating-abort-controllers.d.ts.map +1 -1
- package/dist/rules/no-floating-abort-controllers.js +24 -52
- package/dist/rules/no-floating-abort-controllers.js.map +1 -1
- package/dist/rules/no-floating-audio-contexts.d.ts.map +1 -1
- package/dist/rules/no-floating-audio-contexts.js +7 -6
- package/dist/rules/no-floating-audio-contexts.js.map +1 -1
- package/dist/rules/no-floating-broadcast-channels.d.ts.map +1 -1
- package/dist/rules/no-floating-broadcast-channels.js +31 -59
- package/dist/rules/no-floating-broadcast-channels.js.map +1 -1
- package/dist/rules/no-floating-child-processes.d.ts.map +1 -1
- package/dist/rules/no-floating-child-processes.js +43 -45
- package/dist/rules/no-floating-child-processes.js.map +1 -1
- package/dist/rules/no-floating-disposable-stacks.d.ts.map +1 -1
- package/dist/rules/no-floating-disposable-stacks.js +37 -38
- package/dist/rules/no-floating-disposable-stacks.js.map +1 -1
- package/dist/rules/no-floating-file-watchers.d.ts.map +1 -1
- package/dist/rules/no-floating-file-watchers.js +40 -42
- package/dist/rules/no-floating-file-watchers.js.map +1 -1
- package/dist/rules/no-floating-geolocation-watches.js +20 -20
- package/dist/rules/no-floating-geolocation-watches.js.map +1 -1
- package/dist/rules/no-floating-infinite-animations.d.ts.map +1 -1
- package/dist/rules/no-floating-infinite-animations.js +4 -3
- package/dist/rules/no-floating-infinite-animations.js.map +1 -1
- package/dist/rules/no-floating-media-streams.d.ts.map +1 -1
- package/dist/rules/no-floating-media-streams.js +24 -24
- package/dist/rules/no-floating-media-streams.js.map +1 -1
- package/dist/rules/no-floating-message-channels.js +30 -30
- package/dist/rules/no-floating-message-channels.js.map +1 -1
- package/dist/rules/no-floating-network-connections.d.ts.map +1 -1
- package/dist/rules/no-floating-network-connections.js +36 -36
- package/dist/rules/no-floating-network-connections.js.map +1 -1
- package/dist/rules/no-floating-object-urls.d.ts.map +1 -1
- package/dist/rules/no-floating-object-urls.js +4 -3
- package/dist/rules/no-floating-object-urls.js.map +1 -1
- package/dist/rules/no-floating-observers.d.ts.map +1 -1
- package/dist/rules/no-floating-observers.js +33 -34
- package/dist/rules/no-floating-observers.js.map +1 -1
- package/dist/rules/no-floating-servers.d.ts.map +1 -1
- package/dist/rules/no-floating-servers.js +50 -52
- package/dist/rules/no-floating-servers.js.map +1 -1
- package/dist/rules/no-floating-streams.d.ts.map +1 -1
- package/dist/rules/no-floating-streams.js +28 -29
- package/dist/rules/no-floating-streams.js.map +1 -1
- package/dist/rules/no-floating-timers.d.ts.map +1 -1
- package/dist/rules/no-floating-timers.js +7 -47
- package/dist/rules/no-floating-timers.js.map +1 -1
- package/dist/rules/no-floating-wake-locks.js +20 -20
- package/dist/rules/no-floating-wake-locks.js.map +1 -1
- package/dist/rules/no-floating-web-stream-locks.d.ts.map +1 -1
- package/dist/rules/no-floating-web-stream-locks.js +4 -3
- package/dist/rules/no-floating-web-stream-locks.js.map +1 -1
- package/dist/rules/no-floating-workers.d.ts.map +1 -1
- package/dist/rules/no-floating-workers.js +39 -40
- package/dist/rules/no-floating-workers.js.map +1 -1
- package/dist/rules/no-unmanaged-event-listeners.d.ts.map +1 -1
- package/dist/rules/no-unmanaged-event-listeners.js +23 -23
- package/dist/rules/no-unmanaged-event-listeners.js.map +1 -1
- package/docs/rules/no-floating-audio-contexts.md +1 -2
- package/docs/rules/no-floating-media-streams.md +1 -1
- package/docs/rules/no-floating-object-urls.md +3 -3
- package/docs/rules/no-floating-observers.md +1 -1
- package/docs/rules/no-floating-servers.md +1 -1
- package/docs/rules/no-floating-wake-locks.md +1 -1
- package/docs/rules/no-floating-web-stream-locks.md +1 -2
- package/docs/rules/presets/index.md +28 -28
- package/package.json +7 -4
package/dist/plugin.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/plugin.ts", "../package.json", "../src/rules/no-floating-abort-controllers.ts", "../src/_internal/ast-node.ts", "../src/_internal/cycle-safe-linked-search.ts", "../src/_internal/rule-docs-url.ts", "../src/_internal/scope-variable.ts", "../src/_internal/typed-rule.ts", "../src/_internal/plugin-settings.ts", "../src/_internal/rule-catalog.ts", "../src/rules/no-floating-audio-contexts.ts", "../src/
|
|
4
|
-
"sourcesContent": ["/**\n * @packageDocumentation\n * Public plugin entrypoint for eslint-plugin-runtime-cleanup exports and preset wiring.\n */\nimport type { ESLint, Linter } from \"eslint\";\n\nimport typeScriptParser from \"@typescript-eslint/parser\";\n\n// eslint-disable-next-line import-x/extensions -- Avoid importing from the ESM entrypoint to preserve CJS compatibility\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport { runtimeCleanupRules } from \"./_internal/rules-registry.js\";\nimport {\n type RuntimeCleanupConfigName as InternalRuntimeCleanupConfigName,\n runtimeCleanupConfigMetadataByName,\n runtimeCleanupConfigNames,\n} from \"./_internal/runtime-cleanup-config-references.js\";\n\n/** Default file globs targeted by plugin presets when `files` is omitted. */\nconst TYPE_SCRIPT_FILES = [\"**/*.{ts,tsx,mts,cts}\"] as const;\n\n/**\n * Canonical flat-config preset keys exposed through `plugin.configs`.\n *\n * @remarks\n * These names are used by consumers when composing presets in ESLint flat\n * config arrays.\n */\nexport type RuntimeCleanupConfigName = InternalRuntimeCleanupConfigName;\n\n/**\n * Flat-config preset shape produced by this plugin.\n *\n * @remarks\n * The `rules` map is required so preset composition can always merge concrete\n * rule severity entries without additional null checks.\n */\nexport type RuntimeCleanupPresetConfig = Linter.Config & {\n rules: NonNullable<Linter.Config[\"rules\"]>;\n};\n\n/** Internal alias for flat config objects handled by preset builders. */\ntype FlatConfig = Linter.Config;\n\n/** Normalized language-options shape for preset composition helpers. */\ntype FlatLanguageOptions = NonNullable<FlatConfig[\"languageOptions\"]>;\n\n/** Normalized parser-options shape for preset composition helpers. */\ntype FlatParserOptions = NonNullable<FlatLanguageOptions[\"parserOptions\"]>;\n\n/** Contract for the `configs` object exported by this plugin. */\ntype RuntimeCleanupConfigsContract = Record<\n RuntimeCleanupConfigName,\n RuntimeCleanupPresetConfig\n>;\n\n/** Fully assembled plugin contract used by the runtime default export. */\ntype RuntimeCleanupPluginContract = Omit<ESLint.Plugin, \"configs\" | \"rules\"> & {\n configs: RuntimeCleanupConfigsContract;\n meta: {\n name: string;\n namespace: string;\n version: string;\n };\n processors: NonNullable<ESLint.Plugin[\"processors\"]>;\n rules: NonNullable<ESLint.Plugin[\"rules\"]>;\n};\n\n/**\n * Resolve package version from package.json data.\n *\n * @param pkg - Parsed package metadata value.\n *\n * @returns The package version, or `0.0.0` when unavailable.\n */\nfunction getPackageVersion(pkg: unknown): string {\n if (typeof pkg !== \"object\" || pkg === null) {\n return \"0.0.0\";\n }\n\n const version: unknown = Reflect.get(pkg, \"version\");\n\n return typeof version === \"string\" ? version : \"0.0.0\";\n}\n\n/** Parser module reused across preset construction. */\nconst typeScriptParserValue: FlatLanguageOptions[\"parser\"] = typeScriptParser;\n\n/** Default parser options applied when a preset omits parser options. */\nconst defaultParserOptions = {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n} satisfies FlatParserOptions;\n\n/**\n * Normalize unknown parser options into a mutable parser-options object.\n */\nconst normalizeParserOptions = (\n parserOptions: FlatLanguageOptions[\"parserOptions\"]\n): FlatParserOptions =>\n parserOptions !== null &&\n typeof parserOptions === \"object\" &&\n !Array.isArray(parserOptions)\n ? { ...parserOptions }\n : { ...defaultParserOptions };\n\n/**\n * Fully-qualified ESLint rule id used by this plugin.\n *\n * @remarks\n * Consumers typically use this when building strongly typed rule maps or helper\n * utilities that require namespaced rule identifiers.\n */\nexport type RuntimeCleanupRuleId = `runtime-cleanup/${RuntimeCleanupRuleName}`;\n\n/** Unqualified rule name supported by `eslint-plugin-runtime-cleanup`. */\nexport type RuntimeCleanupRuleName = keyof typeof runtimeCleanupRules;\n\n/**\n * ESLint-compatible rule map view of the strongly typed internal rule record.\n */\nconst runtimeCleanupEslintRules: NonNullable<ESLint.Plugin[\"rules\"]> &\n typeof runtimeCleanupRules =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Internal registry is intentionally narrowed to ESLint's plugin rule map contract.\n runtimeCleanupRules as NonNullable<ESLint.Plugin[\"rules\"]> &\n typeof runtimeCleanupRules;\n\n/**\n * Build an ESLint rules map that enables each provided rule at error level.\n *\n * @param ruleNames - Rule names to enable.\n *\n * @returns Rules config object compatible with flat config.\n */\nfunction errorRulesFor(\n ruleNames: readonly RuntimeCleanupRuleName[]\n): RuntimeCleanupPresetConfig[\"rules\"] {\n const rules: RuntimeCleanupPresetConfig[\"rules\"] = {};\n\n for (const ruleName of ruleNames) {\n rules[`runtime-cleanup/${ruleName}`] = \"error\";\n }\n\n return rules;\n}\n\n/** Effective per-preset rule lists after applying derived policy overlays. */\nconst effectivePresetRuleNamesByConfig: Readonly<\n Record<RuntimeCleanupConfigName, readonly RuntimeCleanupRuleName[]>\n> = {\n all: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n experimental: [],\n minimal: [],\n recommended: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n \"recommended-type-checked\": [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n strict: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n};\n\n/**\n * Apply parser and plugin metadata required by all plugin presets.\n *\n * @param config - Preset-specific config fragment.\n * @param plugin - Plugin object registered under the `runtime-cleanup`\n * namespace.\n * @param options - Preset-level wiring options.\n *\n * @returns Normalized preset config.\n */\nfunction withRuntimeCleanupPlugin(\n config: Readonly<RuntimeCleanupPresetConfig>,\n plugin: Readonly<ESLint.Plugin>,\n options: Readonly<{ requiresTypeChecking: boolean }>\n): RuntimeCleanupPresetConfig {\n const existingLanguageOptions = config.languageOptions ?? {};\n const existingParserOptions = existingLanguageOptions[\"parserOptions\"];\n const parserOptions = normalizeParserOptions(existingParserOptions);\n\n if (\n options.requiresTypeChecking &&\n !Object.hasOwn(parserOptions, \"projectService\")\n ) {\n Reflect.set(parserOptions, \"projectService\", true);\n }\n\n const languageOptions: FlatLanguageOptions = {\n ...existingLanguageOptions,\n parser: existingLanguageOptions[\"parser\"] ?? typeScriptParserValue,\n parserOptions,\n };\n\n return {\n ...config,\n files: config.files ?? [...TYPE_SCRIPT_FILES],\n languageOptions,\n plugins: {\n ...config.plugins,\n \"runtime-cleanup\": plugin,\n },\n };\n}\n\n/** Minimal plugin object used when assembling flat-config presets. */\nconst pluginForConfigs: ESLint.Plugin = {\n rules: runtimeCleanupEslintRules,\n};\n\nconst createPresetConfig = (\n configName: RuntimeCleanupConfigName\n): RuntimeCleanupPresetConfig => {\n const configMetadata = runtimeCleanupConfigMetadataByName[configName];\n\n return withRuntimeCleanupPlugin(\n {\n name: configMetadata.presetName,\n rules: errorRulesFor(effectivePresetRuleNamesByConfig[configName]),\n },\n pluginForConfigs,\n {\n requiresTypeChecking: configMetadata.requiresTypeChecking,\n }\n );\n};\n\n/**\n * Flat config presets distributed by eslint-plugin-runtime-cleanup.\n */\nconst createRuntimeCleanupConfigsDefinition =\n (): RuntimeCleanupConfigsContract =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Object.fromEntries cannot preserve the finite preset-key union.\n Object.fromEntries(\n runtimeCleanupConfigNames.map((configName) => [\n configName,\n createPresetConfig(configName),\n ])\n ) as RuntimeCleanupConfigsContract;\n\nconst runtimeCleanupConfigsDefinition = createRuntimeCleanupConfigsDefinition();\n\n/** Finalized typed view of all exported preset configurations. */\nconst runtimeCleanupConfigs: RuntimeCleanupConfigsContract =\n runtimeCleanupConfigsDefinition;\n\n/**\n * Runtime type for the plugin's generated config presets.\n *\n * @remarks\n * Mirrors `plugin.configs` and is useful when composing typed preset-aware\n * tooling in external integrations.\n */\nexport type RuntimeCleanupConfigs = typeof runtimeCleanupConfigs;\n\n/**\n * Main plugin object exported for ESLint consumption.\n */\nconst runtimeCleanupPlugin: RuntimeCleanupPluginContract = {\n configs: runtimeCleanupConfigs,\n meta: {\n name: \"eslint-plugin-runtime-cleanup\",\n namespace: \"runtime-cleanup\",\n version: getPackageVersion(packageJson),\n },\n processors: {},\n rules: runtimeCleanupEslintRules,\n};\n\n/**\n * Runtime type for the plugin object exported as default.\n *\n * @remarks\n * Includes resolved `meta`, `rules`, and `configs` contracts after plugin\n * assembly.\n */\nexport type RuntimeCleanupPlugin = typeof runtimeCleanupPlugin;\n\n/**\n * Default plugin export consumed by ESLint flat config.\n */\nexport default runtimeCleanupPlugin;\n", "{\n \"$schema\": \"https://www.schemastore.org/package.json\",\n \"name\": \"eslint-plugin-runtime-cleanup\",\n \"version\": \"1.2.8\",\n \"private\": false,\n \"description\": \"ESLint rules for requiring cleanup of runtime resources.\",\n \"keywords\": [\n \"eslint\",\n \"eslint-plugin\",\n \"eslintplugin\",\n \"cleanup\",\n \"resources\",\n \"runtime\",\n \"typescript\"\n ],\n \"homepage\": \"https://nick2bad4u.github.io/eslint-plugin-runtime-cleanup/\",\n \"bugs\": {\n \"url\": \"https://github.com/Nick2bad4u/eslint-plugin-runtime-cleanup/issues\",\n \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Nick2bad4u/eslint-plugin-runtime-cleanup.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://github.com/Nick2bad4u\"\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/typed/*.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 -b tsconfig.build.json --force && 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-runtime-cleanup/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-runtime-cleanup/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\": \"git-cliff --config cliff.toml --current\",\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 --latest --strip all\",\n \"clean:cache\": \"del-cli dist coverage cache .cache .vite .turbo\",\n \"clean:cache:coverage\": \"del-cli coverage .coverage\",\n \"clean:cache:dist\": \"del-cli dist release\",\n \"clean:cache:eslint\": \"del-cli .cache/.eslintcache\",\n \"clean:cache:ncu\": \"del-cli .cache/.ncu-cache.json\",\n \"clean:cache:prettier\": \"del-cli .cache/.prettier-cache .prettier-cache .prettiercache\",\n \"clean:cache:stryker\": \"del-cli .stryker-tmp\",\n \"clean:cache:stylelint\": \"del-cli .cache/stylelintcache stylelintcache .stylelintcache\",\n \"clean:cache:temp\": \"del-cli \\\".temp/**\\\"\",\n \"clean:cache:typescript\": \"del-cli .cache/**.tsbuildinfo .cache/builds\",\n \"clean:cache:vite\": \"del-cli .cache/vite .cache/vitest .cache/vitest-zero-coverage .cache/vite-zero-coverage\",\n \"clean:database\": \"del-cli %appdata%/uptime-watcher/uptime-watcher.sqlite\",\n \"clean:docs\": \"del-cli 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 \"precommit\": \"npm run sync:rules:write\",\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:api:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\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:devtools:metadata\": \"node scripts/generate-devtools-workspace-metadata.mjs\",\n \"docs:serve\": \"npm run --workspace docs/docusaurus serve\",\n \"docs:start\": \"npm run --workspace docs/docusaurus start\",\n \"docs:start:devtools\": \"npm run docs:devtools:metadata && npm run docs:api:local && npm run --workspace docs/docusaurus start:devtools\",\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:typedoc:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\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 --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 typecheck && npm run lint:css && npm run lint:prettier && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml && npm run lint:actions && npm run lint:circular && npm run sync:rules:check\",\n \"lint:all:fix\": \"npm run lint:fix && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\n \"lint:all:fix:quiet\": \"npm run lint:fix:quiet && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\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 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 src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n \"lint:depcheck\": \"npm run knip -- --dependencies\",\n \"lint:deps\": \"npm run knip -- --dependencies\",\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:grype\": \"grype . -c .grype.yaml --name eslint-plugin-runtime-cleanup\",\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:nocache\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint .\",\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:strict && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n \"lint:package-check\": \"publint && attw --pack .\",\n \"lint:package-check:strict\": \"publint && node scripts/check-package-types.mjs\",\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 -- --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 \"madge:circular\": \"madge --circular --json --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\": \"cross-env NODE_OPTIONS= npm run build && cross-env NODE_OPTIONS= npm run lint:nocache && cross-env NODE_OPTIONS= npm run typecheck && cross-env NODE_OPTIONS= VITEST_TYPECHECK=false npm run test && cross-env NODE_OPTIONS= npm run sync:rules:check && cross-env NODE_OPTIONS= npm run docs:check-links && cross-env NODE_OPTIONS= npm run lint:package:strict\",\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 \"size\": \"size-limit\",\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 && cross-env RUNTIME_CLEANUP_UPDATE_GENERATED_DOCS=1 vitest run test/readme-rules-table-sync.test.ts -u\",\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 && node scripts/sync-presets-rules-matrix.mjs --write\",\n \"pretest\": \"npm run build\",\n \"test\": \"vitest run\",\n \"test:autofix:fixtures\": \"node -e \\\"console.log('No autofix fixtures are defined yet.')\\\"\",\n \"test:autofix:fixtures:typed\": \"node -e \\\"console.log('No typed autofix fixtures are defined yet.')\\\"\",\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-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:rules:write\"\n },\n \"overrides\": {\n \"jsonc-eslint-parser\": \"$jsonc-eslint-parser\"\n },\n \"dependencies\": {\n \"@typescript-eslint/parser\": \"^8.59.3\",\n \"@typescript-eslint/type-utils\": \"^8.59.3\",\n \"@typescript-eslint/utils\": \"^8.59.3\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"^0.18.2\",\n \"@csstools/stylelint-formatter-github\": \"^2.0.0\",\n \"@double-great/remark-lint-alt-text\": \"^1.1.1\",\n \"@eslint/config-inspector\": \"^3.0.2\",\n \"@microsoft/tsdoc-config\": \"^0.18.1\",\n \"@size-limit/file\": \"^12.1.0\",\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.8.0\",\n \"@types/sloc\": \"^0.2.3\",\n \"@typescript-eslint/rule-tester\": \"^8.59.3\",\n \"@vitest/coverage-v8\": \"^4.1.6\",\n \"@vitest/ui\": \"^4.1.6\",\n \"actionlint\": \"^2.0.6\",\n \"all-contributors-cli\": \"^6.26.1\",\n \"cognitive-complexity-ts\": \"^0.8.1\",\n \"commitlint\": \"^21.0.1\",\n \"commitlint-config-gitmoji\": \"^2.3.1\",\n \"cross-env\": \"^10.1.0\",\n \"del-cli\": \"^7.0.0\",\n \"detect-secrets\": \"^1.0.6\",\n \"esbuild\": \"^0.28.0\",\n \"eslint\": \"^10.4.0\",\n \"eslint-config-nick2bad4u\": \"^1.0.16\",\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-secret-scanner\": \"^2.1.1\",\n \"htmlhint\": \"^1.9.2\",\n \"jscpd\": \"^4.2.2\",\n \"knip\": \"^6.14.1\",\n \"leasot\": \"^14.4.0\",\n \"madge\": \"^8.0.0\",\n \"markdown-link-check\": \"^3.14.2\",\n \"npm-check-updates\": \"^22.2.0\",\n \"npm-package-json-lint\": \"^10.4.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier\": \"^3.8.3\",\n \"prettier-config-nick2bad4u\": \"^1.0.13\",\n \"prettier-plugin-jsdoc-type\": \"^0.2.0\",\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.2\",\n \"secretlint\": \"^13.0.2\",\n \"secretlint-config-nick2bad4u\": \"^1.0.5\",\n \"size-limit\": \"^12.1.0\",\n \"sloc\": \"^0.3.2\",\n \"sort-package-json\": \"^3.6.1\",\n \"stylelint\": \"^17.11.1\",\n \"stylelint-config-nick2bad4u\": \"^1.0.11\",\n \"ts-unused-exports\": \"^11.0.1\",\n \"typedoc\": \"^0.28.19\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.59.3\",\n \"typesync\": \"^0.14.3\",\n \"vfile\": \"^6.0.3\",\n \"vite\": \"^8.0.13\",\n \"vite-tsconfig-paths\": \"^6.1.1\",\n \"vitest\": \"^4.1.6\",\n \"yamllint-js\": \"^0.2.4\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0 || ^10.4.0\",\n \"typescript\": \"^5.0.0 || ^6.0.2\"\n },\n \"packageManager\": \"npm@11.14.1\",\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"devEngines\": {\n \"runtime\": {\n \"name\": \"node\",\n \"version\": \">=22.0.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", "/**\n * @packageDocumentation\n * Require AbortController handles to be retained so work can be aborted during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst abortControllerConstructorName = \"AbortController\";\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(globalReceiverNames);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedAbortControllerIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectAbortControllerConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === abortControllerConstructorName &&\n !isShadowedAbortControllerIdentifier(context, callee);\n\nconst isMemberAbortControllerConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n abortControllerConstructorName;\n\nconst isAbortControllerConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectAbortControllerConstructor(context, callee) ||\n isMemberAbortControllerConstructor(callee);\n\nconst isDiscardedAbortControllerHandle = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateAbortSignalAccess = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n return (\n parent.type === AST_NODE_TYPES.MemberExpression &&\n parent.object === current &&\n !parent.optional &&\n getStaticPropertyName(parent.property, parent.computed) === \"signal\"\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-abort-controllers`. */\nconst noFloatingAbortControllers: TSESLint.RuleModule<\n \"floatingAbortController\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isAbortControllerConstructor(context, node.callee) ||\n (!isDiscardedAbortControllerHandle(node) &&\n !isImmediateAbortSignalAccess(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingAbortController\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require AbortController handles to be retained so work can be aborted during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-abort-controllers\"),\n },\n messages: {\n floatingAbortController:\n \"Store or return the AbortController handle so abort() can cancel work during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-abort-controllers\",\n});\n\nexport default noFloatingAbortControllers;\n", "import type { TSESTree } from \"@typescript-eslint/utils\";\n\n/**\n * @packageDocumentation\n * AST parent-chain traversal helpers used by multiple rule utilities.\n */\nimport { AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nimport { resolveFirstValueInLinkedStructure } from \"./cycle-safe-linked-search.js\";\n\n/**\n * AST node shape that may carry a parser-populated `parent` reference.\n */\ntype NodeWithOptionalParent = Readonly<TSESTree.Node> & {\n parent?: Readonly<TSESTree.Node>;\n};\n\n/**\n * Determine whether a node exposes an optional `parent` property.\n */\nconst hasOptionalParentProperty = (\n node: Readonly<TSESTree.Node>\n): node is NodeWithOptionalParent => \"parent\" in node;\n\n/**\n * Gets a node's parent reference when available.\n *\n * @param node - AST node whose parent should be read.\n *\n * @returns Parent node when present on parser output; otherwise `undefined`.\n */\nexport const getParentNode = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined =>\n hasOptionalParentProperty(node) ? node.parent : undefined;\n\n/**\n * Walks the parent chain to locate the enclosing `Program` node.\n *\n * @param node - Starting AST node.\n *\n * @returns Nearest enclosing `Program` node; otherwise `null` when no program\n * boundary can be reached (including cycle-guard termination).\n */\nexport const getProgramNode = (\n node: Readonly<TSESTree.Node>\n): null | Readonly<TSESTree.Program> => {\n const lookupResult = resolveFirstValueInLinkedStructure<\n Readonly<TSESTree.Node>,\n Readonly<TSESTree.Program>\n >({\n getNextNode: (\n currentNode: Readonly<TSESTree.Node>\n ): null | Readonly<TSESTree.Node> => getParentNode(currentNode) ?? null,\n resolveValue: (currentNode: Readonly<TSESTree.Node>) =>\n currentNode.type === AST_NODE_TYPES.Program\n ? {\n found: true,\n value: currentNode,\n }\n : {\n found: false,\n },\n startNode: node,\n });\n\n return lookupResult.found ? lookupResult.value : null;\n};\n", "/**\n * @packageDocumentation\n * Shared Floyd-cycle-guarded linked-structure traversal utilities.\n */\n\n/**\n * Result shape returned by linked-structure searches.\n */\nexport type LinkedStructureLookupResult<Value> =\n | Readonly<{\n found: false;\n }>\n | Readonly<{\n found: true;\n value: Value;\n }>;\n\n/**\n * Fast-pointer hop count per iteration for Floyd cycle detection.\n */\nconst FLOYD_FAST_POINTER_ADVANCE_STEPS = 2 as const;\n\n/**\n * Resolve the first matching value while traversing a linked structure.\n *\n * @param options - Linked-structure traversal options.\n *\n * - `startNode`: Initial node to inspect.\n * - `getNextNode`: Function that returns the next node in the chain.\n * - `resolveValue`: Function that returns a lookup result for the current node.\n *\n * @returns Lookup result for the first resolved value; otherwise a non-matching\n * lookup result when traversal reaches the chain end or detects a\n * parent-cycle.\n */\nexport const resolveFirstValueInLinkedStructure = <Node, Value>({\n getNextNode,\n resolveValue,\n startNode,\n}: Readonly<{\n getNextNode: (node: Node) => Node | null;\n resolveValue: (node: Node) => LinkedStructureLookupResult<Value>;\n startNode: Node | null;\n}>): LinkedStructureLookupResult<Value> => {\n let slowNode = startNode;\n let fastNode = startNode;\n\n while (slowNode !== null) {\n const resolvedValue = resolveValue(slowNode);\n\n if (resolvedValue.found) {\n return resolvedValue;\n }\n\n slowNode = getNextNode(slowNode);\n\n for (let step = 0; step < FLOYD_FAST_POINTER_ADVANCE_STEPS; step += 1) {\n if (fastNode === null) {\n break;\n }\n\n fastNode = getNextNode(fastNode);\n }\n\n if (slowNode !== null && fastNode !== null && slowNode === fastNode) {\n return {\n found: false,\n };\n }\n }\n\n return {\n found: false,\n };\n};\n\n/**\n * Check whether any node in a linked structure satisfies a predicate.\n *\n * @param options - Linked-structure traversal options.\n *\n * - `startNode`: Initial node to inspect.\n * - `getNextNode`: Function that returns the next node in the chain.\n * - `isMatch`: Predicate used to test each visited node.\n *\n * @returns `true` when any visited node matches; otherwise `false`.\n */\nexport const isAnyLinkedStructureNodeMatching = <Node>({\n getNextNode,\n isMatch,\n startNode,\n}: Readonly<{\n getNextNode: (node: Node) => Node | null;\n isMatch: (node: Node) => boolean;\n startNode: Node | null;\n}>): boolean =>\n resolveFirstValueInLinkedStructure({\n getNextNode,\n resolveValue: (node): LinkedStructureLookupResult<boolean> =>\n isMatch(node)\n ? {\n found: true,\n value: true,\n }\n : {\n found: false,\n },\n startNode,\n }).found;\n", "/**\n * @packageDocumentation\n * Canonical rule documentation URL helpers.\n */\n\n/** Stable docs host/prefix for generated rule docs links. */\nexport const RULE_DOCS_URL_BASE =\n \"https://nick2bad4u.github.io/eslint-plugin-runtime-cleanup/docs/rules/\" as const;\n\n/**\n * Build the canonical documentation URL for one rule id.\n *\n * @param ruleName - Rule id (for example `require-timer-cleanup`).\n *\n * @returns Canonical docs URL for the rule page.\n */\nexport const createRuleDocsUrl = (ruleName: string): string =>\n `${RULE_DOCS_URL_BASE}${ruleName}`;\n", "/**\n * @packageDocumentation\n * Scope-chain helpers for reliable variable-resolution checks.\n */\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport { resolveFirstValueInLinkedStructure } from \"./cycle-safe-linked-search.js\";\n\n/**\n * Resolve a variable binding by walking the current scope and all parent\n * scopes.\n *\n * @param scope - Initial scope to inspect.\n * @param variableName - Identifier name to resolve.\n *\n * @returns Matched variable binding from the nearest scope chain; otherwise\n * `null`.\n */\nexport const getVariableInScopeChain = (\n scope: Readonly<null | Readonly<TSESLint.Scope.Scope>>,\n variableName: string\n): null | TSESLint.Scope.Variable => {\n const lookupResult = resolveFirstValueInLinkedStructure<\n Readonly<TSESLint.Scope.Scope>,\n TSESLint.Scope.Variable\n >({\n getNextNode: (\n currentScope: Readonly<TSESLint.Scope.Scope>\n ): null | Readonly<TSESLint.Scope.Scope> => currentScope.upper,\n resolveValue: (currentScope: Readonly<TSESLint.Scope.Scope>) => {\n const variable = currentScope.set.get(variableName);\n\n return variable === undefined\n ? {\n found: false,\n }\n : {\n found: true,\n value: variable,\n };\n },\n startNode: scope,\n });\n\n return lookupResult.found ? lookupResult.value : null;\n};\n", "/**\n * @packageDocumentation\n * Internal shared utilities used by eslint-plugin-runtime-cleanup rule modules\n * and plugin wiring.\n */\nimport type ts from \"typescript\";\n\nimport { ESLintUtils, type TSESLint } from \"@typescript-eslint/utils\";\n\nimport type { RuntimeCleanupConfigReference } from \"./runtime-cleanup-config-references.js\";\n\nimport { registerProgramSettingsForContext } from \"./plugin-settings.js\";\nimport { getRuleCatalogEntryForRuleNameOrNull } from \"./rule-catalog.js\";\nimport { createRuleDocsUrl } from \"./rule-docs-url.js\";\nimport { safeTypeOperation } from \"./safe-type-operation.js\";\n\n/**\n * Parser services and type checker bundle used by typed rules.\n */\nexport interface TypedRuleServices {\n checker: ts.TypeChecker;\n parserServices: ReturnType<typeof ESLintUtils.getParserServices>;\n}\n\ntype RuntimeCleanupRuleCreator = ReturnType<\n typeof ESLintUtils.RuleCreator<RuntimeCleanupRuleDocs>\n>;\n\n/**\n * Plugin-specific metadata extensions for `meta.docs`.\n *\n * @remarks\n * `eslint-plugin/require-meta-docs-recommended` expects\n * `meta.docs.recommended` to be boolean. Preset membership is tracked\n * separately via `meta.docs.runtimeCleanupConfigs`.\n */\ninterface RuntimeCleanupRuleDocs {\n recommended?: boolean;\n requiresTypeChecking?: boolean;\n ruleId?: string;\n ruleNumber?: number;\n runtimeCleanupConfigs?:\n | readonly RuntimeCleanupConfigReference[]\n | RuntimeCleanupConfigReference;\n}\n\n/** Shared typed-rule context contract used by helper utilities. */\ntype TypedRuleContext = Readonly<\n TSESLint.RuleContext<string, readonly unknown[]>\n>;\n\nexport type { TypedRuleContext };\n\n/**\n * Rule-creator wrapper used by plugin rules.\n *\n * @remarks\n * This wrapper automatically registers per-program plugin settings and injects\n * canonical `meta.docs.ruleId` / `meta.docs.ruleNumber` values for cataloged\n * public rules.\n *\n * @param ruleDefinition - Rule module definition passed to\n * `ESLintUtils.RuleCreator`.\n *\n * @returns Rule module factory output that auto-registers program settings and\n * preserves the authored rule contract.\n */\nexport const createTypedRule: RuntimeCleanupRuleCreator = (ruleDefinition) => {\n const catalogEntry = getRuleCatalogEntryForRuleNameOrNull(\n ruleDefinition.name\n );\n const createdRule = ESLintUtils.RuleCreator.withoutDocs(ruleDefinition);\n const ruleDocs = createdRule.meta.docs;\n if (ruleDocs === undefined) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' must declare meta.docs.`\n );\n }\n\n const canonicalDocsUrl = createRuleDocsUrl(ruleDefinition.name);\n\n if (typeof ruleDocs.url === \"string\" && ruleDocs.url !== canonicalDocsUrl) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' has non-canonical docs.url '${ruleDocs.url}'. Expected '${canonicalDocsUrl}'.`\n );\n }\n\n if (catalogEntry === null && ruleDefinition.name.startsWith(\"require-\")) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' is missing from the stable rule catalog.`\n );\n }\n\n const docsWithCatalog: RuntimeCleanupRuleDocs &\n TSESLint.RuleMetaDataDocs =\n catalogEntry === null\n ? {\n ...ruleDocs,\n url: canonicalDocsUrl,\n }\n : {\n ...ruleDocs,\n ruleId: catalogEntry.ruleId,\n ruleNumber: catalogEntry.ruleNumber,\n url: canonicalDocsUrl,\n };\n const metaDefaultOptions = createdRule.meta.defaultOptions;\n\n return {\n ...createdRule,\n create(context) {\n registerProgramSettingsForContext(context);\n\n return createdRule.create(context);\n },\n meta: {\n ...createdRule.meta,\n ...(metaDefaultOptions === undefined\n ? {}\n : { defaultOptions: metaDefaultOptions }),\n docs: docsWithCatalog,\n },\n name: ruleDefinition.name,\n };\n};\n\n/**\n * Retrieve parser services and type checker for typed rules.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns Parser services and type checker references bound to the current\n * program.\n *\n * @throws Throws when `parserServices.program` is unavailable, which indicates\n * the current lint run is not configured for type-aware analysis.\n */\nexport const getTypedRuleServices = (\n context: TypedRuleContext\n): TypedRuleServices => {\n const parserServices = ESLintUtils.getParserServices(context, true);\n const program = parserServices.program;\n\n if (program === null) {\n throw new Error(\n \"Typed rule requires parserServices.program; ensure projectService is enabled for this lint run.\"\n );\n }\n\n return {\n checker: program.getTypeChecker(),\n parserServices,\n };\n};\n\n/**\n * Determine whether the current lint context has full type information.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns `true` when parser services and `program` are available.\n */\nexport const hasTypeServices = (context: TypedRuleContext): boolean => {\n const parserServicesResult = safeTypeOperation({\n operation: () => ESLintUtils.getParserServices(context, true),\n reason: \"typed-rule-services-check-failed\",\n });\n\n return (\n parserServicesResult.ok && parserServicesResult.value.program !== null\n );\n};\n\n/**\n * Retrieve typed services when available, otherwise return `undefined`.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns Typed services when parser services include a TypeScript program.\n */\nexport const getTypedRuleServicesOrUndefined = (\n context: TypedRuleContext\n): TypedRuleServices | undefined =>\n hasTypeServices(context) ? getTypedRuleServices(context) : undefined;\n\n/**\n * Resolve the type of a signature parameter by index.\n *\n * @param options - Signature parameter lookup options.\n *\n * @returns Parameter type when available; otherwise `undefined`.\n */\nexport const getSignatureParameterTypeAt = (\n options: Readonly<{\n checker: ts.TypeChecker;\n index: number;\n location: ts.Node;\n signature: null | ts.Signature | undefined;\n }>\n): ts.Type | undefined => {\n const { checker, index, location, signature } = options;\n\n const symbol = signature?.parameters[index];\n if (symbol === undefined) {\n return undefined;\n }\n\n return checker.getTypeOfSymbolAtLocation(symbol, location);\n};\n", "/**\n * @packageDocumentation\n * Parsing and memoization helpers for plugin-level runtime settings.\n */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\n\nimport { getProgramNode } from \"./ast-node.js\";\n\n/** Top-level `settings` key for this plugin. */\nconst RUNTIME_CLEANUP_SETTINGS_KEY = \"runtime-cleanup\";\n\n/** Flag that disables all plugin autofix behavior. */\nconst DISABLE_ALL_AUTOFIXES_KEY = \"disableAllAutofixes\";\n\n/**\n * Normalized per-program settings consumed by fix-generation helpers.\n */\ninterface ProgramSettings {\n disableAllAutofixes: boolean;\n}\n\n/**\n * Cache of parsed settings keyed by the Program node for the active file.\n */\nconst settingsByProgram = new WeakMap<TSESTree.Program, ProgramSettings>();\n\n/**\n * Narrow an unknown value to an object-like record.\n *\n * @param value - Value to narrow.\n *\n * @returns `true` when the value is a non-null, non-array object.\n */\nconst isObject = (\n value: unknown\n): value is Readonly<Record<string, unknown>> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/**\n * Extract the `settings[\"runtime-cleanup\"]` object when present and valid.\n *\n * @param settings - ESLint settings value from rule context.\n *\n * @returns Parsed plugin settings object when valid; otherwise `null`.\n */\nconst getRuntimeCleanupSettings = (\n settings: unknown\n): null | Readonly<Record<string, unknown>> => {\n if (!isObject(settings)) {\n return null;\n }\n\n const pluginSettings = settings[RUNTIME_CLEANUP_SETTINGS_KEY];\n\n return isObject(pluginSettings) ? pluginSettings : null;\n};\n\n/**\n * Read a strict boolean flag (`true`) from an object by key.\n *\n * @param object - Source settings object.\n * @param key - Flag key to read.\n *\n * @returns `true` only when the key exists and equals literal `true`.\n */\nconst readBooleanFlag = (\n object: Readonly<Record<string, unknown>>,\n key: string\n): boolean => Object.hasOwn(object, key) && object[key] === true;\n\n/**\n * Reads the global autofix disable flag from plugin settings.\n *\n * @param settings - ESLint settings value from rule context.\n *\n * @returns `true` when all plugin autofixes are explicitly disabled.\n */\nconst readDisableAllAutofixesFromSettings = (settings: unknown): boolean => {\n const pluginSettings = getRuntimeCleanupSettings(settings);\n if (pluginSettings === null) {\n return false;\n }\n\n return readBooleanFlag(pluginSettings, DISABLE_ALL_AUTOFIXES_KEY);\n};\n\n/**\n * Register parsed plugin settings for the current file program.\n *\n * @param context - Active ESLint rule context.\n *\n * @returns Memoized immutable settings for the context's program node.\n */\nexport const registerProgramSettingsForContext = (\n context: Readonly<TSESLint.RuleContext<string, readonly unknown[]>>\n): Readonly<ProgramSettings> => {\n const programNode = context.sourceCode.ast;\n\n const parsedSettings: Readonly<ProgramSettings> = Object.freeze({\n disableAllAutofixes: readDisableAllAutofixesFromSettings(\n context.settings\n ),\n });\n\n const existingProgramSettings = settingsByProgram.get(programNode);\n if (existingProgramSettings !== undefined) {\n return existingProgramSettings;\n }\n\n settingsByProgram.set(programNode, parsedSettings);\n\n return parsedSettings;\n};\n\n/**\n * Determine whether autofixes are globally disabled for the file containing the\n * provided node.\n *\n * @param node - AST node used to resolve the enclosing Program.\n *\n * @returns `true` when fixes should be suppressed.\n */\nexport const areAutofixesDisabledForNode = (\n node: Readonly<TSESTree.Node>\n): boolean => {\n const programNode = getProgramNode(node);\n if (programNode === null) {\n return false;\n }\n\n const settings = settingsByProgram.get(programNode);\n\n return settings?.disableAllAutofixes === true;\n};\n", "/**\n * @packageDocumentation\n * Stable catalog IDs for all plugin rules.\n */\n\n/**\n * Catalog metadata for a single rule.\n */\nexport type RuntimeCleanupRuleCatalogEntry = Readonly<{\n ruleId: RuntimeCleanupRuleCatalogId;\n ruleName: string;\n ruleNumber: number;\n}>;\n\n/**\n * Stable machine-friendly rule id format (for example: `R001`).\n */\nexport type RuntimeCleanupRuleCatalogId = `R${string}`;\n\n/**\n * Stable global ordering used for rule catalog IDs.\n *\n * @remarks\n * Append new rules to preserve existing IDs once the first runtime-cleanup\n * rules are added.\n */\n/* eslint-disable perfectionist/sort-arrays -- Catalog order is append-only so existing rule IDs remain stable. */\nconst orderedRuleNames = [\n \"no-floating-timers\",\n \"no-unmanaged-event-listeners\",\n \"no-floating-observers\",\n \"no-floating-workers\",\n \"no-floating-child-processes\",\n \"no-floating-abort-controllers\",\n \"no-floating-streams\",\n \"no-floating-disposable-stacks\",\n \"no-floating-network-connections\",\n \"no-floating-file-watchers\",\n \"no-floating-broadcast-channels\",\n \"no-floating-message-channels\",\n \"no-floating-servers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-media-streams\",\n \"no-floating-wake-locks\",\n \"no-floating-object-urls\",\n \"no-floating-audio-contexts\",\n \"no-floating-web-stream-locks\",\n \"no-floating-infinite-animations\",\n] as const satisfies readonly string[];\n/* eslint-enable perfectionist/sort-arrays -- Re-enable sorting outside the stable rule catalog. */\n\nconst toRuleCatalogId = (ruleNumber: number): RuntimeCleanupRuleCatalogId =>\n `R${String(ruleNumber).padStart(3, \"0\")}`;\n\n/**\n * Canonical catalog metadata entries in stable display/order form.\n */\nexport const runtimeCleanupRuleCatalogEntries: readonly RuntimeCleanupRuleCatalogEntry[] =\n orderedRuleNames.map((ruleName, index) => {\n const ruleNumber = index + 1;\n\n return {\n ruleId: toRuleCatalogId(ruleNumber),\n ruleName,\n ruleNumber,\n };\n });\n\n/**\n * Fast lookup map for rule catalog metadata by rule name.\n */\nexport const runtimeCleanupRuleCatalogByRuleName: Readonly<\n Partial<Record<string, RuntimeCleanupRuleCatalogEntry>>\n> = Object.fromEntries(\n runtimeCleanupRuleCatalogEntries.map((entry) => [entry.ruleName, entry])\n);\n\n/**\n * Resolve stable catalog metadata for a rule name when available.\n */\nexport const getRuleCatalogEntryForRuleNameOrNull = (\n ruleName: string\n): null | RuntimeCleanupRuleCatalogEntry =>\n runtimeCleanupRuleCatalogByRuleName[ruleName] ?? null;\n\n/**\n * Resolve stable catalog metadata for a rule name.\n *\n * @throws When the rule is missing from the catalog.\n */\nexport const getRuleCatalogEntryForRuleName = (\n ruleName: string\n): RuntimeCleanupRuleCatalogEntry => {\n const catalogEntry = getRuleCatalogEntryForRuleNameOrNull(ruleName);\n\n if (catalogEntry === null) {\n throw new TypeError(\n `Rule '${ruleName}' is missing from the stable rule catalog.`\n );\n }\n\n return catalogEntry;\n};\n\n/**\n * Resolve stable catalog metadata by rule id.\n */\nexport const runtimeCleanupRuleCatalogByRuleId: ReadonlyMap<\n RuntimeCleanupRuleCatalogId,\n RuntimeCleanupRuleCatalogEntry\n> = new Map(\n runtimeCleanupRuleCatalogEntries.map((entry) => [entry.ruleId, entry])\n);\n\n/**\n * Resolve stable catalog metadata for a catalog id.\n */\nexport const getRuleCatalogEntryForRuleId = (\n ruleId: RuntimeCleanupRuleCatalogId\n): RuntimeCleanupRuleCatalogEntry | undefined =>\n runtimeCleanupRuleCatalogByRuleId.get(ruleId);\n\n/**\n * Validate that catalog IDs are unique and sequential.\n */\nexport const validateRuleCatalogIntegrity = (): boolean => {\n const entries = runtimeCleanupRuleCatalogEntries;\n const seenRuleIds = new Set<RuntimeCleanupRuleCatalogId>();\n\n for (const [index, entry] of entries.entries()) {\n if (seenRuleIds.has(entry.ruleId)) {\n return false;\n }\n\n seenRuleIds.add(entry.ruleId);\n\n const expectedRuleNumber = index + 1;\n if (entry.ruleNumber !== expectedRuleNumber) {\n return false;\n }\n\n if (entry.ruleId !== toRuleCatalogId(expectedRuleNumber)) {\n return false;\n }\n }\n\n return true;\n};\n", "/**\n * @packageDocumentation\n * Require AudioContext instances to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport {\n collectStaticMemberPath,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst audioContextConstructorNames = [\n \"AudioContext\",\n \"webkitAudioContext\",\n] as const;\nconst cleanupMemberNames: ReadonlySet<string> = new Set([\"close\"]);\nconst globalReceiverNames = [\"globalThis\", \"self\", \"window\"] as const;\n\ntype AudioContextConstructorName =\n (typeof audioContextConstructorNames)[number];\n\nconst audioContextConstructorNameSet: ReadonlySet<string> = new Set(\n audioContextConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isAudioContextConstructorName = (\n name: string\n): name is AudioContextConstructorName =>\n audioContextConstructorNameSet.has(name);\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectAudioContextConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isAudioContextConstructorName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberAudioContextConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n const path = collectStaticMemberPath(callee);\n\n if (path?.length !== 2) {\n return undefined;\n }\n\n const receiverName = path[0];\n\n if (\n receiverName === undefined ||\n !globalReceiverNameSet.has(receiverName)\n ) {\n return undefined;\n }\n\n const constructorName = path[1];\n\n return constructorName !== undefined &&\n isAudioContextConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getAudioContextConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined =>\n getDirectAudioContextConstructorName(context, callee) ??\n getMemberAudioContextConstructorName(callee);\n\n/** Rule implementation for `runtime-cleanup/no-floating-audio-contexts`. */\nconst noFloatingAudioContexts: TSESLint.RuleModule<\n \"floatingAudioContext\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const constructorName = getAudioContextConstructorName(\n context,\n node.callee\n );\n\n if (\n constructorName === undefined ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n cleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n data: { constructorName },\n messageId: \"floatingAudioContext\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require AudioContext instances to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-audio-contexts\"),\n },\n messages: {\n floatingAudioContext:\n \"Store or return the {{constructorName}} instance so close() can release audio resources during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-audio-contexts\",\n});\n\nexport default noFloatingAudioContexts;\n", "/**\n * @packageDocumentation\n * Shared AST helpers for rules that reject unowned cleanup handles.\n */\nimport { AST_NODE_TYPES, type TSESTree } from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"./ast-node.js\";\n\n/**\n * Unwrap syntax that does not change whether a resource expression is owned.\n */\nexport const getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\n/**\n * Resolve a static property name from dot or string-literal member access.\n */\nexport const getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\n/**\n * Resolve a simple static member path such as `globalThis.URL.createObjectURL`.\n */\nexport const collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return objectPath === undefined || propertyName === undefined\n ? undefined\n : [...objectPath, propertyName];\n};\n\n/**\n * Check whether a resource-producing expression is discarded as a standalone\n * expression or explicitly voided.\n */\nexport const isDiscardedResourceExpression = (\n node: Readonly<TSESTree.Node>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/**\n * Check whether a resource handle is immediately used as a member receiver\n * instead of being retained. Cleanup members are excluded so immediate cleanup\n * calls such as `new AudioContext().close()` are not reported here.\n */\nexport const isImmediateUnownedMemberReceiver = (\n node: Readonly<TSESTree.Node>,\n cleanupMemberNames: ReadonlySet<string>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(\n parent.property,\n parent.computed\n );\n\n return (\n propertyName === undefined || !cleanupMemberNames.has(propertyName)\n );\n }\n\n return false;\n};\n\n", "/**\n * @packageDocumentation\n * Require BroadcastChannel handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst broadcastChannelConstructorName = \"BroadcastChannel\";\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedBroadcastChannelIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectBroadcastChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === broadcastChannelConstructorName &&\n !isShadowedBroadcastChannelIdentifier(context, callee);\n\nconst isMemberBroadcastChannelConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n broadcastChannelConstructorName;\n\nconst isBroadcastChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectBroadcastChannelConstructor(context, callee) ||\n isMemberBroadcastChannelConstructor(callee);\n\nconst isDiscardedBroadcastChannel = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateBroadcastChannelMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n if (\n getStaticPropertyName(parent.property, parent.computed) === \"close\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-broadcast-channels`. */\nconst noFloatingBroadcastChannels: TSESLint.RuleModule<\n \"floatingBroadcastChannel\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isBroadcastChannelConstructor(context, node.callee) ||\n (!isDiscardedBroadcastChannel(node) &&\n !isImmediateBroadcastChannelMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingBroadcastChannel\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require BroadcastChannel handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-broadcast-channels\"),\n },\n messages: {\n floatingBroadcastChannel:\n \"Store or return the BroadcastChannel handle so close() can release the channel during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-broadcast-channels\",\n});\n\nexport default noFloatingBroadcastChannels;\n", "/**\n * @packageDocumentation\n * Require child process handles to be retained so they can be killed during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst childProcessFactoryNames = [\n \"exec\",\n \"execFile\",\n \"fork\",\n \"spawn\",\n] as const;\nconst childProcessModuleNames = [\n \"child_process\",\n \"node:child_process\",\n] as const;\nconst immediateCleanupMethodNames = [\n \"disconnect\",\n \"kill\",\n] as const;\n\ntype ChildProcessFactoryName = (typeof childProcessFactoryNames)[number];\n\nconst childProcessFactoryNameSet: ReadonlySet<string> = new Set(\n childProcessFactoryNames\n);\nconst childProcessModuleNameSet: ReadonlySet<string> = new Set(\n childProcessModuleNames\n);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isChildProcessFactoryName = (\n name: string\n): name is ChildProcessFactoryName => childProcessFactoryNameSet.has(name);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n immediateCleanupMethodNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.value.type !== AST_NODE_TYPES.Identifier ||\n property.value.name !== identifierName\n ) {\n continue;\n }\n\n return getStaticPropertyName(property.key);\n }\n\n return undefined;\n};\n\nconst isChildProcessModuleSource = (source: string | undefined): boolean =>\n source !== undefined && childProcessModuleNameSet.has(source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable?.defs[0];\n};\n\nconst isChildProcessModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (definition === undefined) {\n return false;\n }\n\n return isChildProcessModuleSource(\n getDefinitionModuleSource(definition.node)\n );\n};\n\nconst getNamedChildProcessFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): ChildProcessFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (definition === undefined) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isChildProcessModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return importedName !== undefined &&\n isChildProcessFactoryName(importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return propertyName !== undefined &&\n isChildProcessFactoryName(propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isChildProcessFactoryName(callee.property.name) ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isChildProcessModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isChildProcessFactoryName(callee.property.name) ||\n !isChildProcessModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getChildProcessFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedChildProcessFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedChildProcessHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateChildProcessMethodReceiver = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-child-processes`. */\nconst noFloatingChildProcesses: TSESLint.RuleModule<\n \"floatingChildProcess\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getChildProcessFactoryName(\n context,\n node.callee\n );\n\n if (\n factoryName === undefined ||\n (!isDiscardedChildProcessHandle(node) &&\n !isImmediateChildProcessMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingChildProcess\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require child process handles to be retained so they can be killed during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-child-processes\"),\n },\n messages: {\n floatingChildProcess:\n \"Store or return the child process handle from {{factoryName}} so it can be killed during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-child-processes\",\n});\n\nexport default noFloatingChildProcesses;\n", "/**\n * @packageDocumentation\n * Require DisposableStack handles to be retained so registered disposers run.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst disposableStackConstructorNames = [\n \"AsyncDisposableStack\",\n \"DisposableStack\",\n] as const;\nconst cleanupMethodNames = [\n \"dispose\",\n \"disposeAsync\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype DisposableStackConstructorName =\n (typeof disposableStackConstructorNames)[number];\n\nconst disposableStackConstructorNameSet: ReadonlySet<string> = new Set(\n disposableStackConstructorNames\n);\nconst cleanupMethodNameSet: ReadonlySet<string> = new Set(cleanupMethodNames);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isDisposableStackConstructorName = (\n name: string\n): name is DisposableStackConstructorName =>\n disposableStackConstructorNameSet.has(name);\n\nconst isCleanupMethodName = (name: string): boolean =>\n cleanupMethodNameSet.has(name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedDisposableStackIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectDisposableStackConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isDisposableStackConstructorName(callee.name) ||\n isShadowedDisposableStackIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberDisposableStackConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name)\n ) {\n return undefined;\n }\n\n const constructorName = getStaticPropertyName(\n callee.property,\n callee.computed\n );\n\n return constructorName !== undefined &&\n isDisposableStackConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getDisposableStackConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined =>\n getDirectDisposableStackConstructorName(context, callee) ??\n getMemberDisposableStackConstructorName(callee);\n\nconst isDiscardedDisposableStack = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateDisposableStackMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const methodName = getStaticPropertyName(\n parent.property,\n parent.computed\n );\n\n if (methodName === undefined || isCleanupMethodName(methodName)) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-disposable-stacks`. */\nconst noFloatingDisposableStacks: TSESLint.RuleModule<\n \"floatingDisposableStack\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const constructorName = getDisposableStackConstructorName(\n context,\n node.callee\n );\n\n if (\n constructorName === undefined ||\n (!isDiscardedDisposableStack(node) &&\n !isImmediateDisposableStackMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { constructorName },\n messageId: \"floatingDisposableStack\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require DisposableStack handles to be retained so registered disposers run.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-disposable-stacks\"),\n },\n messages: {\n floatingDisposableStack:\n \"Store, return, or use the {{constructorName}} handle so registered disposers run during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-disposable-stacks\",\n});\n\nexport default noFloatingDisposableStacks;\n", "/**\n * @packageDocumentation\n * Require Node.js file watcher handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst fileWatcherFactoryName = \"watch\";\nconst fsModuleNames = [\"fs\", \"node:fs\"] as const;\nconst immediateCleanupMethodNames = [\"close\"] as const;\n\nconst fsModuleNameSet: ReadonlySet<string> = new Set(fsModuleNames);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n immediateCleanupMethodNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst isFsModuleSource = (source: string | undefined): boolean =>\n source !== undefined && fsModuleNameSet.has(source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable?.defs[0];\n};\n\nconst isFsModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return (\n definition !== undefined &&\n isFsModuleSource(getDefinitionModuleSource(definition.node))\n );\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.value.type !== AST_NODE_TYPES.Identifier ||\n property.value.name !== identifierName\n ) {\n continue;\n }\n\n return getStaticPropertyName(property.key);\n }\n\n return undefined;\n};\n\nconst getNamedFileWatcherBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): string | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (definition === undefined) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isFsModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n return getImportedSpecifierName(definition.node) ===\n fileWatcherFactoryName\n ? fileWatcherFactoryName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n return getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n ) === fileWatcherFactoryName\n ? fileWatcherFactoryName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.property.name !== fileWatcherFactoryName ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isFsModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.property.name !== fileWatcherFactoryName ||\n !isFsModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getFileWatcherFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedFileWatcherBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedFileWatcherHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateFileWatcherMethodReceiver = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-file-watchers`. */\nconst noFloatingFileWatchers: TSESLint.RuleModule<\n \"floatingFileWatcher\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getFileWatcherFactoryName(\n context,\n node.callee\n );\n\n if (\n factoryName === undefined ||\n (!isDiscardedFileWatcherHandle(node) &&\n !isImmediateFileWatcherMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingFileWatcher\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js file watcher handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-file-watchers\"),\n },\n messages: {\n floatingFileWatcher:\n \"Store or return the file watcher from {{factoryName}} so close() can stop watching during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-file-watchers\",\n});\n\nexport default noFloatingFileWatchers;\n", "/**\n * @packageDocumentation\n * Require geolocation watch IDs to be retained so they can be cleared.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst geolocationWatchFunctionName = \"watchPosition\";\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return objectPath === undefined || propertyName === undefined\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst isGeolocationWatchPath = (path: readonly string[]): boolean =>\n (path.length === 3 &&\n path[0] === \"navigator\" &&\n path[1] === \"geolocation\" &&\n path[2] === geolocationWatchFunctionName) ||\n (path.length === 4 &&\n globalNavigatorReceiverNameSet.has(path[0] ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"geolocation\" &&\n path[3] === geolocationWatchFunctionName);\n\nconst isGeolocationWatchCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return path !== undefined && isGeolocationWatchPath(path);\n};\n\nconst isDiscardedWatchId = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-geolocation-watches`. */\nconst noFloatingGeolocationWatches: TSESLint.RuleModule<\n \"floatingGeolocationWatch\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isGeolocationWatchCall(context, node.callee) ||\n !isDiscardedWatchId(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingGeolocationWatch\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require geolocation watch IDs to be retained so they can be cleared.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-geolocation-watches\"),\n },\n messages: {\n floatingGeolocationWatch:\n \"Store or return the geolocation watch ID so navigator.geolocation.clearWatch() can remove the location watcher during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-geolocation-watches\",\n});\n\nexport default noFloatingGeolocationWatches;\n", "/**\n * @packageDocumentation\n * Require infinite Web Animations to be retained so they can be canceled.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport {\n getStaticPropertyName,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport { hasTypeNameInHierarchy } from \"../_internal/type-checker.js\";\nimport {\n createTypedRule,\n getTypedRuleServices,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst animationCleanupMemberNames: ReadonlySet<string> = new Set([\n \"cancel\",\n \"finish\",\n]);\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isGlobalInfinityIdentifier = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.Identifier>\n): boolean => node.name === \"Infinity\" && !isShadowedIdentifier(context, node);\n\nconst isNumberPositiveInfinity = (\n node: Readonly<TSESTree.MemberExpression>\n): boolean => {\n if (node.optional) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n if (propertyName !== \"POSITIVE_INFINITY\") {\n return false;\n }\n\n if (node.object.type === AST_NODE_TYPES.Identifier) {\n return node.object.name === \"Number\";\n }\n\n if (node.object.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const objectPropertyName = getStaticPropertyName(\n node.object.property,\n node.object.computed\n );\n\n return (\n objectPropertyName === \"Number\" &&\n node.object.object.type === AST_NODE_TYPES.Identifier &&\n (node.object.object.name === \"globalThis\" ||\n node.object.object.name === \"window\")\n );\n};\n\nconst isInfinityExpression = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.Expression>\n): boolean => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return isGlobalInfinityIdentifier(context, node);\n }\n\n if (\n node.type === AST_NODE_TYPES.UnaryExpression &&\n node.operator === \"+\" &&\n node.argument.type === AST_NODE_TYPES.Identifier\n ) {\n return isGlobalInfinityIdentifier(context, node.argument);\n }\n\n return (\n node.type === AST_NODE_TYPES.MemberExpression &&\n isNumberPositiveInfinity(node)\n );\n};\n\nconst getPropertyKeyName = (\n property: Readonly<TSESTree.Property>\n): string | undefined => getStaticPropertyName(property.key, property.computed);\n\nconst isExpressionPropertyValue = (\n node: Readonly<TSESTree.Property[\"value\"]>\n): 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 node.type !== AST_NODE_TYPES.TSEmptyBodyFunctionExpression;\n\nconst hasInfiniteIterationsOption = (\n context: TypedRuleContext,\n options: Readonly<TSESTree.CallExpressionArgument>\n): boolean => {\n if (options.type !== AST_NODE_TYPES.ObjectExpression) {\n return false;\n }\n\n return options.properties.some((property) => {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.kind !== \"init\" ||\n !isExpressionPropertyValue(property.value) ||\n getPropertyKeyName(property) !== \"iterations\"\n ) {\n return false;\n }\n\n return isInfinityExpression(context, property.value);\n });\n};\n\nconst getAnimationReceiver = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TSESTree.MemberExpression[\"object\"] | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n if (callee.object.type === AST_NODE_TYPES.Super) {\n return undefined;\n }\n\n const propertyName = getStaticPropertyName(callee.property, callee.computed);\n\n return propertyName === \"animate\" ? callee.object : undefined;\n};\n\nconst isReceiverElement = (\n context: TypedRuleContext,\n receiver: Readonly<TSESTree.Expression>\n): boolean => {\n const { checker, parserServices } = getTypedRuleServices(context);\n const receiverType = checker.getTypeAtLocation(\n parserServices.esTreeNodeToTSNodeMap.get(receiver)\n );\n\n return hasTypeNameInHierarchy(checker, receiverType, \"Element\");\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-infinite-animations`. */\nconst noFloatingInfiniteAnimations: TSESLint.RuleModule<\n \"floatingInfiniteAnimation\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const receiver = getAnimationReceiver(node.callee);\n const timingOptions = node.arguments.at(1);\n\n if (\n receiver === undefined ||\n timingOptions === undefined ||\n !hasInfiniteIterationsOption(context, timingOptions) ||\n !isReceiverElement(context, receiver) ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n animationCleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingInfiniteAnimation\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require infinite Web Animations to be retained so they can be canceled.\",\n recommended: true,\n requiresTypeChecking: true,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-infinite-animations\"),\n },\n messages: {\n floatingInfiniteAnimation:\n \"Store or return the infinite Animation so cancel() can stop it during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-infinite-animations\",\n});\n\nexport default noFloatingInfiniteAnimations;\n", "/**\n * @packageDocumentation\n * Shared TypeScript checker helpers for low-noise type-aware rules.\n */\nimport type ts from \"typescript\";\n\n/**\n * Check whether a type or any type in its base hierarchy has a given symbol\n * name.\n */\nexport const hasTypeNameInHierarchy = (\n checker: ts.TypeChecker,\n type: ts.Type,\n expectedTypeName: string,\n seenTypes: ReadonlySet<ts.Type> = new Set()\n): boolean => {\n if (seenTypes.has(type)) {\n return false;\n }\n\n const nextSeenTypes = new Set(seenTypes);\n nextSeenTypes.add(type);\n\n if (type.isUnionOrIntersection()) {\n return type.types.some((entry) =>\n hasTypeNameInHierarchy(\n checker,\n entry,\n expectedTypeName,\n nextSeenTypes\n )\n );\n }\n\n const apparentType = checker.getApparentType(type);\n const typeName = apparentType.symbol.getName();\n\n if (typeName === expectedTypeName) {\n return true;\n }\n\n if (!apparentType.isClassOrInterface()) {\n return false;\n }\n\n const baseTypes = checker.getBaseTypes(apparentType);\n\n return baseTypes.some((baseType) =>\n hasTypeNameInHierarchy(\n checker,\n baseType,\n expectedTypeName,\n nextSeenTypes\n )\n );\n};\n", "/**\n * @packageDocumentation\n * Require captured MediaStream handles to be retained so their tracks can be stopped.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst mediaCaptureFunctionNames = [\n \"getDisplayMedia\",\n \"getUserMedia\",\n] as const;\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\ntype MediaCaptureFunctionName = (typeof mediaCaptureFunctionNames)[number];\n\nconst mediaCaptureFunctionNameSet: ReadonlySet<string> = new Set(\n mediaCaptureFunctionNames\n);\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst isMediaCaptureFunctionName = (\n name: string\n): name is MediaCaptureFunctionName =>\n mediaCaptureFunctionNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return objectPath === undefined || propertyName === undefined\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst getMediaCaptureNameFromPath = (\n path: readonly string[]\n): MediaCaptureFunctionName | undefined => {\n const captureName = path.at(-1);\n\n if (captureName === undefined || !isMediaCaptureFunctionName(captureName)) {\n return undefined;\n }\n\n if (\n path.length === 3 &&\n path[0] === \"navigator\" &&\n path[1] === \"mediaDevices\"\n ) {\n return captureName;\n }\n\n if (\n path.length === 4 &&\n globalNavigatorReceiverNameSet.has(path[0] ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"mediaDevices\"\n ) {\n return captureName;\n }\n\n return undefined;\n};\n\nconst getMediaCaptureFunctionName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): MediaCaptureFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return undefined;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return path === undefined ? undefined : getMediaCaptureNameFromPath(path);\n};\n\nconst isDiscardedMediaStreamRequest = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-media-streams`. */\nconst noFloatingMediaStreams: TSESLint.RuleModule<\n \"floatingMediaStream\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const captureName = getMediaCaptureFunctionName(\n context,\n node.callee\n );\n\n if (\n captureName === undefined ||\n !isDiscardedMediaStreamRequest(node)\n ) {\n return;\n }\n\n context.report({\n data: { captureName },\n messageId: \"floatingMediaStream\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require captured MediaStream handles to be retained so their tracks can be stopped.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-media-streams\"),\n },\n messages: {\n floatingMediaStream:\n \"Store or return the MediaStream from {{captureName}} so its tracks can be stopped during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-media-streams\",\n});\n\nexport default noFloatingMediaStreams;\n", "/**\n * @packageDocumentation\n * Require MessageChannel ports to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst messageChannelConstructorName = \"MessageChannel\";\nconst messagePortPropertyNames = [\"port1\", \"port2\"] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst messagePortPropertyNameSet: ReadonlySet<string> = new Set(\n messagePortPropertyNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst isMessagePortPropertyName = (name: string): boolean =>\n messagePortPropertyNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedMessageChannelIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectMessageChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === messageChannelConstructorName &&\n !isShadowedMessageChannelIdentifier(context, callee);\n\nconst isMemberMessageChannelConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n messageChannelConstructorName;\n\nconst isMessageChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectMessageChannelConstructor(context, callee) ||\n isMemberMessageChannelConstructor(callee);\n\nconst isDiscardedMessageChannel = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateMessagePortAccess = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(\n parent.property,\n parent.computed\n );\n\n return (\n propertyName !== undefined && isMessagePortPropertyName(propertyName)\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-message-channels`. */\nconst noFloatingMessageChannels: TSESLint.RuleModule<\n \"floatingMessageChannel\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isMessageChannelConstructor(context, node.callee) ||\n (!isDiscardedMessageChannel(node) &&\n !isImmediateMessagePortAccess(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingMessageChannel\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require MessageChannel ports to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-message-channels\"),\n },\n messages: {\n floatingMessageChannel:\n \"Store or return the MessageChannel handle or both MessagePort handles so the ports can be closed during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-message-channels\",\n});\n\nexport default noFloatingMessageChannels;\n", "/**\n * @packageDocumentation\n * Require browser network connection handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst networkConnectionConstructorNames = [\n \"EventSource\",\n \"WebSocket\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype NetworkConnectionConstructorName =\n (typeof networkConnectionConstructorNames)[number];\n\nconst networkConnectionConstructorNameSet: ReadonlySet<string> = new Set(\n networkConnectionConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isNetworkConnectionConstructorName = (\n name: string\n): name is NetworkConnectionConstructorName =>\n networkConnectionConstructorNameSet.has(name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedNetworkConnectionIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectNetworkConnectionConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isNetworkConnectionConstructorName(callee.name) ||\n isShadowedNetworkConnectionIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberNetworkConnectionConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name)\n ) {\n return undefined;\n }\n\n const constructorName = getStaticPropertyName(\n callee.property,\n callee.computed\n );\n\n return constructorName !== undefined &&\n isNetworkConnectionConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getNetworkConnectionConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined =>\n getDirectNetworkConnectionConstructorName(context, callee) ??\n getMemberNetworkConnectionConstructorName(callee);\n\nconst isDiscardedNetworkConnection = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateNetworkConnectionMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n if (\n getStaticPropertyName(parent.property, parent.computed) === \"close\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-network-connections`. */\nconst noFloatingNetworkConnections: TSESLint.RuleModule<\n \"floatingNetworkConnection\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const connectionName = getNetworkConnectionConstructorName(\n context,\n node.callee\n );\n\n if (\n connectionName === undefined ||\n (!isDiscardedNetworkConnection(node) &&\n !isImmediateNetworkConnectionMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { connectionName },\n messageId: \"floatingNetworkConnection\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require browser network connection handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-network-connections\"),\n },\n messages: {\n floatingNetworkConnection:\n \"Store or return the {{connectionName}} handle so close() can release the connection during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-network-connections\",\n});\n\nexport default noFloatingNetworkConnections;\n", "/**\n * @packageDocumentation\n * Require object URLs to be retained so they can be revoked.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport {\n collectStaticMemberPath,\n isDiscardedResourceExpression,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst globalUrlReceiverNames = [\"globalThis\", \"self\", \"window\"] as const;\nconst globalUrlReceiverNameSet: ReadonlySet<string> = new Set(\n globalUrlReceiverNames\n);\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectUrlPath = (path: readonly string[]): boolean =>\n path.length === 2 &&\n path[0] === \"URL\" &&\n path[1] === \"createObjectURL\";\n\nconst isGlobalUrlPath = (path: readonly string[]): boolean =>\n path.length === 3 &&\n globalUrlReceiverNameSet.has(path[0] ?? \"\") &&\n path[1] === \"URL\" &&\n path[2] === \"createObjectURL\";\n\nconst isObjectUrlCreateCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n if (path === undefined || (!isDirectUrlPath(path) && !isGlobalUrlPath(path))) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name !== \"URL\" ||\n !isShadowedIdentifier(context, rootIdentifier)\n );\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-object-urls`. */\nconst noFloatingObjectUrls: TSESLint.RuleModule<\n \"floatingObjectUrl\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isObjectUrlCreateCall(context, node.callee) ||\n !isDiscardedResourceExpression(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingObjectUrl\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require object URLs to be retained so they can be revoked.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-object-urls\"),\n },\n messages: {\n floatingObjectUrl:\n \"Store or return the object URL so URL.revokeObjectURL() can release the Blob or File when cleanup runs.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-object-urls\",\n});\n\nexport default noFloatingObjectUrls;\n", "/**\n * @packageDocumentation\n * Require observer instances to be retained so they can be disconnected.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst observerConstructorNames = [\n \"IntersectionObserver\",\n \"MutationObserver\",\n \"PerformanceObserver\",\n \"ReportingObserver\",\n \"ResizeObserver\",\n] as const;\n\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype ObserverConstructorName = (typeof observerConstructorNames)[number];\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst observerConstructorNameSet: ReadonlySet<string> = new Set(\n observerConstructorNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst isObserverConstructorName = (\n name: string\n): name is ObserverConstructorName => observerConstructorNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectObserverConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isObserverConstructorName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberObserverConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isObserverConstructorName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getObserverConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined =>\n getDirectObserverConstructorName(context, callee) ??\n getMemberObserverConstructorName(callee);\n\nconst isObserveMethodCallReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n parent.property.name !== \"observe\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\nconst isDiscardedObserverInstance = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-observers`. */\nconst noFloatingObservers: TSESLint.RuleModule<\n \"floatingObserver\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const observerName = getObserverConstructorName(\n context,\n node.callee\n );\n\n if (\n observerName === undefined ||\n (!isDiscardedObserverInstance(node) &&\n !isObserveMethodCallReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { observerName },\n messageId: \"floatingObserver\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require observer instances to be retained so they can be disconnected during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-observers\"),\n },\n messages: {\n floatingObserver:\n \"Store or return the {{observerName}} instance so it can be disconnected during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-observers\",\n});\n\nexport default noFloatingObservers;\n", "/**\n * @packageDocumentation\n * Require Node.js server handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst serverFactoryNames = [\n \"createSecureServer\",\n \"createServer\",\n] as const;\nconst http2OnlyServerFactoryNames = [\"createSecureServer\"] as const;\nconst serverModuleNames = [\n \"http\",\n \"http2\",\n \"https\",\n \"net\",\n \"node:http\",\n \"node:http2\",\n \"node:https\",\n \"node:net\",\n] as const;\nconst http2ServerModuleNames = [\"http2\", \"node:http2\"] as const;\nconst immediateCleanupMethodNames = [\"close\"] as const;\n\ntype ServerFactoryName = (typeof serverFactoryNames)[number];\n\nconst serverFactoryNameSet: ReadonlySet<string> = new Set(serverFactoryNames);\nconst http2OnlyServerFactoryNameSet: ReadonlySet<string> = new Set(\n http2OnlyServerFactoryNames\n);\nconst serverModuleNameSet: ReadonlySet<string> = new Set(serverModuleNames);\nconst http2ServerModuleNameSet: ReadonlySet<string> = new Set(\n http2ServerModuleNames\n);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isServerFactoryName = (name: string): name is ServerFactoryName =>\n serverFactoryNameSet.has(name);\n\nconst isHttp2OnlyServerFactoryName = (name: string): boolean =>\n http2OnlyServerFactoryNameSet.has(name);\n\nconst isServerModuleSource = (source: string | undefined): boolean =>\n source !== undefined && serverModuleNameSet.has(source);\n\nconst isHttp2ServerModuleSource = (source: string | undefined): boolean =>\n source !== undefined && http2ServerModuleNameSet.has(source);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n immediateCleanupMethodNameSet.has(name);\n\nconst isValidServerFactoryForSource = (\n source: string | undefined,\n factoryName: string\n): factoryName is ServerFactoryName =>\n isServerModuleSource(source) &&\n isServerFactoryName(factoryName) &&\n (!isHttp2OnlyServerFactoryName(factoryName) ||\n isHttp2ServerModuleSource(source));\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable?.defs[0];\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.value.type !== AST_NODE_TYPES.Identifier ||\n property.value.name !== identifierName\n ) {\n continue;\n }\n\n return getStaticPropertyName(property.key);\n }\n\n return undefined;\n};\n\nconst getModuleSourceForBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): string | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return definition === undefined\n ? undefined\n : getDefinitionModuleSource(definition.node);\n};\n\nconst getNamedServerFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): ServerFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (definition === undefined) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return importedName !== undefined &&\n isValidServerFactoryForSource(source, importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return propertyName !== undefined &&\n isValidServerFactoryForSource(source, propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.object.type !== AST_NODE_TYPES.CallExpression\n ) {\n return undefined;\n }\n\n const source = getRequireSourceValue(callee.object);\n const factoryName = callee.property.name;\n\n return isValidServerFactoryForSource(source, factoryName)\n ? factoryName\n : undefined;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier\n ) {\n return undefined;\n }\n\n const source = getModuleSourceForBinding(context, callee.object);\n const factoryName = callee.property.name;\n\n return isValidServerFactoryForSource(source, factoryName)\n ? factoryName\n : undefined;\n};\n\nconst getServerFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedServerFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedExpression = (node: Readonly<TSESTree.Node>): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst getImmediateServerMethodCall = (\n node: Readonly<TSESTree.Node>\n): TSESTree.CallExpression | undefined => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return undefined;\n }\n\n const callExpression = getParentNode(parent);\n\n return callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n ? callExpression\n : undefined;\n }\n\n return undefined;\n};\n\nconst isDiscardedImmediateServerMethodChain = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let currentCall = getImmediateServerMethodCall(node);\n\n while (currentCall !== undefined) {\n if (isDiscardedExpression(currentCall)) {\n return true;\n }\n\n currentCall = getImmediateServerMethodCall(currentCall);\n }\n\n return false;\n};\n\nconst isDiscardedServerHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean =>\n isDiscardedExpression(node) || isDiscardedImmediateServerMethodChain(node);\n\n/** Rule implementation for `runtime-cleanup/no-floating-servers`. */\nconst noFloatingServers: TSESLint.RuleModule<\n \"floatingServer\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getServerFactoryName(context, node.callee);\n\n if (\n factoryName === undefined ||\n !isDiscardedServerHandle(node)\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingServer\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js server handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-servers\"),\n },\n messages: {\n floatingServer:\n \"Store or return the server from {{factoryName}} so close() can stop it during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-servers\",\n});\n\nexport default noFloatingServers;\n", "/**\n * @packageDocumentation\n * Require Node.js file stream handles to be retained so they can be closed during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst fileStreamFactoryNames = [\n \"createReadStream\",\n \"createWriteStream\",\n] as const;\nconst fsModuleNames = [\"fs\", \"node:fs\"] as const;\n\ntype FileStreamFactoryName = (typeof fileStreamFactoryNames)[number];\n\nconst fileStreamFactoryNameSet: ReadonlySet<string> = new Set(\n fileStreamFactoryNames\n);\nconst fsModuleNameSet: ReadonlySet<string> = new Set(fsModuleNames);\n\nconst isFileStreamFactoryName = (name: string): name is FileStreamFactoryName =>\n fileStreamFactoryNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.value.type !== AST_NODE_TYPES.Identifier ||\n property.value.name !== identifierName\n ) {\n continue;\n }\n\n return getStaticPropertyName(property.key);\n }\n\n return undefined;\n};\n\nconst isFsModuleSource = (source: string | undefined): boolean =>\n source !== undefined && fsModuleNameSet.has(source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable?.defs[0];\n};\n\nconst isFsModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return (\n definition !== undefined &&\n isFsModuleSource(getDefinitionModuleSource(definition.node))\n );\n};\n\nconst getNamedFileStreamFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): FileStreamFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (definition === undefined) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isFsModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return importedName !== undefined &&\n isFileStreamFactoryName(importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return propertyName !== undefined &&\n isFileStreamFactoryName(propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isFileStreamFactoryName(callee.property.name) ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isFsModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isFileStreamFactoryName(callee.property.name) ||\n !isFsModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getFileStreamFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedFileStreamFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedFileStreamHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-streams`. */\nconst noFloatingStreams: TSESLint.RuleModule<\"floatingStream\", readonly []> =\n createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getFileStreamFactoryName(\n context,\n node.callee\n );\n\n if (\n factoryName === undefined ||\n !isDiscardedFileStreamHandle(node)\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingStream\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js file stream handles to be retained so they can be closed during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-streams\"),\n },\n messages: {\n floatingStream:\n \"Store, return, pipe, or destroy the stream from {{factoryName}} so cleanup can close its underlying resource.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-streams\",\n });\n\nexport default noFloatingStreams;\n", "/**\n * @packageDocumentation\n * Require timer handles to be retained so they can be cleared during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst timerFunctionNames = [\n \"requestAnimationFrame\",\n \"requestIdleCallback\",\n \"setImmediate\",\n \"setInterval\",\n \"setTimeout\",\n] as const;\n\nconst globalReceiverNames = [\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype TimerFunctionName = (typeof timerFunctionNames)[number];\n\nconst timerFunctionNameSet: ReadonlySet<string> = new Set(timerFunctionNames);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isTimerFunctionName = (name: string): name is TimerFunctionName =>\n timerFunctionNameSet.has(name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst isDiscardedTimerHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectTimerName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TimerFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isTimerFunctionName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberTimerName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TimerFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isTimerFunctionName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-timers`. */\nconst noFloatingTimers: TSESLint.RuleModule<\n \"floatingTimer\",\n readonly []\n> = createTypedRule({\n create(context) {\n const reportFloatingTimer = (\n node: Readonly<TSESTree.CallExpression>,\n timerName: TimerFunctionName\n ): void => {\n if (!isDiscardedTimerHandle(node)) {\n return;\n }\n\n context.report({\n data: { timerName },\n messageId: \"floatingTimer\",\n node,\n });\n };\n\n return {\n 'CallExpression[callee.type=\"Identifier\"]'(\n node: TSESTree.CallExpression\n ) {\n const timerName = getDirectTimerName(context, node.callee);\n\n if (timerName !== undefined) {\n reportFloatingTimer(node, timerName);\n }\n },\n 'CallExpression[callee.type=\"MemberExpression\"]'(\n node: TSESTree.CallExpression\n ) {\n const timerName = getMemberTimerName(node.callee);\n\n if (timerName !== undefined) {\n reportFloatingTimer(node, timerName);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require timer handles to be retained so they can be cleared during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-timers\"),\n },\n messages: {\n floatingTimer:\n \"Store or return the {{timerName}} handle so it can be cleared during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-timers\",\n});\n\nexport default noFloatingTimers;\n", "/**\n * @packageDocumentation\n * Require WakeLockSentinel handles to be retained so they can be released.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst wakeLockRequestFunctionName = \"request\";\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return objectPath === undefined || propertyName === undefined\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst isWakeLockRequestPath = (path: readonly string[]): boolean =>\n (path.length === 3 &&\n path[0] === \"navigator\" &&\n path[1] === \"wakeLock\" &&\n path[2] === wakeLockRequestFunctionName) ||\n (path.length === 4 &&\n globalNavigatorReceiverNameSet.has(path[0] ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"wakeLock\" &&\n path[3] === wakeLockRequestFunctionName);\n\nconst isWakeLockRequestCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return path !== undefined && isWakeLockRequestPath(path);\n};\n\nconst isDiscardedWakeLockRequest = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-wake-locks`. */\nconst noFloatingWakeLocks: TSESLint.RuleModule<\n \"floatingWakeLock\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isWakeLockRequestCall(context, node.callee) ||\n !isDiscardedWakeLockRequest(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingWakeLock\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require WakeLockSentinel handles to be retained so they can be released.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-wake-locks\"),\n },\n messages: {\n floatingWakeLock:\n \"Store or return the WakeLockSentinel so release() can release the wake lock during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-wake-locks\",\n});\n\nexport default noFloatingWakeLocks;\n", "/**\n * @packageDocumentation\n * Require Web Stream readers and writers to be retained so their locks can be released.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport {\n getStaticPropertyName,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { hasTypeNameInHierarchy } from \"../_internal/type-checker.js\";\nimport {\n createTypedRule,\n getTypedRuleServices,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst lockFactoryNames = [\"getReader\", \"getWriter\"] as const;\nconst cleanupMemberNames: ReadonlySet<string> = new Set([\"releaseLock\"]);\n\ntype LockFactoryMetadata = Readonly<{\n lockKind: \"reader\" | \"writer\";\n streamTypeName: \"ReadableStream\" | \"WritableStream\";\n}>;\n\ntype LockFactoryName = (typeof lockFactoryNames)[number];\n\nconst lockFactoryMetadataByName: Readonly<\n Record<LockFactoryName, LockFactoryMetadata>\n> = {\n getReader: {\n lockKind: \"reader\",\n streamTypeName: \"ReadableStream\",\n },\n getWriter: {\n lockKind: \"writer\",\n streamTypeName: \"WritableStream\",\n },\n};\nconst lockFactoryNameSet: ReadonlySet<string> = new Set(lockFactoryNames);\n\nconst isLockFactoryName = (name: string): name is LockFactoryName =>\n lockFactoryNameSet.has(name);\n\nconst getLockFactoryMetadata = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n):\n | (LockFactoryMetadata &\n Readonly<{ receiver: TSESTree.MemberExpression[\"object\"] }>)\n | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n if (callee.object.type === AST_NODE_TYPES.Super) {\n return undefined;\n }\n\n const factoryName = getStaticPropertyName(callee.property, callee.computed);\n\n if (factoryName === undefined || !isLockFactoryName(factoryName)) {\n return undefined;\n }\n\n return {\n ...lockFactoryMetadataByName[factoryName],\n receiver: callee.object,\n };\n};\n\nconst isReceiverExpectedWebStream = (\n context: TypedRuleContext,\n receiver: Readonly<TSESTree.Expression>,\n streamTypeName: LockFactoryMetadata[\"streamTypeName\"]\n): boolean => {\n const { checker, parserServices } = getTypedRuleServices(context);\n const receiverType = checker.getTypeAtLocation(\n parserServices.esTreeNodeToTSNodeMap.get(receiver)\n );\n\n return hasTypeNameInHierarchy(checker, receiverType, streamTypeName);\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-web-stream-locks`. */\nconst noFloatingWebStreamLocks: TSESLint.RuleModule<\n \"floatingWebStreamLock\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const metadata = getLockFactoryMetadata(node.callee);\n\n if (\n metadata === undefined ||\n !isReceiverExpectedWebStream(\n context,\n metadata.receiver,\n metadata.streamTypeName\n ) ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n cleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n data: { lockKind: metadata.lockKind },\n messageId: \"floatingWebStreamLock\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Web Stream readers and writers to be retained so their locks can be released.\",\n recommended: true,\n requiresTypeChecking: true,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-web-stream-locks\"),\n },\n messages: {\n floatingWebStreamLock:\n \"Store or return the Web Stream {{lockKind}} so releaseLock() can release the stream lock during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-web-stream-locks\",\n});\n\nexport default noFloatingWebStreamLocks;\n", "/**\n * @packageDocumentation\n * Require worker handles to be retained so they can be terminated during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst browserWorkerConstructorNames = [\n \"SharedWorker\",\n \"Worker\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\nconst workerThreadsModuleNames = [\n \"node:worker_threads\",\n \"worker_threads\",\n] as const;\n\ntype BrowserWorkerConstructorName =\n (typeof browserWorkerConstructorNames)[number];\n\nconst browserWorkerConstructorNameSet: ReadonlySet<string> = new Set(\n browserWorkerConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst workerThreadsModuleNameSet: ReadonlySet<string> = new Set(\n workerThreadsModuleNames\n);\n\nconst isBrowserWorkerConstructorName = (\n name: string\n): name is BrowserWorkerConstructorName =>\n browserWorkerConstructorNameSet.has(name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n globalReceiverNameSet.has(name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst isWorkerThreadsImportBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n const definition = variable?.defs[0];\n\n const importSource =\n definition === undefined\n ? undefined\n : getImportSourceValue(definition.node);\n\n return (\n identifier.name === \"Worker\" &&\n importSource !== undefined &&\n workerThreadsModuleNameSet.has(importSource)\n );\n};\n\nconst isShadowedBrowserWorkerIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectWorkerConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isBrowserWorkerConstructorName(callee.name)\n ) {\n return undefined;\n }\n\n if (isWorkerThreadsImportBinding(context, callee)) {\n return \"Worker\";\n }\n\n return isShadowedBrowserWorkerIdentifier(context, callee)\n ? undefined\n : callee.name;\n};\n\nconst getMemberWorkerConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isBrowserWorkerConstructorName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getWorkerConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined =>\n getDirectWorkerConstructorName(context, callee) ??\n getMemberWorkerConstructorName(callee);\n\nconst isDiscardedWorkerInstance = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n return false;\n};\n\nconst isImmediateWorkerMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (parent !== undefined) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression === current) {\n current = parent;\n parent = getParentNode(current);\n continue;\n }\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n parent.property.name === \"terminate\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-workers`. */\nconst noFloatingWorkers: TSESLint.RuleModule<\n \"floatingWorker\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const workerName = getWorkerConstructorName(\n context,\n node.callee\n );\n\n if (\n workerName === undefined ||\n (!isDiscardedWorkerInstance(node) &&\n !isImmediateWorkerMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { workerName },\n messageId: \"floatingWorker\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require worker handles to be retained so they can be terminated during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-workers\"),\n },\n messages: {\n floatingWorker:\n \"Store or return the {{workerName}} handle so it can be terminated during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-workers\",\n});\n\nexport default noFloatingWorkers;\n", "/**\n * @packageDocumentation\n * Require event listeners to have an explicit cleanup path.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\ntype AddEventListenerRecord = Readonly<{\n cleanupKey: EventListenerCleanupKey;\n node: TSESTree.CallExpression;\n}>;\n\ntype CleanupBoundary =\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression\n | TSESTree.Program;\n\ntype EventListenerCleanupKey = `${string}\\u0000${string}\\u0000${string}\\u0000${string}`;\ntype ReadonlyCleanupBoundary = Readonly<CleanupBoundary>;\n\nconst unknownCaptureKey = \"*\";\n\nconst isCleanupBoundary = (\n node: Readonly<TSESTree.Node>\n): node is CleanupBoundary =>\n node.type === AST_NODE_TYPES.Program ||\n node.type === AST_NODE_TYPES.FunctionDeclaration ||\n node.type === AST_NODE_TYPES.FunctionExpression ||\n node.type === AST_NODE_TYPES.ArrowFunctionExpression;\n\nconst getCleanupBoundary = (\n node: Readonly<TSESTree.Node>\n): CleanupBoundary => {\n let current: Readonly<TSESTree.Node> | undefined = node;\n\n while (current !== undefined) {\n if (isCleanupBoundary(current)) {\n return current;\n }\n\n current = getParentNode(current);\n }\n\n throw new TypeError(\"Expected an addEventListener call to have a program.\");\n};\n\nconst getStaticPropertyName = (\n property: Readonly<TSESTree.PrivateIdentifier | TSESTree.PropertyName>\n): string | undefined => {\n if (property.type === AST_NODE_TYPES.Identifier) {\n return property.name;\n }\n\n if (\n property.type === AST_NODE_TYPES.Literal &&\n typeof property.value === \"string\"\n ) {\n return property.value;\n }\n\n return undefined;\n};\n\nconst isMethodCallNamed = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>,\n methodName: string\n): callee is TSESTree.MemberExpression =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.computed &&\n callee.property.type === AST_NODE_TYPES.Identifier &&\n callee.property.name === methodName;\n\nconst isUnknownRecord = (value: unknown): value is Record<PropertyKey, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isVariableDeclarator = (\n node: unknown\n): node is TSESTree.VariableDeclarator =>\n isUnknownRecord(node) &&\n node[\"type\"] === AST_NODE_TYPES.VariableDeclarator;\n\nconst getVariableInitializer = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): TSESTree.Expression | undefined => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n const definition = variable?.defs[0];\n const definitionNode = definition?.node;\n\n if (!isVariableDeclarator(definitionNode)) {\n return undefined;\n }\n\n return definitionNode.init ?? undefined;\n};\n\nconst resolveOptionsExpression = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement>\n): TSESTree.Expression | undefined => {\n if (argument.type === AST_NODE_TYPES.SpreadElement) {\n return undefined;\n }\n\n if (argument.type === AST_NODE_TYPES.Identifier) {\n return getVariableInitializer(context, argument);\n }\n\n return argument;\n};\n\nconst objectExpressionHasProperty = (\n objectExpression: Readonly<TSESTree.ObjectExpression>,\n propertyName: string\n): boolean =>\n objectExpression.properties.some((property) => {\n if (property.type === AST_NODE_TYPES.SpreadElement) {\n return true;\n }\n\n return getStaticPropertyName(property.key) === propertyName;\n });\n\nconst getBooleanPropertyValue = (\n objectExpression: Readonly<TSESTree.ObjectExpression>,\n propertyName: string\n): boolean | undefined => {\n for (const property of objectExpression.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n getStaticPropertyName(property.key) === propertyName &&\n property.value.type === AST_NODE_TYPES.Literal &&\n typeof property.value.value === \"boolean\"\n ) {\n return property.value.value;\n }\n }\n\n return undefined;\n};\n\nconst hasAbortSignalOption = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement> | undefined\n): boolean => {\n if (argument === undefined) {\n return false;\n }\n\n const resolvedOptions = resolveOptionsExpression(context, argument);\n\n return (\n resolvedOptions?.type === AST_NODE_TYPES.ObjectExpression &&\n objectExpressionHasProperty(resolvedOptions, \"signal\")\n );\n};\n\nconst getCaptureKey = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement> | undefined\n): string => {\n if (argument === undefined) {\n return \"false\";\n }\n\n const resolvedOptions = resolveOptionsExpression(context, argument);\n\n if (resolvedOptions === undefined) {\n return unknownCaptureKey;\n }\n\n if (\n resolvedOptions.type === AST_NODE_TYPES.Literal &&\n typeof resolvedOptions.value === \"boolean\"\n ) {\n return String(resolvedOptions.value);\n }\n\n if (resolvedOptions.type === AST_NODE_TYPES.ObjectExpression) {\n const captureValue = getBooleanPropertyValue(\n resolvedOptions,\n \"capture\"\n );\n\n return captureValue === undefined ? \"false\" : String(captureValue);\n }\n\n return unknownCaptureKey;\n};\n\nconst getCleanupKey = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.CallExpression>\n): EventListenerCleanupKey | undefined => {\n if (node.arguments.length < 2 || node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n return undefined;\n }\n\n const [eventType, listener, options] = node.arguments;\n\n if (\n eventType === undefined ||\n listener === undefined ||\n eventType.type === AST_NODE_TYPES.SpreadElement ||\n listener.type === AST_NODE_TYPES.SpreadElement\n ) {\n return undefined;\n }\n\n const targetText = context.sourceCode.getText(node.callee.object);\n const eventTypeText = context.sourceCode.getText(eventType);\n const listenerText = context.sourceCode.getText(listener);\n const captureKey = getCaptureKey(context, options);\n\n return `${targetText}\\u0000${eventTypeText}\\u0000${listenerText}\\u0000${captureKey}`;\n};\n\nconst getWildcardCleanupKey = (\n cleanupKey: EventListenerCleanupKey\n): EventListenerCleanupKey => {\n const [targetText, eventTypeText, listenerText] = cleanupKey.split(\n \"\\u0000\",\n 3\n );\n\n if (\n targetText === undefined ||\n eventTypeText === undefined ||\n listenerText === undefined\n ) {\n throw new TypeError(\"Expected a complete event listener cleanup key.\");\n }\n\n return `${targetText}\\u0000${eventTypeText}\\u0000${listenerText}\\u0000${unknownCaptureKey}`;\n};\n\n/** Rule implementation for `runtime-cleanup/no-unmanaged-event-listeners`. */\nconst noUnmanagedEventListeners: TSESLint.RuleModule<\n \"unmanagedEventListener\",\n readonly []\n> = createTypedRule({\n create(context) {\n const addsByBoundary = new Map<\n ReadonlyCleanupBoundary,\n AddEventListenerRecord[]\n >();\n const removesByBoundary = new Map<\n ReadonlyCleanupBoundary,\n Set<EventListenerCleanupKey>\n >();\n\n const addRecord = (\n boundary: ReadonlyCleanupBoundary,\n record: AddEventListenerRecord\n ): void => {\n const records = addsByBoundary.get(boundary);\n\n if (records === undefined) {\n addsByBoundary.set(boundary, [record]);\n return;\n }\n\n records.push(record);\n };\n\n const addRemoveKey = (\n boundary: ReadonlyCleanupBoundary,\n cleanupKey: EventListenerCleanupKey\n ): void => {\n const cleanupKeys = removesByBoundary.get(boundary);\n\n if (cleanupKeys === undefined) {\n removesByBoundary.set(boundary, new Set([cleanupKey]));\n return;\n }\n\n cleanupKeys.add(cleanupKey);\n };\n\n return {\n 'CallExpression[callee.type=\"MemberExpression\"]'(\n node: TSESTree.CallExpression\n ) {\n if (\n isMethodCallNamed(node.callee, \"addEventListener\") &&\n !hasAbortSignalOption(context, node.arguments[2])\n ) {\n const cleanupKey = getCleanupKey(context, node);\n\n if (cleanupKey !== undefined) {\n addRecord(getCleanupBoundary(node), {\n cleanupKey,\n node,\n });\n }\n }\n\n if (isMethodCallNamed(node.callee, \"removeEventListener\")) {\n const cleanupKey = getCleanupKey(context, node);\n\n if (cleanupKey !== undefined) {\n addRemoveKey(getCleanupBoundary(node), cleanupKey);\n }\n }\n },\n \"Program:exit\"() {\n for (const [boundary, addRecords] of addsByBoundary) {\n const removeKeys =\n removesByBoundary.get(boundary) ?? new Set();\n\n for (const { cleanupKey, node } of addRecords) {\n if (\n removeKeys.has(cleanupKey) ||\n removeKeys.has(getWildcardCleanupKey(cleanupKey))\n ) {\n continue;\n }\n\n context.report({\n messageId: \"unmanagedEventListener\",\n node,\n });\n }\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require event listeners to have an abort signal or a matching cleanup call.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-unmanaged-event-listeners\"),\n },\n messages: {\n unmanagedEventListener:\n \"Add an AbortSignal option or a matching removeEventListener call for this listener.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-unmanaged-event-listeners\",\n});\n\nexport default noUnmanagedEventListeners;\n", "/**\n * @packageDocumentation\n * Canonical runtime registry of all rule modules shipped by eslint-plugin-runtime-cleanup.\n */\n\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport noFloatingAbortControllers from \"../rules/no-floating-abort-controllers.js\";\nimport noFloatingAudioContexts from \"../rules/no-floating-audio-contexts.js\";\nimport noFloatingBroadcastChannels from \"../rules/no-floating-broadcast-channels.js\";\nimport noFloatingChildProcesses from \"../rules/no-floating-child-processes.js\";\nimport noFloatingDisposableStacks from \"../rules/no-floating-disposable-stacks.js\";\nimport noFloatingFileWatchers from \"../rules/no-floating-file-watchers.js\";\nimport noFloatingGeolocationWatches from \"../rules/no-floating-geolocation-watches.js\";\nimport noFloatingInfiniteAnimations from \"../rules/no-floating-infinite-animations.js\";\nimport noFloatingMediaStreams from \"../rules/no-floating-media-streams.js\";\nimport noFloatingMessageChannels from \"../rules/no-floating-message-channels.js\";\nimport noFloatingNetworkConnections from \"../rules/no-floating-network-connections.js\";\nimport noFloatingObjectUrls from \"../rules/no-floating-object-urls.js\";\nimport noFloatingObservers from \"../rules/no-floating-observers.js\";\nimport noFloatingServers from \"../rules/no-floating-servers.js\";\nimport noFloatingStreams from \"../rules/no-floating-streams.js\";\nimport noFloatingTimers from \"../rules/no-floating-timers.js\";\nimport noFloatingWakeLocks from \"../rules/no-floating-wake-locks.js\";\nimport noFloatingWebStreamLocks from \"../rules/no-floating-web-stream-locks.js\";\nimport noFloatingWorkers from \"../rules/no-floating-workers.js\";\nimport noUnmanagedEventListeners from \"../rules/no-unmanaged-event-listeners.js\";\n\n/** Runtime rule module shape used by registry/preset builders. */\nexport type RuleWithDocs = TSESLint.RuleModule<string, readonly unknown[]>;\n\n/**\n * Runtime map of all rule modules keyed by unqualified rule name.\n */\nconst runtimeCleanupRuleRegistry: Readonly<Record<string, RuleWithDocs>> = {\n \"no-floating-abort-controllers\": noFloatingAbortControllers,\n \"no-floating-audio-contexts\": noFloatingAudioContexts,\n \"no-floating-broadcast-channels\": noFloatingBroadcastChannels,\n \"no-floating-child-processes\": noFloatingChildProcesses,\n \"no-floating-disposable-stacks\": noFloatingDisposableStacks,\n \"no-floating-file-watchers\": noFloatingFileWatchers,\n \"no-floating-geolocation-watches\": noFloatingGeolocationWatches,\n \"no-floating-infinite-animations\": noFloatingInfiniteAnimations,\n \"no-floating-media-streams\": noFloatingMediaStreams,\n \"no-floating-message-channels\": noFloatingMessageChannels,\n \"no-floating-network-connections\": noFloatingNetworkConnections,\n \"no-floating-object-urls\": noFloatingObjectUrls,\n \"no-floating-observers\": noFloatingObservers,\n \"no-floating-servers\": noFloatingServers,\n \"no-floating-streams\": noFloatingStreams,\n \"no-floating-timers\": noFloatingTimers,\n \"no-floating-wake-locks\": noFloatingWakeLocks,\n \"no-floating-web-stream-locks\": noFloatingWebStreamLocks,\n \"no-floating-workers\": noFloatingWorkers,\n \"no-unmanaged-event-listeners\": noUnmanagedEventListeners,\n};\n\n/** Exported typed view consumed by the plugin entrypoint. */\nexport const runtimeCleanupRules: Readonly<Record<string, RuleWithDocs>> =\n runtimeCleanupRuleRegistry;\n\nexport default runtimeCleanupRules;\n", "/**\n * @packageDocumentation\n * Shared runtime-cleanup preset/config reference constants and type guards.\n */\n\n/** Canonical flat-config preset keys exposed through `plugin.configs`. */\nexport const runtimeCleanupConfigNames = [\n \"all\",\n \"experimental\",\n \"minimal\",\n \"recommended\",\n \"recommended-type-checked\",\n \"strict\",\n] as const;\n\n/** Metadata contract shared across preset wiring, docs, and README rendering. */\nexport type RuntimeCleanupConfigMetadata = Readonly<{\n icon: string;\n presetName: `runtime-cleanup:${RuntimeCleanupConfigName}`;\n readmeOrder: number;\n requiresTypeChecking: boolean;\n}>;\n\n/** Canonical flat-config preset key type exposed through `plugin.configs`. */\nexport type RuntimeCleanupConfigName =\n (typeof runtimeCleanupConfigNames)[number];\n\n/**\n * Canonical metadata for every exported `runtime-cleanup` preset key.\n */\nexport const runtimeCleanupConfigMetadataByName: Readonly<\n Record<RuntimeCleanupConfigName, RuntimeCleanupConfigMetadata>\n> = {\n all: {\n icon: \"A\",\n presetName: \"runtime-cleanup:all\",\n readmeOrder: 5,\n requiresTypeChecking: true,\n },\n experimental: {\n icon: \"E\",\n presetName: \"runtime-cleanup:experimental\",\n readmeOrder: 6,\n requiresTypeChecking: false,\n },\n minimal: {\n icon: \"M\",\n presetName: \"runtime-cleanup:minimal\",\n readmeOrder: 1,\n requiresTypeChecking: false,\n },\n recommended: {\n icon: \"R\",\n presetName: \"runtime-cleanup:recommended\",\n readmeOrder: 2,\n requiresTypeChecking: false,\n },\n \"recommended-type-checked\": {\n icon: \"T\",\n presetName: \"runtime-cleanup:recommended-type-checked\",\n readmeOrder: 3,\n requiresTypeChecking: true,\n },\n strict: {\n icon: \"S\",\n presetName: \"runtime-cleanup:strict\",\n readmeOrder: 4,\n requiresTypeChecking: true,\n },\n};\n\n/** Stable README legend/rendering order for preset icons. */\nexport const runtimeCleanupConfigNamesByReadmeOrder: readonly RuntimeCleanupConfigName[] =\n [\n \"minimal\",\n \"recommended\",\n \"recommended-type-checked\",\n \"strict\",\n \"all\",\n \"experimental\",\n ];\n\n/** Metadata references supported in rule `meta.docs.runtimeCleanupConfigs`. */\nexport const runtimeCleanupConfigReferenceToName: Readonly<{\n \"runtime-cleanup.configs.all\": \"all\";\n \"runtime-cleanup.configs.experimental\": \"experimental\";\n \"runtime-cleanup.configs.minimal\": \"minimal\";\n \"runtime-cleanup.configs.recommended\": \"recommended\";\n \"runtime-cleanup.configs.recommended-type-checked\": \"recommended-type-checked\";\n \"runtime-cleanup.configs.strict\": \"strict\";\n 'runtime-cleanup.configs[\"recommended-type-checked\"]': \"recommended-type-checked\";\n}> = {\n \"runtime-cleanup.configs.all\": \"all\",\n \"runtime-cleanup.configs.experimental\": \"experimental\",\n \"runtime-cleanup.configs.minimal\": \"minimal\",\n \"runtime-cleanup.configs.recommended\": \"recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\":\n \"recommended-type-checked\",\n \"runtime-cleanup.configs.strict\": \"strict\",\n 'runtime-cleanup.configs[\"recommended-type-checked\"]':\n \"recommended-type-checked\",\n};\n\n/** Fully-qualified preset reference type accepted in rule docs metadata. */\nexport type RuntimeCleanupConfigReference =\n keyof typeof runtimeCleanupConfigReferenceToName;\n\n/**\n * Check whether a string is a supported rule docs preset reference.\n */\nexport const isRuntimeCleanupConfigReference = (\n value: string\n): value is RuntimeCleanupConfigReference =>\n Object.hasOwn(runtimeCleanupConfigReferenceToName, value);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../src/plugin.ts", "../package.json", "../src/rules/no-floating-abort-controllers.ts", "../src/_internal/ast-node.ts", "../src/_internal/cycle-safe-linked-search.ts", "../src/_internal/floating-resource.ts", "../src/_internal/rule-docs-url.ts", "../src/_internal/scope-variable.ts", "../src/_internal/typed-rule.ts", "../src/_internal/plugin-settings.ts", "../src/_internal/rule-catalog.ts", "../src/rules/no-floating-audio-contexts.ts", "../src/rules/no-floating-broadcast-channels.ts", "../src/rules/no-floating-child-processes.ts", "../src/rules/no-floating-disposable-stacks.ts", "../src/rules/no-floating-file-watchers.ts", "../src/rules/no-floating-geolocation-watches.ts", "../src/rules/no-floating-infinite-animations.ts", "../src/_internal/type-checker.ts", "../src/rules/no-floating-media-streams.ts", "../src/rules/no-floating-message-channels.ts", "../src/rules/no-floating-network-connections.ts", "../src/rules/no-floating-object-urls.ts", "../src/rules/no-floating-observers.ts", "../src/rules/no-floating-servers.ts", "../src/rules/no-floating-streams.ts", "../src/rules/no-floating-timers.ts", "../src/rules/no-floating-wake-locks.ts", "../src/rules/no-floating-web-stream-locks.ts", "../src/rules/no-floating-workers.ts", "../src/rules/no-unmanaged-event-listeners.ts", "../src/_internal/rules-registry.ts", "../src/_internal/runtime-cleanup-config-references.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * @packageDocumentation\n * Public plugin entrypoint for eslint-plugin-runtime-cleanup exports and preset wiring.\n */\nimport type { ESLint, Linter } from \"eslint\";\nimport type { Except } from \"type-fest\";\n\nimport tsParser from \"@typescript-eslint/parser\";\nimport { objectFromEntries, objectHasOwn } from \"ts-extras\";\n\n// eslint-disable-next-line import-x/extensions -- Avoid importing from the ESM entrypoint to preserve CJS compatibility\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport { runtimeCleanupRules } from \"./_internal/rules-registry.js\";\nimport {\n type RuntimeCleanupConfigName as InternalRuntimeCleanupConfigName,\n runtimeCleanupConfigMetadataByName,\n runtimeCleanupConfigNames,\n} from \"./_internal/runtime-cleanup-config-references.js\";\n\n/** Default file globs targeted by plugin presets when `files` is omitted. */\nconst TS_FILES = [\"**/*.{ts,tsx,mts,cts}\"] as const;\n\n/**\n * Canonical flat-config preset keys exposed through `plugin.configs`.\n *\n * @remarks\n * These names are used by consumers when composing presets in ESLint flat\n * config arrays.\n */\nexport type RuntimeCleanupConfigName = InternalRuntimeCleanupConfigName;\n\n/**\n * Flat-config preset shape produced by this plugin.\n *\n * @remarks\n * The `rules` map is required so preset composition can always merge concrete\n * rule severity entries without additional null checks.\n */\nexport type RuntimeCleanupPresetConfig = Linter.Config & {\n rules: NonNullable<Linter.Config[\"rules\"]>;\n};\n\n/** Internal alias for flat config objects handled by preset builders. */\ntype FlatConfig = Linter.Config;\n\n/** Normalized language-options shape for preset composition helpers. */\ntype FlatLanguageOptions = NonNullable<FlatConfig[\"languageOptions\"]>;\n\n/** Normalized parser-options shape for preset composition helpers. */\ntype FlatParserOptions = NonNullable<FlatLanguageOptions[\"parserOptions\"]>;\n\n/** Contract for the `configs` object exported by this plugin. */\ntype RuntimeCleanupConfigsContract = Record<\n RuntimeCleanupConfigName,\n RuntimeCleanupPresetConfig\n>;\n\n/** Fully assembled plugin contract used by the runtime default export. */\ntype RuntimeCleanupPluginContract = Except<ESLint.Plugin, \"configs\" | \"rules\"> & {\n configs: RuntimeCleanupConfigsContract;\n meta: {\n name: string;\n namespace: string;\n version: string;\n };\n processors: NonNullable<ESLint.Plugin[\"processors\"]>;\n rules: NonNullable<ESLint.Plugin[\"rules\"]>;\n};\n\n/**\n * Resolve package version from package.json data.\n *\n * @param pkg - Parsed package metadata value.\n *\n * @returns The package version, or `0.0.0` when unavailable.\n */\nfunction getPackageVersion(pkg: unknown): string {\n if (typeof pkg !== \"object\" || pkg === null) {\n return \"0.0.0\";\n }\n\n const version: unknown = Reflect.get(pkg, \"version\");\n\n return typeof version === \"string\" ? version : \"0.0.0\";\n}\n\n/** Parser module reused across preset construction. */\nconst tsParserValue: FlatLanguageOptions[\"parser\"] = tsParser;\n\n/** Default parser options applied when a preset omits parser options. */\nconst defaultParserOptions = {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n} satisfies FlatParserOptions;\n\n/**\n * Normalize unknown parser options into a mutable parser-options object.\n */\nconst normalizeParserOptions = (\n parserOptions: FlatLanguageOptions[\"parserOptions\"]\n): FlatParserOptions =>\n parserOptions !== null &&\n typeof parserOptions === \"object\" &&\n !Array.isArray(parserOptions)\n ? { ...parserOptions }\n : { ...defaultParserOptions };\n\n/**\n * Fully-qualified ESLint rule id used by this plugin.\n *\n * @remarks\n * Consumers typically use this when building strongly typed rule maps or helper\n * utilities that require namespaced rule identifiers.\n */\nexport type RuntimeCleanupRuleId = `runtime-cleanup/${RuntimeCleanupRuleName}`;\n\n/** Unqualified rule name supported by `eslint-plugin-runtime-cleanup`. */\nexport type RuntimeCleanupRuleName = keyof typeof runtimeCleanupRules;\n\n/**\n * ESLint-compatible rule map view of the strongly typed internal rule record.\n */\nconst runtimeCleanupEslintRules: NonNullable<ESLint.Plugin[\"rules\"]> &\n typeof runtimeCleanupRules =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Internal registry is intentionally narrowed to ESLint's plugin rule map contract.\n runtimeCleanupRules as NonNullable<ESLint.Plugin[\"rules\"]> &\n typeof runtimeCleanupRules;\n\n/**\n * Build an ESLint rules map that enables each provided rule at error level.\n *\n * @param ruleNames - Rule names to enable.\n *\n * @returns Rules config object compatible with flat config.\n */\nfunction errorRulesFor(\n ruleNames: readonly RuntimeCleanupRuleName[]\n): RuntimeCleanupPresetConfig[\"rules\"] {\n const rules: RuntimeCleanupPresetConfig[\"rules\"] = {};\n\n for (const ruleName of ruleNames) {\n rules[`runtime-cleanup/${ruleName}`] = \"error\";\n }\n\n return rules;\n}\n\n/** Effective per-preset rule lists after applying derived policy overlays. */\nconst effectivePresetRuleNamesByConfig: Readonly<\n Record<RuntimeCleanupConfigName, readonly RuntimeCleanupRuleName[]>\n> = {\n all: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n experimental: [],\n minimal: [],\n recommended: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n \"recommended-type-checked\": [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n strict: [\n \"no-floating-abort-controllers\",\n \"no-floating-audio-contexts\",\n \"no-floating-broadcast-channels\",\n \"no-floating-child-processes\",\n \"no-floating-disposable-stacks\",\n \"no-floating-file-watchers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-infinite-animations\",\n \"no-floating-media-streams\",\n \"no-floating-message-channels\",\n \"no-floating-network-connections\",\n \"no-floating-object-urls\",\n \"no-floating-observers\",\n \"no-floating-servers\",\n \"no-floating-streams\",\n \"no-floating-timers\",\n \"no-floating-wake-locks\",\n \"no-floating-web-stream-locks\",\n \"no-floating-workers\",\n \"no-unmanaged-event-listeners\",\n ],\n};\n\n/**\n * Apply parser and plugin metadata required by all plugin presets.\n *\n * @param config - Preset-specific config fragment.\n * @param plugin - Plugin object registered under the `runtime-cleanup`\n * namespace.\n * @param options - Preset-level wiring options.\n *\n * @returns Normalized preset config.\n */\nfunction withRuntimeCleanupPlugin(\n config: Readonly<RuntimeCleanupPresetConfig>,\n plugin: Readonly<ESLint.Plugin>,\n options: Readonly<{ requiresTypeChecking: boolean }>\n): RuntimeCleanupPresetConfig {\n const existingLanguageOptions = config.languageOptions ?? {};\n const existingParserOptions = existingLanguageOptions[\"parserOptions\"];\n const parserOptions = normalizeParserOptions(existingParserOptions);\n\n if (\n options.requiresTypeChecking &&\n !objectHasOwn(parserOptions, \"projectService\")\n ) {\n Reflect.set(parserOptions, \"projectService\", true);\n }\n\n const languageOptions: FlatLanguageOptions = {\n ...existingLanguageOptions,\n parser: existingLanguageOptions[\"parser\"] ?? tsParserValue,\n parserOptions,\n };\n\n return {\n ...config,\n files: config.files ?? [...TS_FILES],\n languageOptions,\n plugins: {\n ...config.plugins,\n \"runtime-cleanup\": plugin,\n },\n };\n}\n\n/** Minimal plugin object used when assembling flat-config presets. */\nconst pluginForConfigs: ESLint.Plugin = {\n rules: runtimeCleanupEslintRules,\n};\n\nconst createPresetConfig = (\n configName: RuntimeCleanupConfigName\n): RuntimeCleanupPresetConfig => {\n const configMetadata = runtimeCleanupConfigMetadataByName[configName];\n\n return withRuntimeCleanupPlugin(\n {\n name: configMetadata.presetName,\n rules: errorRulesFor(effectivePresetRuleNamesByConfig[configName]),\n },\n pluginForConfigs,\n {\n requiresTypeChecking: configMetadata.requiresTypeChecking,\n }\n );\n};\n\n/**\n * Flat config presets distributed by eslint-plugin-runtime-cleanup.\n */\nconst createRuntimeCleanupConfigsDefinition =\n (): RuntimeCleanupConfigsContract =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Object.fromEntries cannot preserve the finite preset-key union.\n objectFromEntries(\n runtimeCleanupConfigNames.map((configName) => [\n configName,\n createPresetConfig(configName),\n ])\n ) as RuntimeCleanupConfigsContract;\n\nconst runtimeCleanupConfigsDefinition = createRuntimeCleanupConfigsDefinition();\n\n/** Finalized typed view of all exported preset configurations. */\nconst runtimeCleanupConfigs: RuntimeCleanupConfigsContract =\n runtimeCleanupConfigsDefinition;\n\n/**\n * Runtime type for the plugin's generated config presets.\n *\n * @remarks\n * Mirrors `plugin.configs` and is useful when composing typed preset-aware\n * tooling in external integrations.\n */\nexport type RuntimeCleanupConfigs = typeof runtimeCleanupConfigs;\n\n/**\n * Main plugin object exported for ESLint consumption.\n */\nconst runtimeCleanupPlugin: RuntimeCleanupPluginContract = {\n configs: runtimeCleanupConfigs,\n meta: {\n name: \"eslint-plugin-runtime-cleanup\",\n namespace: \"runtime-cleanup\",\n version: getPackageVersion(packageJson),\n },\n processors: {},\n rules: runtimeCleanupEslintRules,\n};\n\n/**\n * Runtime type for the plugin object exported as default.\n *\n * @remarks\n * Includes resolved `meta`, `rules`, and `configs` contracts after plugin\n * assembly.\n */\nexport type RuntimeCleanupPlugin = typeof runtimeCleanupPlugin;\n\n/**\n * Default plugin export consumed by ESLint flat config.\n */\nexport default runtimeCleanupPlugin;\n", "{\n \"$schema\": \"https://www.schemastore.org/package.json\",\n \"name\": \"eslint-plugin-runtime-cleanup\",\n \"version\": \"1.2.10\",\n \"private\": false,\n \"description\": \"ESLint rules for requiring cleanup of runtime resources.\",\n \"keywords\": [\n \"eslint\",\n \"eslint-plugin\",\n \"eslintplugin\",\n \"cleanup\",\n \"resources\",\n \"runtime\",\n \"typescript\"\n ],\n \"homepage\": \"https://nick2bad4u.github.io/eslint-plugin-runtime-cleanup/\",\n \"bugs\": {\n \"url\": \"https://github.com/Nick2bad4u/eslint-plugin-runtime-cleanup/issues\",\n \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Nick2bad4u/eslint-plugin-runtime-cleanup.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://github.com/Nick2bad4u\"\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/typed/*.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 -b tsconfig.build.json --force && 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-runtime-cleanup/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-runtime-cleanup/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\": \"git-cliff --config cliff.toml --current\",\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 --latest --strip all\",\n \"clean:cache\": \"del-cli dist coverage cache .cache .vite .turbo\",\n \"clean:cache:coverage\": \"del-cli coverage .coverage\",\n \"clean:cache:dist\": \"del-cli dist release\",\n \"clean:cache:eslint\": \"del-cli .cache/.eslintcache\",\n \"clean:cache:ncu\": \"del-cli .cache/.ncu-cache.json\",\n \"clean:cache:prettier\": \"del-cli .cache/.prettier-cache .prettier-cache .prettiercache\",\n \"clean:cache:stryker\": \"del-cli .stryker-tmp\",\n \"clean:cache:stylelint\": \"del-cli .cache/stylelintcache stylelintcache .stylelintcache\",\n \"clean:cache:temp\": \"del-cli \\\".temp/**\\\"\",\n \"clean:cache:typescript\": \"del-cli .cache/**.tsbuildinfo .cache/builds\",\n \"clean:cache:vite\": \"del-cli .cache/vite .cache/vitest .cache/vitest-zero-coverage .cache/vite-zero-coverage\",\n \"clean:database\": \"del-cli %appdata%/uptime-watcher/uptime-watcher.sqlite\",\n \"clean:docs\": \"del-cli 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 \"precommit\": \"npm run sync:rules:write\",\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:api:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\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:devtools:metadata\": \"node scripts/generate-devtools-workspace-metadata.mjs\",\n \"docs:serve\": \"npm run --workspace docs/docusaurus serve\",\n \"docs:start\": \"npm run --workspace docs/docusaurus start\",\n \"docs:start:devtools\": \"npm run docs:devtools:metadata && npm run docs:api:local && npm run --workspace docs/docusaurus start:devtools\",\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:typedoc:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\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 --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 typecheck && npm run lint:css && npm run lint:prettier && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml && npm run lint:actions && npm run lint:circular && npm run sync:rules:check\",\n \"lint:all:fix\": \"npm run lint:fix && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\n \"lint:all:fix:quiet\": \"npm run lint:fix:quiet && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\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 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 src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n \"lint:depcheck\": \"npm run knip -- --dependencies\",\n \"lint:deps\": \"npm run knip -- --dependencies\",\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:grype\": \"grype . -c .grype.yaml --name eslint-plugin-runtime-cleanup\",\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:nocache\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint .\",\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:strict && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n \"lint:package-check\": \"publint && attw --pack .\",\n \"lint:package-check:strict\": \"publint && node scripts/check-package-types.mjs\",\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 -- --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 \"madge:circular\": \"madge --circular --json --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\": \"cross-env NODE_OPTIONS= npm run build && cross-env NODE_OPTIONS= npm run lint:nocache && cross-env NODE_OPTIONS= npm run typecheck && cross-env NODE_OPTIONS= VITEST_TYPECHECK=false npm run test && cross-env NODE_OPTIONS= npm run sync:rules:check && cross-env NODE_OPTIONS= npm run docs:check-links && cross-env NODE_OPTIONS= npm run lint:package:strict\",\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 \"size\": \"size-limit\",\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 && cross-env RUNTIME_CLEANUP_UPDATE_GENERATED_DOCS=1 vitest run test/readme-rules-table-sync.test.ts -u\",\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 && node scripts/sync-presets-rules-matrix.mjs --write\",\n \"pretest\": \"npm run build\",\n \"test\": \"vitest run\",\n \"test:autofix:fixtures\": \"node -e \\\"console.log('No autofix fixtures are defined yet.')\\\"\",\n \"test:autofix:fixtures:typed\": \"node -e \\\"console.log('No typed autofix fixtures are defined yet.')\\\"\",\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-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:rules:write\"\n },\n \"overrides\": {\n \"jsonc-eslint-parser\": \"$jsonc-eslint-parser\"\n },\n \"dependencies\": {\n \"@typescript-eslint/parser\": \"^8.59.3\",\n \"@typescript-eslint/type-utils\": \"^8.59.3\",\n \"@typescript-eslint/utils\": \"^8.59.3\",\n \"ts-extras\": \"^1.0.0\",\n \"type-fest\": \"^5.6.0\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"^0.18.2\",\n \"@arethetypeswrong/core\": \"^0.18.2\",\n \"@csstools/stylelint-formatter-github\": \"^2.0.0\",\n \"@double-great/remark-lint-alt-text\": \"^1.1.1\",\n \"@eslint/config-inspector\": \"^3.0.2\",\n \"@microsoft/tsdoc-config\": \"^0.18.1\",\n \"@size-limit/file\": \"^12.1.0\",\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.8.0\",\n \"@types/sloc\": \"^0.2.3\",\n \"@typescript-eslint/rule-tester\": \"^8.59.3\",\n \"@vitest/coverage-v8\": \"^4.1.6\",\n \"@vitest/ui\": \"^4.1.6\",\n \"actionlint\": \"^2.0.6\",\n \"all-contributors-cli\": \"^6.26.1\",\n \"cognitive-complexity-ts\": \"^0.8.1\",\n \"commitlint\": \"^21.0.1\",\n \"commitlint-config-gitmoji\": \"^2.3.1\",\n \"cross-env\": \"^10.1.0\",\n \"del-cli\": \"^7.0.0\",\n \"detect-secrets\": \"^1.0.6\",\n \"esbuild\": \"^0.28.0\",\n \"eslint\": \"^10.4.0\",\n \"eslint-config-nick2bad4u\": \"^1.0.20\",\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-secret-scanner\": \"^2.1.1\",\n \"htmlhint\": \"^1.9.2\",\n \"jscpd\": \"^4.2.3\",\n \"knip\": \"^6.14.1\",\n \"leasot\": \"^14.4.0\",\n \"madge\": \"^8.0.0\",\n \"markdown-link-check\": \"^3.14.2\",\n \"npm-check-updates\": \"^22.2.0\",\n \"npm-package-json-lint\": \"^10.4.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier\": \"^3.8.3\",\n \"prettier-config-nick2bad4u\": \"^1.0.13\",\n \"prettier-plugin-jsdoc-type\": \"^0.2.0\",\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.2\",\n \"secretlint\": \"^13.0.2\",\n \"secretlint-config-nick2bad4u\": \"^1.0.5\",\n \"size-limit\": \"^12.1.0\",\n \"sloc\": \"^0.3.2\",\n \"sort-package-json\": \"^3.6.1\",\n \"stylelint\": \"^17.11.1\",\n \"stylelint-config-nick2bad4u\": \"^1.0.11\",\n \"ts-unused-exports\": \"^11.0.1\",\n \"typedoc\": \"^0.28.19\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.59.3\",\n \"typesync\": \"^0.14.3\",\n \"vfile\": \"^6.0.3\",\n \"vite\": \"^8.0.13\",\n \"vite-tsconfig-paths\": \"^6.1.1\",\n \"vitest\": \"^4.1.6\",\n \"yamllint-js\": \"^0.2.4\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0 || ^10.4.0\",\n \"typescript\": \"^5.0.0 || ^6.0.2\"\n },\n \"packageManager\": \"npm@11.14.1\",\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"devEngines\": {\n \"runtime\": {\n \"name\": \"node\",\n \"version\": \">=22.0.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", "/**\n * @packageDocumentation\n * Require AbortController handles to be retained so work can be aborted during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { getFirstOpaqueParent } from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst abortControllerConstructorName = \"AbortController\";\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(globalReceiverNames);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedAbortControllerIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectAbortControllerConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === abortControllerConstructorName &&\n !isShadowedAbortControllerIdentifier(context, callee);\n\nconst isMemberAbortControllerConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n abortControllerConstructorName;\n\nconst isAbortControllerConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectAbortControllerConstructor(context, callee) ||\n isMemberAbortControllerConstructor(callee);\n\nconst isDiscardedAbortControllerHandle = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n};\n\nconst isImmediateAbortSignalAccess = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n return (\n parent.type === AST_NODE_TYPES.MemberExpression &&\n parent.object === current &&\n !parent.optional &&\n getStaticPropertyName(parent.property, parent.computed) === \"signal\"\n );\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-abort-controllers`. */\nconst noFloatingAbortControllers: TSESLint.RuleModule<\n \"floatingAbortController\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isAbortControllerConstructor(context, node.callee) ||\n (!isDiscardedAbortControllerHandle(node) &&\n !isImmediateAbortSignalAccess(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingAbortController\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require AbortController handles to be retained so work can be aborted during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-abort-controllers\"),\n },\n messages: {\n floatingAbortController:\n \"Store or return the AbortController handle so abort() can cancel work during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-abort-controllers\",\n});\n\nexport default noFloatingAbortControllers;\n", "/**\n * @packageDocumentation\n * AST parent-chain traversal helpers used by multiple rule utilities.\n */\nimport { AST_NODE_TYPES, type TSESTree } from \"@typescript-eslint/utils\";\nimport { keyIn } from \"ts-extras\";\n\nimport { resolveFirstValueInLinkedStructure } from \"./cycle-safe-linked-search.js\";\n\n/**\n * AST node shape that may carry a parser-populated `parent` reference.\n */\ntype NodeWithOptionalParent = Readonly<TSESTree.Node> & {\n parent?: Readonly<TSESTree.Node>;\n};\n\n/**\n * Determine whether a node exposes an optional `parent` property.\n */\nconst hasOptionalParentProperty = (\n node: Readonly<TSESTree.Node>\n): node is NodeWithOptionalParent => keyIn(node, \"parent\");\n\n/**\n * Gets a node's parent reference when available.\n *\n * @param node - AST node whose parent should be read.\n *\n * @returns Parent node when present on parser output; otherwise `undefined`.\n */\nexport const getParentNode = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined =>\n hasOptionalParentProperty(node) ? node.parent : undefined;\n\n/**\n * Walks the parent chain to locate the enclosing `Program` node.\n *\n * @param node - Starting AST node.\n *\n * @returns Nearest enclosing `Program` node; otherwise `null` when no program\n * boundary can be reached (including cycle-guard termination).\n */\nexport const getProgramNode = (\n node: Readonly<TSESTree.Node>\n): null | Readonly<TSESTree.Program> => {\n const lookupResult = resolveFirstValueInLinkedStructure<\n Readonly<TSESTree.Node>,\n Readonly<TSESTree.Program>\n >({\n getNextNode: (\n currentNode: Readonly<TSESTree.Node>\n ): null | Readonly<TSESTree.Node> => getParentNode(currentNode) ?? null,\n resolveValue: (currentNode: Readonly<TSESTree.Node>) =>\n currentNode.type === AST_NODE_TYPES.Program\n ? {\n found: true,\n value: currentNode,\n }\n : {\n found: false,\n },\n startNode: node,\n });\n\n return lookupResult.found ? lookupResult.value : null;\n};\n", "/**\n * @packageDocumentation\n * Shared Floyd-cycle-guarded linked-structure traversal utilities.\n */\n\n/**\n * Result shape returned by linked-structure searches.\n */\nexport type LinkedStructureLookupResult<Value> =\n | Readonly<{\n found: false;\n }>\n | Readonly<{\n found: true;\n value: Value;\n }>;\n\n/**\n * Fast-pointer hop count per iteration for Floyd cycle detection.\n */\nconst FLOYD_FAST_POINTER_ADVANCE_STEPS = 2 as const;\n\n/**\n * Resolve the first matching value while traversing a linked structure.\n *\n * @param options - Linked-structure traversal options.\n *\n * - `startNode`: Initial node to inspect.\n * - `getNextNode`: Function that returns the next node in the chain.\n * - `resolveValue`: Function that returns a lookup result for the current node.\n *\n * @returns Lookup result for the first resolved value; otherwise a non-matching\n * lookup result when traversal reaches the chain end or detects a\n * parent-cycle.\n */\nexport const resolveFirstValueInLinkedStructure = <Node, Value>({\n getNextNode,\n resolveValue,\n startNode,\n}: Readonly<{\n getNextNode: (node: Node) => Node | null;\n resolveValue: (node: Node) => LinkedStructureLookupResult<Value>;\n startNode: Node | null;\n}>): LinkedStructureLookupResult<Value> => {\n let slowNode = startNode;\n let fastNode = startNode;\n\n while (slowNode !== null) {\n const resolvedValue = resolveValue(slowNode);\n\n if (resolvedValue.found) {\n return resolvedValue;\n }\n\n slowNode = getNextNode(slowNode);\n\n for (let step = 0; step < FLOYD_FAST_POINTER_ADVANCE_STEPS; step += 1) {\n if (fastNode === null) {\n break;\n }\n\n fastNode = getNextNode(fastNode);\n }\n\n if (slowNode !== null && fastNode !== null && slowNode === fastNode) {\n return {\n found: false,\n };\n }\n }\n\n return {\n found: false,\n };\n};\n\n/**\n * Check whether any node in a linked structure satisfies a predicate.\n *\n * @param options - Linked-structure traversal options.\n *\n * - `startNode`: Initial node to inspect.\n * - `getNextNode`: Function that returns the next node in the chain.\n * - `isMatch`: Predicate used to test each visited node.\n *\n * @returns `true` when any visited node matches; otherwise `false`.\n */\nexport const isAnyLinkedStructureNodeMatching = <Node>({\n getNextNode,\n isMatch,\n startNode,\n}: Readonly<{\n getNextNode: (node: Node) => Node | null;\n isMatch: (node: Node) => boolean;\n startNode: Node | null;\n}>): boolean =>\n resolveFirstValueInLinkedStructure({\n getNextNode,\n resolveValue: (node): LinkedStructureLookupResult<boolean> =>\n isMatch(node)\n ? {\n found: true,\n value: true,\n }\n : {\n found: false,\n },\n startNode,\n }).found;\n", "/**\n * @packageDocumentation\n * Shared AST helpers for rules that reject unowned cleanup handles.\n */\nimport { AST_NODE_TYPES, type TSESTree } from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"./ast-node.js\";\n\n\n/**\n * Unwrap syntax that does not change whether a resource expression is owned.\n */\nexport const getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\n/**\n * Resolve a static property name from dot or string-literal member access.\n */\nexport const getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\n/**\n * Resolve a simple static member path such as `globalThis.URL.createObjectURL`.\n */\nexport const collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return !isDefined(objectPath) || !isDefined(propertyName)\n ? undefined\n : [...objectPath, propertyName];\n};\n\n/**\n * Walk through transparent syntax wrappers and return the first parent that\n * changes ownership semantics.\n */\nexport const getFirstOpaqueParent = (\n node: Readonly<TSESTree.Node>\n):\n | Readonly<{\n current: Readonly<TSESTree.Node>;\n parent: Readonly<TSESTree.Node>;\n }>\n | undefined => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n return { current, parent };\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return undefined;\n};\n\n/**\n * Check whether a resource-producing expression is discarded as a standalone\n * expression or explicitly voided.\n */\nexport const isDiscardedResourceExpression = (\n node: Readonly<TSESTree.Node>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n};\n\n/**\n * Check whether a resource handle is immediately used as a member receiver\n * instead of being retained. Cleanup members are excluded so immediate cleanup\n * calls such as `new AudioContext().close()` are not reported here.\n */\nexport const isImmediateUnownedMemberReceiver = (\n node: Readonly<TSESTree.Node>,\n cleanupMemberNames: ReadonlySet<string>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(parent.property, parent.computed);\n\n return !isDefined(propertyName) || !setHas(cleanupMemberNames, propertyName);\n};\n", "/**\n * @packageDocumentation\n * Canonical rule documentation URL helpers.\n */\n\n/** Stable docs host/prefix for generated rule docs links. */\nexport const RULE_DOCS_URL_BASE =\n \"https://nick2bad4u.github.io/eslint-plugin-runtime-cleanup/docs/rules/\" as const;\n\n/**\n * Build the canonical documentation URL for one rule id.\n *\n * @param ruleName - Rule id (for example `require-timer-cleanup`).\n *\n * @returns Canonical docs URL for the rule page.\n */\nexport const createRuleDocsUrl = (ruleName: string): string =>\n `${RULE_DOCS_URL_BASE}${ruleName}`;\n", "/**\n * @packageDocumentation\n * Scope-chain helpers for reliable variable-resolution checks.\n */\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport { isDefined } from \"ts-extras\";\n\nimport { resolveFirstValueInLinkedStructure } from \"./cycle-safe-linked-search.js\";\n\n/**\n * Resolve a variable binding by walking the current scope and all parent\n * scopes.\n *\n * @param scope - Initial scope to inspect.\n * @param variableName - Identifier name to resolve.\n *\n * @returns Matched variable binding from the nearest scope chain; otherwise\n * `null`.\n */\nexport const getVariableInScopeChain = (\n scope: Readonly<null | Readonly<TSESLint.Scope.Scope>>,\n variableName: string\n): null | TSESLint.Scope.Variable => {\n const lookupResult = resolveFirstValueInLinkedStructure<\n Readonly<TSESLint.Scope.Scope>,\n TSESLint.Scope.Variable\n >({\n getNextNode: (\n currentScope: Readonly<TSESLint.Scope.Scope>\n ): null | Readonly<TSESLint.Scope.Scope> => currentScope.upper,\n resolveValue: (currentScope: Readonly<TSESLint.Scope.Scope>) => {\n const variable = currentScope.set.get(variableName);\n\n return isDefined(variable)\n ? {\n found: true,\n value: variable,\n }\n : {\n found: false,\n };\n },\n startNode: scope,\n });\n\n return lookupResult.found ? lookupResult.value : null;\n};\n", "import type { UnknownArray } from \"type-fest\";\n/**\n * @packageDocumentation\n * Internal shared utilities used by eslint-plugin-runtime-cleanup rule modules\n * and plugin wiring.\n */\nimport type ts from \"typescript\";\n\nimport { ESLintUtils, type TSESLint } from \"@typescript-eslint/utils\";\nimport { isDefined } from \"ts-extras\";\n\nimport type { RuntimeCleanupConfigReference } from \"./runtime-cleanup-config-references.js\";\n\nimport { registerProgramSettingsForContext } from \"./plugin-settings.js\";\nimport { getRuleCatalogEntryForRuleNameOrNull } from \"./rule-catalog.js\";\nimport { createRuleDocsUrl } from \"./rule-docs-url.js\";\nimport { safeTypeOperation } from \"./safe-type-operation.js\";\n\n/**\n * Parser services and type checker bundle used by typed rules.\n */\nexport interface TypedRuleServices {\n checker: ts.TypeChecker;\n parserServices: ReturnType<typeof ESLintUtils.getParserServices>;\n}\n\ntype RuntimeCleanupRuleCreator = ReturnType<\n typeof ESLintUtils.RuleCreator<RuntimeCleanupRuleDocs>\n>;\n\n/**\n * Plugin-specific metadata extensions for `meta.docs`.\n *\n * @remarks\n * `eslint-plugin/require-meta-docs-recommended` expects\n * `meta.docs.recommended` to be boolean. Preset membership is tracked\n * separately via `meta.docs.runtimeCleanupConfigs`.\n */\ninterface RuntimeCleanupRuleDocs {\n recommended?: boolean;\n requiresTypeChecking?: boolean;\n ruleId?: string;\n ruleNumber?: number;\n runtimeCleanupConfigs?:\n | readonly RuntimeCleanupConfigReference[]\n | RuntimeCleanupConfigReference;\n}\n\n/** Shared typed-rule context contract used by helper utilities. */\ntype TypedRuleContext = Readonly<\n TSESLint.RuleContext<string, Readonly<UnknownArray>>\n>;\n\nexport type { TypedRuleContext };\n\n/**\n * Rule-creator wrapper used by plugin rules.\n *\n * @remarks\n * This wrapper automatically registers per-program plugin settings and injects\n * canonical `meta.docs.ruleId` / `meta.docs.ruleNumber` values for cataloged\n * public rules.\n *\n * @param ruleDefinition - Rule module definition passed to\n * `ESLintUtils.RuleCreator`.\n *\n * @returns Rule module factory output that auto-registers program settings and\n * preserves the authored rule contract.\n */\nexport const createTypedRule: RuntimeCleanupRuleCreator = (ruleDefinition) => {\n const catalogEntry = getRuleCatalogEntryForRuleNameOrNull(\n ruleDefinition.name\n );\n const createdRule = ESLintUtils.RuleCreator.withoutDocs(ruleDefinition);\n const ruleDocs = createdRule.meta.docs;\n if (!isDefined(ruleDocs)) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' must declare meta.docs.`\n );\n }\n\n const canonicalDocsUrl = createRuleDocsUrl(ruleDefinition.name);\n\n if (typeof ruleDocs.url === \"string\" && ruleDocs.url !== canonicalDocsUrl) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' has non-canonical docs.url '${ruleDocs.url}'. Expected '${canonicalDocsUrl}'.`\n );\n }\n\n if (catalogEntry === null && ruleDefinition.name.startsWith(\"require-\")) {\n throw new TypeError(\n `Rule '${ruleDefinition.name}' is missing from the stable rule catalog.`\n );\n }\n\n const docsWithCatalog: RuntimeCleanupRuleDocs &\n TSESLint.RuleMetaDataDocs =\n catalogEntry === null\n ? {\n ...ruleDocs,\n url: canonicalDocsUrl,\n }\n : {\n ...ruleDocs,\n ruleId: catalogEntry.ruleId,\n ruleNumber: catalogEntry.ruleNumber,\n url: canonicalDocsUrl,\n };\n const metaDefaultOptions = createdRule.meta.defaultOptions;\n\n return {\n ...createdRule,\n create(context) {\n registerProgramSettingsForContext(context);\n\n return createdRule.create(context);\n },\n meta: {\n ...createdRule.meta,\n ...(isDefined(metaDefaultOptions)\n ? { defaultOptions: metaDefaultOptions }\n : {}),\n docs: docsWithCatalog,\n },\n name: ruleDefinition.name,\n };\n};\n\n/**\n * Retrieve parser services and type checker for typed rules.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns Parser services and type checker references bound to the current\n * program.\n *\n * @throws Throws when `parserServices.program` is unavailable, which indicates\n * the current lint run is not configured for type-aware analysis.\n */\nexport const getTypedRuleServices = (\n context: TypedRuleContext\n): TypedRuleServices => {\n const parserServices = ESLintUtils.getParserServices(context, true);\n const program = parserServices.program;\n\n if (program === null) {\n throw new Error(\n \"Typed rule requires parserServices.program; ensure projectService is enabled for this lint run.\"\n );\n }\n\n return {\n checker: program.getTypeChecker(),\n parserServices,\n };\n};\n\n/**\n * Determine whether the current lint context has full type information.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns `true` when parser services and `program` are available.\n */\nexport const hasTypeServices = (context: TypedRuleContext): boolean => {\n const parserServicesResult = safeTypeOperation({\n operation: () => ESLintUtils.getParserServices(context, true),\n reason: \"typed-rule-services-check-failed\",\n });\n\n return (\n parserServicesResult.ok && parserServicesResult.value.program !== null\n );\n};\n\n/**\n * Retrieve typed services when available, otherwise return `undefined`.\n *\n * @param context - Rule context from the current lint evaluation.\n *\n * @returns Typed services when parser services include a TypeScript program.\n */\nexport const getTypedRuleServicesOrUndefined = (\n context: TypedRuleContext\n): TypedRuleServices | undefined =>\n hasTypeServices(context) ? getTypedRuleServices(context) : undefined;\n\n/**\n * Resolve the type of a signature parameter by index.\n *\n * @param options - Signature parameter lookup options.\n *\n * @returns Parameter type when available; otherwise `undefined`.\n */\nexport const getSignatureParameterTypeAt = (\n options: Readonly<{\n checker: ts.TypeChecker;\n index: number;\n location: ts.Node;\n signature: null | ts.Signature | undefined;\n }>\n): ts.Type | undefined => {\n const { checker, index, location, signature } = options;\n\n const symbol = signature?.parameters[index];\n if (!isDefined(symbol)) {\n return undefined;\n }\n\n return checker.getTypeOfSymbolAtLocation(symbol, location);\n};\n", "/**\n * @packageDocumentation\n * Parsing and memoization helpers for plugin-level runtime settings.\n */\nimport type { TSESLint, TSESTree } from \"@typescript-eslint/utils\";\nimport type { UnknownArray, UnknownRecord } from \"type-fest\";\n\nimport { isDefined, objectHasOwn } from \"ts-extras\";\n\nimport { getProgramNode } from \"./ast-node.js\";\n\n/** Top-level `settings` key for this plugin. */\nconst RUNTIME_CLEANUP_SETTINGS_KEY = \"runtime-cleanup\";\n\n/** Flag that disables all plugin autofix behavior. */\nconst DISABLE_ALL_AUTOFIXES_KEY = \"disableAllAutofixes\";\n\n/**\n * Normalized per-program settings consumed by fix-generation helpers.\n */\ninterface ProgramSettings {\n disableAllAutofixes: boolean;\n}\n\n/**\n * Cache of parsed settings keyed by the Program node for the active file.\n */\nconst settingsByProgram = new WeakMap<TSESTree.Program, ProgramSettings>();\n\n/**\n * Narrow an unknown value to an object-like record.\n *\n * @param value - Value to narrow.\n *\n * @returns `true` when the value is a non-null, non-array object.\n */\nconst isObject = (\n value: unknown\n): value is Readonly<UnknownRecord> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/**\n * Extract the `settings[\"runtime-cleanup\"]` object when present and valid.\n *\n * @param settings - ESLint settings value from rule context.\n *\n * @returns Parsed plugin settings object when valid; otherwise `null`.\n */\nconst getRuntimeCleanupSettings = (\n settings: unknown\n): null | Readonly<UnknownRecord> => {\n if (!isObject(settings)) {\n return null;\n }\n\n const pluginSettings = settings[RUNTIME_CLEANUP_SETTINGS_KEY];\n\n return isObject(pluginSettings) ? pluginSettings : null;\n};\n\n/**\n * Read a strict boolean flag (`true`) from an object by key.\n *\n * @param object - Source settings object.\n * @param key - Flag key to read.\n *\n * @returns `true` only when the key exists and equals literal `true`.\n */\nconst readBooleanFlag = (\n object: Readonly<UnknownRecord>,\n key: string\n): boolean => objectHasOwn(object, key) && object[key] === true;\n\n/**\n * Reads the global autofix disable flag from plugin settings.\n *\n * @param settings - ESLint settings value from rule context.\n *\n * @returns `true` when all plugin autofixes are explicitly disabled.\n */\nconst readDisableAllAutofixesFromSettings = (settings: unknown): boolean => {\n const pluginSettings = getRuntimeCleanupSettings(settings);\n if (pluginSettings === null) {\n return false;\n }\n\n return readBooleanFlag(pluginSettings, DISABLE_ALL_AUTOFIXES_KEY);\n};\n\n/**\n * Register parsed plugin settings for the current file program.\n *\n * @param context - Active ESLint rule context.\n *\n * @returns Memoized immutable settings for the context's program node.\n */\nexport const registerProgramSettingsForContext = (\n context: Readonly<TSESLint.RuleContext<string, Readonly<UnknownArray>>>\n): Readonly<ProgramSettings> => {\n const programNode = context.sourceCode.ast;\n\n const parsedSettings: Readonly<ProgramSettings> = Object.freeze({\n disableAllAutofixes: readDisableAllAutofixesFromSettings(\n context.settings\n ),\n });\n\n const existingProgramSettings = settingsByProgram.get(programNode);\n if (isDefined(existingProgramSettings)) {\n return existingProgramSettings;\n }\n\n settingsByProgram.set(programNode, parsedSettings);\n\n return parsedSettings;\n};\n\n/**\n * Determine whether autofixes are globally disabled for the file containing the\n * provided node.\n *\n * @param node - AST node used to resolve the enclosing Program.\n *\n * @returns `true` when fixes should be suppressed.\n */\nexport const areAutofixesDisabledForNode = (\n node: Readonly<TSESTree.Node>\n): boolean => {\n const programNode = getProgramNode(node);\n if (programNode === null) {\n return false;\n }\n\n const settings = settingsByProgram.get(programNode);\n\n return settings?.disableAllAutofixes === true;\n};\n", "/**\n * @packageDocumentation\n * Stable catalog IDs for all plugin rules.\n */\n\nimport { objectFromEntries, setHas } from \"ts-extras\";\n\n/**\n * Catalog metadata for a single rule.\n */\nexport type RuntimeCleanupRuleCatalogEntry = Readonly<{\n ruleId: RuntimeCleanupRuleCatalogId;\n ruleName: string;\n ruleNumber: number;\n}>;\n\n/**\n * Stable machine-friendly rule id format (for example: `R001`).\n */\nexport type RuntimeCleanupRuleCatalogId = `R${string}`;\n\n/**\n * Stable global ordering used for rule catalog IDs.\n *\n * @remarks\n * Append new rules to preserve existing IDs once the first runtime-cleanup\n * rules are added.\n */\n/* eslint-disable perfectionist/sort-arrays -- Catalog order is append-only so existing rule IDs remain stable. */\nconst orderedRuleNames = [\n \"no-floating-timers\",\n \"no-unmanaged-event-listeners\",\n \"no-floating-observers\",\n \"no-floating-workers\",\n \"no-floating-child-processes\",\n \"no-floating-abort-controllers\",\n \"no-floating-streams\",\n \"no-floating-disposable-stacks\",\n \"no-floating-network-connections\",\n \"no-floating-file-watchers\",\n \"no-floating-broadcast-channels\",\n \"no-floating-message-channels\",\n \"no-floating-servers\",\n \"no-floating-geolocation-watches\",\n \"no-floating-media-streams\",\n \"no-floating-wake-locks\",\n \"no-floating-object-urls\",\n \"no-floating-audio-contexts\",\n \"no-floating-web-stream-locks\",\n \"no-floating-infinite-animations\",\n] as const satisfies readonly string[];\n/* eslint-enable perfectionist/sort-arrays -- Re-enable sorting outside the stable rule catalog. */\n\nconst toRuleCatalogId = (ruleNumber: number): RuntimeCleanupRuleCatalogId =>\n `R${String(ruleNumber).padStart(3, \"0\")}`;\n\n/**\n * Canonical catalog metadata entries in stable display/order form.\n */\nexport const runtimeCleanupRuleCatalogEntries: readonly RuntimeCleanupRuleCatalogEntry[] =\n orderedRuleNames.map((ruleName, index) => {\n const ruleNumber = index + 1;\n\n return {\n ruleId: toRuleCatalogId(ruleNumber),\n ruleName,\n ruleNumber,\n };\n });\n\n/**\n * Fast lookup map for rule catalog metadata by rule name.\n */\nexport const runtimeCleanupRuleCatalogByRuleName: Readonly<\n Partial<Record<string, RuntimeCleanupRuleCatalogEntry>>\n> = objectFromEntries(\n runtimeCleanupRuleCatalogEntries.map((entry) => [entry.ruleName, entry])\n);\n\n/**\n * Resolve stable catalog metadata for a rule name when available.\n */\nexport const getRuleCatalogEntryForRuleNameOrNull = (\n ruleName: string\n): null | RuntimeCleanupRuleCatalogEntry =>\n runtimeCleanupRuleCatalogByRuleName[ruleName] ?? null;\n\n/**\n * Resolve stable catalog metadata for a rule name.\n *\n * @throws When the rule is missing from the catalog.\n */\nexport const getRuleCatalogEntryForRuleName = (\n ruleName: string\n): RuntimeCleanupRuleCatalogEntry => {\n const catalogEntry = getRuleCatalogEntryForRuleNameOrNull(ruleName);\n\n if (catalogEntry === null) {\n throw new TypeError(\n `Rule '${ruleName}' is missing from the stable rule catalog.`\n );\n }\n\n return catalogEntry;\n};\n\n/**\n * Resolve stable catalog metadata by rule id.\n */\nexport const runtimeCleanupRuleCatalogByRuleId: ReadonlyMap<\n RuntimeCleanupRuleCatalogId,\n RuntimeCleanupRuleCatalogEntry\n> = new Map(\n runtimeCleanupRuleCatalogEntries.map((entry) => [entry.ruleId, entry])\n);\n\n/**\n * Resolve stable catalog metadata for a catalog id.\n */\nexport const getRuleCatalogEntryForRuleId = (\n ruleId: RuntimeCleanupRuleCatalogId\n): RuntimeCleanupRuleCatalogEntry | undefined =>\n runtimeCleanupRuleCatalogByRuleId.get(ruleId);\n\n/**\n * Validate that catalog IDs are unique and sequential.\n */\nexport const validateRuleCatalogIntegrity = (): boolean => {\n const entries = runtimeCleanupRuleCatalogEntries;\n const seenRuleIds = new Set<RuntimeCleanupRuleCatalogId>();\n\n for (const [index, entry] of entries.entries()) {\n if (setHas(seenRuleIds, entry.ruleId)) {\n return false;\n }\n\n seenRuleIds.add(entry.ruleId);\n\n const expectedRuleNumber = index + 1;\n if (entry.ruleNumber !== expectedRuleNumber) {\n return false;\n }\n\n if (entry.ruleId !== toRuleCatalogId(expectedRuleNumber)) {\n return false;\n }\n }\n\n return true;\n};\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require AudioContext instances to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport {\n collectStaticMemberPath,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst audioContextConstructorNames = [\n \"AudioContext\",\n \"webkitAudioContext\",\n] as const;\nconst cleanupMemberNames: ReadonlySet<string> = new Set([\"close\"]);\nconst globalReceiverNames = [\"globalThis\", \"self\", \"window\"] as const;\n\ntype AudioContextConstructorName =\n ArrayValues<typeof audioContextConstructorNames>;\n\nconst audioContextConstructorNameSet: ReadonlySet<string> = new Set(\n audioContextConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isAudioContextConstructorName = (\n name: string\n): name is AudioContextConstructorName =>\n setHas(audioContextConstructorNameSet, name);\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectAudioContextConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isAudioContextConstructorName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberAudioContextConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n const path = collectStaticMemberPath(callee);\n\n if (path?.length !== 2) {\n return undefined;\n }\n\n const receiverName = arrayFirst(path);\n\n if (\n !isDefined(receiverName) ||\n !setHas(globalReceiverNameSet, receiverName)\n ) {\n return undefined;\n }\n\n const constructorName = path[1];\n\n return isDefined(constructorName) &&\n isAudioContextConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getAudioContextConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): AudioContextConstructorName | undefined =>\n getDirectAudioContextConstructorName(context, callee) ??\n getMemberAudioContextConstructorName(callee);\n\n/** Rule implementation for `runtime-cleanup/no-floating-audio-contexts`. */\nconst noFloatingAudioContexts: TSESLint.RuleModule<\n \"floatingAudioContext\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const constructorName = getAudioContextConstructorName(\n context,\n node.callee\n );\n\n if (\n !isDefined(constructorName) ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n cleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n data: { constructorName },\n messageId: \"floatingAudioContext\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require AudioContext instances to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-audio-contexts\"),\n },\n messages: {\n floatingAudioContext:\n \"Store or return the {{constructorName}} instance so close() can release audio resources during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-audio-contexts\",\n});\n\nexport default noFloatingAudioContexts;\n", "/**\n * @packageDocumentation\n * Require BroadcastChannel handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { getFirstOpaqueParent } from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst broadcastChannelConstructorName = \"BroadcastChannel\";\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedBroadcastChannelIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectBroadcastChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === broadcastChannelConstructorName &&\n !isShadowedBroadcastChannelIdentifier(context, callee);\n\nconst isMemberBroadcastChannelConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n broadcastChannelConstructorName;\n\nconst isBroadcastChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectBroadcastChannelConstructor(context, callee) ||\n isMemberBroadcastChannelConstructor(callee);\n\nconst isDiscardedBroadcastChannel = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n};\n\nconst isImmediateBroadcastChannelMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n const opaqueParent = getFirstOpaqueParent(node);\n\n if (!isDefined(opaqueParent)) {\n return false;\n }\n\n const { current, parent } = opaqueParent;\n\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n if (getStaticPropertyName(parent.property, parent.computed) === \"close\") {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-broadcast-channels`. */\nconst noFloatingBroadcastChannels: TSESLint.RuleModule<\n \"floatingBroadcastChannel\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isBroadcastChannelConstructor(context, node.callee) ||\n (!isDiscardedBroadcastChannel(node) &&\n !isImmediateBroadcastChannelMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingBroadcastChannel\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require BroadcastChannel handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-broadcast-channels\"),\n },\n messages: {\n floatingBroadcastChannel:\n \"Store or return the BroadcastChannel handle so close() can release the channel during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-broadcast-channels\",\n});\n\nexport default noFloatingBroadcastChannels;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require child process handles to be retained so they can be killed during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst childProcessFactoryNames = [\n \"exec\",\n \"execFile\",\n \"fork\",\n \"spawn\",\n] as const;\nconst childProcessModuleNames = [\n \"child_process\",\n \"node:child_process\",\n] as const;\nconst immediateCleanupMethodNames = [\n \"disconnect\",\n \"kill\",\n] as const;\n\ntype ChildProcessFactoryName = ArrayValues<typeof childProcessFactoryNames>;\n\nconst childProcessFactoryNameSet: ReadonlySet<string> = new Set(\n childProcessFactoryNames\n);\nconst childProcessModuleNameSet: ReadonlySet<string> = new Set(\n childProcessModuleNames\n);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isChildProcessFactoryName = (\n name: string\n): name is ChildProcessFactoryName => setHas(childProcessFactoryNameSet, name);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n setHas(immediateCleanupMethodNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n property.value.type === AST_NODE_TYPES.Identifier &&\n property.value.name === identifierName\n ) {\n return getStaticPropertyName(property.key);\n }\n }\n\n return undefined;\n};\n\nconst isChildProcessModuleSource = (source: string | undefined): boolean =>\n isDefined(source) && setHas(childProcessModuleNameSet, source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return arrayFirst(variable?.defs ?? []);\n};\n\nconst isChildProcessModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (!isDefined(definition)) {\n return false;\n }\n\n return isChildProcessModuleSource(\n getDefinitionModuleSource(definition.node)\n );\n};\n\nconst getNamedChildProcessFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): ChildProcessFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (!isDefined(definition)) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isChildProcessModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return isDefined(importedName) &&\n isChildProcessFactoryName(importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return isDefined(propertyName) &&\n isChildProcessFactoryName(propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isChildProcessFactoryName(callee.property.name) ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isChildProcessModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isChildProcessFactoryName(callee.property.name) ||\n !isChildProcessModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getChildProcessFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ChildProcessFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedChildProcessFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedChildProcessHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateChildProcessMethodReceiver = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-child-processes`. */\nconst noFloatingChildProcesses: TSESLint.RuleModule<\n \"floatingChildProcess\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getChildProcessFactoryName(\n context,\n node.callee\n );\n\n if (\n !isDefined(factoryName) ||\n (!isDiscardedChildProcessHandle(node) &&\n !isImmediateChildProcessMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingChildProcess\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require child process handles to be retained so they can be killed during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-child-processes\"),\n },\n messages: {\n floatingChildProcess:\n \"Store or return the child process handle from {{factoryName}} so it can be killed during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-child-processes\",\n});\n\nexport default noFloatingChildProcesses;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require DisposableStack handles to be retained so registered disposers run.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst disposableStackConstructorNames = [\n \"AsyncDisposableStack\",\n \"DisposableStack\",\n] as const;\nconst cleanupMethodNames = [\n \"dispose\",\n \"disposeAsync\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype DisposableStackConstructorName =\n ArrayValues<typeof disposableStackConstructorNames>;\n\nconst disposableStackConstructorNameSet: ReadonlySet<string> = new Set(\n disposableStackConstructorNames\n);\nconst cleanupMethodNameSet: ReadonlySet<string> = new Set(cleanupMethodNames);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isDisposableStackConstructorName = (\n name: string\n): name is DisposableStackConstructorName =>\n setHas(disposableStackConstructorNameSet, name);\n\nconst isCleanupMethodName = (name: string): boolean =>\n setHas(cleanupMethodNameSet, name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedDisposableStackIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectDisposableStackConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isDisposableStackConstructorName(callee.name) ||\n isShadowedDisposableStackIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberDisposableStackConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name)\n ) {\n return undefined;\n }\n\n const constructorName = getStaticPropertyName(\n callee.property,\n callee.computed\n );\n\n return isDefined(constructorName) &&\n isDisposableStackConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getDisposableStackConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): DisposableStackConstructorName | undefined =>\n getDirectDisposableStackConstructorName(context, callee) ??\n getMemberDisposableStackConstructorName(callee);\n\nconst isDiscardedDisposableStack = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateDisposableStackMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const methodName = getStaticPropertyName(\n parent.property,\n parent.computed\n );\n\n if (!isDefined(methodName) || isCleanupMethodName(methodName)) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-disposable-stacks`. */\nconst noFloatingDisposableStacks: TSESLint.RuleModule<\n \"floatingDisposableStack\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const constructorName = getDisposableStackConstructorName(\n context,\n node.callee\n );\n\n if (\n !isDefined(constructorName) ||\n (!isDiscardedDisposableStack(node) &&\n !isImmediateDisposableStackMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { constructorName },\n messageId: \"floatingDisposableStack\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require DisposableStack handles to be retained so registered disposers run.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-disposable-stacks\"),\n },\n messages: {\n floatingDisposableStack:\n \"Store, return, or use the {{constructorName}} handle so registered disposers run during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-disposable-stacks\",\n});\n\nexport default noFloatingDisposableStacks;\n", "/**\n * @packageDocumentation\n * Require Node.js file watcher handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst fileWatcherFactoryName = \"watch\";\nconst fsModuleNames = [\"fs\", \"node:fs\"] as const;\nconst immediateCleanupMethodNames = [\"close\"] as const;\n\nconst fsModuleNameSet: ReadonlySet<string> = new Set(fsModuleNames);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n setHas(immediateCleanupMethodNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst isFsModuleSource = (source: string | undefined): boolean =>\n isDefined(source) && setHas(fsModuleNameSet, source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return arrayFirst(variable?.defs ?? []);\n};\n\nconst isFsModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return (\n isDefined(definition) &&\n isFsModuleSource(getDefinitionModuleSource(definition.node))\n );\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n property.value.type === AST_NODE_TYPES.Identifier &&\n property.value.name === identifierName\n ) {\n return getStaticPropertyName(property.key);\n }\n }\n\n return undefined;\n};\n\nconst getNamedFileWatcherBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): string | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (!isDefined(definition)) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isFsModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n return getImportedSpecifierName(definition.node) ===\n fileWatcherFactoryName\n ? fileWatcherFactoryName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n return getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n ) === fileWatcherFactoryName\n ? fileWatcherFactoryName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.property.name !== fileWatcherFactoryName ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isFsModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.property.name !== fileWatcherFactoryName ||\n !isFsModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getFileWatcherFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): string | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedFileWatcherBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedFileWatcherHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateFileWatcherMethodReceiver = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-file-watchers`. */\nconst noFloatingFileWatchers: TSESLint.RuleModule<\n \"floatingFileWatcher\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getFileWatcherFactoryName(\n context,\n node.callee\n );\n\n if (\n !isDefined(factoryName) ||\n (!isDiscardedFileWatcherHandle(node) &&\n !isImmediateFileWatcherMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingFileWatcher\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js file watcher handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-file-watchers\"),\n },\n messages: {\n floatingFileWatcher:\n \"Store or return the file watcher from {{factoryName}} so close() can stop watching during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-file-watchers\",\n});\n\nexport default noFloatingFileWatchers;\n", "/**\n * @packageDocumentation\n * Require geolocation watch IDs to be retained so they can be cleared.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst geolocationWatchFunctionName = \"watchPosition\";\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return !isDefined(objectPath) || !isDefined(propertyName)\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst isGeolocationWatchPath = (path: readonly string[]): boolean =>\n (path.length === 3 &&\n arrayFirst(path) === \"navigator\" &&\n path[1] === \"geolocation\" &&\n path[2] === geolocationWatchFunctionName) ||\n (path.length === 4 &&\n setHas(globalNavigatorReceiverNameSet, arrayFirst(path) ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"geolocation\" &&\n path[3] === geolocationWatchFunctionName);\n\nconst isGeolocationWatchCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return isDefined(path) && isGeolocationWatchPath(path);\n};\n\nconst isDiscardedWatchId = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-geolocation-watches`. */\nconst noFloatingGeolocationWatches: TSESLint.RuleModule<\n \"floatingGeolocationWatch\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isGeolocationWatchCall(context, node.callee) ||\n !isDiscardedWatchId(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingGeolocationWatch\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require geolocation watch IDs to be retained so they can be cleared.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-geolocation-watches\"),\n },\n messages: {\n floatingGeolocationWatch:\n \"Store or return the geolocation watch ID so navigator.geolocation.clearWatch() can remove the location watcher during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-geolocation-watches\",\n});\n\nexport default noFloatingGeolocationWatches;\n", "/**\n * @packageDocumentation\n * Require infinite Web Animations to be retained so they can be canceled.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, isDefined } from \"ts-extras\";\n\nimport {\n getStaticPropertyName,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport { hasTypeNameInHierarchy } from \"../_internal/type-checker.js\";\nimport {\n createTypedRule,\n getTypedRuleServices,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst animationCleanupMemberNames: ReadonlySet<string> = new Set([\n \"cancel\",\n \"finish\",\n]);\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isGlobalInfinityIdentifier = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.Identifier>\n): boolean => node.name === \"Infinity\" && !isShadowedIdentifier(context, node);\n\nconst isNumberPositiveInfinity = (\n node: Readonly<TSESTree.MemberExpression>\n): boolean => {\n if (node.optional) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n if (propertyName !== \"POSITIVE_INFINITY\") {\n return false;\n }\n\n if (node.object.type === AST_NODE_TYPES.Identifier) {\n return node.object.name === \"Number\";\n }\n\n if (node.object.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const objectPropertyName = getStaticPropertyName(\n node.object.property,\n node.object.computed\n );\n\n return (\n objectPropertyName === \"Number\" &&\n node.object.object.type === AST_NODE_TYPES.Identifier &&\n (node.object.object.name === \"globalThis\" ||\n node.object.object.name === \"window\")\n );\n};\n\nconst isInfinityExpression = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.Expression>\n): boolean => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return isGlobalInfinityIdentifier(context, node);\n }\n\n if (\n node.type === AST_NODE_TYPES.UnaryExpression &&\n node.operator === \"+\" &&\n node.argument.type === AST_NODE_TYPES.Identifier\n ) {\n return isGlobalInfinityIdentifier(context, node.argument);\n }\n\n return (\n node.type === AST_NODE_TYPES.MemberExpression &&\n isNumberPositiveInfinity(node)\n );\n};\n\nconst getPropertyKeyName = (\n property: Readonly<TSESTree.Property>\n): string | undefined => getStaticPropertyName(property.key, property.computed);\n\nconst isExpressionPropertyValue = (\n node: Readonly<TSESTree.Property[\"value\"]>\n): 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 node.type !== AST_NODE_TYPES.TSEmptyBodyFunctionExpression;\n\nconst hasInfiniteIterationsOption = (\n context: TypedRuleContext,\n options: Readonly<TSESTree.CallExpressionArgument>\n): boolean => {\n if (options.type !== AST_NODE_TYPES.ObjectExpression) {\n return false;\n }\n\n return options.properties.some((property) => {\n if (\n property.type !== AST_NODE_TYPES.Property ||\n property.kind !== \"init\" ||\n !isExpressionPropertyValue(property.value) ||\n getPropertyKeyName(property) !== \"iterations\"\n ) {\n return false;\n }\n\n return isInfinityExpression(context, property.value);\n });\n};\n\nconst getAnimationReceiver = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TSESTree.MemberExpression[\"object\"] | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n if (callee.object.type === AST_NODE_TYPES.Super) {\n return undefined;\n }\n\n const propertyName = getStaticPropertyName(callee.property, callee.computed);\n\n return propertyName === \"animate\" ? callee.object : undefined;\n};\n\nconst isReceiverElement = (\n context: TypedRuleContext,\n receiver: Readonly<TSESTree.Expression>\n): boolean => {\n const { checker, parserServices } = getTypedRuleServices(context);\n const receiverType = checker.getTypeAtLocation(\n parserServices.esTreeNodeToTSNodeMap.get(receiver)\n );\n\n return hasTypeNameInHierarchy(checker, receiverType, \"Element\");\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-infinite-animations`. */\nconst noFloatingInfiniteAnimations: TSESLint.RuleModule<\n \"floatingInfiniteAnimation\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const receiver = getAnimationReceiver(node.callee);\n const timingOptions = arrayAt(node.arguments, 1);\n\n if (\n !isDefined(receiver) ||\n !isDefined(timingOptions) ||\n !hasInfiniteIterationsOption(context, timingOptions) ||\n !isReceiverElement(context, receiver) ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n animationCleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingInfiniteAnimation\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require infinite Web Animations to be retained so they can be canceled.\",\n recommended: true,\n requiresTypeChecking: true,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-infinite-animations\"),\n },\n messages: {\n floatingInfiniteAnimation:\n \"Store or return the infinite Animation so cancel() can stop it during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-infinite-animations\",\n});\n\nexport default noFloatingInfiniteAnimations;\n", "/**\n * @packageDocumentation\n * Shared TypeScript checker helpers for low-noise type-aware rules.\n */\nimport type { Type, TypeChecker } from \"typescript\";\n\nimport { setHas } from \"ts-extras\";\n\n/**\n * Check whether a type or any type in its base hierarchy has a given symbol\n * name.\n */\nexport const hasTypeNameInHierarchy = (\n checker: TypeChecker,\n candidate: Type,\n expectedTypeName: string,\n seenTypes: ReadonlySet<Type> = new Set()\n): boolean => {\n const seenCandidate: unknown = candidate;\n if (setHas(seenTypes, seenCandidate)) {\n return false;\n }\n\n const nextSeenTypes = new Set(seenTypes);\n nextSeenTypes.add(candidate);\n\n if (candidate.isUnionOrIntersection()) {\n return candidate.types.some((entry: Type) =>\n hasTypeNameInHierarchy(\n checker,\n entry,\n expectedTypeName,\n nextSeenTypes\n )\n );\n }\n\n const apparentType = checker.getApparentType(candidate);\n const candidateName = apparentType.symbol.getName();\n\n if (candidateName === expectedTypeName) {\n return true;\n }\n\n if (!apparentType.isClassOrInterface()) {\n return false;\n }\n\n const baseTypes = checker.getBaseTypes(apparentType);\n\n return baseTypes.some((baseType) =>\n hasTypeNameInHierarchy(\n checker,\n baseType,\n expectedTypeName,\n nextSeenTypes\n )\n );\n};\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require captured MediaStream handles to be retained so their tracks can be stopped.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayAt, arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst mediaCaptureFunctionNames = [\n \"getDisplayMedia\",\n \"getUserMedia\",\n] as const;\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\ntype MediaCaptureFunctionName = ArrayValues<typeof mediaCaptureFunctionNames>;\n\nconst mediaCaptureFunctionNameSet: ReadonlySet<string> = new Set(\n mediaCaptureFunctionNames\n);\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst isMediaCaptureFunctionName = (\n name: string\n): name is MediaCaptureFunctionName =>\n setHas(mediaCaptureFunctionNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return !isDefined(objectPath) || !isDefined(propertyName)\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst getMediaCaptureNameFromPath = (\n path: readonly string[]\n): MediaCaptureFunctionName | undefined => {\n const captureName = arrayAt(path, -1);\n\n if (!isDefined(captureName) || !isMediaCaptureFunctionName(captureName)) {\n return undefined;\n }\n\n if (\n path.length === 3 &&\n arrayFirst(path) === \"navigator\" &&\n path[1] === \"mediaDevices\"\n ) {\n return captureName;\n }\n\n if (\n path.length === 4 &&\n setHas(globalNavigatorReceiverNameSet, arrayFirst(path) ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"mediaDevices\"\n ) {\n return captureName;\n }\n\n return undefined;\n};\n\nconst getMediaCaptureFunctionName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): MediaCaptureFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return undefined;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return isDefined(path) ? getMediaCaptureNameFromPath(path) : undefined;\n};\n\nconst isDiscardedMediaStreamRequest = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-media-streams`. */\nconst noFloatingMediaStreams: TSESLint.RuleModule<\n \"floatingMediaStream\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const captureName = getMediaCaptureFunctionName(\n context,\n node.callee\n );\n\n if (\n !isDefined(captureName) ||\n !isDiscardedMediaStreamRequest(node)\n ) {\n return;\n }\n\n context.report({\n data: { captureName },\n messageId: \"floatingMediaStream\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require captured MediaStream handles to be retained so their tracks can be stopped.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-media-streams\"),\n },\n messages: {\n floatingMediaStream:\n \"Store or return the MediaStream from {{captureName}} so its tracks can be stopped during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-media-streams\",\n});\n\nexport default noFloatingMediaStreams;\n", "/**\n * @packageDocumentation\n * Require MessageChannel ports to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst messageChannelConstructorName = \"MessageChannel\";\nconst messagePortPropertyNames = [\"port1\", \"port2\"] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst messagePortPropertyNameSet: ReadonlySet<string> = new Set(\n messagePortPropertyNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst isMessagePortPropertyName = (name: string): boolean =>\n setHas(messagePortPropertyNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedMessageChannelIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectMessageChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.Identifier &&\n callee.name === messageChannelConstructorName &&\n !isShadowedMessageChannelIdentifier(context, callee);\n\nconst isMemberMessageChannelConstructor = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.optional &&\n callee.object.type === AST_NODE_TYPES.Identifier &&\n isGlobalReceiverName(callee.object.name) &&\n getStaticPropertyName(callee.property, callee.computed) ===\n messageChannelConstructorName;\n\nconst isMessageChannelConstructor = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): boolean =>\n isDirectMessageChannelConstructor(context, callee) ||\n isMemberMessageChannelConstructor(callee);\n\nconst isDiscardedMessageChannel = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateMessagePortAccess = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n const propertyName = getStaticPropertyName(\n parent.property,\n parent.computed\n );\n\n return (\n isDefined(propertyName) &&\n isMessagePortPropertyName(propertyName)\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-message-channels`. */\nconst noFloatingMessageChannels: TSESLint.RuleModule<\n \"floatingMessageChannel\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n if (\n !isMessageChannelConstructor(context, node.callee) ||\n (!isDiscardedMessageChannel(node) &&\n !isImmediateMessagePortAccess(node))\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingMessageChannel\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require MessageChannel ports to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-message-channels\"),\n },\n messages: {\n floatingMessageChannel:\n \"Store or return the MessageChannel handle or both MessagePort handles so the ports can be closed during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-message-channels\",\n});\n\nexport default noFloatingMessageChannels;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require browser network connection handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst networkConnectionConstructorNames = [\n \"EventSource\",\n \"WebSocket\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype NetworkConnectionConstructorName =\n ArrayValues<typeof networkConnectionConstructorNames>;\n\nconst networkConnectionConstructorNameSet: ReadonlySet<string> = new Set(\n networkConnectionConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isNetworkConnectionConstructorName = (\n name: string\n): name is NetworkConnectionConstructorName =>\n setHas(networkConnectionConstructorNameSet, name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst isShadowedNetworkConnectionIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectNetworkConnectionConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isNetworkConnectionConstructorName(callee.name) ||\n isShadowedNetworkConnectionIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberNetworkConnectionConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name)\n ) {\n return undefined;\n }\n\n const constructorName = getStaticPropertyName(\n callee.property,\n callee.computed\n );\n\n return isDefined(constructorName) &&\n isNetworkConnectionConstructorName(constructorName)\n ? constructorName\n : undefined;\n};\n\nconst getNetworkConnectionConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): NetworkConnectionConstructorName | undefined =>\n getDirectNetworkConnectionConstructorName(context, callee) ??\n getMemberNetworkConnectionConstructorName(callee);\n\nconst isDiscardedNetworkConnection = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateNetworkConnectionMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.optional\n ) {\n return false;\n }\n\n if (\n getStaticPropertyName(parent.property, parent.computed) ===\n \"close\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-network-connections`. */\nconst noFloatingNetworkConnections: TSESLint.RuleModule<\n \"floatingNetworkConnection\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const connectionName = getNetworkConnectionConstructorName(\n context,\n node.callee\n );\n\n if (\n !isDefined(connectionName) ||\n (!isDiscardedNetworkConnection(node) &&\n !isImmediateNetworkConnectionMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { connectionName },\n messageId: \"floatingNetworkConnection\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require browser network connection handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-network-connections\"),\n },\n messages: {\n floatingNetworkConnection:\n \"Store or return the {{connectionName}} handle so close() can release the connection during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-network-connections\",\n});\n\nexport default noFloatingNetworkConnections;\n", "/**\n * @packageDocumentation\n * Require object URLs to be retained so they can be revoked.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport {\n collectStaticMemberPath,\n isDiscardedResourceExpression,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst globalUrlReceiverNames = [\"globalThis\", \"self\", \"window\"] as const;\nconst globalUrlReceiverNameSet: ReadonlySet<string> = new Set(\n globalUrlReceiverNames\n);\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst isDirectUrlPath = (path: readonly string[]): boolean =>\n path.length === 2 &&\n arrayFirst(path) === \"URL\" &&\n path[1] === \"createObjectURL\";\n\nconst isGlobalUrlPath = (path: readonly string[]): boolean =>\n path.length === 3 &&\n setHas(globalUrlReceiverNameSet, arrayFirst(path) ?? \"\") &&\n path[1] === \"URL\" &&\n path[2] === \"createObjectURL\";\n\nconst isObjectUrlCreateCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n if (!isDefined(path) || (!isDirectUrlPath(path) && !isGlobalUrlPath(path))) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name !== \"URL\" ||\n !isShadowedIdentifier(context, rootIdentifier)\n );\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-object-urls`. */\nconst noFloatingObjectUrls: TSESLint.RuleModule<\n \"floatingObjectUrl\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isObjectUrlCreateCall(context, node.callee) ||\n !isDiscardedResourceExpression(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingObjectUrl\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require object URLs to be retained so they can be revoked.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-object-urls\"),\n },\n messages: {\n floatingObjectUrl:\n \"Store or return the object URL so URL.revokeObjectURL() can release the Blob or File when cleanup runs.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-object-urls\",\n});\n\nexport default noFloatingObjectUrls;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require observer instances to be retained so they can be disconnected.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst observerConstructorNames = [\n \"IntersectionObserver\",\n \"MutationObserver\",\n \"PerformanceObserver\",\n \"ReportingObserver\",\n \"ResizeObserver\",\n] as const;\n\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype ObserverConstructorName = ArrayValues<typeof observerConstructorNames>;\n\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst observerConstructorNameSet: ReadonlySet<string> = new Set(\n observerConstructorNames\n);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst isObserverConstructorName = (\n name: string\n): name is ObserverConstructorName => setHas(observerConstructorNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectObserverConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isObserverConstructorName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberObserverConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isObserverConstructorName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getObserverConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): ObserverConstructorName | undefined =>\n getDirectObserverConstructorName(context, callee) ??\n getMemberObserverConstructorName(callee);\n\nconst isObserveMethodCallReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n parent.property.name !== \"observe\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isDiscardedObserverInstance = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-observers`. */\nconst noFloatingObservers: TSESLint.RuleModule<\n \"floatingObserver\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const observerName = getObserverConstructorName(\n context,\n node.callee\n );\n\n if (\n !isDefined(observerName) ||\n (!isDiscardedObserverInstance(node) &&\n !isObserveMethodCallReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { observerName },\n messageId: \"floatingObserver\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require observer instances to be retained so they can be disconnected during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-observers\"),\n },\n messages: {\n floatingObserver:\n \"Store or return the {{observerName}} instance so it can be disconnected during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-observers\",\n});\n\nexport default noFloatingObservers;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require Node.js server handles to be retained so they can be closed.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst serverFactoryNames = [\n \"createSecureServer\",\n \"createServer\",\n] as const;\nconst http2OnlyServerFactoryNames = [\"createSecureServer\"] as const;\nconst serverModuleNames = [\n \"http\",\n \"http2\",\n \"https\",\n \"net\",\n \"node:http\",\n \"node:http2\",\n \"node:https\",\n \"node:net\",\n] as const;\nconst http2ServerModuleNames = [\"http2\", \"node:http2\"] as const;\nconst immediateCleanupMethodNames = [\"close\"] as const;\n\ntype ServerFactoryName = ArrayValues<typeof serverFactoryNames>;\n\nconst serverFactoryNameSet: ReadonlySet<string> = new Set(serverFactoryNames);\nconst http2OnlyServerFactoryNameSet: ReadonlySet<string> = new Set(\n http2OnlyServerFactoryNames\n);\nconst serverModuleNameSet: ReadonlySet<string> = new Set(serverModuleNames);\nconst http2ServerModuleNameSet: ReadonlySet<string> = new Set(\n http2ServerModuleNames\n);\nconst immediateCleanupMethodNameSet: ReadonlySet<string> = new Set(\n immediateCleanupMethodNames\n);\n\nconst isServerFactoryName = (name: string): name is ServerFactoryName =>\n setHas(serverFactoryNameSet, name);\n\nconst isHttp2OnlyServerFactoryName = (name: string): boolean =>\n setHas(http2OnlyServerFactoryNameSet, name);\n\nconst isServerModuleSource = (source: string | undefined): boolean =>\n isDefined(source) && setHas(serverModuleNameSet, source);\n\nconst isHttp2ServerModuleSource = (source: string | undefined): boolean =>\n isDefined(source) && setHas(http2ServerModuleNameSet, source);\n\nconst isImmediateCleanupMethodName = (name: string): boolean =>\n setHas(immediateCleanupMethodNameSet, name);\n\nconst isValidServerFactoryForSource = (\n source: string | undefined,\n factoryName: string\n): factoryName is ServerFactoryName =>\n isServerModuleSource(source) &&\n isServerFactoryName(factoryName) &&\n (!isHttp2OnlyServerFactoryName(factoryName) ||\n isHttp2ServerModuleSource(source));\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return arrayFirst(variable?.defs ?? []);\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n property.value.type === AST_NODE_TYPES.Identifier &&\n property.value.name === identifierName\n ) {\n return getStaticPropertyName(property.key);\n }\n }\n\n return undefined;\n};\n\nconst getModuleSourceForBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): string | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return isDefined(definition)\n ? getDefinitionModuleSource(definition.node)\n : undefined;\n};\n\nconst getNamedServerFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): ServerFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (!isDefined(definition)) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return isDefined(importedName) &&\n isValidServerFactoryForSource(source, importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return isDefined(propertyName) &&\n isValidServerFactoryForSource(source, propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n callee.object.type !== AST_NODE_TYPES.CallExpression\n ) {\n return undefined;\n }\n\n const source = getRequireSourceValue(callee.object);\n const factoryName = callee.property.name;\n\n return isValidServerFactoryForSource(source, factoryName)\n ? factoryName\n : undefined;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier\n ) {\n return undefined;\n }\n\n const source = getModuleSourceForBinding(context, callee.object);\n const factoryName = callee.property.name;\n\n return isValidServerFactoryForSource(source, factoryName)\n ? factoryName\n : undefined;\n};\n\nconst getServerFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): ServerFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedServerFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedExpression = (node: Readonly<TSESTree.Node>): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst getImmediateServerMethodCall = (\n node: Readonly<TSESTree.Node>\n): TSESTree.CallExpression | undefined => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n isImmediateCleanupMethodName(parent.property.name)\n ) {\n return undefined;\n }\n\n const callExpression = getParentNode(parent);\n\n return callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n ? callExpression\n : undefined;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return undefined;\n};\n\nconst isDiscardedImmediateServerMethodChain = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let currentCall = getImmediateServerMethodCall(node);\n\n while (isDefined(currentCall)) {\n if (isDiscardedExpression(currentCall)) {\n return true;\n }\n\n currentCall = getImmediateServerMethodCall(currentCall);\n }\n\n return false;\n};\n\nconst isDiscardedServerHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean =>\n isDiscardedExpression(node) || isDiscardedImmediateServerMethodChain(node);\n\n/** Rule implementation for `runtime-cleanup/no-floating-servers`. */\nconst noFloatingServers: TSESLint.RuleModule<\n \"floatingServer\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getServerFactoryName(context, node.callee);\n\n if (\n !isDefined(factoryName) ||\n !isDiscardedServerHandle(node)\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingServer\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js server handles to be retained so they can be closed.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-servers\"),\n },\n messages: {\n floatingServer:\n \"Store or return the server from {{factoryName}} so close() can stop it during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-servers\",\n});\n\nexport default noFloatingServers;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require Node.js file stream handles to be retained so they can be closed during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst fileStreamFactoryNames = [\n \"createReadStream\",\n \"createWriteStream\",\n] as const;\nconst fsModuleNames = [\"fs\", \"node:fs\"] as const;\n\ntype FileStreamFactoryName = ArrayValues<typeof fileStreamFactoryNames>;\n\nconst fileStreamFactoryNameSet: ReadonlySet<string> = new Set(\n fileStreamFactoryNames\n);\nconst fsModuleNameSet: ReadonlySet<string> = new Set(fsModuleNames);\n\nconst isFileStreamFactoryName = (name: string): name is FileStreamFactoryName =>\n setHas(fileStreamFactoryNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.PropertyName>\n): string | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst getRequireSourceValue = (\n expression: Readonly<null | TSESTree.Expression>\n): string | undefined => {\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 undefined;\n }\n\n const [source] = expression.arguments;\n\n return source?.type === AST_NODE_TYPES.Literal &&\n typeof source.value === \"string\"\n ? source.value\n : undefined;\n};\n\nconst getDefinitionModuleSource = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n if (\n node.type === AST_NODE_TYPES.ImportDefaultSpecifier ||\n node.type === AST_NODE_TYPES.ImportNamespaceSpecifier ||\n node.type === AST_NODE_TYPES.ImportSpecifier\n ) {\n return getImportSourceValue(node);\n }\n\n if (node.type === AST_NODE_TYPES.VariableDeclarator) {\n return getRequireSourceValue(node.init);\n }\n\n return undefined;\n};\n\nconst getImportedSpecifierName = (\n node: Readonly<TSESTree.ImportSpecifier>\n): string | undefined => getStaticPropertyName(node.imported);\n\nconst getObjectPatternPropertyNameForIdentifier = (\n objectPattern: Readonly<TSESTree.ObjectPattern>,\n identifierName: string\n): string | undefined => {\n for (const property of objectPattern.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n property.value.type === AST_NODE_TYPES.Identifier &&\n property.value.name === identifierName\n ) {\n return getStaticPropertyName(property.key);\n }\n }\n\n return undefined;\n};\n\nconst isFsModuleSource = (source: string | undefined): boolean =>\n isDefined(source) && setHas(fsModuleNameSet, source);\n\nconst getDefinitionForIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n) => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return arrayFirst(variable?.defs ?? []);\n};\n\nconst isFsModuleBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n return (\n isDefined(definition) &&\n isFsModuleSource(getDefinitionModuleSource(definition.node))\n );\n};\n\nconst getNamedFileStreamFactoryBindingName = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): FileStreamFactoryName | undefined => {\n const definition = getDefinitionForIdentifier(context, identifier);\n\n if (!isDefined(definition)) {\n return undefined;\n }\n\n const source = getDefinitionModuleSource(definition.node);\n\n if (!isFsModuleSource(source)) {\n return undefined;\n }\n\n if (definition.node.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName = getImportedSpecifierName(definition.node);\n\n return isDefined(importedName) &&\n isFileStreamFactoryName(importedName)\n ? importedName\n : undefined;\n }\n\n if (\n definition.node.type === AST_NODE_TYPES.VariableDeclarator &&\n definition.node.id.type === AST_NODE_TYPES.ObjectPattern\n ) {\n const propertyName = getObjectPatternPropertyNameForIdentifier(\n definition.node.id,\n identifier.name\n );\n\n return isDefined(propertyName) &&\n isFileStreamFactoryName(propertyName)\n ? propertyName\n : undefined;\n }\n\n return undefined;\n};\n\nconst getRequireMemberFactoryName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isFileStreamFactoryName(callee.property.name) ||\n callee.object.type !== AST_NODE_TYPES.CallExpression ||\n !isFsModuleSource(getRequireSourceValue(callee.object))\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getModuleMemberFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isFileStreamFactoryName(callee.property.name) ||\n !isFsModuleBinding(context, callee.object)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getFileStreamFactoryName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): FileStreamFactoryName | undefined => {\n if (callee.type === AST_NODE_TYPES.Identifier) {\n return getNamedFileStreamFactoryBindingName(context, callee);\n }\n\n return (\n getModuleMemberFactoryName(context, callee) ??\n getRequireMemberFactoryName(callee)\n );\n};\n\nconst isDiscardedFileStreamHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-streams`. */\nconst noFloatingStreams: TSESLint.RuleModule<\"floatingStream\", readonly []> =\n createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const factoryName = getFileStreamFactoryName(\n context,\n node.callee\n );\n\n if (\n !isDefined(factoryName) ||\n !isDiscardedFileStreamHandle(node)\n ) {\n return;\n }\n\n context.report({\n data: { factoryName },\n messageId: \"floatingStream\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Node.js file stream handles to be retained so they can be closed during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-streams\"),\n },\n messages: {\n floatingStream:\n \"Store, return, pipe, or destroy the stream from {{factoryName}} so cleanup can close its underlying resource.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-streams\",\n });\n\nexport default noFloatingStreams;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require timer handles to be retained so they can be cleared during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport { isDiscardedResourceExpression } from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst timerFunctionNames = [\n \"requestAnimationFrame\",\n \"requestIdleCallback\",\n \"setImmediate\",\n \"setInterval\",\n \"setTimeout\",\n] as const;\n\nconst globalReceiverNames = [\n \"global\",\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\n\ntype TimerFunctionName = ArrayValues<typeof timerFunctionNames>;\n\nconst timerFunctionNameSet: ReadonlySet<string> = new Set(timerFunctionNames);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\n\nconst isTimerFunctionName = (name: string): name is TimerFunctionName =>\n setHas(timerFunctionNameSet, name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst isDiscardedTimerHandle = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => isDiscardedResourceExpression(node);\n\nconst isShadowedIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectTimerName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TimerFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isTimerFunctionName(callee.name) ||\n isShadowedIdentifier(context, callee)\n ) {\n return undefined;\n }\n\n return callee.name;\n};\n\nconst getMemberTimerName = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): TimerFunctionName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isTimerFunctionName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-timers`. */\nconst noFloatingTimers: TSESLint.RuleModule<\n \"floatingTimer\",\n readonly []\n> = createTypedRule({\n create(context) {\n const reportFloatingTimer = (\n node: Readonly<TSESTree.CallExpression>,\n timerName: TimerFunctionName\n ): void => {\n if (!isDiscardedTimerHandle(node)) {\n return;\n }\n\n context.report({\n data: { timerName },\n messageId: \"floatingTimer\",\n node,\n });\n };\n\n return {\n 'CallExpression[callee.type=\"Identifier\"]'(\n node: TSESTree.CallExpression\n ) {\n const timerName = getDirectTimerName(context, node.callee);\n\n if (isDefined(timerName)) {\n reportFloatingTimer(node, timerName);\n }\n },\n 'CallExpression[callee.type=\"MemberExpression\"]'(\n node: TSESTree.CallExpression\n ) {\n const timerName = getMemberTimerName(node.callee);\n\n if (isDefined(timerName)) {\n reportFloatingTimer(node, timerName);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require timer handles to be retained so they can be cleared during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-timers\"),\n },\n messages: {\n floatingTimer:\n \"Store or return the {{timerName}} handle so it can be cleared during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-timers\",\n});\n\nexport default noFloatingTimers;\n", "/**\n * @packageDocumentation\n * Require WakeLockSentinel handles to be retained so they can be released.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst wakeLockRequestFunctionName = \"request\";\nconst globalNavigatorReceiverNames = [\"globalThis\", \"window\"] as const;\n\nconst globalNavigatorReceiverNameSet: ReadonlySet<string> = new Set(\n globalNavigatorReceiverNames\n);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.AwaitExpression) {\n return node.argument;\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getStaticPropertyName = (\n node: Readonly<TSESTree.MemberExpression[\"property\"]>,\n computed: boolean\n): string | undefined => {\n if (!computed && node.type === AST_NODE_TYPES.Identifier) {\n return node.name;\n }\n\n if (\n computed &&\n node.type === AST_NODE_TYPES.Literal &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n return undefined;\n};\n\nconst collectStaticMemberPath = (\n node: Readonly<TSESTree.Expression>\n): readonly string[] | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return [node.name];\n }\n\n if (node.type !== AST_NODE_TYPES.MemberExpression || node.optional) {\n return undefined;\n }\n\n const objectPath = collectStaticMemberPath(node.object);\n const propertyName = getStaticPropertyName(node.property, node.computed);\n\n return !isDefined(objectPath) || !isDefined(propertyName)\n ? undefined\n : [...objectPath, propertyName];\n};\n\nconst isShadowedNavigatorIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getRootIdentifier = (\n node: Readonly<TSESTree.Expression>\n): TSESTree.Identifier | undefined => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n return node;\n }\n\n return node.type === AST_NODE_TYPES.MemberExpression\n ? getRootIdentifier(node.object)\n : undefined;\n};\n\nconst isNavigatorPathShadowed = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const rootIdentifier = getRootIdentifier(callee.object);\n\n return (\n rootIdentifier?.name === \"navigator\" &&\n isShadowedNavigatorIdentifier(context, rootIdentifier)\n );\n};\n\nconst isWakeLockRequestPath = (path: readonly string[]): boolean =>\n (path.length === 3 &&\n arrayFirst(path) === \"navigator\" &&\n path[1] === \"wakeLock\" &&\n path[2] === wakeLockRequestFunctionName) ||\n (path.length === 4 &&\n setHas(globalNavigatorReceiverNameSet, arrayFirst(path) ?? \"\") &&\n path[1] === \"navigator\" &&\n path[2] === \"wakeLock\" &&\n path[3] === wakeLockRequestFunctionName);\n\nconst isWakeLockRequestCall = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n): boolean => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n isNavigatorPathShadowed(context, callee)\n ) {\n return false;\n }\n\n const path = collectStaticMemberPath(callee);\n\n return isDefined(path) && isWakeLockRequestPath(path);\n};\n\nconst isDiscardedWakeLockRequest = (\n node: Readonly<TSESTree.CallExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-wake-locks`. */\nconst noFloatingWakeLocks: TSESLint.RuleModule<\n \"floatingWakeLock\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n if (\n !isWakeLockRequestCall(context, node.callee) ||\n !isDiscardedWakeLockRequest(node)\n ) {\n return;\n }\n\n context.report({\n messageId: \"floatingWakeLock\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require WakeLockSentinel handles to be retained so they can be released.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-wake-locks\"),\n },\n messages: {\n floatingWakeLock:\n \"Store or return the WakeLockSentinel so release() can release the wake lock during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-wake-locks\",\n});\n\nexport default noFloatingWakeLocks;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require Web Stream readers and writers to be retained so their locks can be released.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n getStaticPropertyName,\n isDiscardedResourceExpression,\n isImmediateUnownedMemberReceiver,\n} from \"../_internal/floating-resource.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { hasTypeNameInHierarchy } from \"../_internal/type-checker.js\";\nimport {\n createTypedRule,\n getTypedRuleServices,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst lockFactoryNames = [\"getReader\", \"getWriter\"] as const;\nconst cleanupMemberNames: ReadonlySet<string> = new Set([\"releaseLock\"]);\n\ntype LockFactoryMetadata = Readonly<{\n lockKind: \"reader\" | \"writer\";\n streamTypeName: \"ReadableStream\" | \"WritableStream\";\n}>;\n\ntype LockFactoryName = ArrayValues<typeof lockFactoryNames>;\n\nconst lockFactoryMetadataByName: Readonly<\n Record<LockFactoryName, LockFactoryMetadata>\n> = {\n getReader: {\n lockKind: \"reader\",\n streamTypeName: \"ReadableStream\",\n },\n getWriter: {\n lockKind: \"writer\",\n streamTypeName: \"WritableStream\",\n },\n};\nconst lockFactoryNameSet: ReadonlySet<string> = new Set(lockFactoryNames);\n\nconst isLockFactoryName = (name: string): name is LockFactoryName =>\n setHas(lockFactoryNameSet, name);\n\nconst getLockFactoryMetadata = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>\n):\n | (LockFactoryMetadata &\n Readonly<{ receiver: TSESTree.MemberExpression[\"object\"] }>)\n | undefined => {\n if (callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional) {\n return undefined;\n }\n\n if (callee.object.type === AST_NODE_TYPES.Super) {\n return undefined;\n }\n\n const factoryName = getStaticPropertyName(callee.property, callee.computed);\n\n if (!isDefined(factoryName) || !isLockFactoryName(factoryName)) {\n return undefined;\n }\n\n return {\n ...lockFactoryMetadataByName[factoryName],\n receiver: callee.object,\n };\n};\n\nconst isReceiverExpectedWebStream = (\n context: TypedRuleContext,\n receiver: Readonly<TSESTree.Expression>,\n streamTypeName: LockFactoryMetadata[\"streamTypeName\"]\n): boolean => {\n const { checker, parserServices } = getTypedRuleServices(context);\n const receiverType = checker.getTypeAtLocation(\n parserServices.esTreeNodeToTSNodeMap.get(receiver)\n );\n\n return hasTypeNameInHierarchy(checker, receiverType, streamTypeName);\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-web-stream-locks`. */\nconst noFloatingWebStreamLocks: TSESLint.RuleModule<\n \"floatingWebStreamLock\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n CallExpression(node: Readonly<TSESTree.CallExpression>) {\n const metadata = getLockFactoryMetadata(node.callee);\n\n if (\n !isDefined(metadata) ||\n !isReceiverExpectedWebStream(\n context,\n metadata.receiver,\n metadata.streamTypeName\n ) ||\n (!isDiscardedResourceExpression(node) &&\n !isImmediateUnownedMemberReceiver(\n node,\n cleanupMemberNames\n ))\n ) {\n return;\n }\n\n context.report({\n data: { lockKind: metadata.lockKind },\n messageId: \"floatingWebStreamLock\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require Web Stream readers and writers to be retained so their locks can be released.\",\n recommended: true,\n requiresTypeChecking: true,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-web-stream-locks\"),\n },\n messages: {\n floatingWebStreamLock:\n \"Store or return the Web Stream {{lockKind}} so releaseLock() can release the stream lock during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-web-stream-locks\",\n});\n\nexport default noFloatingWebStreamLocks;\n", "import type { ArrayValues } from \"type-fest\";\n\n/**\n * @packageDocumentation\n * Require worker handles to be retained so they can be terminated during cleanup.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\nconst browserWorkerConstructorNames = [\n \"SharedWorker\",\n \"Worker\",\n] as const;\nconst globalReceiverNames = [\n \"globalThis\",\n \"self\",\n \"window\",\n] as const;\nconst workerThreadsModuleNames = [\n \"node:worker_threads\",\n \"worker_threads\",\n] as const;\n\ntype BrowserWorkerConstructorName =\n ArrayValues<typeof browserWorkerConstructorNames>;\n\nconst browserWorkerConstructorNameSet: ReadonlySet<string> = new Set(\n browserWorkerConstructorNames\n);\nconst globalReceiverNameSet: ReadonlySet<string> = new Set(\n globalReceiverNames\n);\nconst workerThreadsModuleNameSet: ReadonlySet<string> = new Set(\n workerThreadsModuleNames\n);\n\nconst isBrowserWorkerConstructorName = (\n name: string\n): name is BrowserWorkerConstructorName =>\n setHas(browserWorkerConstructorNameSet, name);\n\nconst isGlobalReceiverName = (name: string): boolean =>\n setHas(globalReceiverNameSet, name);\n\nconst getTransparentWrappedExpression = (\n node: Readonly<TSESTree.Node>\n): Readonly<TSESTree.Node> | undefined => {\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSAsExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSSatisfiesExpression) {\n return node.expression;\n }\n\n if (node.type === AST_NODE_TYPES.TSTypeAssertion) {\n return node.expression;\n }\n\n return undefined;\n};\n\nconst getImportSourceValue = (\n node: Readonly<TSESTree.Node>\n): string | undefined => {\n const parent = getParentNode(node);\n\n if (\n parent?.type === AST_NODE_TYPES.ImportDeclaration &&\n typeof parent.source.value === \"string\"\n ) {\n return parent.source.value;\n }\n\n return undefined;\n};\n\nconst isWorkerThreadsImportBinding = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n const definition = arrayFirst(variable?.defs ?? []);\n\n const importSource =\n isDefined(definition)\n ? getImportSourceValue(definition.node)\n : undefined;\n\n return (\n identifier.name === \"Worker\" &&\n isDefined(importSource) &&\n setHas(workerThreadsModuleNameSet, importSource)\n );\n};\n\nconst isShadowedBrowserWorkerIdentifier = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): boolean => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n\n return variable !== null && variable.defs.length > 0;\n};\n\nconst getDirectWorkerConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.Identifier ||\n !isBrowserWorkerConstructorName(callee.name)\n ) {\n return undefined;\n }\n\n if (isWorkerThreadsImportBinding(context, callee)) {\n return \"Worker\";\n }\n\n return isShadowedBrowserWorkerIdentifier(context, callee)\n ? undefined\n : callee.name;\n};\n\nconst getMemberWorkerConstructorName = (\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined => {\n if (\n callee.type !== AST_NODE_TYPES.MemberExpression ||\n callee.computed ||\n callee.optional ||\n callee.object.type !== AST_NODE_TYPES.Identifier ||\n callee.property.type !== AST_NODE_TYPES.Identifier ||\n !isGlobalReceiverName(callee.object.name) ||\n !isBrowserWorkerConstructorName(callee.property.name)\n ) {\n return undefined;\n }\n\n return callee.property.name;\n};\n\nconst getWorkerConstructorName = (\n context: TypedRuleContext,\n callee: Readonly<TSESTree.NewExpression[\"callee\"]>\n): BrowserWorkerConstructorName | undefined =>\n getDirectWorkerConstructorName(context, callee) ??\n getMemberWorkerConstructorName(callee);\n\nconst isDiscardedWorkerInstance = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type === AST_NODE_TYPES.ExpressionStatement &&\n parent.expression === current\n ) {\n return true;\n }\n\n if (\n parent.type === AST_NODE_TYPES.UnaryExpression &&\n parent.operator === \"void\" &&\n parent.argument === current\n ) {\n const unaryParent = getParentNode(parent);\n\n return unaryParent?.type === AST_NODE_TYPES.ExpressionStatement;\n }\n\n return false;\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\nconst isImmediateWorkerMethodReceiver = (\n node: Readonly<TSESTree.NewExpression>\n): boolean => {\n let current: Readonly<TSESTree.Node> = node;\n let parent = getParentNode(current);\n\n while (isDefined(parent)) {\n const wrappedExpression = getTransparentWrappedExpression(parent);\n\n if (wrappedExpression !== current) {\n if (\n parent.type !== AST_NODE_TYPES.MemberExpression ||\n parent.object !== current ||\n parent.computed ||\n parent.property.type !== AST_NODE_TYPES.Identifier ||\n parent.property.name === \"terminate\"\n ) {\n return false;\n }\n\n const callExpression = getParentNode(parent);\n\n return (\n callExpression?.type === AST_NODE_TYPES.CallExpression &&\n callExpression.callee === parent\n );\n }\n\n current = parent;\n parent = getParentNode(current);\n }\n\n return false;\n};\n\n/** Rule implementation for `runtime-cleanup/no-floating-workers`. */\nconst noFloatingWorkers: TSESLint.RuleModule<\n \"floatingWorker\",\n readonly []\n> = createTypedRule({\n create(context) {\n return {\n NewExpression(node: Readonly<TSESTree.NewExpression>) {\n const workerName = getWorkerConstructorName(\n context,\n node.callee\n );\n\n if (\n !isDefined(workerName) ||\n (!isDiscardedWorkerInstance(node) &&\n !isImmediateWorkerMethodReceiver(node))\n ) {\n return;\n }\n\n context.report({\n data: { workerName },\n messageId: \"floatingWorker\",\n node,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require worker handles to be retained so they can be terminated during cleanup.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-floating-workers\"),\n },\n messages: {\n floatingWorker:\n \"Store or return the {{workerName}} handle so it can be terminated during cleanup.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-floating-workers\",\n});\n\nexport default noFloatingWorkers;\n", "/**\n * @packageDocumentation\n * Require event listeners to have an explicit cleanup path.\n */\nimport {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from \"@typescript-eslint/utils\";\nimport { arrayFirst, isDefined, setHas, stringSplit } from \"ts-extras\";\n\nimport { getParentNode } from \"../_internal/ast-node.js\";\nimport { createRuleDocsUrl } from \"../_internal/rule-docs-url.js\";\nimport { getVariableInScopeChain } from \"../_internal/scope-variable.js\";\nimport {\n createTypedRule,\n type TypedRuleContext,\n} from \"../_internal/typed-rule.js\";\n\ntype AddEventListenerRecord = Readonly<{\n cleanupKey: EventListenerCleanupKey;\n node: TSESTree.CallExpression;\n}>;\n\ntype CleanupBoundary =\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression\n | TSESTree.Program;\n\ntype EventListenerCleanupKey = `${string}\\u0000${string}\\u0000${string}\\u0000${string}`;\ntype ReadonlyCleanupBoundary = Readonly<CleanupBoundary>;\n\nconst unknownCaptureKey = \"*\";\n\nconst isCleanupBoundary = (\n node: Readonly<TSESTree.Node>\n): node is CleanupBoundary =>\n node.type === AST_NODE_TYPES.Program ||\n node.type === AST_NODE_TYPES.FunctionDeclaration ||\n node.type === AST_NODE_TYPES.FunctionExpression ||\n node.type === AST_NODE_TYPES.ArrowFunctionExpression;\n\nconst getCleanupBoundary = (\n node: Readonly<TSESTree.Node>\n): CleanupBoundary => {\n let current: Readonly<TSESTree.Node> | undefined = node;\n\n while (isDefined(current)) {\n if (isCleanupBoundary(current)) {\n return current;\n }\n\n current = getParentNode(current);\n }\n\n throw new TypeError(\"Expected an addEventListener call to have a program.\");\n};\n\nconst getStaticPropertyName = (\n property: Readonly<TSESTree.PrivateIdentifier | TSESTree.PropertyName>\n): string | undefined => {\n if (property.type === AST_NODE_TYPES.Identifier) {\n return property.name;\n }\n\n if (\n property.type === AST_NODE_TYPES.Literal &&\n typeof property.value === \"string\"\n ) {\n return property.value;\n }\n\n return undefined;\n};\n\nconst isMethodCallNamed = (\n callee: Readonly<TSESTree.CallExpression[\"callee\"]>,\n methodName: string\n): callee is TSESTree.MemberExpression =>\n callee.type === AST_NODE_TYPES.MemberExpression &&\n !callee.computed &&\n callee.property.type === AST_NODE_TYPES.Identifier &&\n callee.property.name === methodName;\n\nconst isUnknownRecord = (value: unknown): value is Record<PropertyKey, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isVariableDeclarator = (\n node: unknown\n): node is TSESTree.VariableDeclarator =>\n isUnknownRecord(node) &&\n node[\"type\"] === AST_NODE_TYPES.VariableDeclarator;\n\nconst getVariableInitializer = (\n context: TypedRuleContext,\n identifier: Readonly<TSESTree.Identifier>\n): TSESTree.Expression | undefined => {\n const scope = context.sourceCode.getScope(identifier);\n const variable = getVariableInScopeChain(scope, identifier.name);\n const definition = arrayFirst(variable?.defs ?? []);\n const definitionNode = definition?.node;\n\n if (!isVariableDeclarator(definitionNode)) {\n return undefined;\n }\n\n return definitionNode.init ?? undefined;\n};\n\nconst resolveOptionsExpression = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement>\n): TSESTree.Expression | undefined => {\n if (argument.type === AST_NODE_TYPES.SpreadElement) {\n return undefined;\n }\n\n if (argument.type === AST_NODE_TYPES.Identifier) {\n return getVariableInitializer(context, argument);\n }\n\n return argument;\n};\n\nconst objectExpressionHasProperty = (\n objectExpression: Readonly<TSESTree.ObjectExpression>,\n propertyName: string\n): boolean =>\n objectExpression.properties.some((property) => {\n if (property.type === AST_NODE_TYPES.SpreadElement) {\n return true;\n }\n\n return getStaticPropertyName(property.key) === propertyName;\n });\n\nconst getBooleanPropertyValue = (\n objectExpression: Readonly<TSESTree.ObjectExpression>,\n propertyName: string\n): boolean | undefined => {\n for (const property of objectExpression.properties) {\n if (\n property.type === AST_NODE_TYPES.Property &&\n getStaticPropertyName(property.key) === propertyName &&\n property.value.type === AST_NODE_TYPES.Literal &&\n typeof property.value.value === \"boolean\"\n ) {\n return property.value.value;\n }\n }\n\n return undefined;\n};\n\nconst hasAbortSignalOption = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement> | undefined\n): boolean => {\n if (!isDefined(argument)) {\n return false;\n }\n\n const resolvedOptions = resolveOptionsExpression(context, argument);\n\n return (\n resolvedOptions?.type === AST_NODE_TYPES.ObjectExpression &&\n objectExpressionHasProperty(resolvedOptions, \"signal\")\n );\n};\n\nconst getCaptureKey = (\n context: TypedRuleContext,\n argument: Readonly<TSESTree.Expression | TSESTree.SpreadElement> | undefined\n): string => {\n if (!isDefined(argument)) {\n return \"false\";\n }\n\n const resolvedOptions = resolveOptionsExpression(context, argument);\n\n if (!isDefined(resolvedOptions)) {\n return unknownCaptureKey;\n }\n\n if (\n resolvedOptions.type === AST_NODE_TYPES.Literal &&\n typeof resolvedOptions.value === \"boolean\"\n ) {\n return String(resolvedOptions.value);\n }\n\n if (resolvedOptions.type === AST_NODE_TYPES.ObjectExpression) {\n const captureValue = getBooleanPropertyValue(\n resolvedOptions,\n \"capture\"\n );\n\n return isDefined(captureValue) ? String(captureValue) : \"false\";\n }\n\n return unknownCaptureKey;\n};\n\nconst getCleanupKey = (\n context: TypedRuleContext,\n node: Readonly<TSESTree.CallExpression>\n): EventListenerCleanupKey | undefined => {\n if (node.arguments.length < 2 || node.callee.type !== AST_NODE_TYPES.MemberExpression) {\n return undefined;\n }\n\n const [eventType, listener, options] = node.arguments;\n\n if (\n !isDefined(eventType) ||\n !isDefined(listener) ||\n eventType.type === AST_NODE_TYPES.SpreadElement ||\n listener.type === AST_NODE_TYPES.SpreadElement\n ) {\n return undefined;\n }\n\n const targetText = context.sourceCode.getText(node.callee.object);\n const eventTypeText = context.sourceCode.getText(eventType);\n const listenerText = context.sourceCode.getText(listener);\n const captureKey = getCaptureKey(context, options);\n\n return `${targetText}\\u0000${eventTypeText}\\u0000${listenerText}\\u0000${captureKey}`;\n};\n\nconst getWildcardCleanupKey = (\n cleanupKey: EventListenerCleanupKey\n): EventListenerCleanupKey => {\n const [targetText, eventTypeText, listenerText] = stringSplit(\n cleanupKey,\n \"\\u0000\"\n );\n\n if (\n !isDefined(targetText) ||\n !isDefined(eventTypeText) ||\n !isDefined(listenerText)\n ) {\n throw new TypeError(\"Expected a complete event listener cleanup key.\");\n }\n\n return `${targetText}\\u0000${eventTypeText}\\u0000${listenerText}\\u0000${unknownCaptureKey}`;\n};\n\n/** Rule implementation for `runtime-cleanup/no-unmanaged-event-listeners`. */\nconst noUnmanagedEventListeners: TSESLint.RuleModule<\n \"unmanagedEventListener\",\n readonly []\n> = createTypedRule({\n create(context) {\n const addsByBoundary = new Map<\n ReadonlyCleanupBoundary,\n AddEventListenerRecord[]\n >();\n const removesByBoundary = new Map<\n ReadonlyCleanupBoundary,\n Set<EventListenerCleanupKey>\n >();\n\n const addRecord = (\n boundary: ReadonlyCleanupBoundary,\n record: AddEventListenerRecord\n ): void => {\n const records = addsByBoundary.get(boundary);\n\n if (!isDefined(records)) {\n addsByBoundary.set(boundary, [record]);\n return;\n }\n\n records.push(record);\n };\n\n const addRemoveKey = (\n boundary: ReadonlyCleanupBoundary,\n cleanupKey: EventListenerCleanupKey\n ): void => {\n const cleanupKeys = removesByBoundary.get(boundary);\n\n if (!isDefined(cleanupKeys)) {\n removesByBoundary.set(boundary, new Set([cleanupKey]));\n return;\n }\n\n cleanupKeys.add(cleanupKey);\n };\n\n return {\n 'CallExpression[callee.type=\"MemberExpression\"]'(\n node: TSESTree.CallExpression\n ) {\n if (\n isMethodCallNamed(node.callee, \"addEventListener\") &&\n !hasAbortSignalOption(context, node.arguments[2])\n ) {\n const cleanupKey = getCleanupKey(context, node);\n\n if (isDefined(cleanupKey)) {\n addRecord(getCleanupBoundary(node), {\n cleanupKey,\n node,\n });\n }\n }\n\n if (isMethodCallNamed(node.callee, \"removeEventListener\")) {\n const cleanupKey = getCleanupKey(context, node);\n\n if (isDefined(cleanupKey)) {\n addRemoveKey(getCleanupBoundary(node), cleanupKey);\n }\n }\n },\n \"Program:exit\"() {\n for (const [boundary, addRecords] of addsByBoundary) {\n const removeKeys =\n removesByBoundary.get(boundary) ?? new Set();\n\n for (const { cleanupKey, node } of addRecords) {\n if (\n !setHas(removeKeys, cleanupKey) &&\n !setHas(\n removeKeys,\n getWildcardCleanupKey(cleanupKey)\n )\n ) {\n context.report({\n messageId: \"unmanagedEventListener\",\n node,\n });\n }\n }\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"require event listeners to have an abort signal or a matching cleanup call.\",\n recommended: true,\n requiresTypeChecking: false,\n runtimeCleanupConfigs: [\n \"runtime-cleanup.configs.recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\",\n \"runtime-cleanup.configs.strict\",\n \"runtime-cleanup.configs.all\",\n ],\n url: createRuleDocsUrl(\"no-unmanaged-event-listeners\"),\n },\n messages: {\n unmanagedEventListener:\n \"Add an AbortSignal option or a matching removeEventListener call for this listener.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-unmanaged-event-listeners\",\n});\n\nexport default noUnmanagedEventListeners;\n", "/**\n * @packageDocumentation\n * Canonical runtime registry of all rule modules shipped by eslint-plugin-runtime-cleanup.\n */\n\nimport type { TSESLint } from \"@typescript-eslint/utils\";\nimport type { UnknownArray } from \"type-fest\";\n\nimport noFloatingAbortControllers from \"../rules/no-floating-abort-controllers.js\";\nimport noFloatingAudioContexts from \"../rules/no-floating-audio-contexts.js\";\nimport noFloatingBroadcastChannels from \"../rules/no-floating-broadcast-channels.js\";\nimport noFloatingChildProcesses from \"../rules/no-floating-child-processes.js\";\nimport noFloatingDisposableStacks from \"../rules/no-floating-disposable-stacks.js\";\nimport noFloatingFileWatchers from \"../rules/no-floating-file-watchers.js\";\nimport noFloatingGeolocationWatches from \"../rules/no-floating-geolocation-watches.js\";\nimport noFloatingInfiniteAnimations from \"../rules/no-floating-infinite-animations.js\";\nimport noFloatingMediaStreams from \"../rules/no-floating-media-streams.js\";\nimport noFloatingMessageChannels from \"../rules/no-floating-message-channels.js\";\nimport noFloatingNetworkConnections from \"../rules/no-floating-network-connections.js\";\nimport noFloatingObjectUrls from \"../rules/no-floating-object-urls.js\";\nimport noFloatingObservers from \"../rules/no-floating-observers.js\";\nimport noFloatingServers from \"../rules/no-floating-servers.js\";\nimport noFloatingStreams from \"../rules/no-floating-streams.js\";\nimport noFloatingTimers from \"../rules/no-floating-timers.js\";\nimport noFloatingWakeLocks from \"../rules/no-floating-wake-locks.js\";\nimport noFloatingWebStreamLocks from \"../rules/no-floating-web-stream-locks.js\";\nimport noFloatingWorkers from \"../rules/no-floating-workers.js\";\nimport noUnmanagedEventListeners from \"../rules/no-unmanaged-event-listeners.js\";\n\n/** Runtime rule module shape used by registry/preset builders. */\nexport type RuleWithDocs = TSESLint.RuleModule<string, Readonly<UnknownArray>>;\n\n/**\n * Runtime map of all rule modules keyed by unqualified rule name.\n */\nconst runtimeCleanupRuleRegistry: Readonly<Record<string, RuleWithDocs>> = {\n \"no-floating-abort-controllers\": noFloatingAbortControllers,\n \"no-floating-audio-contexts\": noFloatingAudioContexts,\n \"no-floating-broadcast-channels\": noFloatingBroadcastChannels,\n \"no-floating-child-processes\": noFloatingChildProcesses,\n \"no-floating-disposable-stacks\": noFloatingDisposableStacks,\n \"no-floating-file-watchers\": noFloatingFileWatchers,\n \"no-floating-geolocation-watches\": noFloatingGeolocationWatches,\n \"no-floating-infinite-animations\": noFloatingInfiniteAnimations,\n \"no-floating-media-streams\": noFloatingMediaStreams,\n \"no-floating-message-channels\": noFloatingMessageChannels,\n \"no-floating-network-connections\": noFloatingNetworkConnections,\n \"no-floating-object-urls\": noFloatingObjectUrls,\n \"no-floating-observers\": noFloatingObservers,\n \"no-floating-servers\": noFloatingServers,\n \"no-floating-streams\": noFloatingStreams,\n \"no-floating-timers\": noFloatingTimers,\n \"no-floating-wake-locks\": noFloatingWakeLocks,\n \"no-floating-web-stream-locks\": noFloatingWebStreamLocks,\n \"no-floating-workers\": noFloatingWorkers,\n \"no-unmanaged-event-listeners\": noUnmanagedEventListeners,\n};\n\n/** Exported typed view consumed by the plugin entrypoint. */\nexport const runtimeCleanupRules: Readonly<Record<string, RuleWithDocs>> =\n runtimeCleanupRuleRegistry;\n\nexport default runtimeCleanupRules;\n", "/**\n * @packageDocumentation\n * Shared runtime-cleanup preset/config reference constants and type guards.\n */\n\nimport type { ArrayValues } from \"type-fest\";\n\nimport { objectHasOwn } from \"ts-extras\";\n\n/** Canonical flat-config preset keys exposed through `plugin.configs`. */\nexport const runtimeCleanupConfigNames = [\n \"all\",\n \"experimental\",\n \"minimal\",\n \"recommended\",\n \"recommended-type-checked\",\n \"strict\",\n] as const;\n\n/** Metadata contract shared across preset wiring, docs, and README rendering. */\nexport type RuntimeCleanupConfigMetadata = Readonly<{\n icon: string;\n presetName: `runtime-cleanup:${RuntimeCleanupConfigName}`;\n readmeOrder: number;\n requiresTypeChecking: boolean;\n}>;\n\n/** Canonical flat-config preset key type exposed through `plugin.configs`. */\nexport type RuntimeCleanupConfigName =\n ArrayValues<typeof runtimeCleanupConfigNames>;\n\n/**\n * Canonical metadata for every exported `runtime-cleanup` preset key.\n */\nexport const runtimeCleanupConfigMetadataByName: Readonly<\n Record<RuntimeCleanupConfigName, RuntimeCleanupConfigMetadata>\n> = {\n all: {\n icon: \"\uD83D\uDFE3\",\n presetName: \"runtime-cleanup:all\",\n readmeOrder: 5,\n requiresTypeChecking: true,\n },\n experimental: {\n icon: \"\uD83E\uDDEA\",\n presetName: \"runtime-cleanup:experimental\",\n readmeOrder: 6,\n requiresTypeChecking: false,\n },\n minimal: {\n icon: \"\uD83D\uDFE2\",\n presetName: \"runtime-cleanup:minimal\",\n readmeOrder: 1,\n requiresTypeChecking: false,\n },\n recommended: {\n icon: \"\uD83D\uDFE1\",\n presetName: \"runtime-cleanup:recommended\",\n readmeOrder: 2,\n requiresTypeChecking: false,\n },\n \"recommended-type-checked\": {\n icon: \"\uD83E\uDDEC\",\n presetName: \"runtime-cleanup:recommended-type-checked\",\n readmeOrder: 3,\n requiresTypeChecking: true,\n },\n strict: {\n icon: \"\uD83D\uDD34\",\n presetName: \"runtime-cleanup:strict\",\n readmeOrder: 4,\n requiresTypeChecking: true,\n },\n};\n\n/** Stable README legend/rendering order for preset icons. */\nexport const runtimeCleanupConfigNamesByReadmeOrder: readonly RuntimeCleanupConfigName[] =\n [\n \"minimal\",\n \"recommended\",\n \"recommended-type-checked\",\n \"strict\",\n \"all\",\n \"experimental\",\n ];\n\n/** Metadata references supported in rule `meta.docs.runtimeCleanupConfigs`. */\nexport const runtimeCleanupConfigReferenceToName: Readonly<{\n \"runtime-cleanup.configs.all\": \"all\";\n \"runtime-cleanup.configs.experimental\": \"experimental\";\n \"runtime-cleanup.configs.minimal\": \"minimal\";\n \"runtime-cleanup.configs.recommended\": \"recommended\";\n \"runtime-cleanup.configs.recommended-type-checked\": \"recommended-type-checked\";\n \"runtime-cleanup.configs.strict\": \"strict\";\n 'runtime-cleanup.configs[\"recommended-type-checked\"]': \"recommended-type-checked\";\n}> = {\n \"runtime-cleanup.configs.all\": \"all\",\n \"runtime-cleanup.configs.experimental\": \"experimental\",\n \"runtime-cleanup.configs.minimal\": \"minimal\",\n \"runtime-cleanup.configs.recommended\": \"recommended\",\n \"runtime-cleanup.configs.recommended-type-checked\":\n \"recommended-type-checked\",\n \"runtime-cleanup.configs.strict\": \"strict\",\n 'runtime-cleanup.configs[\"recommended-type-checked\"]':\n \"recommended-type-checked\",\n};\n\n/** Fully-qualified preset reference type accepted in rule docs metadata. */\nexport type RuntimeCleanupConfigReference =\n keyof typeof runtimeCleanupConfigReferenceToName;\n\n/**\n * Check whether a string is a supported rule docs preset reference.\n */\nexport const isRuntimeCleanupConfigReference = (\n value: string\n): value is RuntimeCleanupConfigReference =>\n objectHasOwn(runtimeCleanupConfigReferenceToName, value);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_ts_extras", "import_utils", "import_ts_extras", "import_utils", "import_ts_extras", "cleanupMemberNames", "import_ts_extras", "import_utils", "import_ts_extras", "import_ts_extras", "import_ts_extras", "getStaticPropertyName", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getStaticPropertyName", "import_utils", "import_ts_extras", "getTransparentWrappedExpression", "getStaticPropertyName", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getTransparentWrappedExpression", "getStaticPropertyName", "import_utils", "import_ts_extras", "immediateCleanupMethodNames", "immediateCleanupMethodNameSet", "isImmediateCleanupMethodName", "getTransparentWrappedExpression", "getStaticPropertyName", "getImportSourceValue", "getRequireSourceValue", "getDefinitionModuleSource", "getDefinitionForIdentifier", "getImportedSpecifierName", "getObjectPatternPropertyNameForIdentifier", "getRequireMemberFactoryName", "getModuleMemberFactoryName", "import_utils", "import_ts_extras", "getTransparentWrappedExpression", "getStaticPropertyName", "collectStaticMemberPath", "import_utils", "import_ts_extras", "import_ts_extras", "isShadowedIdentifier", "import_utils", "import_ts_extras", "globalNavigatorReceiverNames", "globalNavigatorReceiverNameSet", "getTransparentWrappedExpression", "getStaticPropertyName", "collectStaticMemberPath", "isShadowedNavigatorIdentifier", "getRootIdentifier", "isNavigatorPathShadowed", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getTransparentWrappedExpression", "getStaticPropertyName", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getTransparentWrappedExpression", "getStaticPropertyName", "import_utils", "import_ts_extras", "getRootIdentifier", "isShadowedIdentifier", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getTransparentWrappedExpression", "isShadowedIdentifier", "import_utils", "import_ts_extras", "immediateCleanupMethodNames", "immediateCleanupMethodNameSet", "isImmediateCleanupMethodName", "getTransparentWrappedExpression", "getStaticPropertyName", "getImportSourceValue", "getRequireSourceValue", "getDefinitionModuleSource", "getDefinitionForIdentifier", "getImportedSpecifierName", "getObjectPatternPropertyNameForIdentifier", "getRequireMemberFactoryName", "getModuleMemberFactoryName", "import_utils", "import_ts_extras", "fsModuleNames", "fsModuleNameSet", "getTransparentWrappedExpression", "getStaticPropertyName", "getImportSourceValue", "getRequireSourceValue", "getDefinitionModuleSource", "getImportedSpecifierName", "getObjectPatternPropertyNameForIdentifier", "isFsModuleSource", "getDefinitionForIdentifier", "isFsModuleBinding", "getRequireMemberFactoryName", "getModuleMemberFactoryName", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "isShadowedIdentifier", "import_utils", "import_ts_extras", "globalNavigatorReceiverNames", "globalNavigatorReceiverNameSet", "getTransparentWrappedExpression", "getStaticPropertyName", "collectStaticMemberPath", "isShadowedNavigatorIdentifier", "getRootIdentifier", "isNavigatorPathShadowed", "import_utils", "import_ts_extras", "cleanupMemberNames", "import_utils", "import_ts_extras", "globalReceiverNames", "globalReceiverNameSet", "isGlobalReceiverName", "getTransparentWrappedExpression", "getImportSourceValue", "import_utils", "import_ts_extras", "getStaticPropertyName", "import_ts_extras", "tsParser"]
|
|
7
7
|
}
|