@checkdigit/eslint-plugin 6.3.0-PR.66-5c1c → 6.3.0-PR.67-d4ef

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/README.md CHANGED
@@ -12,6 +12,7 @@ Copyright (c) 2021-2023 [Check Digit, LLC](https://checkdigit.com)
12
12
  - `@checkdigit/regular-expression-comment`
13
13
  - `@checkdigit/require-assert-predicate-rejects-throws`
14
14
  - `@checkdigit/object-literal-response`
15
+ - `@checkdigit/no-test-import-in-production-code`
15
16
 
16
17
  ## Configurations
17
18
 
@@ -227,58 +227,33 @@ var no_card_numbers_default = {
227
227
  }
228
228
  };
229
229
 
230
- // src/no-side-effects.ts
231
- function isAwaitExpression(statement) {
232
- return statement.type === "ExpressionStatement" && statement.expression.type === "AwaitExpression";
233
- }
234
- function isCallExpressionCalleeMemberExpression(statement) {
235
- return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "MemberExpression" && statement.expression.callee.object.type === "Identifier" && statement.expression.callee.object.name !== "assert";
236
- }
237
- function isCallExpressionCalleeIdentifier(statement, excludedIdentifiers) {
238
- return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "Identifier" && !excludedIdentifiers.includes(statement.expression.callee.name);
239
- }
240
- function isVariableDeclarationAwaitExpression(statement) {
241
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "AwaitExpression";
242
- }
243
- function isVariableDeclarationIdentifier(statement, excludedIdentifiers) {
244
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "CallExpression" && statement.declarations[0].init.callee.type === "Identifier" && !excludedIdentifiers.includes(statement.declarations[0].init.callee.name);
245
- }
246
- function isVariableDeclarationMemberExpression(statement) {
247
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "CallExpression" && statement.declarations[0].init.callee.type === "MemberExpression" && (statement.declarations[0].init.callee.object.type === "NewExpression" && statement.declarations[0].init.callee.object.callee.type === "Identifier" || statement.declarations[0].init.callee.object.type === "Identifier");
248
- }
249
- var no_side_effects_default = {
230
+ // src/no-test-import-in-production-code.ts
231
+ var NO_TEST_IMPORT_IN_PRODUCTION_CODE = "NO_TEST_IMPORT_IN_PRODUCTION_CODE";
232
+ var no_test_import_in_production_code_default = {
250
233
  meta: {
251
234
  type: "problem",
252
235
  docs: {
253
- description: "Ensure no side effects can occur at the main module-level",
236
+ description: "Importing test files in production code is not allowed since it can lead to problems once the test files are removed from the build",
254
237
  url: "https://github.com/checkdigit/eslint-plugin"
255
238
  },
256
- schema: [
257
- {
258
- type: "object",
259
- properties: {
260
- excludedIdentifiers: {
261
- type: "array",
262
- items: { type: "string" }
263
- }
264
- },
265
- additionalProperties: false
266
- }
267
- ]
239
+ messages: {
240
+ [NO_TEST_IMPORT_IN_PRODUCTION_CODE]: `Importing test files in production code is not allowed`
241
+ }
268
242
  },
269
243
  create(context) {
270
- const options = context.options[0] ?? {};
271
- const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
244
+ const testFilePattern = /\.(?<testFileSuffix>test|spec)(?<tsFileSuffix>\.ts)?$/u;
272
245
  return {
273
- Program(node) {
274
- node.body.forEach((statement) => {
275
- if (isAwaitExpression(statement) || isCallExpressionCalleeMemberExpression(statement) || isCallExpressionCalleeIdentifier(statement, excludedIdentifiers) || isVariableDeclarationAwaitExpression(statement) || isVariableDeclarationIdentifier(statement, excludedIdentifiers) || isVariableDeclarationMemberExpression(statement)) {
276
- context.report({
277
- node: statement,
278
- message: "No side effects can occur at the main module-level"
279
- });
280
- }
281
- });
246
+ ImportDeclaration(node) {
247
+ const filename = context.filename;
248
+ if (filename.match(testFilePattern)) {
249
+ return;
250
+ }
251
+ if (typeof node.source.value === "string" && testFilePattern.test(node.source.value)) {
252
+ context.report({
253
+ node,
254
+ messageId: NO_TEST_IMPORT_IN_PRODUCTION_CODE
255
+ });
256
+ }
282
257
  }
283
258
  };
284
259
  }
@@ -699,8 +674,8 @@ var src_default = {
699
674
  "no-card-numbers": no_card_numbers_default,
700
675
  "no-uuid": no_uuid_default,
701
676
  "require-strict-assert": require_strict_assert_default,
677
+ "no-test-import-in-production-code": no_test_import_in_production_code_default,
702
678
  "no-wallaby-comment": no_wallaby_comment_default,
703
- "no-side-effects": no_side_effects_default,
704
679
  "regular-expression-comment": regular_expression_comment_default,
705
680
  "require-assert-predicate-rejects-throws": require_assert_predicate_rejects_throws_default,
706
681
  "object-literal-response": object_literal_response_default
@@ -713,10 +688,10 @@ var src_default = {
713
688
  "@checkdigit/no-uuid": "error",
714
689
  "@checkdigit/require-strict-assert": "error",
715
690
  "@checkdigit/no-wallaby-comment": "error",
716
- "@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log"] }],
717
691
  "@checkdigit/regular-expression-comment": "error",
718
692
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
719
- "@checkdigit/object-literal-response": "error"
693
+ "@checkdigit/object-literal-response": "error",
694
+ "@checkdigit/no-test-import-in-production-code": "error"
720
695
  }
721
696
  },
