@blumintinc/eslint-plugin-blumint 1.12.6 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +171 -99
  2. package/lib/index.js +300 -17
  3. package/lib/rules/array-methods-this-context.js +20 -2
  4. package/lib/rules/avoid-utils-directory.js +11 -2
  5. package/lib/rules/class-methods-read-top-to-bottom.js +24 -5
  6. package/lib/rules/consistent-callback-naming.js +1 -1
  7. package/lib/rules/dynamic-https-errors.d.ts +3 -1
  8. package/lib/rules/dynamic-https-errors.js +48 -11
  9. package/lib/rules/enforce-assert-safe-object-key.d.ts +8 -0
  10. package/lib/rules/{enforce-assertSafe-object-key.js → enforce-assert-safe-object-key.js} +52 -96
  11. package/lib/rules/enforce-assert-throws.d.ts +3 -1
  12. package/lib/rules/enforce-assert-throws.js +493 -51
  13. package/lib/rules/enforce-boolean-naming-prefixes.d.ts +3 -1
  14. package/lib/rules/enforce-boolean-naming-prefixes.js +820 -39
  15. package/lib/rules/enforce-callable-types.js +4 -4
  16. package/lib/rules/enforce-callback-memo.js +143 -18
  17. package/lib/rules/enforce-centralized-mock-firestore.js +5 -2
  18. package/lib/rules/enforce-console-error.d.ts +3 -0
  19. package/lib/rules/enforce-console-error.js +278 -0
  20. package/lib/rules/enforce-css-media-queries.js +24 -46
  21. package/lib/rules/enforce-dynamic-file-naming.d.ts +2 -0
  22. package/lib/rules/enforce-dynamic-file-naming.js +53 -28
  23. package/lib/rules/enforce-dynamic-firebase-imports.js +100 -19
  24. package/lib/rules/enforce-dynamic-imports.js +1 -1
  25. package/lib/rules/enforce-early-destructuring.d.ts +2 -0
  26. package/lib/rules/enforce-early-destructuring.js +980 -0
  27. package/lib/rules/enforce-empty-object-check.d.ts +11 -0
  28. package/lib/rules/enforce-empty-object-check.js +502 -0
  29. package/lib/rules/enforce-exported-function-types.js +4 -4
  30. package/lib/rules/enforce-fieldpath-syntax-in-docsetter.d.ts +2 -0
  31. package/lib/rules/enforce-fieldpath-syntax-in-docsetter.js +262 -0
  32. package/lib/rules/enforce-firestore-doc-ref-generic.js +350 -3
  33. package/lib/rules/enforce-firestore-facade.js +349 -157
  34. package/lib/rules/enforce-firestore-rules-get-access.d.ts +3 -0
  35. package/lib/rules/enforce-firestore-rules-get-access.js +109 -0
  36. package/lib/rules/enforce-firestore-set-merge.js +3 -4
  37. package/lib/rules/enforce-global-constants.d.ts +4 -1
  38. package/lib/rules/enforce-global-constants.js +240 -12
  39. package/lib/rules/enforce-identifiable-firestore-type.js +108 -58
  40. package/lib/rules/enforce-memoize-async.d.ts +2 -1
  41. package/lib/rules/enforce-memoize-async.js +92 -27
  42. package/lib/rules/enforce-memoize-getters.d.ts +3 -0
  43. package/lib/rules/enforce-memoize-getters.js +147 -0
  44. package/lib/rules/enforce-microdiff.js +3 -2
  45. package/lib/rules/enforce-object-literal-as-const.js +4 -4
  46. package/lib/rules/enforce-positive-naming.js +9 -7
  47. package/lib/rules/enforce-props-argument-name.d.ts +2 -7
  48. package/lib/rules/enforce-props-argument-name.js +165 -151
  49. package/lib/rules/enforce-props-naming-consistency.d.ts +2 -0
  50. package/lib/rules/enforce-props-naming-consistency.js +145 -0
  51. package/lib/rules/enforce-querykey-ts.d.ts +9 -0
  52. package/lib/rules/enforce-querykey-ts.js +274 -0
  53. package/lib/rules/enforce-safe-stringify.js +1 -1
  54. package/lib/rules/enforce-serializable-params.js +3 -3
  55. package/lib/rules/enforce-singular-type-names.js +10 -6
  56. package/lib/rules/enforce-stable-hash-spread-props.d.ts +13 -0
  57. package/lib/rules/enforce-stable-hash-spread-props.js +342 -0
  58. package/lib/rules/enforce-storage-context.d.ts +9 -0
  59. package/lib/rules/enforce-storage-context.js +646 -0
  60. package/lib/rules/enforce-timestamp-now.js +23 -7
  61. package/lib/rules/enforce-transform-memoization.d.ts +4 -0
  62. package/lib/rules/enforce-transform-memoization.js +416 -0
  63. package/lib/rules/enforce-typescript-markdown-code-blocks.d.ts +1 -0
  64. package/lib/rules/enforce-typescript-markdown-code-blocks.js +100 -0
  65. package/lib/rules/enforce-unique-cursor-headers.d.ts +16 -0
  66. package/lib/rules/enforce-unique-cursor-headers.js +365 -0
  67. package/lib/rules/enforce-verb-noun-naming.js +90 -14
  68. package/lib/rules/ensure-pointer-events-none.js +28 -2
  69. package/lib/rules/export-if-in-doubt.js +27 -4
  70. package/lib/rules/extract-global-constants.js +92 -53
  71. package/lib/rules/fast-deep-equal-over-microdiff.d.ts +2 -1
  72. package/lib/rules/fast-deep-equal-over-microdiff.js +351 -83
  73. package/lib/rules/firestore-transaction-reads-before-writes.d.ts +1 -0
  74. package/lib/rules/firestore-transaction-reads-before-writes.js +277 -0
  75. package/lib/rules/flatten-push-calls.d.ts +2 -0
  76. package/lib/rules/flatten-push-calls.js +428 -0
  77. package/lib/rules/generic-starts-with-t.js +8 -2
  78. package/lib/rules/global-const-style.js +50 -19
  79. package/lib/rules/jsdoc-above-field.d.ts +11 -0
  80. package/lib/rules/jsdoc-above-field.js +208 -0
  81. package/lib/rules/key-only-outermost-element.js +21 -3
  82. package/lib/rules/logical-top-to-bottom-grouping.d.ts +5 -0
  83. package/lib/rules/logical-top-to-bottom-grouping.js +1258 -0
  84. package/lib/rules/memo-compare-deeply-complex-props.d.ts +3 -0
  85. package/lib/rules/memo-compare-deeply-complex-props.js +788 -0
  86. package/lib/rules/memo-nested-react-components.d.ts +8 -0
  87. package/lib/rules/memo-nested-react-components.js +410 -0
  88. package/lib/rules/memoize-root-level-hocs.d.ts +7 -0
  89. package/lib/rules/memoize-root-level-hocs.js +242 -0
  90. package/lib/rules/no-always-true-false-conditions.d.ts +2 -1
  91. package/lib/rules/no-always-true-false-conditions.js +68 -8
  92. package/lib/rules/no-array-length-in-deps.d.ts +12 -0
  93. package/lib/rules/no-array-length-in-deps.js +314 -0
  94. package/lib/rules/no-async-array-filter.js +5 -2
  95. package/lib/rules/no-async-foreach.js +210 -12
  96. package/lib/rules/no-circular-references.js +18 -17
  97. package/lib/rules/no-class-instance-destructuring.js +55 -12
  98. package/lib/rules/no-complex-cloud-params.js +22 -5
  99. package/lib/rules/no-compositing-layer-props.js +6 -4
  100. package/lib/rules/no-conditional-literals-in-jsx.js +37 -12
  101. package/lib/rules/no-console-error.d.ts +9 -0
  102. package/lib/rules/no-console-error.js +525 -0
  103. package/lib/rules/no-curly-brackets-around-commented-properties.d.ts +2 -0
  104. package/lib/rules/no-curly-brackets-around-commented-properties.js +258 -0
  105. package/lib/rules/no-empty-dependency-use-callbacks.d.ts +11 -0
  106. package/lib/rules/no-empty-dependency-use-callbacks.js +576 -0
  107. package/lib/rules/no-entire-object-hook-deps.d.ts +3 -1
  108. package/lib/rules/no-entire-object-hook-deps.js +320 -68
  109. package/lib/rules/no-excessive-parent-chain.d.ts +5 -0
  110. package/lib/rules/no-excessive-parent-chain.js +273 -0
  111. package/lib/rules/no-explicit-return-type.d.ts +2 -1
  112. package/lib/rules/no-explicit-return-type.js +215 -26
  113. package/lib/rules/no-filter-without-return.js +5 -1
  114. package/lib/rules/no-firestore-jest-mock.d.ts +2 -1
  115. package/lib/rules/no-firestore-jest-mock.js +126 -8
  116. package/lib/rules/no-firestore-object-arrays.js +398 -28
  117. package/lib/rules/no-handler-suffix.d.ts +12 -0
  118. package/lib/rules/no-handler-suffix.js +305 -0
  119. package/lib/rules/no-hungarian.js +14 -14
  120. package/lib/rules/no-inline-component-prop.d.ts +10 -0
  121. package/lib/rules/no-inline-component-prop.js +456 -0
  122. package/lib/rules/no-jsx-in-hooks.js +6 -1
  123. package/lib/rules/no-jsx-whitespace-literal.js +8 -2
  124. package/lib/rules/no-margin-properties.d.ts +7 -1
  125. package/lib/rules/no-margin-properties.js +22 -9
  126. package/lib/rules/no-memoize-on-static.js +9 -1
  127. package/lib/rules/no-misleading-boolean-prefixes.d.ts +7 -0
  128. package/lib/rules/no-misleading-boolean-prefixes.js +331 -0
  129. package/lib/rules/no-misused-switch-case.js +22 -1
  130. package/lib/rules/no-mixed-firestore-transactions.d.ts +3 -1
  131. package/lib/rules/no-mixed-firestore-transactions.js +296 -34
  132. package/lib/rules/no-mock-firebase-admin.js +5 -2
  133. package/lib/rules/no-object-values-on-strings.js +10 -2
  134. package/lib/rules/no-overridable-method-calls-in-constructor.d.ts +1 -0
  135. package/lib/rules/no-overridable-method-calls-in-constructor.js +272 -0
  136. package/lib/rules/no-passthrough-getters.d.ts +4 -0
  137. package/lib/rules/no-passthrough-getters.js +206 -0
  138. package/lib/rules/no-redundant-annotation-assertion.d.ts +2 -0
  139. package/lib/rules/no-redundant-annotation-assertion.js +402 -0
  140. package/lib/rules/no-redundant-param-types.js +16 -6
  141. package/lib/rules/no-redundant-this-params.d.ts +3 -0
  142. package/lib/rules/no-redundant-this-params.js +459 -0
  143. package/lib/rules/no-redundant-usecallback-wrapper.d.ts +8 -0
  144. package/lib/rules/no-redundant-usecallback-wrapper.js +328 -0
  145. package/lib/rules/no-res-error-status-in-onrequest.d.ts +4 -0
  146. package/lib/rules/no-res-error-status-in-onrequest.js +521 -0
  147. package/lib/rules/no-restricted-properties-fix.d.ts +12 -0
  148. package/lib/rules/no-restricted-properties-fix.js +173 -0
  149. package/lib/rules/no-separate-loading-state.d.ts +8 -0
  150. package/lib/rules/no-separate-loading-state.js +133 -0
  151. package/lib/rules/no-stale-state-across-await.d.ts +1 -0
  152. package/lib/rules/no-stale-state-across-await.js +185 -0
  153. package/lib/rules/no-static-constants-in-dynamic-files.d.ts +3 -0
  154. package/lib/rules/no-static-constants-in-dynamic-files.js +149 -0
  155. package/lib/rules/no-try-catch-already-exists-in-transaction.d.ts +1 -0
  156. package/lib/rules/no-try-catch-already-exists-in-transaction.js +342 -0
  157. package/lib/rules/no-type-assertion-returns.js +49 -49
  158. package/lib/rules/no-undefined-null-passthrough.js +217 -40
  159. package/lib/rules/no-unmemoized-memo-without-props.d.ts +8 -0
  160. package/lib/rules/no-unmemoized-memo-without-props.js +426 -0
  161. package/lib/rules/no-unnecessary-destructuring-rename.d.ts +2 -0
  162. package/lib/rules/no-unnecessary-destructuring-rename.js +347 -0
  163. package/lib/rules/no-unnecessary-destructuring.js +14 -4
  164. package/lib/rules/no-unnecessary-verb-suffix.js +2 -3
  165. package/lib/rules/no-unpinned-dependencies.js +36 -5
  166. package/lib/rules/no-unsafe-firestore-spread.js +8 -5
  167. package/lib/rules/no-unused-props.d.ts +5 -2
  168. package/lib/rules/no-unused-props.js +451 -112
  169. package/lib/rules/no-unused-usestate.js +6 -2
  170. package/lib/rules/no-useless-fragment.js +28 -2
  171. package/lib/rules/no-useless-usememo-primitives.d.ts +9 -0
  172. package/lib/rules/no-useless-usememo-primitives.js +393 -0
  173. package/lib/rules/no-usememo-for-pass-by-value.d.ts +13 -0
  174. package/lib/rules/no-usememo-for-pass-by-value.js +757 -0
  175. package/lib/rules/no-uuidv4-base62-as-key.js +18 -13
  176. package/lib/rules/omit-index-html.d.ts +2 -1
  177. package/lib/rules/omit-index-html.js +62 -7
  178. package/lib/rules/optimize-object-boolean-conditions.d.ts +1 -0
  179. package/lib/rules/optimize-object-boolean-conditions.js +236 -0
  180. package/lib/rules/parallelize-async-operations.d.ts +8 -0
  181. package/lib/rules/parallelize-async-operations.js +394 -0
  182. package/lib/rules/prefer-batch-operations.d.ts +1 -3
  183. package/lib/rules/prefer-batch-operations.js +228 -35
  184. package/lib/rules/prefer-block-comments-for-declarations.js +22 -7
  185. package/lib/rules/prefer-clone-deep.js +3 -3
  186. package/lib/rules/prefer-destructuring-no-class.d.ts +2 -1
  187. package/lib/rules/prefer-destructuring-no-class.js +244 -59
  188. package/lib/rules/prefer-docsetter-setall.d.ts +2 -0
  189. package/lib/rules/prefer-docsetter-setall.js +243 -0
  190. package/lib/rules/prefer-document-flattening.d.ts +4 -0
  191. package/lib/rules/prefer-document-flattening.js +239 -0
  192. package/lib/rules/prefer-field-paths-in-transforms.d.ts +7 -0
  193. package/lib/rules/prefer-field-paths-in-transforms.js +251 -0
  194. package/lib/rules/prefer-fragment-component.js +4 -4
  195. package/lib/rules/prefer-fragment-shorthand.js +2 -1
  196. package/lib/rules/prefer-getter-over-parameterless-method.d.ts +13 -0
  197. package/lib/rules/prefer-getter-over-parameterless-method.js +648 -0
  198. package/lib/rules/prefer-global-router-state-key.d.ts +7 -3
  199. package/lib/rules/prefer-global-router-state-key.js +305 -31
  200. package/lib/rules/prefer-memoized-props.d.ts +3 -0
  201. package/lib/rules/prefer-memoized-props.js +445 -0
  202. package/lib/rules/prefer-next-dynamic.d.ts +9 -0
  203. package/lib/rules/prefer-next-dynamic.js +357 -0
  204. package/lib/rules/prefer-nullish-coalescing-boolean-props.d.ts +1 -0
  205. package/lib/rules/prefer-nullish-coalescing-boolean-props.js +435 -0
  206. package/lib/rules/prefer-nullish-coalescing-override.d.ts +7 -0
  207. package/lib/rules/prefer-nullish-coalescing-override.js +188 -0
  208. package/lib/rules/prefer-params-over-parent-id.d.ts +5 -0
  209. package/lib/rules/prefer-params-over-parent-id.js +277 -0
  210. package/lib/rules/prefer-settings-object.js +23 -15
  211. package/lib/rules/prefer-type-alias-over-typeof-constant.d.ts +3 -0
  212. package/lib/rules/prefer-type-alias-over-typeof-constant.js +259 -0
  213. package/lib/rules/prefer-type-over-interface.js +7 -2
  214. package/lib/rules/prefer-url-tostring-over-tojson.d.ts +2 -0
  215. package/lib/rules/prefer-url-tostring-over-tojson.js +169 -0
  216. package/lib/rules/prefer-use-deep-compare-memo.d.ts +4 -0
  217. package/lib/rules/prefer-use-deep-compare-memo.js +431 -0
  218. package/lib/rules/prefer-usecallback-over-usememo-for-functions.js +25 -2
  219. package/lib/rules/prefer-usememo-over-useeffect-usestate.js +24 -5
  220. package/lib/rules/prefer-utility-function-over-private-static.js +34 -2
  221. package/lib/rules/prevent-children-clobber.d.ts +2 -0
  222. package/lib/rules/prevent-children-clobber.js +536 -0
  223. package/lib/rules/react-memoize-literals.d.ts +4 -0
  224. package/lib/rules/react-memoize-literals.js +495 -0
  225. package/lib/rules/react-usememo-should-be-component.d.ts +2 -1
  226. package/lib/rules/react-usememo-should-be-component.js +144 -78
  227. package/lib/rules/require-dynamic-firebase-imports.js +2 -1
  228. package/lib/rules/require-hooks-default-params.js +17 -16
  229. package/lib/rules/require-https-error-cause.d.ts +4 -0
  230. package/lib/rules/require-https-error-cause.js +136 -0
  231. package/lib/rules/require-https-error.js +43 -21
  232. package/lib/rules/require-image-optimized.js +2 -2
  233. package/lib/rules/require-memo.js +12 -2
  234. package/lib/rules/require-memoize-jsx-returners.d.ts +3 -0
  235. package/lib/rules/require-memoize-jsx-returners.js +485 -0
  236. package/lib/rules/require-usememo-object-literals.js +9 -4
  237. package/lib/rules/semantic-function-prefixes.js +38 -18
  238. package/lib/rules/sync-onwrite-name-func.js +5 -1
  239. package/lib/rules/test-file-location-enforcement.d.ts +1 -0
  240. package/lib/rules/test-file-location-enforcement.js +57 -0
  241. package/lib/rules/use-custom-link.js +6 -1
  242. package/lib/rules/use-custom-router.js +6 -1
  243. package/lib/rules/use-latest-callback.d.ts +3 -0
  244. package/lib/rules/use-latest-callback.js +271 -0
  245. package/lib/rules/vertically-group-related-functions.d.ts +16 -0
  246. package/lib/rules/vertically-group-related-functions.js +480 -0
  247. package/lib/utils/ASTHelpers.d.ts +13 -1
  248. package/lib/utils/ASTHelpers.js +34 -0
  249. package/lib/utils/createRule.js +1 -1
  250. package/lib/utils/getMethodName.d.ts +27 -0
  251. package/lib/utils/getMethodName.js +35 -0
  252. package/lib/utils/graph/ClassGraphSorterReadability.js +1 -1
  253. package/lib/utils/ruleTester.d.ts +1 -0
  254. package/lib/utils/ruleTester.js +4 -1
  255. package/lib/utils/tsTypeClassifier.d.ts +30 -0
  256. package/lib/utils/tsTypeClassifier.js +149 -0
  257. package/package.json +23 -14
  258. package/lib/rules/enforce-assertSafe-object-key.d.ts +0 -2
