@eslint-react/var 1.24.0-next.0 → 1.24.0-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -2,6 +2,8 @@ import { _ } from '@eslint-react/eff';
2
2
  import { Scope, Variable } from '@typescript-eslint/scope-manager';
3
3
  import { TSESTree } from '@typescript-eslint/types';
4
4
 
5
+ declare function findPropertyInProperties(name: string, properties: (TSESTree.Property | TSESTree.RestElement | TSESTree.SpreadElement)[], initialScope: Scope, seen?: Set<string>): (typeof properties)[number] | _;
6
+
5
7
  declare const findVariable: {
6
8
  (initialScope: Scope): (nameOrNode: string | TSESTree.Identifier | _) => Variable | _;
7
9
  (nameOrNode: string | TSESTree.Identifier | _, initialScope: Scope): Variable | _;
@@ -108,4 +110,4 @@ declare const ValueConstructionHint: {
108
110
  */
109
111
  declare function getValueConstruction(node: TSESTree.Node | _, initialScope: Scope, hint?: bigint): ValueConstruction | _;
110
112
 
111
- export { type StaticValue, type ValueConstruction, ValueConstructionHint, findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
113
+ export { type StaticValue, type ValueConstruction, ValueConstructionHint, findPropertyInProperties, findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ import { _ } from '@eslint-react/eff';
2
2
  import { Scope, Variable } from '@typescript-eslint/scope-manager';
3
3
  import { TSESTree } from '@typescript-eslint/types';
4
4
 
5
+ declare function findPropertyInProperties(name: string, properties: (TSESTree.Property | TSESTree.RestElement | TSESTree.SpreadElement)[], initialScope: Scope, seen?: Set<string>): (typeof properties)[number] | _;
6
+
5
7
  declare const findVariable: {
6
8
  (initialScope: Scope): (nameOrNode: string | TSESTree.Identifier | _) => Variable | _;
7
9
  (nameOrNode: string | TSESTree.Identifier | _, initialScope: Scope): Variable | _;
@@ -108,4 +110,4 @@ declare const ValueConstructionHint: {
108
110
  */
109
111
  declare function getValueConstruction(node: TSESTree.Node | _, initialScope: Scope, hint?: bigint): ValueConstruction | _;
110
112
 
111
- export { type StaticValue, type ValueConstruction, ValueConstructionHint, findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
113
+ export { type StaticValue, type ValueConstruction, ValueConstructionHint, findPropertyInProperties, findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ var types = require('@typescript-eslint/types');
3
4
  var eff = require('@eslint-react/eff');
4
5
  var ASTUtils = require('@typescript-eslint/utils/ast-utils');
5
- var types = require('@typescript-eslint/types');
6
6
  var AST3 = require('@eslint-react/ast');
7
7
  var scopeManager = require('@typescript-eslint/scope-manager');
8
8
 
@@ -27,11 +27,67 @@ function _interopNamespace(e) {
27
27
  var ASTUtils__namespace = /*#__PURE__*/_interopNamespace(ASTUtils);
28
28
  var AST3__namespace = /*#__PURE__*/_interopNamespace(AST3);
29
29
 
30
- // src/find-variable.ts
30
+ // src/find-property-in-properties.ts
31
31
  var findVariable2 = eff.dual(2, (nameOrNode, initialScope) => {
32
- if (nameOrNode === eff._) return eff._;
32
+ if (nameOrNode == null) return eff._;
33
33
  return ASTUtils__namespace.findVariable(initialScope, nameOrNode) ?? eff._;
34
34
  });
35
+ function getVariableNode(variable, at) {
36
+ if (variable == null) return eff._;
37
+ const def = variable.defs.at(at);
38
+ if (def == null) return eff._;
39
+ switch (true) {
40
+ case (def.type === scopeManager.DefinitionType.FunctionName && def.node.type === types.AST_NODE_TYPES.FunctionDeclaration):
41
+ return def.node;
42
+ case (def.type === scopeManager.DefinitionType.ClassName && def.node.type === types.AST_NODE_TYPES.ClassDeclaration):
43
+ return def.node;
44
+ case (def.type === scopeManager.DefinitionType.Parameter && AST3__namespace.isFunction(def.node)):
45
+ return def.node;
46
+ case ("init" in def.node && def.node.init != null && !("declarations" in def.node.init)):
47
+ return def.node.init;
48
+ default:
49
+ return eff._;
50
+ }
51
+ }
52
+
53
+ // src/find-property-in-properties.ts
54
+ function findPropertyInProperties(name, properties, initialScope, seen = /* @__PURE__ */ new Set()) {
55
+ return properties.findLast((prop) => {
56
+ if (prop.type === types.AST_NODE_TYPES.Property) {
57
+ return "name" in prop.key && prop.key.name === name;
58
+ }
59
+ if (prop.type === types.AST_NODE_TYPES.SpreadElement) {
60
+ switch (prop.argument.type) {
61
+ case types.AST_NODE_TYPES.Identifier: {
62
+ if (seen.has(prop.argument.name)) return false;
63
+ const variable = findVariable2(prop.argument.name, initialScope);
64
+ const variableNode = getVariableNode(variable, 0);
65
+ if (variableNode?.type === types.AST_NODE_TYPES.ObjectExpression) {
66
+ seen.add(prop.argument.name);
67
+ return findPropertyInProperties(
68
+ name,
69
+ variableNode.properties,
70
+ initialScope,
71
+ seen
72
+ ) != null;
73
+ }
74
+ return false;
75
+ }
76
+ case types.AST_NODE_TYPES.ObjectExpression: {
77
+ return findPropertyInProperties(
78
+ name,
79
+ prop.argument.properties,
80
+ initialScope,
81
+ seen
82
+ ) != null;
83
+ }
84
+ default:
85
+ return false;
86
+ }
87
+ }
88
+ return false;
89
+ });
90
+ }
35
91
 
36
92
  // src/get-child-scopes.ts
37
93
  function getChidScopes(scope) {
@@ -42,7 +98,7 @@ function getChidScopes(scope) {
42
98
  return scopes;
43
99
  }
44
100
  function getVariableDeclaratorId(node, prev) {
45
- if (node === eff._) return eff._;
101
+ if (node == null) return eff._;
46
102
  switch (true) {
47
103
  case (node.type === types.AST_NODE_TYPES.VariableDeclarator && node.init === prev):
48
104
  return node.id;
@@ -54,23 +110,6 @@ function getVariableDeclaratorId(node, prev) {
54
110
  return getVariableDeclaratorId(node.parent, node);
55
111
  }
56
112
  }
57
- function getVariableNode(variable, at) {
58
- if (variable === eff._) return eff._;
59
- const def = variable.defs.at(at);
60
- if (def === eff._) return eff._;
61
- switch (true) {
62
- case (def.type === scopeManager.DefinitionType.FunctionName && def.node.type === types.AST_NODE_TYPES.FunctionDeclaration):
63
- return def.node;
64
- case (def.type === scopeManager.DefinitionType.ClassName && def.node.type === types.AST_NODE_TYPES.ClassDeclaration):
65
- return def.node;
66
- case (def.type === scopeManager.DefinitionType.Parameter && AST3__namespace.isFunction(def.node)):
67
- return def.node;
68
- case ("init" in def.node && def.node.init != null && !("declarations" in def.node.init)):
69
- return def.node.init;
70
- default:
71
- return eff._;
72
- }
73
- }
74
113
  function getVariables(initialScope) {
75
114
  let scope = initialScope;
76
115
  const variables = [...scope.variables];
@@ -82,7 +121,7 @@ function getVariables(initialScope) {
82
121
  }
83
122
  function isInitializedFromSource(name, source, initialScope) {
84
123
  const latestDef = findVariable2(name, initialScope)?.defs.at(-1);
85
- if (latestDef === eff._) return false;
124
+ if (latestDef == null) return false;
86
125
  const { node, parent } = latestDef;
87
126
  if (node.type === types.AST_NODE_TYPES.VariableDeclarator && node.init != null) {
88
127
  const { init } = node;
@@ -119,7 +158,7 @@ function toResolved(sv) {
119
158
  if (kind !== "lazy") {
120
159
  return sv;
121
160
  }
122
- const resolvedValue = initialScope === eff._ ? ASTUtils.getStaticValue(node) : ASTUtils.getStaticValue(node, initialScope);
161
+ const resolvedValue = initialScope == null ? ASTUtils.getStaticValue(node) : ASTUtils.getStaticValue(node, initialScope);
123
162
  return resolvedValue == null ? { kind: "none", node, initialScope } : { kind: "some", node, initialScope, value: resolvedValue.value };
124
163
  }
125
164
 
@@ -175,7 +214,7 @@ function isNodeValueEqual(a, b, initialScopes) {
175
214
  return AST3__namespace.isNodeEqual(aRight, bRight);
176
215
  }
177
216
  default: {
178
- return aVar !== eff._ && bVar !== eff._ && aVar === bVar;
217
+ return aVar != null && bVar != null && aVar === bVar;
179
218
  }
180
219
  }
181
220
  }
@@ -202,7 +241,7 @@ var ValueConstructionHint = {
202
241
  StrictCallExpression: 1n << 0n
203
242
  };
204
243
  function getValueConstruction(node, initialScope, hint = ValueConstructionHint.None) {
205
- if (node === eff._) return eff._;
244
+ if (node == null) return eff._;
206
245
  switch (node.type) {
207
246
  case types.AST_NODE_TYPES.JSXElement:
208
247
  case types.AST_NODE_TYPES.JSXFragment: {
@@ -241,12 +280,12 @@ function getValueConstruction(node, initialScope, hint = ValueConstructionHint.N
241
280
  }
242
281
  case types.AST_NODE_TYPES.LogicalExpression: {
243
282
  const lvc = getValueConstruction(node.left, initialScope, hint);
244
- if (lvc === eff._) return eff._;
283
+ if (lvc == null) return eff._;
245
284
  return getValueConstruction(node.right, initialScope, hint);
246
285
  }
247
286
  case types.AST_NODE_TYPES.ConditionalExpression: {
248
287
  const cvc = getValueConstruction(node.consequent, initialScope, hint);
249
- if (cvc === eff._) return eff._;
288
+ if (cvc == null) return eff._;
250
289
  return getValueConstruction(node.alternate, initialScope, hint);
251
290
  }
252
291
  case types.AST_NODE_TYPES.Identifier: {
@@ -273,6 +312,7 @@ function getValueConstruction(node, initialScope, hint = ValueConstructionHint.N
273
312
  }
274
313
 
275
314
  exports.ValueConstructionHint = ValueConstructionHint;
315
+ exports.findPropertyInProperties = findPropertyInProperties;
276
316
  exports.findVariable = findVariable2;
277
317
  exports.getChidScopes = getChidScopes;
278
318
  exports.getValueConstruction = getValueConstruction;
package/dist/index.mjs CHANGED
@@ -1,15 +1,71 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/types';
1
2
  import { dual, _ } from '@eslint-react/eff';
2
3
  import * as ASTUtils from '@typescript-eslint/utils/ast-utils';
3
4
  import { getStaticValue } from '@typescript-eslint/utils/ast-utils';
4
- import { AST_NODE_TYPES } from '@typescript-eslint/types';
5
5
  import * as AST3 from '@eslint-react/ast';
6
6
  import { DefinitionType, ScopeType } from '@typescript-eslint/scope-manager';
7
7
 
8
- // src/find-variable.ts
8
+ // src/find-property-in-properties.ts
9
9
  var findVariable2 = dual(2, (nameOrNode, initialScope) => {
10
- if (nameOrNode === _) return _;
10
+ if (nameOrNode == null) return _;
11
11
  return ASTUtils.findVariable(initialScope, nameOrNode) ?? _;
12
12
  });
13
+ function getVariableNode(variable, at) {
14
+ if (variable == null) return _;
15
+ const def = variable.defs.at(at);
16
+ if (def == null) return _;
17
+ switch (true) {
18
+ case (def.type === DefinitionType.FunctionName && def.node.type === AST_NODE_TYPES.FunctionDeclaration):
19
+ return def.node;
20
+ case (def.type === DefinitionType.ClassName && def.node.type === AST_NODE_TYPES.ClassDeclaration):
21
+ return def.node;
22
+ case (def.type === DefinitionType.Parameter && AST3.isFunction(def.node)):
23
+ return def.node;
24
+ case ("init" in def.node && def.node.init != null && !("declarations" in def.node.init)):
25
+ return def.node.init;
26
+ default:
27
+ return _;
28
+ }
29
+ }
30
+
31
+ // src/find-property-in-properties.ts
32
+ function findPropertyInProperties(name, properties, initialScope, seen = /* @__PURE__ */ new Set()) {
33
+ return properties.findLast((prop) => {
34
+ if (prop.type === AST_NODE_TYPES.Property) {
35
+ return "name" in prop.key && prop.key.name === name;
36
+ }
37
+ if (prop.type === AST_NODE_TYPES.SpreadElement) {
38
+ switch (prop.argument.type) {
39
+ case AST_NODE_TYPES.Identifier: {
40
+ if (seen.has(prop.argument.name)) return false;
41
+ const variable = findVariable2(prop.argument.name, initialScope);
42
+ const variableNode = getVariableNode(variable, 0);
43
+ if (variableNode?.type === AST_NODE_TYPES.ObjectExpression) {
44
+ seen.add(prop.argument.name);
45
+ return findPropertyInProperties(
46
+ name,
47
+ variableNode.properties,
48
+ initialScope,
49
+ seen
50
+ ) != null;
51
+ }
52
+ return false;
53
+ }
54
+ case AST_NODE_TYPES.ObjectExpression: {
55
+ return findPropertyInProperties(
56
+ name,
57
+ prop.argument.properties,
58
+ initialScope,
59
+ seen
60
+ ) != null;
61
+ }
62
+ default:
63
+ return false;
64
+ }
65
+ }
66
+ return false;
67
+ });
68
+ }
13
69
 
14
70
  // src/get-child-scopes.ts
15
71
  function getChidScopes(scope) {
@@ -20,7 +76,7 @@ function getChidScopes(scope) {
20
76
  return scopes;
21
77
  }
22
78
  function getVariableDeclaratorId(node, prev) {
23
- if (node === _) return _;
79
+ if (node == null) return _;
24
80
  switch (true) {
25
81
  case (node.type === AST_NODE_TYPES.VariableDeclarator && node.init === prev):
26
82
  return node.id;
@@ -32,23 +88,6 @@ function getVariableDeclaratorId(node, prev) {
32
88
  return getVariableDeclaratorId(node.parent, node);
33
89
  }
34
90
  }
35
- function getVariableNode(variable, at) {
36
- if (variable === _) return _;
37
- const def = variable.defs.at(at);
38
- if (def === _) return _;
39
- switch (true) {
40
- case (def.type === DefinitionType.FunctionName && def.node.type === AST_NODE_TYPES.FunctionDeclaration):
41
- return def.node;
42
- case (def.type === DefinitionType.ClassName && def.node.type === AST_NODE_TYPES.ClassDeclaration):
43
- return def.node;
44
- case (def.type === DefinitionType.Parameter && AST3.isFunction(def.node)):
45
- return def.node;
46
- case ("init" in def.node && def.node.init != null && !("declarations" in def.node.init)):
47
- return def.node.init;
48
- default:
49
- return _;
50
- }
51
- }
52
91
  function getVariables(initialScope) {
53
92
  let scope = initialScope;
54
93
  const variables = [...scope.variables];
@@ -60,7 +99,7 @@ function getVariables(initialScope) {
60
99
  }
61
100
  function isInitializedFromSource(name, source, initialScope) {
62
101
  const latestDef = findVariable2(name, initialScope)?.defs.at(-1);
63
- if (latestDef === _) return false;
102
+ if (latestDef == null) return false;
64
103
  const { node, parent } = latestDef;
65
104
  if (node.type === AST_NODE_TYPES.VariableDeclarator && node.init != null) {
66
105
  const { init } = node;
@@ -97,7 +136,7 @@ function toResolved(sv) {
97
136
  if (kind !== "lazy") {
98
137
  return sv;
99
138
  }
100
- const resolvedValue = initialScope === _ ? getStaticValue(node) : getStaticValue(node, initialScope);
139
+ const resolvedValue = initialScope == null ? getStaticValue(node) : getStaticValue(node, initialScope);
101
140
  return resolvedValue == null ? { kind: "none", node, initialScope } : { kind: "some", node, initialScope, value: resolvedValue.value };
102
141
  }
103
142
 
@@ -153,7 +192,7 @@ function isNodeValueEqual(a, b, initialScopes) {
153
192
  return AST3.isNodeEqual(aRight, bRight);
154
193
  }
155
194
  default: {
156
- return aVar !== _ && bVar !== _ && aVar === bVar;
195
+ return aVar != null && bVar != null && aVar === bVar;
157
196
  }
158
197
  }
159
198
  }
@@ -180,7 +219,7 @@ var ValueConstructionHint = {
180
219
  StrictCallExpression: 1n << 0n
181
220
  };
182
221
  function getValueConstruction(node, initialScope, hint = ValueConstructionHint.None) {
183
- if (node === _) return _;
222
+ if (node == null) return _;
184
223
  switch (node.type) {
185
224
  case AST_NODE_TYPES.JSXElement:
186
225
  case AST_NODE_TYPES.JSXFragment: {
@@ -219,12 +258,12 @@ function getValueConstruction(node, initialScope, hint = ValueConstructionHint.N
219
258
  }
220
259
  case AST_NODE_TYPES.LogicalExpression: {
221
260
  const lvc = getValueConstruction(node.left, initialScope, hint);
222
- if (lvc === _) return _;
261
+ if (lvc == null) return _;
223
262
  return getValueConstruction(node.right, initialScope, hint);
224
263
  }
225
264
  case AST_NODE_TYPES.ConditionalExpression: {
226
265
  const cvc = getValueConstruction(node.consequent, initialScope, hint);
227
- if (cvc === _) return _;
266
+ if (cvc == null) return _;
228
267
  return getValueConstruction(node.alternate, initialScope, hint);
229
268
  }
230
269
  case AST_NODE_TYPES.Identifier: {
@@ -250,4 +289,4 @@ function getValueConstruction(node, initialScope, hint = ValueConstructionHint.N
250
289
  }
251
290
  }
252
291
 
253
- export { ValueConstructionHint, findVariable2 as findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
292
+ export { ValueConstructionHint, findPropertyInProperties, findVariable2 as findVariable, getChidScopes, getValueConstruction, getVariableDeclaratorId, getVariableNode, getVariables, isInitializedFromSource, isNodeValueEqual, toResolved };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eslint-react/var",
3
- "version": "1.24.0-next.0",
3
+ "version": "1.24.0-next.11",
4
4
  "description": "ESLint React's TSESTree AST utility module for static analysis of variables",
5
5
  "homepage": "https://github.com/Rel1cx/eslint-react",
6
6
  "bugs": {
@@ -33,14 +33,13 @@
33
33
  "./package.json"
34
34
  ],
35
35
  "dependencies": {
36
- "@typescript-eslint/scope-manager": "^8.19.1",
37
- "@typescript-eslint/types": "^8.19.1",
38
- "@typescript-eslint/utils": "^8.19.1",
36
+ "@typescript-eslint/scope-manager": "^8.20.0",
37
+ "@typescript-eslint/types": "^8.20.0",
38
+ "@typescript-eslint/utils": "^8.20.0",
39
39
  "string-ts": "^2.2.0",
40
40
  "ts-pattern": "^5.6.0",
41
- "@eslint-react/ast": "1.24.0-next.0",
42
- "@eslint-react/types": "1.24.0-next.0",
43
- "@eslint-react/eff": "1.24.0-next.0"
41
+ "@eslint-react/ast": "1.24.0-next.11",
42
+ "@eslint-react/eff": "1.24.0-next.11"
44
43
  },
45
44
  "devDependencies": {
46
45
  "tsup": "^8.3.5",