722
697
  recommended: {
@@ -726,13 +701,13 @@ var src_default = {
726
701
  "@checkdigit/no-uuid": "error",
727
702
  "@checkdigit/require-strict-assert": "error",
728
703
  "@checkdigit/no-wallaby-comment": "off",
729
- "@checkdigit/no-side-effects": "error",
730
704
  "@checkdigit/regular-expression-comment": "error",
731
705
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
732
- "@checkdigit/object-literal-response": "error"
706
+ "@checkdigit/object-literal-response": "error",
707
+ "@checkdigit/no-test-import-in-production-code": "error"
733
708
  }
734
709
  }
735
710
  }
736
711
  };
737
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9maWxlLXBhdGgtY29tbWVudC50cyIsICIuLi9zcmMvbm8tY2FyZC1udW1iZXJzLnRzIiwgIi4uL3NyYy9uby1zaWRlLWVmZmVjdHMudHMiLCAiLi4vc3JjL25vLXV1aWQudHMiLCAiLi4vc3JjL25vLXdhbGxhYnktY29tbWVudC50cyIsICIuLi9zcmMvb2JqZWN0LWxpdGVyYWwtcmVzcG9uc2UudHMiLCAiLi4vc3JjL3JlZ3VsYXItZXhwcmVzc2lvbi1jb21tZW50LnRzIiwgIi4uL3NyYy9yZXF1aXJlLWFzc2VydC1wcmVkaWNhdGUtcmVqZWN0cy10aHJvd3MudHMiLCAiLi4vc3JjL3JlcXVpcmUtc3RyaWN0LWFzc2VydC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDVUEsSUFBTyw0QkFBUTtBQUFBLEVBQ2IsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLE1BQ2IsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLFlBQVksUUFBUSxXQUFXLFNBQVMsRUFBRSxDQUFDO0FBQ2pELFVBQU0sZUFBZSxRQUFRLFNBQVMsTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUVyRCxRQUFJLGNBQWMsVUFBYSxpQkFBaUIsUUFBVztBQUN6RCxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxDQUFDLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDL0IsVUFBSSxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQzlCLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxNQUFNO0FBQUEs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
712
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9maWxlLXBhdGgtY29tbWVudC50cyIsICIuLi9zcmMvbm8tY2FyZC1udW1iZXJzLnRzIiwgIi4uL3NyYy9uby10ZXN0LWltcG9ydC1pbi1wcm9kdWN0aW9uLWNvZGUudHMiLCAiLi4vc3JjL25vLXV1aWQudHMiLCAiLi4vc3JjL25vLXdhbGxhYnktY29tbWVudC50cyIsICIuLi9zcmMvb2JqZWN0LWxpdGVyYWwtcmVzcG9uc2UudHMiLCAiLi4vc3JjL3JlZ3VsYXItZXhwcmVzc2lvbi1jb21tZW50LnRzIiwgIi4uL3NyYy9yZXF1aXJlLWFzc2VydC1wcmVkaWNhdGUtcmVqZWN0cy10aHJvd3MudHMiLCAiLi4vc3JjL3JlcXVpcmUtc3RyaWN0LWFzc2VydC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDVUEsSUFBTyw0QkFBUTtBQUFBLEVBQ2IsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLE1BQ2IsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLFlBQVksUUFBUSxXQUFXLFNBQVMsRUFBRSxDQUFDO0FBQ2pELFVBQU0sZUFBZSxRQUFRLFNBQVMsTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUVyRCxRQUFJLGNBQWMsVUFBYSxpQkFBaUIsUUFBVztBQUN6RCxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxDQUFDLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDL0IsVUFBSSxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQzlCLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FB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
738
713
  module.exports = module.exports.default;
@@ -10,8 +10,8 @@
10
10
  "imports": [],
11
11
  "format": "esm"
12
12
  },
13
- "src/no-side-effects.ts": {
14
- "bytes": 4396,
13
+ "src/no-test-import-in-production-code.ts": {
14
+ "bytes": 1319,
15
15
  "imports": [],
16
16
  "format": "esm"
17
17
  },
@@ -46,7 +46,7 @@
46
46
  "format": "esm"
47
47
  },