package/lib/index.js CHANGED
@@ -6,13 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const array_methods_this_context_1 = require("./rules/array-methods-this-context");
7
7
  const class_methods_read_top_to_bottom_1 = require("./rules/class-methods-read-top-to-bottom");
8
8
  const consistent_callback_naming_1 = __importDefault(require("./rules/consistent-callback-naming"));
9
+ const no_handler_suffix_1 = require("./rules/no-handler-suffix");
10
+ const parallelize_async_operations_1 = require("./rules/parallelize-async-operations");
9
11
  const dynamic_https_errors_1 = require("./rules/dynamic-https-errors");
12
+ const enforce_empty_object_check_1 = require("./rules/enforce-empty-object-check");
10
13
  const enforce_identifiable_firestore_type_1 = require("./rules/enforce-identifiable-firestore-type");
11
14
  const enforce_callback_memo_1 = __importDefault(require("./rules/enforce-callback-memo"));
15
+ const react_memoize_literals_1 = require("./rules/react-memoize-literals");
12
16
  const enforce_callable_types_1 = require("./rules/enforce-callable-types");
17
+ const enforce_console_error_1 = require("./rules/enforce-console-error");
13
18
  const enforce_dynamic_firebase_imports_1 = require("./rules/enforce-dynamic-firebase-imports");
