@blumintinc/eslint-plugin-blumint 1.13.0 → 1.15.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 (199) hide show
  1. package/README.md +169 -139
  2. package/lib/index.js +200 -9
  3. package/lib/rules/array-methods-this-context.js +1 -1
  4. package/lib/rules/avoid-utils-directory.js +0 -4
  5. package/lib/rules/class-methods-read-top-to-bottom.js +24 -5
  6. package/lib/rules/consistent-callback-naming.js +43 -4
  7. package/lib/rules/dynamic-https-errors.d.ts +1 -1
  8. package/lib/rules/dynamic-https-errors.js +134 -44
  9. package/lib/rules/enforce-assert-safe-object-key.js +11 -11
  10. package/lib/rules/enforce-boolean-naming-prefixes.js +11 -235
  11. package/lib/rules/enforce-callback-memo.js +1 -1
  12. package/lib/rules/enforce-centralized-mock-firestore.js +1 -1
  13. package/lib/rules/enforce-console-error.js +35 -7
  14. package/lib/rules/enforce-date-ttime.d.ts +1 -0
  15. package/lib/rules/enforce-date-ttime.js +156 -0
  16. package/lib/rules/enforce-dynamic-file-naming.d.ts +2 -0
  17. package/lib/rules/enforce-dynamic-file-naming.js +53 -28
  18. package/lib/rules/enforce-dynamic-firebase-imports.d.ts +2 -1
  19. package/lib/rules/enforce-dynamic-firebase-imports.js +3 -2
  20. package/lib/rules/enforce-early-destructuring.d.ts +2 -0
  21. package/lib/rules/enforce-early-destructuring.js +980 -0
  22. package/lib/rules/enforce-empty-object-check.d.ts +11 -0
  23. package/lib/rules/enforce-empty-object-check.js +502 -0
  24. package/lib/rules/enforce-exported-function-types.js +1 -1
  25. package/lib/rules/enforce-f-extension-for-entry-points.d.ts +8 -0
  26. package/lib/rules/enforce-f-extension-for-entry-points.js +283 -0
  27. package/lib/rules/enforce-fieldpath-syntax-in-docsetter.js +100 -50
  28. package/lib/rules/enforce-firestore-doc-ref-generic.js +15 -3
  29. package/lib/rules/enforce-firestore-facade.js +4 -2
  30. package/lib/rules/enforce-firestore-set-merge.js +3 -4
  31. package/lib/rules/enforce-global-constants.js +4 -4
  32. package/lib/rules/enforce-id-capitalization.js +1 -1
  33. package/lib/rules/enforce-identifiable-firestore-type.js +108 -58
  34. package/lib/rules/enforce-memoize-async.js +71 -21
  35. package/lib/rules/enforce-memoize-getters.js +39 -15
  36. package/lib/rules/enforce-microdiff.js +1 -1
  37. package/lib/rules/enforce-object-literal-as-const.js +4 -4
  38. package/lib/rules/enforce-positive-naming.js +4 -0
  39. package/lib/rules/enforce-props-argument-name.js +44 -18
  40. package/lib/rules/enforce-safe-stringify.js +1 -1
  41. package/lib/rules/enforce-serializable-params.js +3 -3
  42. package/lib/rules/enforce-singular-type-names.js +1 -1
  43. package/lib/rules/enforce-stable-hash-spread-props.d.ts +13 -0
  44. package/lib/rules/enforce-stable-hash-spread-props.js +342 -0
  45. package/lib/rules/enforce-storage-context.d.ts +9 -0
  46. package/lib/rules/enforce-storage-context.js +646 -0
  47. package/lib/rules/enforce-timestamp-now.js +23 -7
  48. package/lib/rules/enforce-transform-memoization.d.ts +4 -0
  49. package/lib/rules/enforce-transform-memoization.js +416 -0
  50. package/lib/rules/enforce-typescript-markdown-code-blocks.js +7 -3
  51. package/lib/rules/enforce-unique-cursor-headers.d.ts +16 -0
  52. package/lib/rules/enforce-unique-cursor-headers.js +365 -0
  53. package/lib/rules/enforce-verb-noun-naming.js +3818 -4644
  54. package/lib/rules/ensure-pointer-events-none.js +28 -2
  55. package/lib/rules/export-if-in-doubt.js +27 -4
  56. package/lib/rules/extract-global-constants.js +40 -13
  57. package/lib/rules/fast-deep-equal-over-microdiff.js +29 -39
  58. package/lib/rules/firestore-transaction-reads-before-writes.js +50 -4
  59. package/lib/rules/flatten-push-calls.d.ts +2 -0
  60. package/lib/rules/flatten-push-calls.js +428 -0
  61. package/lib/rules/global-const-style.js +66 -23
  62. package/lib/rules/jsdoc-above-field.d.ts +11 -0
  63. package/lib/rules/jsdoc-above-field.js +208 -0
  64. package/lib/rules/key-only-outermost-element.js +21 -3
  65. package/lib/rules/logical-top-to-bottom-grouping.d.ts +5 -0
  66. package/lib/rules/logical-top-to-bottom-grouping.js +1258 -0
  67. package/lib/rules/memo-compare-deeply-complex-props.d.ts +3 -0
  68. package/lib/rules/memo-compare-deeply-complex-props.js +801 -0
  69. package/lib/rules/memo-nested-react-components.d.ts +8 -0
  70. package/lib/rules/memo-nested-react-components.js +415 -0
  71. package/lib/rules/no-always-true-false-conditions.d.ts +2 -1
  72. package/lib/rules/no-always-true-false-conditions.js +68 -8
  73. package/lib/rules/no-array-length-in-deps.js +9 -3
  74. package/lib/rules/no-async-foreach.js +215 -12
  75. package/lib/rules/no-circular-references.d.ts +2 -1
  76. package/lib/rules/no-circular-references.js +31 -32
  77. package/lib/rules/no-class-instance-destructuring.js +55 -12
  78. package/lib/rules/no-complex-cloud-params.js +7 -3
  79. package/lib/rules/no-compositing-layer-props.js +2 -2
  80. package/lib/rules/no-conditional-literals-in-jsx.js +37 -12
  81. package/lib/rules/no-console-error.d.ts +9 -0
  82. package/lib/rules/no-console-error.js +527 -0
  83. package/lib/rules/no-curly-brackets-around-commented-properties.d.ts +2 -0
  84. package/lib/rules/no-curly-brackets-around-commented-properties.js +258 -0
  85. package/lib/rules/no-empty-dependency-use-callbacks.d.ts +11 -0
  86. package/lib/rules/no-empty-dependency-use-callbacks.js +576 -0
  87. package/lib/rules/no-entire-object-hook-deps.js +52 -7
  88. package/lib/rules/no-excessive-parent-chain.js +4 -1
  89. package/lib/rules/no-explicit-return-type.d.ts +2 -1
  90. package/lib/rules/no-explicit-return-type.js +215 -26
  91. package/lib/rules/no-filter-without-return.js +5 -1
  92. package/lib/rules/no-firestore-jest-mock.d.ts +2 -1
  93. package/lib/rules/no-firestore-jest-mock.js +126 -8
  94. package/lib/rules/no-firestore-object-arrays.js +67 -12
  95. package/lib/rules/no-handler-suffix.d.ts +12 -0
  96. package/lib/rules/no-handler-suffix.js +305 -0
  97. package/lib/rules/no-hungarian.js +1 -1
  98. package/lib/rules/no-inline-component-prop.d.ts +10 -0
  99. package/lib/rules/no-inline-component-prop.js +465 -0
  100. package/lib/rules/no-jsx-in-hooks.js +6 -1
  101. package/lib/rules/no-jsx-whitespace-literal.js +8 -2
  102. package/lib/rules/no-margin-properties.js +6 -6
  103. package/lib/rules/no-memoize-on-static.js +9 -1
  104. package/lib/rules/no-misleading-boolean-prefixes.js +7 -3
  105. package/lib/rules/no-misused-switch-case.js +22 -1
  106. package/lib/rules/no-mixed-firestore-transactions.d.ts +3 -1
  107. package/lib/rules/no-mixed-firestore-transactions.js +296 -34
  108. package/lib/rules/no-mock-firebase-admin.js +5 -2
  109. package/lib/rules/no-object-values-on-strings.js +10 -2
  110. package/lib/rules/no-overridable-method-calls-in-constructor.js +29 -17
  111. package/lib/rules/no-passthrough-getters.d.ts +2 -2
  112. package/lib/rules/no-passthrough-getters.js +120 -2
  113. package/lib/rules/no-redundant-annotation-assertion.d.ts +2 -0
  114. package/lib/rules/no-redundant-annotation-assertion.js +402 -0
  115. package/lib/rules/no-redundant-param-types.js +16 -6
  116. package/lib/rules/no-redundant-this-params.d.ts +3 -0
  117. package/lib/rules/no-redundant-this-params.js +508 -0
  118. package/lib/rules/no-redundant-usecallback-wrapper.js +16 -3
  119. package/lib/rules/no-res-error-status-in-onrequest.d.ts +4 -0
  120. package/lib/rules/no-res-error-status-in-onrequest.js +521 -0
  121. package/lib/rules/no-restricted-properties-fix.js +11 -10
  122. package/lib/rules/no-separate-loading-state.js +7 -16
  123. package/lib/rules/no-stale-state-across-await.js +1 -1
  124. package/lib/rules/no-type-assertion-returns.js +43 -49
  125. package/lib/rules/no-undefined-null-passthrough.js +61 -31
  126. package/lib/rules/no-unmemoized-memo-without-props.d.ts +8 -0
  127. package/lib/rules/no-unmemoized-memo-without-props.js +426 -0
  128. package/lib/rules/no-unnecessary-destructuring-rename.d.ts +2 -0
  129. package/lib/rules/no-unnecessary-destructuring-rename.js +344 -0
  130. package/lib/rules/no-unnecessary-destructuring.js +14 -4
  131. package/lib/rules/no-unnecessary-verb-suffix.js +2 -1
  132. package/lib/rules/no-unpinned-dependencies.js +36 -5
  133. package/lib/rules/no-unused-props.d.ts +2 -2
  134. package/lib/rules/no-unused-props.js +295 -91
  135. package/lib/rules/no-unused-usestate.js +6 -2
  136. package/lib/rules/no-useless-fragment.js +28 -2
  137. package/lib/rules/no-useless-usememo-primitives.d.ts +9 -0
  138. package/lib/rules/no-useless-usememo-primitives.js +393 -0
  139. package/lib/rules/no-usememo-for-pass-by-value.d.ts +13 -0
  140. package/lib/rules/no-usememo-for-pass-by-value.js +757 -0
  141. package/lib/rules/no-uuidv4-base62-as-key.js +18 -13
  142. package/lib/rules/omit-index-html.d.ts +2 -1
  143. package/lib/rules/omit-index-html.js +62 -7
  144. package/lib/rules/optimize-object-boolean-conditions.js +6 -4
  145. package/lib/rules/parallelize-async-operations.js +143 -59
  146. package/lib/rules/prefer-batch-operations.d.ts +1 -3
  147. package/lib/rules/prefer-batch-operations.js +32 -5
  148. package/lib/rules/prefer-block-comments-for-declarations.js +9 -4
  149. package/lib/rules/prefer-clone-deep.js +3 -3
  150. package/lib/rules/prefer-destructuring-no-class.d.ts +2 -1
  151. package/lib/rules/prefer-destructuring-no-class.js +244 -59
  152. package/lib/rules/prefer-docsetter-setall.d.ts +2 -0
  153. package/lib/rules/prefer-docsetter-setall.js +243 -0
  154. package/lib/rules/prefer-field-paths-in-transforms.js +4 -3
  155. package/lib/rules/prefer-fragment-component.js +1 -1
  156. package/lib/rules/prefer-fragment-shorthand.js +2 -1
  157. package/lib/rules/prefer-getter-over-parameterless-method.d.ts +13 -0
  158. package/lib/rules/prefer-getter-over-parameterless-method.js +648 -0
  159. package/lib/rules/prefer-global-router-state-key.js +88 -13
  160. package/lib/rules/prefer-memoized-props.d.ts +3 -0
  161. package/lib/rules/prefer-memoized-props.js +445 -0
  162. package/lib/rules/prefer-next-dynamic.js +60 -69
  163. package/lib/rules/prefer-nullish-coalescing-boolean-props.js +118 -8
  164. package/lib/rules/prefer-nullish-coalescing-override.d.ts +2 -1
  165. package/lib/rules/prefer-nullish-coalescing-override.js +11 -5
  166. package/lib/rules/prefer-params-over-parent-id.js +221 -172
  167. package/lib/rules/prefer-settings-object.js +27 -10
  168. package/lib/rules/prefer-type-alias-over-typeof-constant.js +9 -0
  169. package/lib/rules/prefer-type-over-interface.js +7 -2
  170. package/lib/rules/prefer-url-tostring-over-tojson.js +6 -3
  171. package/lib/rules/prefer-use-deep-compare-memo.js +8 -5
  172. package/lib/rules/prefer-usecallback-over-usememo-for-functions.js +1 -1
  173. package/lib/rules/prefer-usememo-over-useeffect-usestate.js +1 -1
  174. package/lib/rules/prefer-utility-function-over-private-static.js +34 -2
  175. package/lib/rules/prevent-children-clobber.d.ts +2 -0
  176. package/lib/rules/prevent-children-clobber.js +540 -0
  177. package/lib/rules/react-memoize-literals.d.ts +4 -0
  178. package/lib/rules/react-memoize-literals.js +614 -0
  179. package/lib/rules/react-usememo-should-be-component.js +2 -2
  180. package/lib/rules/require-hooks-default-params.js +17 -16
  181. package/lib/rules/require-https-error-cause.d.ts +4 -0
  182. package/lib/rules/require-https-error-cause.js +155 -0
  183. package/lib/rules/require-https-error.js +43 -21
  184. package/lib/rules/require-image-optimized.js +1 -1
  185. package/lib/rules/require-memo.js +18 -10
  186. package/lib/rules/require-memoize-jsx-returners.d.ts +3 -0
  187. package/lib/rules/require-memoize-jsx-returners.js +485 -0
  188. package/lib/rules/require-usememo-object-literals.js +2 -3
  189. package/lib/rules/test-file-location-enforcement.js +1 -1
  190. package/lib/rules/use-latest-callback.js +6 -5
  191. package/lib/rules/vertically-group-related-functions.d.ts +16 -0
  192. package/lib/rules/vertically-group-related-functions.js +480 -0
  193. package/lib/utils/ASTHelpers.d.ts +47 -2
  194. package/lib/utils/ASTHelpers.js +370 -112
  195. package/lib/utils/getMethodName.d.ts +27 -0
  196. package/lib/utils/getMethodName.js +35 -0
  197. package/lib/utils/tsTypeClassifier.d.ts +30 -0
  198. package/lib/utils/tsTypeClassifier.js +149 -0
  199. package/package.json +3 -1