48
48
  "src/index.ts": {
49
- "bytes": 2223,
49
+ "bytes": 2270,
50
50
  "imports": [
51
51
  {
52
52
  "path": "src/file-path-comment.ts",
@@ -59,9 +59,9 @@
59
59
  "original": "./no-card-numbers"
60
60
  },
61
61
  {
62
- "path": "src/no-side-effects.ts",
62
+ "path": "src/no-test-import-in-production-code.ts",
63
63
  "kind": "import-statement",
64
- "original": "./no-side-effects"
64
+ "original": "./no-test-import-in-production-code"
65
65
  },
66
66
  {
67
67
  "path": "src/no-uuid.ts",
@@ -104,7 +104,7 @@
104
104
  "entryPoint": "src/index.ts",
105
105
  "inputs": {
106
106
  "src/index.ts": {
107
- "bytesInOutput": 1796
107
+ "bytesInOutput": 1813
108
108
  },
109
109
  "src/file-path-comment.ts": {
110
110
  "bytesInOutput": 1961
@@ -112,8 +112,8 @@
112
112
  "src/no-card-numbers.ts": {
113
113
  "bytesInOutput": 3356
114
114
  },
115
- "src/no-side-effects.ts": {
116
- "bytesInOutput": 3665
115
+ "src/no-test-import-in-production-code.ts": {
116
+ "bytesInOutput": 1028
117
117
  },
118
118
  "src/no-uuid.ts": {
119
119
  "bytesInOutput": 2251
@@ -134,7 +134,7 @@
134
134
  "bytesInOutput": 3362
135
135
  }
136
136
  },
137
- "bytes": 49036
137
+ "bytes": 44222
138
138
  }
139
139
  }
140
140
  }
@@ -1,7 +1,7 @@
1
1
  // src/index.ts
2
2
  import filePathComment from "./file-path-comment.mjs";
3
3
  import noCardNumbers from "./no-card-numbers.mjs";
4
- import noSideEffects from "./no-side-effects.mjs";
4
+ import noTestImportInProductionCode from "./no-test-import-in-production-code.mjs";
5
5
  import noUuid from "./no-uuid.mjs";
6
6
  import noWallabyComment from "./no-wallaby-comment.mjs";
7
7
  import objectLiteralResponse from "./object-literal-response.mjs";
@@ -14,8 +14,8 @@ var src_default = {
14
14
  "no-card-numbers": noCardNumbers,
15
15
  "no-uuid": noUuid,
16
16
  "require-strict-assert": requireStrictAssert,
17
+ "no-test-import-in-production-code": noTestImportInProductionCode,
17
18
  "no-wallaby-comment": noWallabyComment,
18
- "no-side-effects": noSideEffects,
19
19
  "regular-expression-comment": regexComment,
20
20
  "require-assert-predicate-rejects-throws": requireAssertPredicateRejectsThrows,
21
21
  "object-literal-response": objectLiteralResponse
@@ -28,10 +28,10 @@ var src_default = {
28
28
  "@checkdigit/no-uuid": "error",
29
29
  "@checkdigit/require-strict-assert": "error",
30
30
  "@checkdigit/no-wallaby-comment": "error",
31
- "@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log"] }],
32
31
  "@checkdigit/regular-expression-comment": "error",
33
32
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
34
- "@checkdigit/object-literal-response": "error"
33
+ "@checkdigit/object-literal-response": "error",
34
+ "@checkdigit/no-test-import-in-production-code": "error"
35
35
  }
36
36
  },
37
37
  recommended: {
@@ -41,10 +41,10 @@ var src_default = {
41
41
  "@checkdigit/no-uuid": "error",
42
42
  "@checkdigit/require-strict-assert": "error",
43
43
  "@checkdigit/no-wallaby-comment": "off",
44
- "@checkdigit/no-side-effects": "error",
45
44
  "@checkdigit/regular-expression-comment": "error",
46
45
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
47
- "@checkdigit/object-literal-response": "error"
46
+ "@checkdigit/object-literal-response": "error",
47
+ "@checkdigit/no-test-import-in-production-code": "error"
48
48
  }
49
49
  }
50
50
  }
