@ploaness/config 1.11.0 → 1.12.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.
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-immutability.d.ts","sourceRoot":"","sources":["../src/eslint-immutability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAA;AAsFjD,oGAAoG;AACpG,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAGvC,CAAA"}
1
+ {"version":3,"file":"eslint-immutability.d.ts","sourceRoot":"","sources":["../src/eslint-immutability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAA;AAsIjD,oGAAoG;AACpG,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAGvC,CAAA"}
@@ -27,15 +27,48 @@ const exportObject = (target) => {
27
27
  }
28
28
  return undefined;
29
29
  };
30
- const TOP_LEVEL_ASSIGNMENT_DEPTH = 2;
30
+ const UNDEFINED_TYPE = 'undefined';
31
+ // `typeof module !== 'undefined'`, in either order: the test a file that also runs outside CommonJS, such as
32
+ // an edge function a test loads in Node, places around its export.
33
+ const isPresenceTest = (test, binding) => test.type === 'BinaryExpression' &&
34
+ (test.operator === '!==' || test.operator === '!=') &&
35
+ [
36
+ [test.left, test.right],
37
+ [test.right, test.left],
38
+ ].some(([operand, literal]) => operand?.type === 'UnaryExpression' &&
39
+ operand.operator === 'typeof' &&
40
+ operand.argument.type === 'Identifier' &&
41
+ operand.argument.name === binding &&
42
+ literal?.type === 'Literal' &&
43
+ literal.value === UNDEFINED_TYPE);
44
+ const isGuardOf = (guard, consequent, binding) => guard.type === 'IfStatement' && guard.consequent === consequent && isPresenceTest(guard.test, binding);
45
+ // The node an export statement initializes the module from: the statement itself, or the block holding it.
46
+ const consequentOf = (ancestors) => {
47
+ const [statement, block] = ancestors.toReversed();
48
+ if (statement?.type !== 'ExpressionStatement') {
49
+ return undefined;
50
+ }
51
+ return block?.type === 'BlockStatement' ? block : statement;
52
+ };
53
+ // Module initialization is a statement of the program, or the consequent, alone or in a block, of a presence
54
+ // test of the export's binding that is one.
55
+ const isInitialization = (ancestors, binding) => {
56
+ const consequent = consequentOf(ancestors);
57
+ if (consequent === undefined) {
58
+ return false;
59
+ }
60
+ const [program, guard, ...deeper] = ancestors.slice(0, ancestors.lastIndexOf(consequent));
61
+ return (program?.type === 'Program' &&
62
+ deeper.length === 0 &&
63
+ (guard === undefined ? consequent === ancestors.at(-1) : isGuardOf(guard, consequent, binding)));
64
+ };
31
65
  const isExportAssignment = (node, context) => {
32
66
  const target = node.left;
33
- if (target.type !== 'MemberExpression' ||
34
- context.sourceCode.getAncestors(node).length !== TOP_LEVEL_ASSIGNMENT_DEPTH) {
67
+ if (target.type !== 'MemberExpression') {
35
68
  return false;
36
69
  }
37
70
  const object = exportObject(target);
38
- if (object === undefined) {
71
+ if (object === undefined || !isInitialization(context.sourceCode.getAncestors(node), object.binding)) {
39
72
  return false;
40
73
  }
41
74
  return isCommonJsExport(node.operator, object.name, propertyName(target), isRuntimeBinding(context.sourceCode.getScope(node), object.binding));
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-immutability.js","sourceRoot":"","sources":["../src/eslint-immutability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eslint-immutability.js","sourceRoot":"","sources":["../src/eslint-immutability.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ploaness/config",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "Analyzer and tool configurations owned by ploaness: ESLint, Biome, TypeScript, Vitest, Stylelint, dependency-cruiser, knip.",
5
5
  "license": "MIT",
6
6
  "author": "Herman Ciechanowiec <herman@ciechanowiec.eu>",
@@ -93,7 +93,7 @@
93
93
  "@eslint/js": "10.0.1",
94
94
  "@next/eslint-plugin-next": "16.4.2",
95
95
  "@playwright/test": "1.64.1",
96
- "@ploaness/governance": "1.11.0",
96
+ "@ploaness/governance": "1.12.0",
97
97
  "@testing-library/jest-dom": "7.0.1",
98
98
  "@testing-library/react": "16.3.3",
99
99
  "@testing-library/user-event": "14.6.8",