@@ -0,0 +1,27 @@
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
+ /**
3
+ * Extracts a stable, human-readable name from method/property/member nodes.
4
+ * Use the options to align prefixing and computed-key handling with rule semantics.
5
+ */
6
+ export type GetMethodNameOptions = {
7
+ /**
8
+ * Prefix applied to private identifiers:
9
+ * - undefined (default): empty prefix
10
+ * - null: return the raw name without any prefix
11
+ * - string (e.g., '#'): prepend the given prefix
12
+ */
13
+ privateIdentifierPrefix?: string | null;
14
+ /**
15
+ * When true (default), computed keys fall back to source text; when false, returns empty string.
16
+ */
17
+ computedFallbackToText?: boolean;
18
+ };
19
+ export declare const getMethodName: (method: TSESTree.MethodDefinition | TSESTree.TSAbstractMethodDefinition | TSESTree.PropertyDefinition, sourceCode: Readonly<{
20
+ getText: (node: TSESTree.Node) => string;
21
+ }>, options?: GetMethodNameOptions) => string;
22
+ export declare const getPropertyName: (key: TSESTree.PropertyName | TSESTree.PrivateIdentifier, sourceCode: Readonly<{
23
+ getText: (node: TSESTree.Node) => string;
24
+ }>, options?: GetMethodNameOptions) => string;
25
+ export declare const getMemberExpressionName: (member: TSESTree.MemberExpression, sourceCode: Readonly<{
26
+ getText: (node: TSESTree.Node) => string;
27
+ }>, options?: GetMethodNameOptions) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMemberExpressionName = exports.getPropertyName = exports.getMethodName = void 0;
4
+ const utils_1 = require("@typescript-eslint/utils");
5
+ const getKeyName = (key, sourceCode, { privateIdentifierPrefix = '', computedFallbackToText = true, }) => {
6
+ if (key.type === utils_1.AST_NODE_TYPES.Identifier) {
7
+ return key.name;
8
+ }
9
+ if (key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier) {
10
+ if (privateIdentifierPrefix === null) {
11
+ return key.name;
12
+ }
13
+ return `${privateIdentifierPrefix}${key.name}`;
14
+ }
15
+ if (key.type === utils_1.AST_NODE_TYPES.Literal) {
16
+ if (key.value === null || key.value === undefined) {
17
+ return '';
18
+ }
19
+ return String(key.value);
20
+ }
21
+ return computedFallbackToText ? sourceCode.getText(key) : '';
22
+ };
23
+ const getMethodName = (method, sourceCode, options = {}) => {
24
+ return getKeyName(method.key, sourceCode, options);
25
+ };
26
+ exports.getMethodName = getMethodName;
27
+ const getPropertyName = (key, sourceCode, options = {}) => {
28
+ return getKeyName(key, sourceCode, options);
29
+ };
30
+ exports.getPropertyName = getPropertyName;
31
+ const getMemberExpressionName = (member, sourceCode, options = {}) => {
32
+ return getKeyName(member.property, sourceCode, options);
33
+ };
34
+ exports.getMemberExpressionName = getMemberExpressionName;
35
+ //# sourceMappingURL=getMethodName.js.map
@@ -0,0 +1,30 @@
1
+ import { TSESTree, ParserServices } from '@typescript-eslint/utils';
2
+ import * as ts from 'typescript';
3
+ /**
4
+ * Re-exporting the typescript namespace type to avoid TS4078.
5
+ */
6
+ export type TypeScriptModule = typeof ts;
7
+ export type ClassifierOptions = {
8
+ ignoreSymbol?: boolean;
9
+ };
10
+ export type ClassificationResult = {
11
+ status: 'primitive' | 'non-primitive' | 'unknown';
12
+ kind: string;
13
+ };
14
+ /**
15
+ * Describes the kind of a primitive type for error messages.
16
+ */
17
+ export declare function describeTypeKind(t: ts.Type, tsModule: TypeScriptModule, options: ClassifierOptions): string;
18
+ /**
19
+ * Classifies a TypeScript type as primitive, non-primitive, or unknown.
20
+ */
21
+ export declare function classifyType(t: ts.Type, tsModule: TypeScriptModule, options: ClassifierOptions): 'primitive' | 'non-primitive' | 'unknown';
22
+ /**
23
+ * Classifies the type of an expression using TypeScript's type checker.
24
+ */
25
+ export declare function classifyExpressionType(expr: TSESTree.Expression, { checker, tsModule, parserServices, options, }: {
26
+ checker: ts.TypeChecker;
27
+ tsModule: TypeScriptModule;
28
+ parserServices: ParserServices;
29
+ options: ClassifierOptions;
30
+ }): ClassificationResult;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifyExpressionType = exports.classifyType = exports.describeTypeKind = void 0;
4
+ /**
5
+ * Describes the kind of a primitive type for error messages.
6
+ */
7
+ function describeTypeKind(t, tsModule, options) {
8
+ if (t.isUnion()) {
9
+ const kinds = new Set(t.types
10
+ .map((part) => describeTypeKind(part, tsModule, options))
11
+ .filter((k) => k !== 'primitive value'));
12
+ if (kinds.size === 0) {
13
+ return 'primitive value';
14
+ }
15
+ if (kinds.size === 1) {
16
+ return kinds.values().next().value ?? 'primitive value';
17
+ }
18
+ // Multiple distinct primitive kinds
19
+ const sortedKinds = Array.from(kinds).sort();
20
+ return `${sortedKinds.join(' or ')}`;
21
+ }
22
+ const flags = t.flags;
23
+ if (flags & tsModule.TypeFlags.String)
24
+ return 'string value';
25
+ if (flags & tsModule.TypeFlags.StringLiteral)
26
+ return 'string value';
27
+ if (flags & tsModule.TypeFlags.TemplateLiteral)
28
+ return 'string value';
29
+ if (flags & tsModule.TypeFlags.Number)
30
+ return 'number value';
31
+ if (flags & tsModule.TypeFlags.NumberLiteral)
32
+ return 'number value';
33
+ if (flags & tsModule.TypeFlags.Enum)
34
+ return 'number value';
35
+ if (flags & tsModule.TypeFlags.EnumLiteral)
36
+ return 'number value';
37
+ if (flags & tsModule.TypeFlags.Boolean)
38
+ return 'boolean value';
39
+ if (flags & tsModule.TypeFlags.BooleanLiteral)
40
+ return 'boolean value';
41
+ if (flags & tsModule.TypeFlags.BigInt)
42
+ return 'bigint value';
43
+ if (flags & tsModule.TypeFlags.BigIntLiteral)
44
+ return 'bigint value';
45
+ if (flags & tsModule.TypeFlags.Null)
46
+ return 'null value';
47
+ if (flags & tsModule.TypeFlags.Undefined)
48
+ return 'undefined value';
49
+ if (flags &
50
+ (tsModule.TypeFlags.ESSymbol | tsModule.TypeFlags.UniqueESSymbol)) {
51
+ return 'symbol value';
52
+ }
53
+ return 'primitive value';
54
+ }
55
+ exports.describeTypeKind = describeTypeKind;
56
+ /**
57
+ * Classifies a TypeScript type as primitive, non-primitive, or unknown.
58
+ */
59
+ function classifyType(t, tsModule, options) {
60
+ if (t.isUnion()) {
61
+ let sawUnknown = false;
62
+ for (const part of t.types) {
63
+ const result = classifyType(part, tsModule, options);
64
+ if (result === 'non-primitive') {
65
+ return 'non-primitive';
66
+ }
67
+ if (result === 'unknown') {
68
+ sawUnknown = true;
69
+ }
70
+ }
71
+ return sawUnknown ? 'unknown' : 'primitive';
72
+ }
73
+ if (t.isIntersection())
74
+ return 'non-primitive';
75
+ const flags = t.getFlags();
76
+ if (flags &
77
+ (tsModule.TypeFlags.Any |
78
+ tsModule.TypeFlags.Unknown |
79
+ tsModule.TypeFlags.Never |
80
+ tsModule.TypeFlags.TypeParameter)) {
81
+ return 'unknown';
82
+ }
83
+ if (flags &
84
+ (tsModule.TypeFlags.Object |
85
+ tsModule.TypeFlags.NonPrimitive |
86
+ tsModule.TypeFlags.Index |
87
+ tsModule.TypeFlags.IndexedAccess |
88
+ tsModule.TypeFlags.Conditional |
89
+ tsModule.TypeFlags.Substitution)) {
90
+ return 'non-primitive';
91
+ }
92
+ if (flags & tsModule.TypeFlags.Void) {
93
+ return 'unknown';
94
+ }
95
+ if (flags &
96
+ (tsModule.TypeFlags.ESSymbol | tsModule.TypeFlags.UniqueESSymbol)) {
97
+ return options.ignoreSymbol ? 'non-primitive' : 'primitive';
98
+ }
99
+ if (flags &
100
+ (tsModule.TypeFlags.String |
101
+ tsModule.TypeFlags.StringLiteral |
102
+ tsModule.TypeFlags.TemplateLiteral |
103
+ tsModule.TypeFlags.Number |
104
+ tsModule.TypeFlags.NumberLiteral |
105
+ tsModule.TypeFlags.Enum |
106
+ tsModule.TypeFlags.EnumLiteral |
107
+ tsModule.TypeFlags.Boolean |
108
+ tsModule.TypeFlags.BooleanLiteral |
109
+ tsModule.TypeFlags.BigInt |
110
+ tsModule.TypeFlags.BigIntLiteral |
111
+ tsModule.TypeFlags.Null |
112
+ tsModule.TypeFlags.Undefined)) {
113
+ return 'primitive';
114
+ }
115
+ return 'unknown';
116
+ }
117
+ exports.classifyType = classifyType;
118
+ /**
119
+ * Classifies the type of an expression using TypeScript's type checker.
120
+ */
121
+ function classifyExpressionType(expr, { checker, tsModule, parserServices, options, }) {
122
+ try {
123
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(expr);
124
+ if (!tsNode) {
125
+ /* istanbul ignore next -- rare when parser services mismatch */
126
+ return { status: 'unknown', kind: 'unknown value' };
127
+ }
128
+ const type = checker.getTypeAtLocation(tsNode);
129
+ const classification = classifyType(type, tsModule, options);
130
+ if (classification === 'primitive') {
131
+ return {
132
+ status: 'primitive',
133
+ kind: describeTypeKind(type, tsModule, options),
134
+ };
135
+ }
136
+ return {
137
+ status: classification,
138
+ kind: classification === 'non-primitive'
139
+ ? 'non-primitive value'
140
+ : 'unknown value',
141
+ };
142
+ }
143
+ catch {
144
+ /* istanbul ignore next -- defensive fallback when type evaluation fails */
145
+ return { status: 'unknown', kind: 'unknown value' };
146
+ }
147
+ }
148
+ exports.classifyExpressionType = classifyExpressionType;
149
+ //# sourceMappingURL=tsTypeClassifier.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blumintinc/eslint-plugin-blumint",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "description": "Custom eslint rules for use within BluMint",
5
5
  "author": {
6
6
  "name": "Brodie McGuire",
@@ -33,6 +33,8 @@
33
33
  "test": "jest --passWithNoTests --reporters=default --reporters=jest-junit",
34
34
  "test:ci": "jest --ci --passWithNoTests --reporters=default --reporters=jest-junit",
35
35
  "address-review": "tsx ./.github/scripts/address-review.ts",
36
+ "address-merge-conflicts": "tsx ./.github/scripts/address-merge-conflicts.ts",
37
+ "check-merge-conflicts": "bash ./scripts/check-merge-conflicts.sh",
36
38
  "merge-review": "tsx ./.github/scripts/merge-review.ts",
37
39
  "fetch-unresolved-comments": "./scripts/pr-check-comments.sh",
38
40
  "fetch-unresolved-bot-comments": "./scripts/pr-check-bot-comments.sh",