@@ -52,4 +52,4 @@ var src_default = {
52
52
  export {
53
53
  src_default as default
54
54
  };
55
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sWUFBWTtBQUNuQixPQUFPLHNCQUFzQjtBQUM3QixPQUFPLDJCQUEyQjtBQUNsQyxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHlDQUF5QztBQUNoRCxPQUFPLHlCQUF5QjtBQUVoQyxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLHNCQUFzQjtBQUFBLElBQ3RCLG1CQUFtQjtBQUFBLElBQ25CLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLEVBQzdCO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsTUFDSCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywrQkFBK0IsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsVUFBVSxTQUFTLEtBQUssRUFBRSxDQUFDO0FBQUEsUUFDNUYsMENBQTBDO0FBQUEsUUFDMUMsdURBQXVEO0FBQUEsUUFDdkQsdUNBQXVDO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywrQkFBK0I7QUFBQSxRQUMvQiwwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxNQUN6QztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
55
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sa0NBQWtDO0FBQ3pDLE9BQU8sWUFBWTtBQUNuQixPQUFPLHNCQUFzQjtBQUM3QixPQUFPLDJCQUEyQjtBQUNsQyxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHlDQUF5QztBQUNoRCxPQUFPLHlCQUF5QjtBQUVoQyxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLHFDQUFxQztBQUFBLElBQ3JDLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLEVBQzdCO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsTUFDSCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2QyxpREFBaUQ7QUFBQSxNQUNuRDtBQUFBLElBQ0Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLGlEQUFpRDtBQUFBLE1BQ25EO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,36 @@
1
+ // src/no-test-import-in-production-code.ts
2
+ var NO_TEST_IMPORT_IN_PRODUCTION_CODE = "NO_TEST_IMPORT_IN_PRODUCTION_CODE";
3
+ var no_test_import_in_production_code_default = {
4
+ meta: {
5
+ type: "problem",
6
+ docs: {
7
+ description: "Importing test files in production code is not allowed since it can lead to problems once the test files are removed from the build",
8
+ url: "https://github.com/checkdigit/eslint-plugin"
9
+ },
10
+ messages: {
11
+ [NO_TEST_IMPORT_IN_PRODUCTION_CODE]: `Importing test files in production code is not allowed`
12
+ }
13
+ },
14
+ create(context) {
15
+ const testFilePattern = /\.(?<testFileSuffix>test|spec)(?<tsFileSuffix>\.ts)?$/u;
16
+ return {
17
+ ImportDeclaration(node) {
18
+ const filename = context.filename;
19
+ if (filename.match(testFilePattern)) {
20
+ return;
21
+ }
22
+ if (typeof node.source.value === "string" && testFilePattern.test(node.source.value)) {
23
+ context.report({
24
+ node,
25
+ messageId: NO_TEST_IMPORT_IN_PRODUCTION_CODE
26
+ });
27
+ }
28
+ }
29
+ };
30
+ }
31
+ };
32
+ export {
33
+ NO_TEST_IMPORT_IN_PRODUCTION_CODE,
34
+ no_test_import_in_production_code_default as default
35
+ };
36
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXRlc3QtaW1wb3J0LWluLXByb2R1Y3Rpb24tY29kZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFVTyxJQUFNLG9DQUFvQztBQUVqRCxJQUFPLDRDQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUNFO0FBQUEsTUFDRixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxpQ0FBaUMsR0FBRztBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsVUFBTSxrQkFBa0I7QUFFeEIsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFDdEIsY0FBTSxXQUFXLFFBQVE7QUFHekIsWUFBSSxTQUFTLE1BQU0sZUFBZSxHQUFHO0FBQ25DO0FBQUEsUUFDRjtBQUVBLFlBQUksT0FBTyxLQUFLLE9BQU8sVUFBVSxZQUFZLGdCQUFnQixLQUFLLEtBQUssT0FBTyxLQUFLLEdBQUc7QUFDcEYsa0JBQVEsT0FBTztBQUFBLFlBQ2I7QUFBQSxZQUNBLFdBQVc7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -4,8 +4,8 @@ declare const _default: {
4
4
  'no-card-numbers': import("eslint").Rule.RuleModule;
5
5
  'no-uuid': import("eslint").Rule.RuleModule;
6
6
  'require-strict-assert': import("eslint").Rule.RuleModule;
7
+ 'no-test-import-in-production-code': import("eslint").Rule.RuleModule;
7
8
  'no-wallaby-comment': import("eslint").Rule.RuleModule;
8
- 'no-side-effects': import("eslint").Rule.RuleModule;
9
9
  'regular-expression-comment': import("eslint").Rule.RuleModule;
10
10
  'require-assert-predicate-rejects-throws': import("eslint").Rule.RuleModule;
11
11
  'object-literal-response': import("eslint").Rule.RuleModule;
@@ -18,12 +18,10 @@ declare const _default: {
18
18
  '@checkdigit/no-uuid': string;
19
19
  '@checkdigit/require-strict-assert': string;
20
20
  '@checkdigit/no-wallaby-comment': string;
21
- '@checkdigit/no-side-effects': (string | {
22
- excludedIdentifiers: string[];
23
- })[];
24
21
  '@checkdigit/regular-expression-comment': string;
25
22
  '@checkdigit/require-assert-predicate-rejects-throws': string;
26
23
  '@checkdigit/object-literal-response': string;
24
+ '@checkdigit/no-test-import-in-production-code': string;
27
25
  };
28
26
  };
29
27
  recommended: {
@@ -33,10 +31,10 @@ declare const _default: {
33
31
  '@checkdigit/no-uuid': string;
34
32
  '@checkdigit/require-strict-assert': string;
35
33
  '@checkdigit/no-wallaby-comment': string;
36
- '@checkdigit/no-side-effects': string;
37
34
  '@checkdigit/regular-expression-comment': string;
38
35
  '@checkdigit/require-assert-predicate-rejects-throws': string;
39
36
  '@checkdigit/object-literal-response': string;
37
+ '@checkdigit/no-test-import-in-production-code': string;
40
38
  };
41
39
  };
42
40
  };
