eslint-plugin-sdl-2 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +5316 -0
  2. package/LICENSE +21 -0
  3. package/README.md +133 -0
  4. package/dist/_internal/ast-utils.d.ts +17 -0
  5. package/dist/_internal/ast-utils.d.ts.map +1 -0
  6. package/dist/_internal/ast-utils.js +93 -0
  7. package/dist/_internal/ast-utils.js.map +1 -0
  8. package/dist/_internal/config-references.d.ts +5 -0
  9. package/dist/_internal/config-references.d.ts.map +1 -0
  10. package/dist/_internal/config-references.js +13 -0
  11. package/dist/_internal/config-references.js.map +1 -0
  12. package/dist/_internal/create-rule.d.ts +9 -0
  13. package/dist/_internal/create-rule.d.ts.map +1 -0
  14. package/dist/_internal/create-rule.js +6 -0
  15. package/dist/_internal/create-rule.js.map +1 -0
  16. package/dist/_internal/domparser.d.ts +19 -0
  17. package/dist/_internal/domparser.d.ts.map +1 -0
  18. package/dist/_internal/domparser.js +45 -0
  19. package/dist/_internal/domparser.js.map +1 -0
  20. package/dist/_internal/electron-web-preferences.d.ts +14 -0
  21. package/dist/_internal/electron-web-preferences.d.ts.map +1 -0
  22. package/dist/_internal/electron-web-preferences.js +63 -0
  23. package/dist/_internal/electron-web-preferences.js.map +1 -0
  24. package/dist/_internal/estree-utils.d.ts +51 -0
  25. package/dist/_internal/estree-utils.d.ts.map +1 -0
  26. package/dist/_internal/estree-utils.js +112 -0
  27. package/dist/_internal/estree-utils.js.map +1 -0
  28. package/dist/_internal/node-tls-config.d.ts +44 -0
  29. package/dist/_internal/node-tls-config.d.ts.map +1 -0
  30. package/dist/_internal/node-tls-config.js +101 -0
  31. package/dist/_internal/node-tls-config.js.map +1 -0
  32. package/dist/_internal/rules-registry.d.ts +10 -0
  33. package/dist/_internal/rules-registry.d.ts.map +1 -0
  34. package/dist/_internal/rules-registry.js +148 -0
  35. package/dist/_internal/rules-registry.js.map +1 -0
  36. package/dist/_internal/script-element.d.ts +7 -0
  37. package/dist/_internal/script-element.d.ts.map +1 -0
  38. package/dist/_internal/script-element.js +46 -0
  39. package/dist/_internal/script-element.js.map +1 -0
  40. package/dist/_internal/worker-code-loading.d.ts +69 -0
  41. package/dist/_internal/worker-code-loading.d.ts.map +1 -0
  42. package/dist/_internal/worker-code-loading.js +134 -0
  43. package/dist/_internal/worker-code-loading.js.map +1 -0
  44. package/dist/plugin.cjs +6036 -0
  45. package/dist/plugin.cjs.map +7 -0
  46. package/dist/plugin.d.cts +11 -0
  47. package/dist/plugin.d.ts +11 -0
  48. package/dist/plugin.d.ts.map +1 -0
  49. package/dist/plugin.js +235 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/rules/no-angular-bypass-sanitizer.d.ts +5 -0
  52. package/dist/rules/no-angular-bypass-sanitizer.d.ts.map +1 -0
  53. package/dist/rules/no-angular-bypass-sanitizer.js +32 -0
  54. package/dist/rules/no-angular-bypass-sanitizer.js.map +1 -0
  55. package/dist/rules/no-angular-bypass-security-trust-html.d.ts +5 -0
  56. package/dist/rules/no-angular-bypass-security-trust-html.d.ts.map +1 -0
  57. package/dist/rules/no-angular-bypass-security-trust-html.js +51 -0
  58. package/dist/rules/no-angular-bypass-security-trust-html.js.map +1 -0
  59. package/dist/rules/no-angular-innerhtml-binding.d.ts +5 -0
  60. package/dist/rules/no-angular-innerhtml-binding.d.ts.map +1 -0
  61. package/dist/rules/no-angular-innerhtml-binding.js +57 -0
  62. package/dist/rules/no-angular-innerhtml-binding.js.map +1 -0
  63. package/dist/rules/no-angular-sanitization-trusted-urls.d.ts +5 -0
  64. package/dist/rules/no-angular-sanitization-trusted-urls.d.ts.map +1 -0
  65. package/dist/rules/no-angular-sanitization-trusted-urls.js +32 -0
  66. package/dist/rules/no-angular-sanitization-trusted-urls.js.map +1 -0
  67. package/dist/rules/no-angularjs-bypass-sce.d.ts +5 -0
  68. package/dist/rules/no-angularjs-bypass-sce.d.ts.map +1 -0
  69. package/dist/rules/no-angularjs-bypass-sce.js +80 -0
  70. package/dist/rules/no-angularjs-bypass-sce.js.map +1 -0
  71. package/dist/rules/no-angularjs-enable-svg.d.ts +5 -0
  72. package/dist/rules/no-angularjs-enable-svg.d.ts.map +1 -0
  73. package/dist/rules/no-angularjs-enable-svg.js +48 -0
  74. package/dist/rules/no-angularjs-enable-svg.js.map +1 -0
  75. package/dist/rules/no-angularjs-ng-bind-html-without-sanitize.d.ts +5 -0
  76. package/dist/rules/no-angularjs-ng-bind-html-without-sanitize.d.ts.map +1 -0
  77. package/dist/rules/no-angularjs-ng-bind-html-without-sanitize.js +64 -0
  78. package/dist/rules/no-angularjs-ng-bind-html-without-sanitize.js.map +1 -0
  79. package/dist/rules/no-angularjs-sanitization-whitelist.d.ts +5 -0
  80. package/dist/rules/no-angularjs-sanitization-whitelist.d.ts.map +1 -0
  81. package/dist/rules/no-angularjs-sanitization-whitelist.js +32 -0
  82. package/dist/rules/no-angularjs-sanitization-whitelist.js.map +1 -0
  83. package/dist/rules/no-angularjs-sce-resource-url-wildcard.d.ts +5 -0
  84. package/dist/rules/no-angularjs-sce-resource-url-wildcard.d.ts.map +1 -0
  85. package/dist/rules/no-angularjs-sce-resource-url-wildcard.js +69 -0
  86. package/dist/rules/no-angularjs-sce-resource-url-wildcard.js.map +1 -0
  87. package/dist/rules/no-child-process-exec.d.ts +5 -0
  88. package/dist/rules/no-child-process-exec.d.ts.map +1 -0
  89. package/dist/rules/no-child-process-exec.js +141 -0
  90. package/dist/rules/no-child-process-exec.js.map +1 -0
  91. package/dist/rules/no-child-process-shell-true.d.ts +5 -0
  92. package/dist/rules/no-child-process-shell-true.d.ts.map +1 -0
  93. package/dist/rules/no-child-process-shell-true.js +89 -0
  94. package/dist/rules/no-child-process-shell-true.js.map +1 -0
  95. package/dist/rules/no-cookies.d.ts +5 -0
  96. package/dist/rules/no-cookies.d.ts.map +1 -0
  97. package/dist/rules/no-cookies.js +38 -0
  98. package/dist/rules/no-cookies.js.map +1 -0
  99. package/dist/rules/no-document-domain.d.ts +5 -0
  100. package/dist/rules/no-document-domain.d.ts.map +1 -0
  101. package/dist/rules/no-document-domain.js +41 -0
  102. package/dist/rules/no-document-domain.js.map +1 -0
  103. package/dist/rules/no-document-execcommand-insert-html.d.ts +5 -0
  104. package/dist/rules/no-document-execcommand-insert-html.d.ts.map +1 -0
  105. package/dist/rules/no-document-execcommand-insert-html.js +57 -0
  106. package/dist/rules/no-document-execcommand-insert-html.js.map +1 -0
  107. package/dist/rules/no-document-parse-html-unsafe.d.ts +5 -0
  108. package/dist/rules/no-document-parse-html-unsafe.d.ts.map +1 -0
  109. package/dist/rules/no-document-parse-html-unsafe.js +67 -0
  110. package/dist/rules/no-document-parse-html-unsafe.js.map +1 -0
  111. package/dist/rules/no-document-write.d.ts +5 -0
  112. package/dist/rules/no-document-write.d.ts.map +1 -0
  113. package/dist/rules/no-document-write.js +40 -0
  114. package/dist/rules/no-document-write.js.map +1 -0
  115. package/dist/rules/no-domparser-html-without-sanitization.d.ts +5 -0
  116. package/dist/rules/no-domparser-html-without-sanitization.d.ts.map +1 -0
  117. package/dist/rules/no-domparser-html-without-sanitization.js +56 -0
  118. package/dist/rules/no-domparser-html-without-sanitization.js.map +1 -0
  119. package/dist/rules/no-domparser-svg-without-sanitization.d.ts +5 -0
  120. package/dist/rules/no-domparser-svg-without-sanitization.d.ts.map +1 -0
  121. package/dist/rules/no-domparser-svg-without-sanitization.js +56 -0
  122. package/dist/rules/no-domparser-svg-without-sanitization.js.map +1 -0
  123. package/dist/rules/no-dynamic-import-unsafe-url.d.ts +5 -0
  124. package/dist/rules/no-dynamic-import-unsafe-url.d.ts.map +1 -0
  125. package/dist/rules/no-dynamic-import-unsafe-url.js +47 -0
  126. package/dist/rules/no-dynamic-import-unsafe-url.js.map +1 -0
  127. package/dist/rules/no-electron-allow-running-insecure-content.d.ts +5 -0
  128. package/dist/rules/no-electron-allow-running-insecure-content.d.ts.map +1 -0
  129. package/dist/rules/no-electron-allow-running-insecure-content.js +30 -0
  130. package/dist/rules/no-electron-allow-running-insecure-content.js.map +1 -0
  131. package/dist/rules/no-electron-dangerous-blink-features.d.ts +5 -0
  132. package/dist/rules/no-electron-dangerous-blink-features.d.ts.map +1 -0
  133. package/dist/rules/no-electron-dangerous-blink-features.js +89 -0
  134. package/dist/rules/no-electron-dangerous-blink-features.js.map +1 -0
  135. package/dist/rules/no-electron-disable-context-isolation.d.ts +5 -0
  136. package/dist/rules/no-electron-disable-context-isolation.d.ts.map +1 -0
  137. package/dist/rules/no-electron-disable-context-isolation.js +30 -0
  138. package/dist/rules/no-electron-disable-context-isolation.js.map +1 -0
  139. package/dist/rules/no-electron-disable-sandbox.d.ts +5 -0
  140. package/dist/rules/no-electron-disable-sandbox.d.ts.map +1 -0
  141. package/dist/rules/no-electron-disable-sandbox.js +30 -0
  142. package/dist/rules/no-electron-disable-sandbox.js.map +1 -0
  143. package/dist/rules/no-electron-disable-web-security.d.ts +5 -0
  144. package/dist/rules/no-electron-disable-web-security.d.ts.map +1 -0
  145. package/dist/rules/no-electron-disable-web-security.js +30 -0
  146. package/dist/rules/no-electron-disable-web-security.js.map +1 -0
  147. package/dist/rules/no-electron-enable-remote-module.d.ts +5 -0
  148. package/dist/rules/no-electron-enable-remote-module.d.ts.map +1 -0
  149. package/dist/rules/no-electron-enable-remote-module.js +30 -0
  150. package/dist/rules/no-electron-enable-remote-module.js.map +1 -0
  151. package/dist/rules/no-electron-enable-webview-tag.d.ts +5 -0
  152. package/dist/rules/no-electron-enable-webview-tag.d.ts.map +1 -0
  153. package/dist/rules/no-electron-enable-webview-tag.js +30 -0
  154. package/dist/rules/no-electron-enable-webview-tag.js.map +1 -0
  155. package/dist/rules/no-electron-experimental-features.d.ts +5 -0
  156. package/dist/rules/no-electron-experimental-features.d.ts.map +1 -0
  157. package/dist/rules/no-electron-experimental-features.js +30 -0
  158. package/dist/rules/no-electron-experimental-features.js.map +1 -0
  159. package/dist/rules/no-electron-expose-raw-ipc-renderer.d.ts +5 -0
  160. package/dist/rules/no-electron-expose-raw-ipc-renderer.d.ts.map +1 -0
  161. package/dist/rules/no-electron-expose-raw-ipc-renderer.js +108 -0
  162. package/dist/rules/no-electron-expose-raw-ipc-renderer.js.map +1 -0
  163. package/dist/rules/no-electron-insecure-certificate-error-handler.d.ts +5 -0
  164. package/dist/rules/no-electron-insecure-certificate-error-handler.d.ts.map +1 -0
  165. package/dist/rules/no-electron-insecure-certificate-error-handler.js +91 -0
  166. package/dist/rules/no-electron-insecure-certificate-error-handler.js.map +1 -0
  167. package/dist/rules/no-electron-insecure-certificate-verify-proc.d.ts +5 -0
  168. package/dist/rules/no-electron-insecure-certificate-verify-proc.d.ts.map +1 -0
  169. package/dist/rules/no-electron-insecure-certificate-verify-proc.js +75 -0
  170. package/dist/rules/no-electron-insecure-certificate-verify-proc.js.map +1 -0
  171. package/dist/rules/no-electron-insecure-permission-request-handler.d.ts +5 -0
  172. package/dist/rules/no-electron-insecure-permission-request-handler.d.ts.map +1 -0
  173. package/dist/rules/no-electron-insecure-permission-request-handler.js +75 -0
  174. package/dist/rules/no-electron-insecure-permission-request-handler.js.map +1 -0
  175. package/dist/rules/no-electron-node-integration.d.ts +5 -0
  176. package/dist/rules/no-electron-node-integration.d.ts.map +1 -0
  177. package/dist/rules/no-electron-node-integration.js +52 -0
  178. package/dist/rules/no-electron-node-integration.js.map +1 -0
  179. package/dist/rules/no-electron-permission-check-handler-allow-all.d.ts +5 -0
  180. package/dist/rules/no-electron-permission-check-handler-allow-all.d.ts.map +1 -0
  181. package/dist/rules/no-electron-permission-check-handler-allow-all.js +63 -0
  182. package/dist/rules/no-electron-permission-check-handler-allow-all.js.map +1 -0
  183. package/dist/rules/no-electron-unchecked-ipc-sender.d.ts +5 -0
  184. package/dist/rules/no-electron-unchecked-ipc-sender.d.ts.map +1 -0
  185. package/dist/rules/no-electron-unchecked-ipc-sender.js +90 -0
  186. package/dist/rules/no-electron-unchecked-ipc-sender.js.map +1 -0
  187. package/dist/rules/no-electron-unrestricted-navigation.d.ts +5 -0
  188. package/dist/rules/no-electron-unrestricted-navigation.d.ts.map +1 -0
  189. package/dist/rules/no-electron-unrestricted-navigation.js +100 -0
  190. package/dist/rules/no-electron-unrestricted-navigation.js.map +1 -0
  191. package/dist/rules/no-electron-untrusted-open-external.d.ts +5 -0
  192. package/dist/rules/no-electron-untrusted-open-external.d.ts.map +1 -0
  193. package/dist/rules/no-electron-untrusted-open-external.js +92 -0
  194. package/dist/rules/no-electron-untrusted-open-external.js.map +1 -0
  195. package/dist/rules/no-electron-webview-allowpopups.d.ts +5 -0
  196. package/dist/rules/no-electron-webview-allowpopups.d.ts.map +1 -0
  197. package/dist/rules/no-electron-webview-allowpopups.js +85 -0
  198. package/dist/rules/no-electron-webview-allowpopups.js.map +1 -0
  199. package/dist/rules/no-electron-webview-insecure-webpreferences.d.ts +5 -0
  200. package/dist/rules/no-electron-webview-insecure-webpreferences.d.ts.map +1 -0
  201. package/dist/rules/no-electron-webview-insecure-webpreferences.js +88 -0
  202. package/dist/rules/no-electron-webview-insecure-webpreferences.js.map +1 -0
  203. package/dist/rules/no-electron-webview-node-integration.d.ts +5 -0
  204. package/dist/rules/no-electron-webview-node-integration.d.ts.map +1 -0
  205. package/dist/rules/no-electron-webview-node-integration.js +107 -0
  206. package/dist/rules/no-electron-webview-node-integration.js.map +1 -0
  207. package/dist/rules/no-html-method.d.ts +5 -0
  208. package/dist/rules/no-html-method.d.ts.map +1 -0
  209. package/dist/rules/no-html-method.js +42 -0
  210. package/dist/rules/no-html-method.js.map +1 -0
  211. package/dist/rules/no-http-request-to-insecure-protocol.d.ts +5 -0
  212. package/dist/rules/no-http-request-to-insecure-protocol.d.ts.map +1 -0
  213. package/dist/rules/no-http-request-to-insecure-protocol.js +94 -0
  214. package/dist/rules/no-http-request-to-insecure-protocol.js.map +1 -0
  215. package/dist/rules/no-iframe-srcdoc.d.ts +5 -0
  216. package/dist/rules/no-iframe-srcdoc.d.ts.map +1 -0
  217. package/dist/rules/no-iframe-srcdoc.js +144 -0
  218. package/dist/rules/no-iframe-srcdoc.js.map +1 -0
  219. package/dist/rules/no-inner-html.d.ts +5 -0
  220. package/dist/rules/no-inner-html.d.ts.map +1 -0
  221. package/dist/rules/no-inner-html.js +67 -0
  222. package/dist/rules/no-inner-html.js.map +1 -0
  223. package/dist/rules/no-insecure-random.d.ts +5 -0
  224. package/dist/rules/no-insecure-random.d.ts.map +1 -0
  225. package/dist/rules/no-insecure-random.js +95 -0
  226. package/dist/rules/no-insecure-random.js.map +1 -0
  227. package/dist/rules/no-insecure-tls-agent-options.d.ts +5 -0
  228. package/dist/rules/no-insecure-tls-agent-options.d.ts.map +1 -0
  229. package/dist/rules/no-insecure-tls-agent-options.js +73 -0
  230. package/dist/rules/no-insecure-tls-agent-options.js.map +1 -0
  231. package/dist/rules/no-insecure-url.d.ts +12 -0
  232. package/dist/rules/no-insecure-url.d.ts.map +1 -0
  233. package/dist/rules/no-insecure-url.js +142 -0
  234. package/dist/rules/no-insecure-url.js.map +1 -0
  235. package/dist/rules/no-location-javascript-url.d.ts +5 -0
  236. package/dist/rules/no-location-javascript-url.d.ts.map +1 -0
  237. package/dist/rules/no-location-javascript-url.js +98 -0
  238. package/dist/rules/no-location-javascript-url.js.map +1 -0
  239. package/dist/rules/no-message-event-without-origin-check.d.ts +5 -0
  240. package/dist/rules/no-message-event-without-origin-check.d.ts.map +1 -0
  241. package/dist/rules/no-message-event-without-origin-check.js +183 -0
  242. package/dist/rules/no-message-event-without-origin-check.js.map +1 -0
  243. package/dist/rules/no-msapp-exec-unsafe.d.ts +5 -0
  244. package/dist/rules/no-msapp-exec-unsafe.d.ts.map +1 -0
  245. package/dist/rules/no-msapp-exec-unsafe.js +32 -0
  246. package/dist/rules/no-msapp-exec-unsafe.js.map +1 -0
  247. package/dist/rules/no-node-tls-check-server-identity-bypass.d.ts +5 -0
  248. package/dist/rules/no-node-tls-check-server-identity-bypass.d.ts.map +1 -0
  249. package/dist/rules/no-node-tls-check-server-identity-bypass.js +95 -0
  250. package/dist/rules/no-node-tls-check-server-identity-bypass.js.map +1 -0
  251. package/dist/rules/no-node-tls-legacy-protocol.d.ts +5 -0
  252. package/dist/rules/no-node-tls-legacy-protocol.d.ts.map +1 -0
  253. package/dist/rules/no-node-tls-legacy-protocol.js +106 -0
  254. package/dist/rules/no-node-tls-legacy-protocol.js.map +1 -0
  255. package/dist/rules/no-node-tls-reject-unauthorized-zero.d.ts +5 -0
  256. package/dist/rules/no-node-tls-reject-unauthorized-zero.d.ts.map +1 -0
  257. package/dist/rules/no-node-tls-reject-unauthorized-zero.js +93 -0
  258. package/dist/rules/no-node-tls-reject-unauthorized-zero.js.map +1 -0
  259. package/dist/rules/no-node-tls-security-level-zero.d.ts +5 -0
  260. package/dist/rules/no-node-tls-security-level-zero.d.ts.map +1 -0
  261. package/dist/rules/no-node-tls-security-level-zero.js +80 -0
  262. package/dist/rules/no-node-tls-security-level-zero.js.map +1 -0
  263. package/dist/rules/no-node-vm-run-in-context.d.ts +5 -0
  264. package/dist/rules/no-node-vm-run-in-context.d.ts.map +1 -0
  265. package/dist/rules/no-node-vm-run-in-context.js +186 -0
  266. package/dist/rules/no-node-vm-run-in-context.js.map +1 -0
  267. package/dist/rules/no-node-vm-source-text-module.d.ts +5 -0
  268. package/dist/rules/no-node-vm-source-text-module.d.ts.map +1 -0
  269. package/dist/rules/no-node-vm-source-text-module.js +126 -0
  270. package/dist/rules/no-node-vm-source-text-module.js.map +1 -0
  271. package/dist/rules/no-node-worker-threads-eval.d.ts +5 -0
  272. package/dist/rules/no-node-worker-threads-eval.d.ts.map +1 -0
  273. package/dist/rules/no-node-worker-threads-eval.js +151 -0
  274. package/dist/rules/no-node-worker-threads-eval.js.map +1 -0
  275. package/dist/rules/no-nonnull-assertion-on-security-input.d.ts +5 -0
  276. package/dist/rules/no-nonnull-assertion-on-security-input.d.ts.map +1 -0
  277. package/dist/rules/no-nonnull-assertion-on-security-input.js +48 -0
  278. package/dist/rules/no-nonnull-assertion-on-security-input.js.map +1 -0
  279. package/dist/rules/no-postmessage-star-origin.d.ts +5 -0
  280. package/dist/rules/no-postmessage-star-origin.d.ts.map +1 -0
  281. package/dist/rules/no-postmessage-star-origin.js +58 -0
  282. package/dist/rules/no-postmessage-star-origin.js.map +1 -0
  283. package/dist/rules/no-postmessage-without-origin-allowlist.d.ts +5 -0
  284. package/dist/rules/no-postmessage-without-origin-allowlist.d.ts.map +1 -0
  285. package/dist/rules/no-postmessage-without-origin-allowlist.js +80 -0
  286. package/dist/rules/no-postmessage-without-origin-allowlist.js.map +1 -0
  287. package/dist/rules/no-range-create-contextual-fragment.d.ts +5 -0
  288. package/dist/rules/no-range-create-contextual-fragment.d.ts.map +1 -0
  289. package/dist/rules/no-range-create-contextual-fragment.js +64 -0
  290. package/dist/rules/no-range-create-contextual-fragment.js.map +1 -0
  291. package/dist/rules/no-script-src-data-url.d.ts +5 -0
  292. package/dist/rules/no-script-src-data-url.d.ts.map +1 -0
  293. package/dist/rules/no-script-src-data-url.js +108 -0
  294. package/dist/rules/no-script-src-data-url.js.map +1 -0
  295. package/dist/rules/no-script-text.d.ts +5 -0
  296. package/dist/rules/no-script-text.d.ts.map +1 -0
  297. package/dist/rules/no-script-text.js +52 -0
  298. package/dist/rules/no-script-text.js.map +1 -0
  299. package/dist/rules/no-service-worker-unsafe-script-url.d.ts +5 -0
  300. package/dist/rules/no-service-worker-unsafe-script-url.d.ts.map +1 -0
  301. package/dist/rules/no-service-worker-unsafe-script-url.js +52 -0
  302. package/dist/rules/no-service-worker-unsafe-script-url.js.map +1 -0
  303. package/dist/rules/no-set-html-unsafe.d.ts +5 -0
  304. package/dist/rules/no-set-html-unsafe.d.ts.map +1 -0
  305. package/dist/rules/no-set-html-unsafe.js +48 -0
  306. package/dist/rules/no-set-html-unsafe.js.map +1 -0
  307. package/dist/rules/no-trusted-types-policy-pass-through.d.ts +5 -0
  308. package/dist/rules/no-trusted-types-policy-pass-through.d.ts.map +1 -0
  309. package/dist/rules/no-trusted-types-policy-pass-through.js +115 -0
  310. package/dist/rules/no-trusted-types-policy-pass-through.js.map +1 -0
  311. package/dist/rules/no-unsafe-alloc.d.ts +5 -0
  312. package/dist/rules/no-unsafe-alloc.d.ts.map +1 -0
  313. package/dist/rules/no-unsafe-alloc.js +51 -0
  314. package/dist/rules/no-unsafe-alloc.js.map +1 -0
  315. package/dist/rules/no-unsafe-cast-to-trusted-types.d.ts +5 -0
  316. package/dist/rules/no-unsafe-cast-to-trusted-types.d.ts.map +1 -0
  317. package/dist/rules/no-unsafe-cast-to-trusted-types.js +89 -0
  318. package/dist/rules/no-unsafe-cast-to-trusted-types.js.map +1 -0
  319. package/dist/rules/no-window-open-without-noopener.d.ts +5 -0
  320. package/dist/rules/no-window-open-without-noopener.d.ts.map +1 -0
  321. package/dist/rules/no-window-open-without-noopener.js +84 -0
  322. package/dist/rules/no-window-open-without-noopener.js.map +1 -0
  323. package/dist/rules/no-winjs-html-unsafe.d.ts +5 -0
  324. package/dist/rules/no-winjs-html-unsafe.d.ts.map +1 -0
  325. package/dist/rules/no-winjs-html-unsafe.js +32 -0
  326. package/dist/rules/no-winjs-html-unsafe.js.map +1 -0
  327. package/dist/rules/no-worker-blob-url.d.ts +5 -0
  328. package/dist/rules/no-worker-blob-url.d.ts.map +1 -0
  329. package/dist/rules/no-worker-blob-url.js +64 -0
  330. package/dist/rules/no-worker-blob-url.js.map +1 -0
  331. package/dist/rules/no-worker-data-url.d.ts +5 -0
  332. package/dist/rules/no-worker-data-url.d.ts.map +1 -0
  333. package/dist/rules/no-worker-data-url.js +67 -0
  334. package/dist/rules/no-worker-data-url.js.map +1 -0
  335. package/docs/rules/getting-started.md +70 -0
  336. package/docs/rules/no-angular-bypass-sanitizer.md +69 -0
  337. package/docs/rules/no-angular-bypass-security-trust-html.md +59 -0
  338. package/docs/rules/no-angular-innerhtml-binding.md +59 -0
  339. package/docs/rules/no-angular-sanitization-trusted-urls.md +64 -0
  340. package/docs/rules/no-angularjs-bypass-sce.md +64 -0
  341. package/docs/rules/no-angularjs-enable-svg.md +59 -0
  342. package/docs/rules/no-angularjs-ng-bind-html-without-sanitize.md +59 -0
  343. package/docs/rules/no-angularjs-sanitization-whitelist.md +63 -0
  344. package/docs/rules/no-angularjs-sce-resource-url-wildcard.md +62 -0
  345. package/docs/rules/no-child-process-exec.md +101 -0
  346. package/docs/rules/no-child-process-shell-true.md +59 -0
  347. package/docs/rules/no-cookies.md +61 -0
  348. package/docs/rules/no-document-domain.md +59 -0
  349. package/docs/rules/no-document-execcommand-insert-html.md +69 -0
  350. package/docs/rules/no-document-parse-html-unsafe.md +72 -0
  351. package/docs/rules/no-document-write.md +64 -0
  352. package/docs/rules/no-domparser-html-without-sanitization.md +59 -0
  353. package/docs/rules/no-domparser-svg-without-sanitization.md +71 -0
  354. package/docs/rules/no-dynamic-import-unsafe-url.md +81 -0
  355. package/docs/rules/no-electron-allow-running-insecure-content.md +69 -0
  356. package/docs/rules/no-electron-dangerous-blink-features.md +77 -0
  357. package/docs/rules/no-electron-disable-context-isolation.md +69 -0
  358. package/docs/rules/no-electron-disable-sandbox.md +69 -0
  359. package/docs/rules/no-electron-disable-web-security.md +69 -0
  360. package/docs/rules/no-electron-enable-remote-module.md +69 -0
  361. package/docs/rules/no-electron-enable-webview-tag.md +77 -0
  362. package/docs/rules/no-electron-experimental-features.md +77 -0
  363. package/docs/rules/no-electron-expose-raw-ipc-renderer.md +79 -0
  364. package/docs/rules/no-electron-insecure-certificate-error-handler.md +72 -0
  365. package/docs/rules/no-electron-insecure-certificate-verify-proc.md +63 -0
  366. package/docs/rules/no-electron-insecure-permission-request-handler.md +67 -0
  367. package/docs/rules/no-electron-node-integration.md +70 -0
  368. package/docs/rules/no-electron-permission-check-handler-allow-all.md +66 -0
  369. package/docs/rules/no-electron-unchecked-ipc-sender.md +62 -0
  370. package/docs/rules/no-electron-unrestricted-navigation.md +64 -0
  371. package/docs/rules/no-electron-untrusted-open-external.md +65 -0
  372. package/docs/rules/no-electron-webview-allowpopups.md +59 -0
  373. package/docs/rules/no-electron-webview-insecure-webpreferences.md +84 -0
  374. package/docs/rules/no-electron-webview-node-integration.md +59 -0
  375. package/docs/rules/no-html-method.md +58 -0
  376. package/docs/rules/no-http-request-to-insecure-protocol.md +59 -0
  377. package/docs/rules/no-iframe-srcdoc.md +76 -0
  378. package/docs/rules/no-inner-html.md +65 -0
  379. package/docs/rules/no-insecure-random.md +66 -0
  380. package/docs/rules/no-insecure-tls-agent-options.md +59 -0
  381. package/docs/rules/no-insecure-url.md +72 -0
  382. package/docs/rules/no-location-javascript-url.md +59 -0
  383. package/docs/rules/no-message-event-without-origin-check.md +82 -0
  384. package/docs/rules/no-msapp-exec-unsafe.md +59 -0
  385. package/docs/rules/no-node-tls-check-server-identity-bypass.md +88 -0
  386. package/docs/rules/no-node-tls-legacy-protocol.md +80 -0
  387. package/docs/rules/no-node-tls-reject-unauthorized-zero.md +61 -0
  388. package/docs/rules/no-node-tls-security-level-zero.md +77 -0
  389. package/docs/rules/no-node-vm-run-in-context.md +89 -0
  390. package/docs/rules/no-node-vm-source-text-module.md +79 -0
  391. package/docs/rules/no-node-worker-threads-eval.md +82 -0
  392. package/docs/rules/no-nonnull-assertion-on-security-input.md +59 -0
  393. package/docs/rules/no-postmessage-star-origin.md +59 -0
  394. package/docs/rules/no-postmessage-without-origin-allowlist.md +59 -0
  395. package/docs/rules/no-range-create-contextual-fragment.md +64 -0
  396. package/docs/rules/no-script-src-data-url.md +83 -0
  397. package/docs/rules/no-script-text.md +80 -0
  398. package/docs/rules/no-service-worker-unsafe-script-url.md +85 -0
  399. package/docs/rules/no-set-html-unsafe.md +64 -0
  400. package/docs/rules/no-trusted-types-policy-pass-through.md +68 -0
  401. package/docs/rules/no-unsafe-alloc.md +62 -0
  402. package/docs/rules/no-unsafe-cast-to-trusted-types.md +59 -0
  403. package/docs/rules/no-window-open-without-noopener.md +63 -0
  404. package/docs/rules/no-winjs-html-unsafe.md +60 -0
  405. package/docs/rules/no-worker-blob-url.md +86 -0
  406. package/docs/rules/no-worker-data-url.md +85 -0
  407. package/docs/rules/overview.md +111 -0
  408. package/docs/rules/presets/angular.md +35 -0
  409. package/docs/rules/presets/angularjs.md +36 -0
  410. package/docs/rules/presets/common.md +59 -0
  411. package/docs/rules/presets/electron.md +51 -0
  412. package/docs/rules/presets/index.md +26 -0
  413. package/docs/rules/presets/node.md +43 -0
  414. package/docs/rules/presets/react.md +33 -0
  415. package/docs/rules/presets/recommended.md +104 -0
  416. package/docs/rules/presets/required.md +99 -0
  417. package/docs/rules/presets/typescript.md +34 -0
  418. package/package.json +583 -0