14
19
  const enforce_mui_rounded_icons_1 = require("./rules/enforce-mui-rounded-icons");
20
+ const enforce_querykey_ts_1 = require("./rules/enforce-querykey-ts");
15
21
  const enforce_react_type_naming_1 = require("./rules/enforce-react-type-naming");
22
+ const enforce_firestore_rules_get_access_1 = require("./rules/enforce-firestore-rules-get-access");
16
23
  const export_if_in_doubt_1 = require("./rules/export-if-in-doubt");
17
24
  const extract_global_constants_1 = require("./rules/extract-global-constants");
18
25
  const enforce_global_constants_1 = require("./rules/enforce-global-constants");
@@ -20,6 +27,7 @@ const generic_starts_with_t_1 = require("./rules/generic-starts-with-t");
20
27
  const global_const_style_1 = __importDefault(require("./rules/global-const-style"));
21
28
  const no_async_array_filter_1 = require("./rules/no-async-array-filter");
22
29
  const no_async_foreach_1 = require("./rules/no-async-foreach");
30
+ const no_console_error_1 = require("./rules/no-console-error");
23
31
  const no_conditional_literals_in_jsx_1 = require("./rules/no-conditional-literals-in-jsx");
24
32
  const no_filter_without_return_1 = require("./rules/no-filter-without-return");
25
33
  const no_hungarian_1 = require("./rules/no-hungarian");
@@ -28,15 +36,21 @@ const no_unpinned_dependencies_1 = require("./rules/no-unpinned-dependencies");
28
36
  const no_unused_props_1 = require("./rules/no-unused-props");
29
37
  const no_useless_fragment_1 = require("./rules/no-useless-fragment");
30
38
  const prefer_fragment_shorthand_1 = require("./rules/prefer-fragment-shorthand");
39
+ const prefer_getter_over_parameterless_method_1 = require("./rules/prefer-getter-over-parameterless-method");
31
40
  const prefer_type_over_interface_1 = require("./rules/prefer-type-over-interface");
41
+ const prefer_type_alias_over_typeof_constant_1 = require("./rules/prefer-type-alias-over-typeof-constant");
42
+ const prefer_memoized_props_1 = require("./rules/prefer-memoized-props");
32
43
  const require_memo_1 = require("./rules/require-memo");
44
+ const require_memoize_jsx_returners_1 = require("./rules/require-memoize-jsx-returners");
33
45
  const no_jsx_whitespace_literal_1 = require("./rules/no-jsx-whitespace-literal");
34
46
  const require_dynamic_firebase_imports_1 = __importDefault(require("./rules/require-dynamic-firebase-imports"));
35
47
  const require_https_error_1 = __importDefault(require("./rules/require-https-error"));
48
+ const require_https_error_cause_1 = require("./rules/require-https-error-cause");
36
49
  const use_custom_router_1 = require("./rules/use-custom-router");
37
50
  const require_image_optimized_1 = __importDefault(require("./rules/require-image-optimized"));
38
51
  const require_usememo_object_literals_1 = require("./rules/require-usememo-object-literals");
39
52
  const enforce_safe_stringify_1 = require("./rules/enforce-safe-stringify");
53
+ const enforce_storage_context_1 = require("./rules/enforce-storage-context");
40
54
  const avoid_utils_directory_1 = require("./rules/avoid-utils-directory");
41
55
  const no_entire_object_hook_deps_1 = require("./rules/no-entire-object-hook-deps");
42
56
  const enforce_firestore_path_utils_1 = require("./rules/enforce-firestore-path-utils");