@@ -1,3 +1,4 @@
1
1
  import type { Rule } from 'eslint';
2
+ export declare const NO_TEST_IMPORT_IN_PRODUCTION_CODE = "NO_TEST_IMPORT_IN_PRODUCTION_CODE";
2
3
  declare const _default: Rule.RuleModule;
3
4
  export default _default;
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"6.3.0-PR.66-5c1c","description":"Check Digit eslint plugins","prettier":"@checkdigit/prettier-config","type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"keywords":["eslint","eslintplugin"],"engines":{"node":">=20.12"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/eslint-plugin.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"homepage":"https://github.com/checkdigit/eslint-plugin#readme","peerDependencies":{"eslint":">=8 <9"},"sideEffects":false,"devDependencies":{"@checkdigit/jest-config":"^6.0.0","@checkdigit/prettier-config":"^5.3.0","@checkdigit/typescript-config":"^6.0.0","@types/eslint":"^8.56.6","@typescript-eslint/eslint-plugin":"^7.4.0","@typescript-eslint/parser":"^7.4.0","@typescript-eslint/rule-tester":"^7.13.1","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^5.4.1","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^0.8.9","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"^0.24.0"},"scripts":{"prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style","ci:compile":"tsc --noEmit","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier"},"jest":{"preset":"@checkdigit/jest-config"},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"]}
1
+ {"name":"@checkdigit/eslint-plugin","version":"6.3.0-PR.67-d4ef","description":"Check Digit eslint plugins","prettier":"@checkdigit/prettier-config","type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"keywords":["eslint","eslintplugin"],"engines":{"node":">=20.13"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/eslint-plugin.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"homepage":"https://github.com/checkdigit/eslint-plugin#readme","peerDependencies":{"eslint":">=8 <9"},"sideEffects":false,"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.4.1","@checkdigit/typescript-config":"^6.0.0","@types/eslint":"^8.56.10","@typescript-eslint/eslint-plugin":"^7.14.1","@typescript-eslint/parser":"^7.14.1","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"^0.24.0"},"scripts":{"prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style","ci:compile":"tsc --noEmit","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier"},"jest":{"preset":"@checkdigit/jest-config"},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"]}
package/src/index.ts CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  import filePathComment from './file-path-comment';
10
10
  import noCardNumbers from './no-card-numbers';
11
- import noSideEffects from './no-side-effects';
11
+ import noTestImportInProductionCode from './no-test-import-in-production-code';
12
12
  import noUuid from './no-uuid';
13
13
  import noWallabyComment from './no-wallaby-comment';
14
14
  import objectLiteralResponse from './object-literal-response';
@@ -22,8 +22,8 @@ export default {
22
22
  'no-card-numbers': noCardNumbers,
23
23
  'no-uuid': noUuid,
24
24
  'require-strict-assert': requireStrictAssert,
25
+ 'no-test-import-in-production-code': noTestImportInProductionCode,
25
26
  'no-wallaby-comment': noWallabyComment,
26
- 'no-side-effects': noSideEffects,
27
27
  'regular-expression-comment': regexComment,
28
28
  'require-assert-predicate-rejects-throws': requireAssertPredicateRejectsThrows,
29
29
  'object-literal-response': objectLiteralResponse,
@@ -36,10 +36,10 @@ export default {
36
36
  '@checkdigit/no-uuid': 'error',
37
37
  '@checkdigit/require-strict-assert': 'error',
38
38
  '@checkdigit/no-wallaby-comment': 'error',
39
- '@checkdigit/no-side-effects': ['error', { excludedIdentifiers: ['assert', 'debug', 'log'] }],
40
39
  '@checkdigit/regular-expression-comment': 'error',
41
40
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
42
41
  '@checkdigit/object-literal-response': 'error',
42
+ '@checkdigit/no-test-import-in-production-code': 'error',
43
43
  },
44
44
  },
45
45
  recommended: {
@@ -49,10 +49,10 @@ export default {
49
49
  '@checkdigit/no-uuid': 'error',
50
50
  '@checkdigit/require-strict-assert': 'error',
51
51
  '@checkdigit/no-wallaby-comment': 'off',
52
- '@checkdigit/no-side-effects': 'error',
53
52
  '@checkdigit/regular-expression-comment': 'error',
54
53
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
55
54
  '@checkdigit/object-literal-response': 'error',
55
+ '@checkdigit/no-test-import-in-production-code': 'error',
56
56
  },
57
57
  },
58
58
  },