@@ -0,0 +1,69 @@
1
+ # no-electron-allow-running-insecure-content
2
+
3
+ Disallow enabling Electron `webPreferences.allowRunningInsecureContent`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.allowRunningInsecureContent` to `true`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.allowRunningInsecureContent: true` in Electron
13
+ renderer configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Allowing insecure content weakens transport guarantees and allows mixed-content
18
+ execution in renderer processes.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```ts
23
+ new BrowserWindow({
24
+ webPreferences: {
25
+ allowRunningInsecureContent: true,
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```ts
33
+ new BrowserWindow({
34
+ webPreferences: {
35
+ allowRunningInsecureContent: false,
36
+ },
37
+ });
38
+ ```
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import sdl from "eslint-plugin-sdl-2";
44
+
45
+ export default [
46
+ {
47
+ plugins: { sdl },
48
+ rules: {
49
+ "sdl/no-electron-allow-running-insecure-content": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ Disable only if your renderer never loads network content and your runtime has
58
+ strict isolation controls documented outside this rule.
59
+
60
+ ## Package documentation
61
+
62
+ - [Rule source](../../src/rules/no-electron-allow-running-insecure-content.ts)
63
+
64
+ ## Further reading
65
+
66
+ > **Rule catalog ID:** R009
67
+
68
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
69
+ - [Electron BrowserWindow webPreferences](https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions)
@@ -0,0 +1,77 @@
1
+ # no-electron-dangerous-blink-features
2
+
3
+ Disallow enabling Blink runtime features through Electron `webPreferences.enableBlinkFeatures`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.enableBlinkFeatures` to a non-empty static string.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports non-empty `enableBlinkFeatures` values in `webPreferences`
13
+ objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ `enableBlinkFeatures` turns on Chromium/Blink runtime feature flags. Enabling
18
+ extra features in production renderer contexts can increase attack surface and
19
+ weaken predictable browser hardening.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```ts
24
+ new BrowserWindow({
25
+ webPreferences: {
26
+ enableBlinkFeatures: "CSSVariables,LayoutNG",
27
+ },
28
+ });
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```ts
34
+ new BrowserWindow({
35
+ webPreferences: {
36
+ enableBlinkFeatures: "",
37
+ },
38
+ });
39
+
40
+ new BrowserWindow({
41
+ webPreferences: {
42
+ contextIsolation: true,
43
+ sandbox: true,
44
+ },
45
+ });
46
+ ```
47
+
48
+ ## ESLint flat config example
49
+
50
+ ```ts
51
+ import sdl from "eslint-plugin-sdl-2";
52
+
53
+ export default [
54
+ {
55
+ plugins: { sdl },
56
+ rules: {
57
+ "sdl/no-electron-dangerous-blink-features": "error",
58
+ },
59
+ },
60
+ ];
61
+ ```
62
+
63
+ ## When not to use it
64
+
65
+ Disable if your application has reviewed, tightly scoped, and well-documented
66
+ Blink feature requirements with compensating security controls.
67
+
68
+ ## Package documentation
69
+
70
+ - [Rule source](../../src/rules/no-electron-dangerous-blink-features.ts)
71
+
72
+ ## Further reading
73
+
74
+ > **Rule catalog ID:** R010
75
+
76
+ - [Electron BrowserWindow webPreferences](https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions)
77
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
@@ -0,0 +1,69 @@
1
+ # no-electron-disable-context-isolation
2
+
3
+ Disallow disabling Electron `webPreferences.contextIsolation`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.contextIsolation` to `false`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.contextIsolation: false` in Electron renderer
13
+ configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Disabling context isolation collapses separation between preload and renderer
18
+ contexts, increasing exposure of privileged APIs.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```ts
23
+ new BrowserWindow({
24
+ webPreferences: {
25
+ contextIsolation: false,
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```ts
33
+ new BrowserWindow({
34
+ webPreferences: {
35
+ contextIsolation: true,
36
+ },
37
+ });
38
+ ```
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import sdl from "eslint-plugin-sdl-2";
44
+
45
+ export default [
46
+ {
47
+ plugins: { sdl },
48
+ rules: {
49
+ "sdl/no-electron-disable-context-isolation": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ Disable only for legacy renderer code that cannot migrate yet and is protected
58
+ with strict, documented compensating controls.
59
+
60
+ ## Package documentation
61
+
62
+ - [Rule source](../../src/rules/no-electron-disable-context-isolation.ts)
63
+
64
+ ## Further reading
65
+
66
+ > **Rule catalog ID:** R011
67
+
68
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
69
+ - [Electron context isolation](https://www.electronjs.org/docs/latest/tutorial/context-isolation)
@@ -0,0 +1,69 @@
1
+ # no-electron-disable-sandbox
2
+
3
+ Disallow disabling Electron renderer sandboxing in `webPreferences`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.sandbox` to `false`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.sandbox: false` in Electron renderer
13
+ configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Renderer sandboxing limits process privileges and helps contain renderer
18
+ compromise impact.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```ts
23
+ new BrowserWindow({
24
+ webPreferences: {
25
+ sandbox: false,
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```ts
33
+ new BrowserWindow({
34
+ webPreferences: {
35
+ sandbox: true,
36
+ },
37
+ });
38
+ ```
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import sdl from "eslint-plugin-sdl-2";
44
+
45
+ export default [
46
+ {
47
+ plugins: { sdl },
48
+ rules: {
49
+ "sdl/no-electron-disable-sandbox": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ Disable only while migrating legacy renderer code, and only with explicit risk
58
+ acceptance and compensating controls.
59
+
60
+ ## Package documentation
61
+
62
+ - [Rule source](../../src/rules/no-electron-disable-sandbox.ts)
63
+
64
+ ## Further reading
65
+
66
+ > **Rule catalog ID:** R012
67
+
68
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
69
+ - [Electron process sandboxing](https://www.electronjs.org/docs/latest/tutorial/sandbox)
@@ -0,0 +1,69 @@
1
+ # no-electron-disable-web-security
2
+
3
+ Disallow disabling Electron `webPreferences.webSecurity` for renderer contexts.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.webSecurity` to `false`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.webSecurity: false` in Electron renderer
13
+ configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Turning off `webSecurity` removes browser-origin protections and expands the
18
+ attack surface for untrusted renderer content.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```ts
23
+ new BrowserWindow({
24
+ webPreferences: {
25
+ webSecurity: false,
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```ts
33
+ new BrowserWindow({
34
+ webPreferences: {
35
+ webSecurity: true,
36
+ },
37
+ });
38
+ ```
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import sdl from "eslint-plugin-sdl-2";
44
+
45
+ export default [
46
+ {
47
+ plugins: { sdl },
48
+ rules: {
49
+ "sdl/no-electron-disable-web-security": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ Disable only for tightly controlled offline renderer scenarios with explicit
58
+ compensating controls and no untrusted content.
59
+
60
+ ## Package documentation
61
+
62
+ - [Rule source](../../src/rules/no-electron-disable-web-security.ts)
63
+
64
+ ## Further reading
65
+
66
+ > **Rule catalog ID:** R013
67
+
68
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
69
+ - [Electron BrowserWindow webPreferences](https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions)
@@ -0,0 +1,69 @@
1
+ # no-electron-enable-remote-module
2
+
3
+ Disallow enabling Electron `webPreferences.enableRemoteModule`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.enableRemoteModule` to `true`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.enableRemoteModule: true` in Electron
13
+ renderer configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Enabling the remote module expands renderer access to privileged main-process
18
+ capabilities and weakens isolation boundaries.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```ts
23
+ new BrowserWindow({
24
+ webPreferences: {
25
+ enableRemoteModule: true,
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```ts
33
+ new BrowserWindow({
34
+ webPreferences: {
35
+ enableRemoteModule: false,
36
+ },
37
+ });
38
+ ```
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import sdl from "eslint-plugin-sdl-2";
44
+
45
+ export default [
46
+ {
47
+ plugins: { sdl },
48
+ rules: {
49
+ "sdl/no-electron-enable-remote-module": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ Disable only for legacy Electron versions where remote cannot be removed yet,
58
+ with strict migration and deprecation plans.
59
+
60
+ ## Package documentation
61
+
62
+ - [Rule source](../../src/rules/no-electron-enable-remote-module.ts)
63
+
64
+ ## Further reading
65
+
66
+ > **Rule catalog ID:** R014
67
+
68
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
69
+ - [Electron BrowserWindow webPreferences](https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions)
@@ -0,0 +1,77 @@
1
+ # no-electron-enable-webview-tag
2
+
3
+ Disallow enabling Electron `webPreferences.webviewTag`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.webviewTag` to `true`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.webviewTag: true` in Electron renderer
13
+ configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Electron recommends avoiding `webview` unless absolutely necessary. Enabling the
18
+ `webviewTag` opt-in expands renderer capabilities and can make isolation harder
19
+ to reason about.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```ts
24
+ new BrowserWindow({
25
+ webPreferences: {
26
+ webviewTag: true,
27
+ },
28
+ });
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```ts
34
+ new BrowserWindow({
35
+ webPreferences: {
36
+ webviewTag: false,
37
+ },
38
+ });
39
+ ```
40
+
41
+ ## Behavior and migration notes
42
+
43
+ This rule includes an autofix for literal boolean values.
44
+
45
+ - `webviewTag: true` is rewritten to `webviewTag: false`.
46
+
47
+ ## ESLint flat config example
48
+
49
+ ```ts
50
+ import sdl from "eslint-plugin-sdl-2";
51
+
52
+ export default [
53
+ {
54
+ plugins: { sdl },
55
+
56
+ rules: {
57
+ "sdl/no-electron-enable-webview-tag": "error",
58
+ },
59
+ },
60
+ ];
61
+ ```
62
+
63
+ ## When not to use it
64
+
65
+ Disable only if your Electron application has a reviewed webview threat model
66
+ and cannot migrate away from `webviewTag` yet.
67
+
68
+ ## Package documentation
69
+
70
+ - [Rule source](../../src/rules/no-electron-enable-webview-tag.ts)
71
+
72
+ ## Further reading
73
+
74
+ > **Rule catalog ID:** R047
75
+
76
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
77
+ - [Electron `<webview>` tag](https://www.electronjs.org/docs/latest/api/webview-tag)
@@ -0,0 +1,77 @@
1
+ # no-electron-experimental-features
2
+
3
+ Disallow enabling Electron `webPreferences.experimentalFeatures`.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule targets Electron `BrowserWindow` and `BrowserView` constructor options
8
+ that set `webPreferences.experimentalFeatures` to `true`.
9
+
10
+ ## What this rule reports
11
+
12
+ This rule reports `webPreferences.experimentalFeatures: true` in Electron
13
+ renderer configuration objects.
14
+
15
+ ## Why this rule exists
16
+
17
+ Electron recommends disabling experimental platform features in production
18
+ renderers because they expand the runtime surface area and can bypass hardening
19
+ assumptions.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```ts
24
+ new BrowserWindow({
25
+ webPreferences: {
26
+ experimentalFeatures: true,
27
+ },
28
+ });
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```ts
34
+ new BrowserWindow({
35
+ webPreferences: {
36
+ experimentalFeatures: false,
37
+ },
38
+ });
39
+ ```
40
+
41
+ ## Behavior and migration notes
42
+
43
+ This rule includes an autofix for literal boolean values.
44
+
45
+ - `experimentalFeatures: true` is rewritten to `experimentalFeatures: false`.
46
+
47
+ ## ESLint flat config example
48
+
49
+ ```ts
50
+ import sdl from "eslint-plugin-sdl-2";
51
+
52
+ export default [
53
+ {
54
+ plugins: { sdl },
55
+
56
+ rules: {
57
+ "sdl/no-electron-experimental-features": "error",
58
+ },
59
+ },
60
+ ];
61
+ ```
62
+
63
+ ## When not to use it
64
+
65
+ Disable only for short-lived experiments that explicitly require Electron
66
+ experimental features and are isolated behind documented review gates.
67
+
68
+ ## Package documentation
69
+
70
+ - [Rule source](../../src/rules/no-electron-experimental-features.ts)
71
+
72
+ ## Further reading
73
+
74
+ > **Rule catalog ID:** R046
75
+
76
+ - [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security)
77
+ - [Electron BrowserWindow webPreferences](https://www.electronjs.org/docs/latest/api/browser-window#new-browserwindowoptions)
@@ -0,0 +1,79 @@
1
+ # no-electron-expose-raw-ipc-renderer
2
+
3
+ Disallow exposing raw Electron `ipcRenderer` objects or methods through
4
+ `contextBridge` APIs.
5
+
6
+ ## Targeted pattern scope
7
+
8
+ This rule targets `contextBridge.exposeInMainWorld(...)` and
9
+ `contextBridge.exposeInIsolatedWorld(...)` calls that expose:
10
+
11
+ - `ipcRenderer` directly, or
12
+ - object properties that directly reference raw `ipcRenderer` methods.
13
+
14
+ ## What this rule reports
15
+
16
+ This rule reports preload bridge exports that hand renderer code a direct IPC
17
+ primitive instead of a narrow wrapper API.
18
+
19
+ ## Why this rule exists
20
+
21
+ Exposing raw IPC primitives to untrusted renderer code weakens the preload
22
+ boundary. A narrow wrapper API allows the preload layer to validate channels,
23
+ arguments, and return values before crossing trust boundaries.
24
+
25
+ ## ❌ Incorrect
26
+
27
+ ```ts
28
+ contextBridge.exposeInMainWorld("api", {
29
+ send: ipcRenderer.send,
30
+ invoke: ipcRenderer.invoke,
31
+ });
32
+ ```
33
+
34
+ ## ✅ Correct
35
+
36
+ ```ts
37
+ contextBridge.exposeInMainWorld("api", {
38
+ sendSettingsUpdate(payload: SettingsPayload) {
39
+ ipcRenderer.send("settings:update", payload);
40
+ },
41
+ });
42
+ ```
43
+
44
+ ## Behavior and migration notes
45
+
46
+ This rule does not autofix because the correct preload wrapper shape depends on
47
+ the channels and validation logic your application requires.
48
+
49
+ ## ESLint flat config example
50
+
51
+ ```ts
52
+ import sdl from "eslint-plugin-sdl-2";
53
+
54
+ export default [
55
+ {
56
+ plugins: { sdl },
57
+
58
+ rules: {
59
+ "sdl/no-electron-expose-raw-ipc-renderer": "error",
60
+ },
61
+ },
62
+ ];
63
+ ```
64
+
65
+ ## When not to use it
66
+
67
+ Disable only if the exposed IPC surface is intentionally raw, fully reviewed,
68
+ and protected by application-specific controls outside the preload bridge.
69
+
70
+ ## Package documentation
71
+
72
+ - [Rule source](../../src/rules/no-electron-expose-raw-ipc-renderer.ts)
73
+
74
+ ## Further reading
75
+
76
+ > **Rule catalog ID:** R049
77
+
78
+ - [Electron context isolation](https://www.electronjs.org/docs/latest/tutorial/context-isolation)
79
+ - [Electron contextBridge](https://www.electronjs.org/docs/latest/api/context-bridge)