@@ -46,22 +60,29 @@ const semantic_function_prefixes_1 = require("./rules/semantic-function-prefixes
46
60
  const enforce_mock_firestore_1 = require("./rules/enforce-mock-firestore");
47
61
  const prefer_settings_object_1 = require("./rules/prefer-settings-object");
48
62
  const enforce_firestore_set_merge_1 = require("./rules/enforce-firestore-set-merge");
63
+ const enforce_early_destructuring_1 = require("./rules/enforce-early-destructuring");
49
64
  const enforce_verb_noun_naming_1 = require("./rules/enforce-verb-noun-naming");
50
65
  const no_explicit_return_type_1 = require("./rules/no-explicit-return-type");
51
66
  const use_custom_memo_1 = require("./rules/use-custom-memo");
67
+ const memoize_root_level_hocs_1 = require("./rules/memoize-root-level-hocs");
52
68
  const use_custom_link_1 = require("./rules/use-custom-link");
53
69
  const enforce_serializable_params_1 = __importDefault(require("./rules/enforce-serializable-params"));
54
70
  const enforce_realtimedb_path_utils_1 = require("./rules/enforce-realtimedb-path-utils");
55
71
  const enforce_memoize_async_1 = require("./rules/enforce-memoize-async");
56
72
  const enforce_exported_function_types_1 = require("./rules/enforce-exported-function-types");
73
+ const no_redundant_annotation_assertion_1 = require("./rules/no-redundant-annotation-assertion");
74
+ const enforce_memoize_getters_1 = require("./rules/enforce-memoize-getters");
57
75
  const no_redundant_param_types_1 = require("./rules/no-redundant-param-types");
76
+ const no_redundant_this_params_1 = require("./rules/no-redundant-this-params");
58
77
  const no_class_instance_destructuring_1 = require("./rules/no-class-instance-destructuring");
59
78
  const no_firestore_object_arrays_1 = require("./rules/no-firestore-object-arrays");
60
79
  const no_memoize_on_static_1 = require("./rules/no-memoize-on-static");
61
80
  const no_unsafe_firestore_spread_1 = require("./rules/no-unsafe-firestore-spread");
62
81
  const no_jsx_in_hooks_1 = require("./rules/no-jsx-in-hooks");
82
+ const no_unmemoized_memo_without_props_1 = require("./rules/no-unmemoized-memo-without-props");
63
83
  const enforce_assert_throws_1 = require("./rules/enforce-assert-throws");
64
84
  const prefer_batch_operations_1 = require("./rules/prefer-batch-operations");
85
+ const prefer_docsetter_setall_1 = require("./rules/prefer-docsetter-setall");
65
86
  const no_complex_cloud_params_1 = require("./rules/no-complex-cloud-params");
66
87
  const no_mixed_firestore_transactions_1 = require("./rules/no-mixed-firestore-transactions");
67
88
  const enforce_firestore_facade_1 = require("./rules/enforce-firestore-facade");
@@ -76,16 +97,20 @@ const enforce_render_hits_memoization_1 = require("./rules/enforce-render-hits-m
76
97
  const prefer_fragment_component_1 = require("./rules/prefer-fragment-component");
77
98
  const react_usememo_should_be_component_1 = require("./rules/react-usememo-should-be-component");
78
99
  const no_unnecessary_verb_suffix_1 = require("./rules/no-unnecessary-verb-suffix");
79
- const enforce_assertSafe_object_key_1 = require("./rules/enforce-assertSafe-object-key");
100
+ const enforce_assert_safe_object_key_1 = require("./rules/enforce-assert-safe-object-key");
80
101
  const enforce_object_literal_as_const_1 = require("./rules/enforce-object-literal-as-const");
102
+ const enforce_stable_hash_spread_props_1 = require("./rules/enforce-stable-hash-spread-props");
81
103
  const enforce_positive_naming_1 = require("./rules/enforce-positive-naming");
82
104
  const no_type_assertion_returns_1 = require("./rules/no-type-assertion-returns");
83
105
  const prefer_utility_function_over_private_static_1 = require("./rules/prefer-utility-function-over-private-static");
84
106
  const enforce_microdiff_1 = require("./rules/enforce-microdiff");
85
107
  const fast_deep_equal_over_microdiff_1 = require("./rules/fast-deep-equal-over-microdiff");
108
+ const flatten_push_calls_1 = require("./rules/flatten-push-calls");
86
109
  const enforce_timestamp_now_1 = require("./rules/enforce-timestamp-now");
110
+ const enforce_unique_cursor_headers_1 = require("./rules/enforce-unique-cursor-headers");
87
111
  const no_always_true_false_conditions_1 = require("./rules/no-always-true-false-conditions");
88
112
  const enforce_props_argument_name_1 = require("./rules/enforce-props-argument-name");
113
+ const enforce_props_naming_consistency_1 = require("./rules/enforce-props-naming-consistency");
89
114
  const prefer_global_router_state_key_1 = require("./rules/prefer-global-router-state-key");
90
115
  const prefer_usememo_over_useeffect_usestate_1 = require("./rules/prefer-usememo-over-useeffect-usestate");
91
116
  const enforce_dynamic_imports_1 = __importDefault(require("./rules/enforce-dynamic-imports"));
@@ -93,22 +118,84 @@ const ensure_pointer_events_none_1 = require("./rules/ensure-pointer-events-none
93
118
  const no_object_values_on_strings_1 = require("./rules/no-object-values-on-strings");
94
119
  const key_only_outermost_element_1 = require("./rules/key-only-outermost-element");
95
120
  const no_unnecessary_destructuring_1 = require("./rules/no-unnecessary-destructuring");
121
+ const no_unnecessary_destructuring_rename_1 = require("./rules/no-unnecessary-destructuring-rename");
96
122
  const enforce_singular_type_names_1 = require("./rules/enforce-singular-type-names");
97
123
  const enforce_css_media_queries_1 = require("./rules/enforce-css-media-queries");
98
124
  const omit_index_html_1 = require("./rules/omit-index-html");
99
125
  const enforce_id_capitalization_1 = require("./rules/enforce-id-capitalization");
100
126
  const no_unused_usestate_1 = require("./rules/no-unused-usestate");
101
127
  const no_uuidv4_base62_as_key_1 = require("./rules/no-uuidv4-base62-as-key");
128
+ const logical_top_to_bottom_grouping_1 = require("./rules/logical-top-to-bottom-grouping");
102
129
  const enforce_dynamic_file_naming_1 = __importDefault(require("./rules/enforce-dynamic-file-naming"));
103
130
  const prefer_usecallback_over_usememo_for_functions_1 = __importDefault(require("./rules/prefer-usecallback-over-usememo-for-functions"));
131
+ const no_usememo_for_pass_by_value_1 = require("./rules/no-usememo-for-pass-by-value");
104
132
  const no_margin_properties_1 = require("./rules/no-margin-properties");
105
133
  const enforce_boolean_naming_prefixes_1 = require("./rules/enforce-boolean-naming-prefixes");
134
+ const enforce_fieldpath_syntax_in_docsetter_1 = require("./rules/enforce-fieldpath-syntax-in-docsetter");
106
135
  const prefer_block_comments_for_declarations_1 = require("./rules/prefer-block-comments-for-declarations");
107
136
  const no_undefined_null_passthrough_1 = require("./rules/no-undefined-null-passthrough");
137
+ const firestore_transaction_reads_before_writes_1 = require("./rules/firestore-transaction-reads-before-writes");
138
+ const enforce_typescript_markdown_code_blocks_1 = require("./rules/enforce-typescript-markdown-code-blocks");
139
+ const prefer_nullish_coalescing_override_1 = require("./rules/prefer-nullish-coalescing-override");
140
+ const prefer_nullish_coalescing_boolean_props_1 = require("./rules/prefer-nullish-coalescing-boolean-props");
141
+ const no_restricted_properties_fix_1 = require("./rules/no-restricted-properties-fix");
142
+ const no_excessive_parent_chain_1 = require("./rules/no-excessive-parent-chain");
143
+ const prefer_document_flattening_1 = require("./rules/prefer-document-flattening");
144
+ const no_overridable_method_calls_in_constructor_1 = require("./rules/no-overridable-method-calls-in-constructor");
145
+ const use_latest_callback_1 = require("./rules/use-latest-callback");
146
+ const no_empty_dependency_use_callbacks_1 = require("./rules/no-empty-dependency-use-callbacks");
147
+ const no_stale_state_across_await_1 = require("./rules/no-stale-state-across-await");
148
+ const no_separate_loading_state_1 = require("./rules/no-separate-loading-state");
149
+ const optimize_object_boolean_conditions_1 = require("./rules/optimize-object-boolean-conditions");
150
+ const prefer_params_over_parent_id_1 = require("./rules/prefer-params-over-parent-id");
151
+ const prefer_field_paths_in_transforms_1 = require("./rules/prefer-field-paths-in-transforms");
152
+ const no_misleading_boolean_prefixes_1 = require("./rules/no-misleading-boolean-prefixes");
153
+ const prefer_url_tostring_over_tojson_1 = require("./rules/prefer-url-tostring-over-tojson");
154
+ const prefer_next_dynamic_1 = require("./rules/prefer-next-dynamic");
155
+ const no_redundant_usecallback_wrapper_1 = __importDefault(require("./rules/no-redundant-usecallback-wrapper"));
156
+ const no_array_length_in_deps_1 = require("./rules/no-array-length-in-deps");
157
+ const prefer_use_deep_compare_memo_1 = require("./rules/prefer-use-deep-compare-memo");
158
+ const memo_compare_deeply_complex_props_1 = require("./rules/memo-compare-deeply-complex-props");
159
+ const no_circular_references_1 = require("./rules/no-circular-references");
160
+ const no_passthrough_getters_1 = require("./rules/no-passthrough-getters");
161
+ const no_curly_brackets_around_commented_properties_1 = require("./rules/no-curly-brackets-around-commented-properties");
162
+ const no_res_error_status_in_onrequest_1 = require("./rules/no-res-error-status-in-onrequest");
163
+ const no_try_catch_already_exists_in_transaction_1 = require("./rules/no-try-catch-already-exists-in-transaction");
164
+ const memo_nested_react_components_1 = require("./rules/memo-nested-react-components");
165
+ const no_useless_usememo_primitives_1 = require("./rules/no-useless-usememo-primitives");
166
+ const jsdoc_above_field_1 = require("./rules/jsdoc-above-field");
167
+ const enforce_transform_memoization_1 = require("./rules/enforce-transform-memoization");
168
+ const vertically_group_related_functions_1 = require("./rules/vertically-group-related-functions");
169
+ const no_static_constants_in_dynamic_files_1 = __importDefault(require("./rules/no-static-constants-in-dynamic-files"));
170
+ const test_file_location_enforcement_1 = require("./rules/test-file-location-enforcement");
171
+ const prevent_children_clobber_1 = require("./rules/prevent-children-clobber");
172
+ const NO_FRONTEND_IMPORTS_FROM_FUNCTIONS_MESSAGE = 'Backend Cloud Functions (.f.ts under functions/) must not import frontend modules from the repo root src/**. Frontend code can depend on browser-only APIs and bundling it into Cloud Functions breaks server execution; move shared logic into functions/src or a shared package.';
173
+ function noFrontendImportsFromFunctionsPatterns(pattern) {
174
+ return [
175
+ {
176
+ /**
177
+ * no-restricted-imports matches import strings literally (it does not
178
+ * resolve them to the filesystem). This monorepo layout contains both a
179
+ * frontend `src/` and a backend `functions/src/`, so broad `../src/**`
180
+ * patterns applied indiscriminately can also block legitimate
181
+ * backend-to-backend imports within `functions/src/**`.
182
+ *
183
+ * Each override targets one `functions/**` + `/*.f.ts` nesting depth and
184
+ * restricts only the exact traversal depth that reaches the repo root
185
+ * `src/`, so relative imports that stay inside `functions/src/**` do not
186
+ * match.
187
+ * Projects using path aliases should add matching restrictions in their
188
+ * own configs.
189
+ */
190
+ group: [pattern],
191
+ message: NO_FRONTEND_IMPORTS_FROM_FUNCTIONS_MESSAGE,
192
+ },
193
+ ];
194
+ }
108
195
  module.exports = {
109
196
  meta: {
110
197
  name: '@blumintinc/eslint-plugin-blumint',
111
- version: '1.12.6',
198
+ version: '1.14.0',
112
199
  },
113
200
  parseOptions: {
114
201
  ecmaVersion: 2020,
@@ -117,45 +204,69 @@ module.exports = {
117
204
  recommended: {
118
205
  plugins: ['@blumintinc/blumint'],
119
206
  rules: {
207
+ '@blumintinc/blumint/firestore-transaction-reads-before-writes': 'error',
208
+ // Override the @typescript-eslint/prefer-nullish-coalescing rule
209
+ '@typescript-eslint/prefer-nullish-coalescing': 'off',
210
+ '@blumintinc/blumint/prefer-nullish-coalescing-override': 'error',
120
211
  '@blumintinc/blumint/prefer-block-comments-for-declarations': 'error',
121
212
  '@blumintinc/blumint/key-only-outermost-element': 'error',
213
+ '@blumintinc/blumint/logical-top-to-bottom-grouping': 'error',
214
+ '@blumintinc/blumint/parallelize-async-operations': 'error',
122
215
  '@blumintinc/blumint/avoid-utils-directory': 'error',
123
216
  '@blumintinc/blumint/enforce-firestore-path-utils': 'error',
217
+ '@blumintinc/blumint/enforce-firestore-rules-get-access': 'error',
124
218
  '@blumintinc/blumint/no-jsx-whitespace-literal': 'error',
125
219
  '@blumintinc/blumint/array-methods-this-context': 'error',
126
220
  '@blumintinc/blumint/class-methods-read-top-to-bottom': 'error',
127
221
  '@blumintinc/blumint/consistent-callback-naming': 'error',
128
222
  '@blumintinc/blumint/dynamic-https-errors': 'error',
223
+ '@blumintinc/blumint/enforce-empty-object-check': 'error',
129
224
  '@blumintinc/blumint/enforce-mui-rounded-icons': 'error',
130
225
  '@blumintinc/blumint/enforce-identifiable-firestore-type': 'error',
131
226
  '@blumintinc/blumint/enforce-callback-memo': 'error',
227
+ '@blumintinc/blumint/react-memoize-literals': 'error',
132
228
  '@blumintinc/blumint/enforce-callable-types': 'error',
229
+ '@blumintinc/blumint/enforce-console-error': 'error',
133
230
  '@blumintinc/blumint/enforce-dynamic-firebase-imports': 'error',
134
231
  '@blumintinc/blumint/enforce-react-type-naming': 'error',
135
- // '@blumintinc/blumint/export-if-in-doubt': 'warn',
232
+ '@blumintinc/blumint/export-if-in-doubt': 'error',
136
233
  '@blumintinc/blumint/extract-global-constants': 'error',
137
234
  '@blumintinc/blumint/enforce-global-constants': 'error',
138
235
  '@blumintinc/blumint/generic-starts-with-t': 'error',
139
236
  '@blumintinc/blumint/global-const-style': 'error',
140
237
  '@blumintinc/blumint/no-async-array-filter': 'error',
141
238
  '@blumintinc/blumint/no-async-foreach': 'error',
239
+ '@blumintinc/blumint/no-console-error': [
240
+ 'warn',
241
+ { allowWithUseAlertDialog: true },
242
+ ],
142
243
  '@blumintinc/blumint/no-conditional-literals-in-jsx': 'error',
143
244
  '@blumintinc/blumint/no-filter-without-return': 'error',
144
245
  '@blumintinc/blumint/no-hungarian': 'error',
246
+ '@blumintinc/blumint/no-handler-suffix': 'error',
145
247
  '@blumintinc/blumint/no-misused-switch-case': 'error',
146
248
  '@blumintinc/blumint/no-unpinned-dependencies': 'error',
147
249
  '@blumintinc/blumint/no-unused-props': 'error',
148
250
  '@blumintinc/blumint/no-uuidv4-base62-as-key': 'error',
149
- //'@blumintinc/blumint/no-useless-fragment': 'error',
150
- //'@blumintinc/blumint/prefer-fragment-shorthand': 'error',
251
+ '@blumintinc/blumint/no-useless-fragment': 'error',
252
+ '@blumintinc/blumint/no-useless-usememo-primitives': 'error',
253
+ '@blumintinc/blumint/prefer-fragment-shorthand': 'error',
254
+ '@blumintinc/blumint/prefer-getter-over-parameterless-method': 'error',
151
255
  '@blumintinc/blumint/prefer-type-over-interface': 'error',
256
+ '@blumintinc/blumint/prefer-type-alias-over-typeof-constant': 'error',
152
257
  '@blumintinc/blumint/require-memo': 'error',
258
+ '@blumintinc/blumint/require-memoize-jsx-returners': 'error',
259
+ '@blumintinc/blumint/no-unmemoized-memo-without-props': 'error',
153
260
  '@blumintinc/blumint/require-dynamic-firebase-imports': 'error',
154
261
  '@blumintinc/blumint/require-https-error': 'error',
262
+ '@blumintinc/blumint/require-https-error-cause': 'error',
155
263
  '@blumintinc/blumint/use-custom-router': 'error',
156
264
  '@blumintinc/blumint/require-image-optimized': 'error',
157
265
  '@blumintinc/blumint/require-usememo-object-literals': 'error',
266
+ '@blumintinc/blumint/memoize-root-level-hocs': 'error',
158
267
  '@blumintinc/blumint/enforce-safe-stringify': 'error',
268
+ '@blumintinc/blumint/enforce-early-destructuring': 'error',
269
+ '@blumintinc/blumint/enforce-storage-context': 'error',
159
270
  '@blumintinc/blumint/no-entire-object-hook-deps': 'error',
160
271
  '@blumintinc/blumint/no-compositing-layer-props': 'error',
161
272
  '@blumintinc/blumint/enforce-firestore-doc-ref-generic': 'error',
@@ -171,14 +282,17 @@ module.exports = {
171
282
  '@blumintinc/blumint/enforce-realtimedb-path-utils': 'error',
172
283
  '@blumintinc/blumint/enforce-memoize-async': 'error',
173
284
  '@blumintinc/blumint/enforce-exported-function-types': 'error',
285
+ '@blumintinc/blumint/no-redundant-annotation-assertion': 'error',
174
286
  '@blumintinc/blumint/no-redundant-param-types': 'error',
287
+ '@blumintinc/blumint/enforce-memoize-getters': 'error',
175
288
  '@blumintinc/blumint/no-class-instance-destructuring': 'error',
176
- '@blumintinc/blumint/no-firestore-object-arrays': 'warn',
289
+ '@blumintinc/blumint/no-firestore-object-arrays': 'error',
177
290
  '@blumintinc/blumint/no-memoize-on-static': 'error',
178
291
  '@blumintinc/blumint/no-unsafe-firestore-spread': 'error',
179
292
  '@blumintinc/blumint/no-jsx-in-hooks': 'error',
180
293
  '@blumintinc/blumint/enforce-assert-throws': 'error',
181
294
  '@blumintinc/blumint/prefer-batch-operations': 'error',
295
+ '@blumintinc/blumint/prefer-docsetter-setall': 'error',
182
296
  '@blumintinc/blumint/no-complex-cloud-params': 'error',
183
297
  '@blumintinc/blumint/no-mixed-firestore-transactions': 'error',
184
298
  '@blumintinc/blumint/enforce-firestore-facade': 'error',
@@ -190,55 +304,171 @@ module.exports = {
190
304
  '@blumintinc/blumint/require-hooks-default-params': 'error',
191
305
  '@blumintinc/blumint/prefer-destructuring-no-class': 'error',
192
306
  '@blumintinc/blumint/enforce-render-hits-memoization': 'error',
193
- '@blumintinc/blumint/prefer-fragment-component': 'error',
307
+ '@blumintinc/blumint/enforce-transform-memoization': 'error',
308
+ '@blumintinc/blumint/prefer-fragment-component': 'off',
194
309
  '@blumintinc/blumint/react-usememo-should-be-component': 'error',
195
310
  '@blumintinc/blumint/no-unnecessary-verb-suffix': 'error',
196
- '@blumintinc/blumint/enforce-assertSafe-object-key': 'error',
311
+ '@blumintinc/blumint/enforce-assert-safe-object-key': 'error',
197
312
  '@blumintinc/blumint/enforce-object-literal-as-const': 'error',
198
313
  '@blumintinc/blumint/enforce-positive-naming': 'error',
199
314
  '@blumintinc/blumint/no-type-assertion-returns': 'error',
200
315
  '@blumintinc/blumint/prefer-utility-function-over-private-static': 'error',
201
316
  '@blumintinc/blumint/enforce-microdiff': 'error',
202
317
  '@blumintinc/blumint/fast-deep-equal-over-microdiff': 'error',
318
+ '@blumintinc/blumint/flatten-push-calls': 'error',
203
319
  '@blumintinc/blumint/enforce-timestamp-now': 'error',
320
+ '@blumintinc/blumint/enforce-unique-cursor-headers': 'error',
321
+ '@blumintinc/blumint/enforce-typescript-markdown-code-blocks': 'error',
204
322
  '@blumintinc/blumint/no-always-true-false-conditions': 'error',
205
323
  '@blumintinc/blumint/enforce-props-argument-name': 'error',
324
+ '@blumintinc/blumint/enforce-props-naming-consistency': 'error',
206
325
  '@blumintinc/blumint/prefer-global-router-state-key': 'error',
207
326
  '@blumintinc/blumint/prefer-usememo-over-useeffect-usestate': 'error',
208
- '@blumintinc/blumint/enforce-dynamic-imports': [
209
- 'error',
210
- {
211
- libraries: ['@stream-io/video-react-sdk', 'some-heavy-lib*'],
212
- allowImportType: true,
213
- },
214
- ],
327
+ '@blumintinc/blumint/prefer-memoized-props': 'error',
328
+ '@blumintinc/blumint/enforce-dynamic-imports': 'error',
215
329
  '@blumintinc/blumint/ensure-pointer-events-none': 'error',
216
330
  '@blumintinc/blumint/no-object-values-on-strings': 'error',
217
331
  '@blumintinc/blumint/no-unnecessary-destructuring': 'error',
332
+ '@blumintinc/blumint/no-unnecessary-destructuring-rename': 'error',
218
333
  '@blumintinc/blumint/enforce-singular-type-names': 'error',
334
+ '@blumintinc/blumint/prevent-children-clobber': 'error',
219
335
  '@blumintinc/blumint/enforce-css-media-queries': 'error',
220
336
  '@blumintinc/blumint/omit-index-html': 'error',
221
337
  '@blumintinc/blumint/enforce-id-capitalization': 'error',
222
338
  '@blumintinc/blumint/no-unused-usestate': 'error',
223
- '@blumintinc/blumint/enforce-dynamic-file-naming': 'error',
224
339
  '@blumintinc/blumint/prefer-usecallback-over-usememo-for-functions': 'error',
340
+ '@blumintinc/blumint/no-usememo-for-pass-by-value': 'error',
225
341
  '@blumintinc/blumint/no-margin-properties': 'error',
226
342
  '@blumintinc/blumint/enforce-boolean-naming-prefixes': 'error',
343
+ '@blumintinc/blumint/enforce-fieldpath-syntax-in-docsetter': 'error',
227
344
  '@blumintinc/blumint/no-undefined-null-passthrough': 'error',
345
+ '@blumintinc/blumint/prefer-nullish-coalescing-boolean-props': 'error',
346
+ '@blumintinc/blumint/no-overridable-method-calls-in-constructor': 'error',
347
+ '@blumintinc/blumint/use-latest-callback': 'error',
348
+ '@blumintinc/blumint/no-empty-dependency-use-callbacks': 'error',
349
+ '@blumintinc/blumint/enforce-querykey-ts': 'error',
350
+ '@blumintinc/blumint/no-stale-state-across-await': 'error',
351
+ '@blumintinc/blumint/no-separate-loading-state': 'error',
352
+ '@blumintinc/blumint/optimize-object-boolean-conditions': 'error',
353
+ '@blumintinc/blumint/prefer-params-over-parent-id': 'error',
354
+ '@blumintinc/blumint/prefer-field-paths-in-transforms': 'warn',
355
+ '@blumintinc/blumint/no-misleading-boolean-prefixes': 'error',
356
+ '@blumintinc/blumint/prefer-url-tostring-over-tojson': 'error',
357
+ '@blumintinc/blumint/prefer-next-dynamic': 'error',
358
+ '@blumintinc/blumint/jsdoc-above-field': 'error',
359
+ '@blumintinc/blumint/no-redundant-usecallback-wrapper': 'error',
360
+ '@blumintinc/blumint/no-redundant-this-params': 'error',
361
+ '@blumintinc/blumint/no-res-error-status-in-onrequest': 'error',
362
+ '@blumintinc/blumint/no-array-length-in-deps': 'error',
363
+ '@blumintinc/blumint/enforce-stable-hash-spread-props': 'error',
364
+ '@blumintinc/blumint/prefer-use-deep-compare-memo': 'error',
365
+ '@blumintinc/blumint/memo-nested-react-components': 'error',
366
+ '@blumintinc/blumint/memo-compare-deeply-complex-props': 'error',
367
+ '@blumintinc/blumint/no-circular-references': 'error',
368
+ '@blumintinc/blumint/no-try-catch-already-exists-in-transaction': 'error',
369
+ '@blumintinc/blumint/no-curly-brackets-around-commented-properties': 'error',
370
+ '@blumintinc/blumint/no-passthrough-getters': 'error',
371
+ '@blumintinc/blumint/vertically-group-related-functions': 'error',
372
+ '@blumintinc/blumint/no-static-constants-in-dynamic-files': 'error',
373
+ '@blumintinc/blumint/test-file-location-enforcement': 'error',
228
374
  },
375
+ /**
376
+ * Depth-specific overrides block only import strings that traverse to the
377
+ * repo root `src/`. The list covers nesting depths 1–6; deeper nesting
378
+ * requires an additional override.
379
+ */
380
+ overrides: [
381
+ {
382
+ files: ['functions/*.f.ts'],
383
+ rules: {
384
+ 'no-restricted-imports': [
385
+ 'error',
386
+ {
387
+ patterns: noFrontendImportsFromFunctionsPatterns('../src/**'),
388
+ },
389
+ ],
390
+ },
391
+ },
392
+ {
393
+ files: ['functions/*/*.f.ts'],
394
+ rules: {
395
+ 'no-restricted-imports': [
396
+ 'error',
397
+ {
398
+ patterns: noFrontendImportsFromFunctionsPatterns('../../src/**'),
399
+ },
400
+ ],
401
+ },
402
+ },
403
+ {
404
+ files: ['functions/*/*/*.f.ts'],
405
+ rules: {
406
+ 'no-restricted-imports': [
407
+ 'error',
408
+ {
409
+ patterns: noFrontendImportsFromFunctionsPatterns('../../../src/**'),
410
+ },
411
+ ],
412
+ },
413
+ },
414
+ {
415
+ files: ['functions/*/*/*/*.f.ts'],
416
+ rules: {
417
+ 'no-restricted-imports': [
418
+ 'error',
419
+ {
420
+ patterns: noFrontendImportsFromFunctionsPatterns('../../../../src/**'),
421
+ },
422
+ ],
423
+ },
424
+ },
425
+ {
426
+ files: ['functions/*/*/*/*/*.f.ts'],
427
+ rules: {
428
+ 'no-restricted-imports': [
429
+ 'error',
430
+ {
431
+ patterns: noFrontendImportsFromFunctionsPatterns('../../../../../src/**'),
432
+ },
433
+ ],
434
+ },
435
+ },
436
+ {
437
+ files: ['functions/*/*/*/*/*/*.f.ts'],
438
+ rules: {
439
+ 'no-restricted-imports': [
440
+ 'error',
441
+ {
442
+ patterns: noFrontendImportsFromFunctionsPatterns('../../../../../../src/**'),
443
+ },
444
+ ],
445
+ },
446
+ },
447
+ ],
229
448
  },
230
449
  },
231
450
  rules: {
451
+ 'firestore-transaction-reads-before-writes': firestore_transaction_reads_before_writes_1.firestoreTransactionReadsBeforeWrites,
452
+ 'prefer-nullish-coalescing-override': prefer_nullish_coalescing_override_1.preferNullishCoalescingOverride,
453
+ 'no-restricted-properties-fix': no_restricted_properties_fix_1.noRestrictedPropertiesFix,
454
+ 'no-excessive-parent-chain': no_excessive_parent_chain_1.noExcessiveParentChain,
455
+ 'prefer-document-flattening': prefer_document_flattening_1.preferDocumentFlattening,
232
456
  'prefer-block-comments-for-declarations': prefer_block_comments_for_declarations_1.preferBlockCommentsForDeclarations,
233
457
  'key-only-outermost-element': key_only_outermost_element_1.keyOnlyOutermostElement,
458
+ 'logical-top-to-bottom-grouping': logical_top_to_bottom_grouping_1.logicalTopToBottomGrouping,
234
459
  'array-methods-this-context': array_methods_this_context_1.arrayMethodsThisContext,
235
460
  'class-methods-read-top-to-bottom': class_methods_read_top_to_bottom_1.classMethodsReadTopToBottom,
236
461
  'consistent-callback-naming': consistent_callback_naming_1.default,
462
+ 'parallelize-async-operations': parallelize_async_operations_1.parallelizeAsyncOperations,
237
463
  'dynamic-https-errors': dynamic_https_errors_1.dynamicHttpsErrors,
464
+ 'enforce-empty-object-check': enforce_empty_object_check_1.enforceEmptyObjectCheck,
238
465
  'enforce-identifiable-firestore-type': enforce_identifiable_firestore_type_1.enforceIdentifiableFirestoreType,
239
466
  'enforce-callback-memo': enforce_callback_memo_1.default,
467
+ 'react-memoize-literals': react_memoize_literals_1.reactMemoizeLiterals,
240
468
  'enforce-react-type-naming': enforce_react_type_naming_1.enforceReactTypeNaming,
469
+ 'enforce-firestore-rules-get-access': enforce_firestore_rules_get_access_1.enforceFirestoreRulesGetAccess,
241
470
  'enforce-callable-types': enforce_callable_types_1.enforceCallableTypes,
471
+ 'enforce-console-error': enforce_console_error_1.enforceConsoleError,
242
472
  'enforce-dynamic-firebase-imports': enforce_dynamic_firebase_imports_1.enforceFirebaseImports,
243
473
  'enforce-mui-rounded-icons': enforce_mui_rounded_icons_1.enforceMuiRoundedIcons,
244
474
  'export-if-in-doubt': export_if_in_doubt_1.exportIfInDoubt,
@@ -251,6 +481,7 @@ module.exports = {
251
481
  'no-conditional-literals-in-jsx': no_conditional_literals_in_jsx_1.noConditionalLiteralsInJsx,
252
482
  'no-filter-without-return': no_filter_without_return_1.noFilterWithoutReturn,
253
483
  'no-hungarian': no_hungarian_1.noHungarian,
484
+ 'no-handler-suffix': no_handler_suffix_1.noHandlerSuffix,
254
485
  'no-misused-switch-case': no_misused_switch_case_1.noMisusedSwitchCase,
255
486
  'no-unpinned-dependencies': no_unpinned_dependencies_1.noUnpinnedDependencies,
256
487
  'no-unused-props': no_unused_props_1.noUnusedProps,
@@ -258,15 +489,23 @@ module.exports = {
258
489
  'no-uuidv4-base62-as-key': no_uuidv4_base62_as_key_1.noUuidv4Base62AsKey,
259
490
  'enforce-dynamic-file-naming': enforce_dynamic_file_naming_1.default,
260
491
  'prefer-fragment-shorthand': prefer_fragment_shorthand_1.preferFragmentShorthand,
492
+ 'prefer-getter-over-parameterless-method': prefer_getter_over_parameterless_method_1.preferGetterOverParameterlessMethod,
261
493
  'prefer-type-over-interface': prefer_type_over_interface_1.preferTypeOverInterface,
494
+ 'prefer-type-alias-over-typeof-constant': prefer_type_alias_over_typeof_constant_1.preferTypeAliasOverTypeofConstant,
262
495
  'require-memo': require_memo_1.requireMemo,
496
+ 'require-memoize-jsx-returners': require_memoize_jsx_returners_1.requireMemoizeJsxReturners,
497
+ 'no-unmemoized-memo-without-props': no_unmemoized_memo_without_props_1.noUnmemoizedMemoWithoutProps,
263
498
  'no-jsx-whitespace-literal': no_jsx_whitespace_literal_1.noJsxWhitespaceLiteral,
264
499
  'require-dynamic-firebase-imports': require_dynamic_firebase_imports_1.default,
265
500
  'require-https-error': require_https_error_1.default,
501
+ 'require-https-error-cause': require_https_error_cause_1.requireHttpsErrorCause,
266
502
  'use-custom-router': use_custom_router_1.useCustomRouter,
267
503
  'require-image-optimized': require_image_optimized_1.default,
268
504
  'require-usememo-object-literals': require_usememo_object_literals_1.requireUseMemoObjectLiterals,
505
+ 'memoize-root-level-hocs': memoize_root_level_hocs_1.memoizeRootLevelHocs,
269
506
  'enforce-safe-stringify': enforce_safe_stringify_1.enforceStableStringify,
507
+ 'enforce-early-destructuring': enforce_early_destructuring_1.enforceEarlyDestructuring,
508
+ 'enforce-storage-context': enforce_storage_context_1.enforceStorageContext,
270
509
  'avoid-utils-directory': avoid_utils_directory_1.avoidUtilsDirectory,
271
510
  'no-entire-object-hook-deps': no_entire_object_hook_deps_1.noEntireObjectHookDeps,
272
511
  'enforce-firestore-path-utils': enforce_firestore_path_utils_1.enforceFirestorePathUtils,
@@ -284,7 +523,10 @@ module.exports = {
284
523
  'enforce-realtimedb-path-utils': enforce_realtimedb_path_utils_1.enforceRealtimedbPathUtils,
285
524
  'enforce-memoize-async': enforce_memoize_async_1.enforceMemoizeAsync,
286
525
  'enforce-exported-function-types': enforce_exported_function_types_1.enforceExportedFunctionTypes,
526
+ 'no-redundant-annotation-assertion': no_redundant_annotation_assertion_1.noRedundantAnnotationAssertion,
287
527
  'no-redundant-param-types': no_redundant_param_types_1.noRedundantParamTypes,
528
+ 'no-redundant-this-params': no_redundant_this_params_1.noRedundantThisParams,
529
+ 'enforce-memoize-getters': enforce_memoize_getters_1.enforceMemoizeGetters,
288
530
  'no-class-instance-destructuring': no_class_instance_destructuring_1.noClassInstanceDestructuring,
289
531
  'no-firestore-object-arrays': no_firestore_object_arrays_1.noFirestoreObjectArrays,
290
532
  'no-memoize-on-static': no_memoize_on_static_1.noMemoizeOnStatic,
@@ -292,6 +534,7 @@ module.exports = {
292
534
  'no-jsx-in-hooks': no_jsx_in_hooks_1.noJsxInHooks,
293
535
  'enforce-assert-throws': enforce_assert_throws_1.enforceAssertThrows,
294
536
  'prefer-batch-operations': prefer_batch_operations_1.preferBatchOperations,
537
+ 'prefer-docsetter-setall': prefer_docsetter_setall_1.preferDocSetterSetAll,
295
538
  'no-complex-cloud-params': no_complex_cloud_params_1.noComplexCloudParams,
296
539
  'no-mixed-firestore-transactions': no_mixed_firestore_transactions_1.noMixedFirestoreTransactions,
297
540
  'enforce-firestore-facade': enforce_firestore_facade_1.enforceFirestoreFacade,
@@ -303,34 +546,74 @@ module.exports = {
303
546
  'require-hooks-default-params': require_hooks_default_params_1.requireHooksDefaultParams,
304
547
  'prefer-destructuring-no-class': prefer_destructuring_no_class_1.preferDestructuringNoClass,
305
548
  'enforce-render-hits-memoization': enforce_render_hits_memoization_1.enforceRenderHitsMemoization,
549
+ 'enforce-transform-memoization': enforce_transform_memoization_1.enforceTransformMemoization,
306
550
  'prefer-fragment-component': prefer_fragment_component_1.preferFragmentComponent,
307
551
  'react-usememo-should-be-component': react_usememo_should_be_component_1.reactUseMemoShouldBeComponent,
308
552
  'no-unnecessary-verb-suffix': no_unnecessary_verb_suffix_1.noUnnecessaryVerbSuffix,
309
- 'enforce-assertSafe-object-key': enforce_assertSafe_object_key_1.enforceAssertSafeObjectKey,
553
+ 'enforce-assert-safe-object-key': enforce_assert_safe_object_key_1.enforceAssertSafeObjectKey,
310
554
  'enforce-object-literal-as-const': enforce_object_literal_as_const_1.enforceObjectLiteralAsConst,
555
+ 'enforce-stable-hash-spread-props': enforce_stable_hash_spread_props_1.enforceStableHashSpreadProps,
311
556
  'enforce-positive-naming': enforce_positive_naming_1.enforcePositiveNaming,
312
557
  'no-type-assertion-returns': no_type_assertion_returns_1.noTypeAssertionReturns,
313
558
  'prefer-utility-function-over-private-static': prefer_utility_function_over_private_static_1.preferUtilityFunctionOverPrivateStatic,
314
559
  'enforce-microdiff': enforce_microdiff_1.enforceMicrodiff,
315
560
  'fast-deep-equal-over-microdiff': fast_deep_equal_over_microdiff_1.fastDeepEqualOverMicrodiff,
561
+ 'flatten-push-calls': flatten_push_calls_1.flattenPushCalls,
316
562
  'enforce-timestamp-now': enforce_timestamp_now_1.enforceTimestampNow,
563
+ 'enforce-unique-cursor-headers': enforce_unique_cursor_headers_1.enforceUniqueCursorHeaders,
564
+ 'enforce-typescript-markdown-code-blocks': enforce_typescript_markdown_code_blocks_1.enforceTypescriptMarkdownCodeBlocks,
317
565
  'no-always-true-false-conditions': no_always_true_false_conditions_1.noAlwaysTrueFalseConditions,
318
566
  'enforce-props-argument-name': enforce_props_argument_name_1.enforcePropsArgumentName,
567
+ 'enforce-props-naming-consistency': enforce_props_naming_consistency_1.enforcePropsNamingConsistency,
319
568
  'prefer-global-router-state-key': prefer_global_router_state_key_1.preferGlobalRouterStateKey,
320
569
  'prefer-usememo-over-useeffect-usestate': prefer_usememo_over_useeffect_usestate_1.preferUseMemoOverUseEffectUseState,
321
570
  'enforce-dynamic-imports': enforce_dynamic_imports_1.default,
322
571
  'ensure-pointer-events-none': ensure_pointer_events_none_1.ensurePointerEventsNone,
323
572
  'no-object-values-on-strings': no_object_values_on_strings_1.noObjectValuesOnStrings,
324
573
  'no-unnecessary-destructuring': no_unnecessary_destructuring_1.noUnnecessaryDestructuring,
574
+ 'no-unnecessary-destructuring-rename': no_unnecessary_destructuring_rename_1.noUnnecessaryDestructuringRename,
325
575
  'enforce-singular-type-names': enforce_singular_type_names_1.enforceSingularTypeNames,
576
+ 'prevent-children-clobber': prevent_children_clobber_1.preventChildrenClobber,
326
577
  'enforce-css-media-queries': enforce_css_media_queries_1.enforceCssMediaQueries,
327
578
  'omit-index-html': omit_index_html_1.omitIndexHtml,
328
579
  'enforce-id-capitalization': enforce_id_capitalization_1.enforceIdCapitalization,
329
580
  'no-unused-usestate': no_unused_usestate_1.noUnusedUseState,
581
+ 'no-useless-usememo-primitives': no_useless_usememo_primitives_1.noUselessUsememoPrimitives,
330
582
  'prefer-usecallback-over-usememo-for-functions': prefer_usecallback_over_usememo_for_functions_1.default,
583
+ 'no-usememo-for-pass-by-value': no_usememo_for_pass_by_value_1.noUsememoForPassByValue,
331
584
  'no-margin-properties': no_margin_properties_1.noMarginProperties,
332
585
  'enforce-boolean-naming-prefixes': enforce_boolean_naming_prefixes_1.enforceBooleanNamingPrefixes,
586
+ 'enforce-fieldpath-syntax-in-docsetter': enforce_fieldpath_syntax_in_docsetter_1.enforceFieldPathSyntaxInDocSetter,
333
587
  'no-undefined-null-passthrough': no_undefined_null_passthrough_1.noUndefinedNullPassthrough,
588
+ 'prefer-nullish-coalescing-boolean-props': prefer_nullish_coalescing_boolean_props_1.preferNullishCoalescingBooleanProps,
589
+ 'no-overridable-method-calls-in-constructor': no_overridable_method_calls_in_constructor_1.noOverridableMethodCallsInConstructor,
590
+ 'use-latest-callback': use_latest_callback_1.useLatestCallback,
591
+ 'no-empty-dependency-use-callbacks': no_empty_dependency_use_callbacks_1.noEmptyDependencyUseCallbacks,
592
+ 'enforce-querykey-ts': enforce_querykey_ts_1.enforceQueryKeyTs,
593
+ 'no-stale-state-across-await': no_stale_state_across_await_1.noStaleStateAcrossAwait,
594
+ 'no-separate-loading-state': no_separate_loading_state_1.noSeparateLoadingState,
595
+ 'optimize-object-boolean-conditions': optimize_object_boolean_conditions_1.optimizeObjectBooleanConditions,
596
+ 'prefer-params-over-parent-id': prefer_params_over_parent_id_1.preferParamsOverParentId,
597
+ 'prefer-field-paths-in-transforms': prefer_field_paths_in_transforms_1.preferFieldPathsInTransforms,
598
+ 'no-misleading-boolean-prefixes': no_misleading_boolean_prefixes_1.noMisleadingBooleanPrefixes,
599
+ 'prefer-url-tostring-over-tojson': prefer_url_tostring_over_tojson_1.preferUrlToStringOverToJson,
600
+ 'prefer-next-dynamic': prefer_next_dynamic_1.preferNextDynamic,
601
+ 'jsdoc-above-field': jsdoc_above_field_1.jsdocAboveField,
602
+ 'no-redundant-usecallback-wrapper': no_redundant_usecallback_wrapper_1.default,
603
+ 'no-res-error-status-in-onrequest': no_res_error_status_in_onrequest_1.requireHttpsErrorInOnRequestHandlers,
604
+ 'no-array-length-in-deps': no_array_length_in_deps_1.noArrayLengthInDeps,
605
+ 'prefer-memoized-props': prefer_memoized_props_1.preferMemoizedProps,
606
+ 'prefer-use-deep-compare-memo': prefer_use_deep_compare_memo_1.preferUseDeepCompareMemo,
607
+ 'memo-nested-react-components': memo_nested_react_components_1.memoNestedReactComponents,
608
+ 'memo-compare-deeply-complex-props': memo_compare_deeply_complex_props_1.memoCompareDeeplyComplexProps,
609
+ 'no-circular-references': no_circular_references_1.noCircularReferences,
610
+ 'no-console-error': no_console_error_1.noConsoleError,
611
+ 'no-try-catch-already-exists-in-transaction': no_try_catch_already_exists_in_transaction_1.noTryCatchAlreadyExistsInTransaction,
612
+ 'no-curly-brackets-around-commented-properties': no_curly_brackets_around_commented_properties_1.noCurlyBracketsAroundCommentedProperties,
613
+ 'no-passthrough-getters': no_passthrough_getters_1.noPassthroughGetters,
614
+ 'vertically-group-related-functions': vertically_group_related_functions_1.verticallyGroupRelatedFunctions,
615
+ 'no-static-constants-in-dynamic-files': no_static_constants_in_dynamic_files_1.default,
616
+ 'test-file-location-enforcement': test_file_location_enforcement_1.testFileLocationEnforcement,
334
617
  },
335
618
  };
336
619
  //# sourceMappingURL=index.js.map