@@ -0,0 +1,46 @@
1
+ // no-test-import-in-production-code.ts
2
+
3
+ import type { Rule } from 'eslint';
4
+
5
+ /*
6
+ * Copyright (c) 2021-2024 Check Digit, LLC
7
+ *
8
+ * This code is licensed under the MIT license (see LICENSE.txt for details).
9
+ */
10
+
11
+ export const NO_TEST_IMPORT_IN_PRODUCTION_CODE = 'NO_TEST_IMPORT_IN_PRODUCTION_CODE';
12
+
13
+ export default {
14
+ meta: {
15
+ type: 'problem',
16
+ docs: {
17
+ description:
18
+ 'Importing test files in production code is not allowed since it can lead to problems once the test files are removed from the build',
19
+ url: 'https://github.com/checkdigit/eslint-plugin',
20
+ },
21
+ messages: {
22
+ [NO_TEST_IMPORT_IN_PRODUCTION_CODE]: `Importing test files in production code is not allowed`,
23
+ },
24
+ },
25
+ create(context) {
26
+ const testFilePattern = /\.(?<testFileSuffix>test|spec)(?<tsFileSuffix>\.ts)?$/u;
27
+
28
+ return {
29
+ ImportDeclaration(node) {
30
+ const filename = context.filename;
31
+
32
+ // skip test files, only production code should be checked
33
+ if (filename.match(testFilePattern)) {
34
+ return;
35
+ }
36
+
37
+ if (typeof node.source.value === 'string' && testFilePattern.test(node.source.value)) {
38
+ context.report({
39
+ node,
40
+ messageId: NO_TEST_IMPORT_IN_PRODUCTION_CODE,
41
+ });
42
+ }
43
+ },
44
+ };
45
+ },
46
+ } as Rule.RuleModule;
@@ -1,60 +0,0 @@
1
- // src/no-side-effects.ts
2
- function isAwaitExpression(statement) {
3
- return statement.type === "ExpressionStatement" && statement.expression.type === "AwaitExpression";
4
- }
5
- function isCallExpressionCalleeMemberExpression(statement) {
6
- return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "MemberExpression" && statement.expression.callee.object.type === "Identifier" && statement.expression.callee.object.name !== "assert";
7
- }
8
- function isCallExpressionCalleeIdentifier(statement, excludedIdentifiers) {
9
- return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "Identifier" && !excludedIdentifiers.includes(statement.expression.callee.name);
10
- }
11
- function isVariableDeclarationAwaitExpression(statement) {
12
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "AwaitExpression";
13
- }
14
- function isVariableDeclarationIdentifier(statement, excludedIdentifiers) {
15
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "CallExpression" && statement.declarations[0].init.callee.type === "Identifier" && !excludedIdentifiers.includes(statement.declarations[0].init.callee.name);
16
- }
17
- function isVariableDeclarationMemberExpression(statement) {
18
- return statement.type === "VariableDeclaration" && statement.declarations.length > 0 && statement.declarations[0]?.id !== void 0 && statement.declarations[0].id.type === "Identifier" && statement.declarations[0].init !== void 0 && statement.declarations[0].init !== null && statement.declarations[0].init.type === "CallExpression" && statement.declarations[0].init.callee.type === "MemberExpression" && (statement.declarations[0].init.callee.object.type === "NewExpression" && statement.declarations[0].init.callee.object.callee.type === "Identifier" || statement.declarations[0].init.callee.object.type === "Identifier");
19
- }
20
- var no_side_effects_default = {
21
- meta: {
22
- type: "problem",
23
- docs: {
24
- description: "Ensure no side effects can occur at the main module-level",
25
- url: "https://github.com/checkdigit/eslint-plugin"
26
- },
27
- schema: [
28
- {
29
- type: "object",
30
- properties: {
31
- excludedIdentifiers: {
32
- type: "array",
33
- items: { type: "string" }
34
- }
35
- },
36
- additionalProperties: false
37
- }
38
- ]
39
- },
40
- create(context) {
41
- const options = context.options[0] ?? {};
42
- const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
43
- return {
44
- Program(node) {
45
- node.body.forEach((statement) => {
46
- if (isAwaitExpression(statement) || isCallExpressionCalleeMemberExpression(statement) || isCallExpressionCalleeIdentifier(statement, excludedIdentifiers) || isVariableDeclarationAwaitExpression(statement) || isVariableDeclarationIdentifier(statement, excludedIdentifiers) || isVariableDeclarationMemberExpression(statement)) {
47
- context.report({
48
- node: statement,
49
- message: "No side effects can occur at the main module-level"
50
- });
51
- }
52
- });
53
- }
54
- };
55
- }
56
- };
57
- export {
58
- no_side_effects_default as default
59
- };
60
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXNpZGUtZWZmZWN0cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFlQSxTQUFTLGtCQUFrQixXQUEwQjtBQUNuRCxTQUFPLFVBQVUsU0FBUyx5QkFBeUIsVUFBVSxXQUFXLFNBQVM7QUFDbkY7QUFFQSxTQUFTLHVDQUF1QyxXQUEwQjtBQUN4RSxTQUNFLFVBQVUsU0FBUyx5QkFDbkIsVUFBVSxXQUFXLFNBQVMsb0JBQzlCLFVBQVUsV0FBVyxPQUFPLFNBQVMsc0JBQ3JDLFVBQVUsV0FBVyxPQUFPLE9BQU8sU0FBUyxnQkFDNUMsVUFBVSxXQUFXLE9BQU8sT0FBTyxTQUFTO0FBRWhEO0FBRUEsU0FBUyxpQ0FBaUMsV0FBaUIscUJBQXdDO0FBQ2pHLFNBQ0UsVUFBVSxTQUFTLHlCQUNuQixVQUFVLFdBQVcsU0FBUyxvQkFDOUIsVUFBVSxXQUFXLE9BQU8sU0FBUyxnQkFDckMsQ0FBQyxvQkFBb0IsU0FBUyxVQUFVLFdBQVcsT0FBTyxJQUFJO0FBRWxFO0FBRUEsU0FBUyxxQ0FBcUMsV0FBMEI7QUFDdEUsU0FDRSxVQUFVLFNBQVMseUJBQ25CLFVBQVUsYUFBYSxTQUFTLEtBQ2hDLFVBQVUsYUFBYSxDQUFDLEdBQUcsT0FBTyxVQUNsQyxVQUFVLGFBQWEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxnQkFDdEMsVUFBVSxhQUFhLENBQUMsRUFBRSxTQUFTLFVBQ25DLFVBQVUsYUFBYSxDQUFDLEVBQUUsU0FBUyxRQUNuQyxVQUFVLGFBQWEsQ0FBQyxFQUFFLEtBQUssU0FBUztBQUU1QztBQUVBLFNBQVMsZ0NBQWdDLFdBQWlCLHFCQUF3QztBQUNoRyxTQUNFLFVBQVUsU0FBUyx5QkFDbkIsVUFBVSxhQUFhLFNBQVMsS0FDaEMsVUFBVSxhQUFhLENBQUMsR0FBRyxPQUFPLFVBQ2xDLFVBQVUsYUFBYSxDQUFDLEVBQUUsR0FBRyxTQUFTLGdCQUN0QyxVQUFVLGFBQWEsQ0FBQyxFQUFFLFNBQVMsVUFDbkMsVUFBVSxhQUFhLENBQUMsRUFBRSxTQUFTLFFBQ25DLFVBQVUsYUFBYSxDQUFDLEVBQUUsS0FBSyxTQUFTLG9CQUN4QyxVQUFVLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxTQUFTLGdCQUMvQyxDQUFDLG9CQUFvQixTQUFTLFVBQVUsYUFBYSxDQUFDLEVBQUUsS0FBSyxPQUFPLElBQUk7QUFFNUU7QUFFQSxTQUFTLHNDQUFzQyxXQUEwQjtBQUN2RSxTQUNFLFVBQVUsU0FBUyx5QkFDbkIsVUFBVSxhQUFhLFNBQVMsS0FDaEMsVUFBVSxhQUFhLENBQUMsR0FBRyxPQUFPLFVBQ2xDLFVBQVUsYUFBYSxDQUFDLEVBQUUsR0FBRyxTQUFTLGdCQUN0QyxVQUFVLGFBQWEsQ0FBQyxFQUFFLFNBQVMsVUFDbkMsVUFBVSxhQUFhLENBQUMsRUFBRSxTQUFTLFFBQ25DLFVBQVUsYUFBYSxDQUFDLEVBQUUsS0FBSyxTQUFTLG9CQUN4QyxVQUFVLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxTQUFTLHVCQUM3QyxVQUFVLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVMsbUJBQ3RELFVBQVUsYUFBYSxDQUFDLEVBQUUsS0FBSyxPQUFPLE9BQU8sT0FBTyxTQUFTLGdCQUM3RCxVQUFVLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVM7QUFFNUQ7QUFFQSxJQUFPLDBCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLHFCQUFxQjtBQUFBLFlBQ25CLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLFNBQVM7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHNCQUFzQjtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sVUFBd0IsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3JELFVBQU0sc0JBQXNCLFFBQVEsb0JBQW9CLFNBQVMsSUFBSSxRQUFRLHNCQUFzQixDQUFDO0FBRXBHLFdBQU87QUFBQSxNQUNMLFFBQVEsTUFBTTtBQUNaLGFBQUssS0FBSyxRQUFRLENBQUMsY0FBYztBQUMvQixjQUNFLGtCQUFrQixTQUFTLEtBQzNCLHVDQUF1QyxTQUFTLEtBQ2hELGlDQUFpQyxXQUFXLG1CQUFtQixLQUMvRCxxQ0FBcUMsU0FBUyxLQUM5QyxnQ0FBZ0MsV0FBVyxtQkFBbUIsS0FDOUQsc0NBQXNDLFNBQVMsR0FDL0M7QUFDQSxvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,125 +0,0 @@
1
- // no-side-effects.ts
2
-
3
- /*
4
- * Copyright (c) 2022-2024 Check Digit, LLC
5
- *
6
- * This code is licensed under the MIT license (see LICENSE.txt for details).
7
- */
8
-
9
- import type { Node } from 'estree';
10
- import type { Rule } from 'eslint';
11
-
12
- interface RuleOptions {
13
- excludedIdentifiers: string[];
14
- }
15
-
16
- function isAwaitExpression(statement: Node): boolean {
17
- return statement.type === 'ExpressionStatement' && statement.expression.type === 'AwaitExpression';
18
- }
19
-
20
- function isCallExpressionCalleeMemberExpression(statement: Node): boolean {
21
- return (
22
- statement.type === 'ExpressionStatement' &&
23
- statement.expression.type === 'CallExpression' &&
24
- statement.expression.callee.type === 'MemberExpression' &&
25
- statement.expression.callee.object.type === 'Identifier' &&
26
- statement.expression.callee.object.name !== 'assert'
27
- );
28
- }
29
-
30
- function isCallExpressionCalleeIdentifier(statement: Node, excludedIdentifiers: string[]): boolean {
31
- return (
32
- statement.type === 'ExpressionStatement' &&
33
- statement.expression.type === 'CallExpression' &&
34
- statement.expression.callee.type === 'Identifier' &&
35
- !excludedIdentifiers.includes(statement.expression.callee.name)
36
- );
37
- }
38
-
39
- function isVariableDeclarationAwaitExpression(statement: Node): boolean {
40
- return (
41
- statement.type === 'VariableDeclaration' &&
42
- statement.declarations.length > 0 &&
43
- statement.declarations[0]?.id !== undefined &&
44
- statement.declarations[0].id.type === 'Identifier' &&
45
- statement.declarations[0].init !== undefined &&
46
- statement.declarations[0].init !== null &&
47
- statement.declarations[0].init.type === 'AwaitExpression'
48
- );
49
- }
50
-
51
- function isVariableDeclarationIdentifier(statement: Node, excludedIdentifiers: string[]): boolean {
52
- return (
53
- statement.type === 'VariableDeclaration' &&
54
- statement.declarations.length > 0 &&
55
- statement.declarations[0]?.id !== undefined &&
56
- statement.declarations[0].id.type === 'Identifier' &&
57
- statement.declarations[0].init !== undefined &&
58
- statement.declarations[0].init !== null &&
59
- statement.declarations[0].init.type === 'CallExpression' &&
60
- statement.declarations[0].init.callee.type === 'Identifier' &&
61
- !excludedIdentifiers.includes(statement.declarations[0].init.callee.name)
62
- );
63
- }
64
-
65
- function isVariableDeclarationMemberExpression(statement: Node): boolean {
66
- return (
67
- statement.type === 'VariableDeclaration' &&
68
- statement.declarations.length > 0 &&
69
- statement.declarations[0]?.id !== undefined &&
70
- statement.declarations[0].id.type === 'Identifier' &&
71
- statement.declarations[0].init !== undefined &&
72
- statement.declarations[0].init !== null &&
73
- statement.declarations[0].init.type === 'CallExpression' &&
74
- statement.declarations[0].init.callee.type === 'MemberExpression' &&
75
- ((statement.declarations[0].init.callee.object.type === 'NewExpression' &&
76
- statement.declarations[0].init.callee.object.callee.type === 'Identifier') ||
77
- statement.declarations[0].init.callee.object.type === 'Identifier')
78
- );
79
- }
80
-
81
- export default {
82
- meta: {
83
- type: 'problem',
84
- docs: {
85
- description: 'Ensure no side effects can occur at the main module-level',
86
- url: 'https://github.com/checkdigit/eslint-plugin',
87
- },
88
- schema: [
89
- {
90
- type: 'object',
91
- properties: {
92
- excludedIdentifiers: {
93
- type: 'array',
94
- items: { type: 'string' },
95
- },
96
- },
97
- additionalProperties: false,
98
- },
99
- ],
100
- },
101
- create(context) {
102
- const options: RuleOptions = (context.options[0] ?? {}) as RuleOptions;
103
- const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
104
-
105
- return {
106
- Program(node) {
107
- node.body.forEach((statement) => {
108
- if (
109
- isAwaitExpression(statement) ||
110
- isCallExpressionCalleeMemberExpression(statement) ||
111
- isCallExpressionCalleeIdentifier(statement, excludedIdentifiers) ||
112
- isVariableDeclarationAwaitExpression(statement) ||
113
- isVariableDeclarationIdentifier(statement, excludedIdentifiers) ||
114
- isVariableDeclarationMemberExpression(statement)
115
- ) {
116
- context.report({
117
- node: statement,
118
- message: 'No side effects can occur at the main module-level',
119
- });
120
- }
121
- });
122
- },
123
- };
124
- },
125
- } as Rule.RuleModule;